diff --git a/.aiignore b/.aiignore new file mode 100644 index 00000000..f2bed54d --- /dev/null +++ b/.aiignore @@ -0,0 +1,14 @@ +.DS_Store +*.log +*.tmp + +.idea/ +.vscode/ + +.next/ +dist/ +build/ +out/ +node_modules/ + + diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..c44b02e8 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,14 @@ +node_modules +.next +dist +.git +.github +.storybook-static +coverage +playwright-report +test-results +*.log +.env +.env.* +!.env.example +.DS_Store diff --git a/.env.example b/.env.example deleted file mode 100644 index 4b12ea16..00000000 --- a/.env.example +++ /dev/null @@ -1,19 +0,0 @@ -# Vercel Blob Storage Token -BLOB_READ_WRITE_TOKEN=YOUR_TOKEN_HERE - -# Postgres connection string -DATABASE_URL=YOUR_DATABASEURL_HERE - -# Used to encrypt JWT tokens -PAYLOAD_SECRET=YOUR_SECRET_HERE - -# Used to preview drafts -PAYLOAD_PUBLIC_DRAFT_SECRET=demo-draft-secret -NEXT_PRIVATE_DRAFT_SECRET=demo-draft-secret - -# Used to revalidate static pages -REVALIDATION_KEY=demo-revalation-key -NEXT_PRIVATE_REVALIDATION_KEY=demo-revalation-key - -# when provided Sendgrid is used to send mails -SENDGRID_API_KEY= diff --git a/.env.test b/.env.test new file mode 100644 index 00000000..670fd23f --- /dev/null +++ b/.env.test @@ -0,0 +1,41 @@ +# Test environment — committed on purpose. +# Dummy but format-valid values that satisfy src/types/environment.ts so the +# app can boot for E2E tests. Flows depending on real external services will +# not work with these: AI generation (OpenAI/Anthropic), Mapbox geocoding, +# email (UseSend), Umami analytics, status-page heartbeat. +# Prerequisite: `docker compose up -d` (Mongo, Redis, S3 must be reachable). + +NODE_ENV=test + +SERVER_HOST=localhost:3000 +SERVER_URL=http://localhost:3000 +STATUS_PAGE_URL=http://localhost:3001 +STATUS_PAGE_HEARTBEAT_URL=http://localhost:3001/api/push/test + +PAYLOAD_SECRET=test-payload-secret-not-for-production +PREVIEW_SECRET=test-preview-secret +CRON_SECRET=test-cron-secret + +DATABASE_URL=mongodb://127.0.0.1:27017/website-test +REDIS_URL=redis://127.0.0.1:6379 + +S3_BUCKET=website +S3_REGION=us-east-1 +S3_ACCESS_KEY=rustfsadmin +S3_SECRET_KEY=rustfsadmin +S3_ENDPOINT=http://localhost:9000 + +UMAMI_USERNAME=test +UMAMI_PASSWORD=test +NEXT_PUBLIC_UMAMI_URL=http://localhost:3002 +NEXT_PUBLIC_UMAMI_SITE_ID=00000000-0000-4000-8000-000000000000 + +USESEND_URL=http://localhost:3003 +USESEND_API_KEY=test-key +USESEND_DEFAULT_FROM_ADDRESS=test@example.com +USESEND_DEFAULT_FROM_NAME=Test + +OPENAI_API_KEY=sk-test +ANTHROPIC_API_KEY=sk-ant-test +MAPBOX_API_KEY=pk.test +UNSPLASH_ACCESS_KEY= diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7637e4f2..c2f3e81e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,7 +5,31 @@ version: 2 updates: - - package-ecosystem: "pnpm" # See documentation for possible values - directory: "/" # Location of package manifests + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "daily" + allow: + - dependency-type: "all" + ignore: + - update-types: ["version-update:semver-major"] + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "daily" + + - package-ecosystem: "docker" + directory: "/web" + schedule: + interval: "daily" + + - package-ecosystem: "docker" + directory: "/storybook" schedule: interval: "daily" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..5bbde1c7 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,342 @@ +name: CI + +# Single pipelined quality gate for PRs against main/develop: +# +# commitlint -> unit tests -> docker build & push (app+worker, storybook) +# +# Each stage only runs once the previous one passes, and the whole run is +# what branch protection requires before a PR can be merged — "stable code +# only" is enforced here, not just checked and ignored. +# +# The app+worker build is split into docker-app-development/docker-app- +# production rather than one job with a computed `environment:` — GitHub +# accepts `environment: ${{ expression }}` syntactically but does not +# reliably bind an environment from it (confirmed: the job ran with no +# environment bound at all, so no secrets were injected). Each variant is +# gated by `if:` on the PR's base branch and uses a static, literal +# environment name instead. +# +# Images are tagged solely by the PR head SHA (`sha-`) and pushed to +# ghcr.io. Nothing is retagged as a release version here: on merge, +# promote.yml retags this exact already-built image instead of rebuilding — +# see that workflow for why. +on: + pull_request: + branches: + - main + - develop + +permissions: + contents: read + packages: write + +env: + REGISTRY: ghcr.io + IMAGE_BASE: ghcr.io/${{ github.repository }} + +jobs: + commitlint: + name: Commit Messages + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + # commitlint needs the range between base and head + fetch-depth: 0 + + - name: Setup pnpm + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 + + - name: Setup Node.js + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 26 + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Validate commit messages + run: >- + pnpm exec commitlint + --from ${{ github.event.pull_request.base.sha }} + --to ${{ github.event.pull_request.head.sha }} + --verbose + + test: + name: Unit Tests + needs: commitlint + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + + - name: Setup pnpm + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 + + - name: Setup Node.js + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 26 + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run unit tests with coverage + run: pnpm run test:coverage + + - name: Check dependency version groups + run: pnpm run deps:lint + + # Split into two explicit jobs rather than one job with a computed + # `environment: ${{ ... }}` expression: GitHub accepted that expression + # syntactically but never actually bound any environment to the job (its + # API response showed `environment: null`), so no environment-scoped + # secrets were ever injected. A static, literal environment name per job + # is the documented, reliable form. + docker-app-development: + name: Build app + worker images (Development) + needs: test + if: github.event.pull_request.base.ref != 'main' + runs-on: ubuntu-latest + timeout-minutes: 30 + environment: Development + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + + # Reaches the same database over Tailscale that Dokploy currently does, + # so `pnpm run build`'s generateStaticParams() calls resolve exactly as + # they do on the deployment server today. DATABASE_URL/REDIS_URL use a + # MagicDNS hostname (dokploy.robin-marlin.ts.net) rather than a raw + # tailnet IP, so this node needs to actually accept the tailnet's DNS + # config — --accept-dns=true is `tailscale up`'s own default, but is + # made explicit here since a prior run hit `getaddrinfo ENOTFOUND` for + # that hostname despite the tailnet join itself succeeding. If this + # alone doesn't resolve it, MagicDNS itself may need enabling tailnet- + # wide in the Tailscale admin console's DNS settings. + - name: Connect to Tailscale + uses: tailscale/github-action@780049a30b6ff5c378a9e7b389d15ece7a204888 # v4.1.3 + with: + oauth-client-id: ${{ secrets.TS_OAUTH_CLIENT_ID }} + oauth-secret: ${{ secrets.TS_OAUTH_SECRET }} + tags: tag:ci + args: --accept-dns=true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 + + - name: Log in to ghcr.io + uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # Every build-time env var the Next.js build needs (per + # src/types/environment.ts) is written to one gitignored-by-runner file + # in dotenv format and mounted into the builder stage as a single + # BuildKit secret — see the Dockerfile's `builder` stage, which copies + # it to .env.production and lets @next/env's own dotenv parser read it + # (not shell-sourced — see that stage's comment for why). Nothing here + # is ARG/ENV, so no value is cached into an image layer or visible via + # `docker history`. Values come from whichever environment was + # selected above — some are Doppler secrets, some are plain + # Doppler-synced variables (vars.*); both land in the same file since + # the build doesn't need to distinguish them. + - name: Write build env secret file + run: | + umask 077 + cat > /tmp/build_env < /tmp/build_env < retag as `edge` +# main merge -> retag as `latest` + the version release.yml just tagged +# +# The main-branch retag waits on release.yml's semantic-release run so it can +# read the version it just computed; it no-ops if that push produced no +# release (docs-only/chore changes bump nothing). +on: + pull_request: + types: [closed] + branches: + - main + - develop + workflow_run: + workflows: [Release] + types: [completed] + +permissions: + contents: read + packages: write + +env: + REGISTRY: ghcr.io + IMAGE_BASE: ghcr.io/${{ github.repository }} + +jobs: + promote-develop: + name: Promote images to edge + if: >- + github.event_name == 'pull_request' && + github.event.pull_request.merged == true && + github.event.pull_request.base.ref == 'develop' + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 + + - name: Log in to ghcr.io + uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Retag app/worker/storybook as edge + env: + HEAD_SHA: ${{ github.event.pull_request.head.sha }} + run: | + for image in app worker storybook; do + docker buildx imagetools create \ + --tag "${IMAGE_BASE}-${image}:edge" \ + "${IMAGE_BASE}-${image}:sha-${HEAD_SHA}" + done + + promote-main: + name: Promote images to latest + release version + if: >- + github.event_name == 'workflow_run' && + github.event.workflow_run.conclusion == 'success' && + github.event.workflow_run.head_branch == 'main' + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + ref: main + fetch-depth: 0 + + # semantic-release pushed the vX.Y.Z tag (if any) as part of the + # Release workflow this job is chained after; the current package.json + # version on main is the value to read, since that's what it bumped to. + - name: Read released version + id: version + run: | + version="v$(node -p 'require("./package.json").version')" + # Nothing to promote if this push didn't actually cut a release + # (e.g. a docs/chore-only push that semantic-release skipped) — + # compare against the previous tag reachable from HEAD~1. + if git describe --tags --exact-match HEAD >/dev/null 2>&1; then + echo "released=true" >> "$GITHUB_OUTPUT" + echo "version=$version" >> "$GITHUB_OUTPUT" + else + echo "released=false" >> "$GITHUB_OUTPUT" + fi + + # The merge commit on main is not the SHA ci.yml built (see the + # workflow-level comment), so the PR that produced this push is looked + # up to recover the head SHA the images were actually tagged with. + - name: Find source PR head SHA + if: steps.version.outputs.released == 'true' + id: pr + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # semantic-release's own commit carries [skip ci] and isn't itself a + # merge commit, so look at HEAD's parent — the actual merge — for + # the PR association. + merge_sha=$(git rev-parse HEAD~1) + head_sha=$(gh pr list --repo "${{ github.repository }}" --state merged \ + --search "$merge_sha" --json headRefOid --jq '.[0].headRefOid') + if [ -z "$head_sha" ] || [ "$head_sha" = "null" ]; then + echo "Could not resolve the source PR's head SHA for $merge_sha" >&2 + exit 1 + fi + echo "head_sha=$head_sha" >> "$GITHUB_OUTPUT" + + - name: Set up Docker Buildx + if: steps.version.outputs.released == 'true' + uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 + + - name: Log in to ghcr.io + if: steps.version.outputs.released == 'true' + uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Retag app/worker/storybook as latest + version + if: steps.version.outputs.released == 'true' + env: + HEAD_SHA: ${{ steps.pr.outputs.head_sha }} + VERSION: ${{ steps.version.outputs.version }} + run: | + for image in app worker storybook; do + docker buildx imagetools create \ + --tag "${IMAGE_BASE}-${image}:latest" \ + --tag "${IMAGE_BASE}-${image}:${VERSION}" \ + "${IMAGE_BASE}-${image}:sha-${HEAD_SHA}" + done diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..9ab92896 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,58 @@ +name: Release + +# Runs the version half of Sentry release tracking (see release.config.mjs): +# on every push to main, semantic-release reads Conventional Commits since +# the last tag, decides whether a release is warranted, bumps package.json, +# commits it back with [skip ci], and pushes a vX.Y.Z tag. +# +# This workflow does not build or deploy anything itself — it only produces +# the version number. promote.yml watches for this workflow's completion on +# main and, if a release was actually cut, retags the app/worker/storybook +# images ci.yml already built and pushed for the merged PR as `latest` and +# the new version, without rebuilding. Dokploy deploys from those pushed +# images rather than building from source. +on: + push: + branches: + - main + +# semantic-release needs to push a commit and a tag, and @semantic-release/github +# needs to create a GitHub release. +permissions: + contents: write + +jobs: + release: + name: Release + runs-on: ubuntu-latest + timeout-minutes: 10 + # The commit semantic-release itself pushes carries [skip ci] in its + # subject, but that only suppresses workflows that check for it — this + # guard is the actual backstop against the release job re-triggering + # itself in a loop. + if: "!contains(github.event.head_commit.message, '[skip ci]')" + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + # semantic-release computes the next version from the full commit + # history since the last tag — a shallow clone would see nothing. + fetch-depth: 0 + persist-credentials: true + + - name: Setup pnpm + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 + + - name: Setup Node.js + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 26 + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Release + run: pnpm exec semantic-release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index cff2ea2b..7d0e5c19 100644 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,43 @@ build -dist/media +dist node_modules .DS_Store .next .vercel # Payload default media upload directory -public/media/ +**/public/media/ + +# turborepo local cache +.turbo + +# incremental typecheck cache (tsconfig has `incremental: true`, so +# `tsc --noEmit` still writes this) +*.tsbuildinfo *.db *storybook.log storybook-static/ +# react-email dev server cache (pnpm email:dev) +.react-email + .env .env.* !.env.example +!.env.test + +# test artifacts +coverage +playwright-report +test-results +docs +plan + +certificates -# Sentry Config File -.env.sentry-build-plugin -certificates \ No newline at end of file +.claude +.junie +.worktrees diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 00000000..2e6b87e2 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +pnpm exec commitlint --edit "$1" diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 00000000..5ee7abd8 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +pnpm exec lint-staged diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index c9179b61..00000000 --- a/.prettierignore +++ /dev/null @@ -1,14 +0,0 @@ -**/payload-types.ts -.tmp -**/.git -**/.hg -**/.pnp.* -**/.svn -**/.yarn/** -**/build -**/dist/** -**/node_modules -**/temp -**/docs/** -tsconfig.json -/README.md diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index cb8ee267..00000000 --- a/.prettierrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "all", - "printWidth": 100, - "semi": false -} diff --git a/.storybook/main.ts b/.storybook/main.ts index f4fd949c..a2f8750b 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -1,43 +1,73 @@ -import type { StorybookConfig } from '@storybook/nextjs' +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' -const config: StorybookConfig = { +import { defineMain } from '@storybook/nextjs/node' +import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin' + +const dirName = dirname(fileURLToPath(import.meta.url)) + +export default defineMain({ framework: { name: '@storybook/nextjs', options: { + nextConfigPath: '../next.config.ts', builder: { useSWC: true, }, }, }, - - stories: [ - { - directory: '../src/stories', - files: '*.mdx', - titlePrefix: 'Foundation', - }, - // '../src/**/*.mdx', - '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)', - ], - core: { disableTelemetry: true, disableWhatsNewNotifications: true, }, - + stories: [ + // Presentational components and their stories all live under src/ now that + // the repo is a single package. + '../src/**/*.mdx', + '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)', + ], + staticDirs: [ + '../public', + { + from: '../src/fonts/pp-frama/files', + to: '/src/fonts/pp-frama/files', + }, + { + from: '../src/fonts/pp-frama-text/files', + to: '/src/fonts/pp-frama-text/files', + }, + { + from: '../src/fonts/pp-supply-sans/files', + to: '/src/fonts/pp-supply-sans/files', + }, + { + from: '../src/fonts/pp-supply-mono/files', + to: '/src/fonts/pp-supply-mono/files', + }, + ], addons: [ + '@storybook/addon-a11y', + '@storybook/addon-docs', '@storybook/addon-onboarding', - '@storybook/addon-links', - '@storybook/addon-essentials', - '@storybook/addon-interactions', + '@storybook/addon-themes', + '@storybook/addon-webpack5-compiler-swc', ], - - staticDirs: ['../public'], - - docs: {}, - typescript: { reactDocgen: 'react-docgen-typescript', + reactDocgenTypescriptOptions: { + shouldExtractLiteralValuesFromEnum: true, + propFilter: (prop) => !!prop.parent?.fileName?.includes('node_modules'), + }, + }, + webpackFinal: async (config) => { + config.resolve = config.resolve ?? {} + config.resolve.plugins = [ + ...(config.resolve.plugins ?? []), + new TsconfigPathsPlugin({ + configFile: resolve(dirName, '../tsconfig.json'), + }), + ] + + return config }, -} -export default config +}) diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index 151151a3..164f9ba1 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -1,33 +1,59 @@ -import type { Preview } from '@storybook/react' -import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport' - -import '@styles/frontend.css' - -const preview: Preview = { - decorators: [], - +import '@/styles/frontend.css' +import '@/fonts/pp-frama/style.css' +import '@/fonts/pp-frama-text/style.css' +import '@/fonts/pp-supply-mono/style.css' +import '@/fonts/pp-supply-sans/style.css' + +import * as addonA11yPreview from '@storybook/addon-a11y/preview' +import * as addonDocsPreview from '@storybook/addon-docs/preview' +import { withThemeByClassName, withThemeByDataAttribute } from '@storybook/addon-themes' +import * as addonThemesPreview from '@storybook/addon-themes/preview' +import { definePreview } from '@storybook/nextjs' + +export default definePreview({ + addons: [ + addonA11yPreview, + addonDocsPreview, + addonThemesPreview, + ], parameters: { nextjs: { appDirectory: true, }, - layout: 'centered', - - viewport: { - viewports: INITIAL_VIEWPORTS, - defaultViewport: null, - }, - controls: { matchers: { color: /(background|color)$/i, date: /Date$/i, }, - exclude: ['className', 'children'], + exclude: [ + 'className', + 'children', + ], }, + docs: {}, }, - - tags: ['autodocs'], -} - -export default preview + tags: [ + 'autodocs', + ], + decorators: [ + /** + * Paints the story surface with the same semantic tokens the app uses, so a + * story toggled to dark sits on `--background` instead of Storybook's + * default white canvas. + */ + (Story) => ( +
+ +
+ ), + withThemeByClassName({ + defaultTheme: 'light', + themes: { + light: 'light', + dark: 'dark', + primary: 'primary', + }, + }), + ], +}) diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..4010ea28 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,164 @@ +# AGENTS.md + +Guidance for AI coding agents (and human contributors) working in this repository. Read this +before making changes — it documents the stack, conventions, known issues, and guardrails that +are not always obvious from the code alone. + +## Project Overview + +Personal website + blog + resume builder for [daniel.heene.io](https://daniel.heene.io), built on: + +- **Next.js 16** (App Router, React 19) — `app/` contains both the public frontend + (`app/(frontend)`) and the Payload admin panel (`app/(payload)`). +- **Payload CMS 3.x** — configured in `payload.config.ts`, content modeled in `src/collections/`, + `src/globals/`, `src/blocks/`, `src/fields/`. +- **MongoDB** (via `@payloadcms/db-mongodb`) as the primary database. +- **Redis** — used both as Payload's KV cache (`@payloadcms/kv-redis`), the Next.js turbo cache + (`@trieb.work/nextjs-turbo-redis-cache`), and a custom pub/sub layer (`src/lib/RedisHandler.ts`) + that powers Server-Sent Events (`app/(frontend)/api/sse/route.ts`). +- **S3-compatible storage** (`@payloadcms/storage-s3`, Minio locally) for media. +- **Tailwind CSS 4** for styling, **Storybook** for component development. +- **Biome** for linting/formatting (not ESLint/Prettier). + +See `README.md` for setup/run instructions; this file focuses on conventions and pitfalls. + +## Build, Lint, and Test Commands + +```bash +pnpm install # install deps (pnpm only — see packageManager in package.json) +pnpm dev # runs Next.js dev server + Storybook in parallel +pnpm dev:app # Next.js dev server only +pnpm generate # regenerate Payload types + import map (run after changing collections/fields) +pnpm build # production build +pnpm lint # biome check (lint + format check, does NOT auto-fix) +pnpm format # biome format --write (auto-fixes formatting only) +pnpm test # unit tests (Vitest) +pnpm deps:lint # syncpack: dependency version groups +pnpm test:e2e # Playwright E2E (needs docker compose up -d) +``` + +Environment variables come from **Doppler**, but no script wraps `doppler run`. `pnpm load-env` +writes the active Doppler config to `.env.local`, which Next loads on its own, so every script +works unwrapped. Re-run it after changing anything in Doppler or switching configs — nothing +detects drift automatically, and `pnpm load-env --check` reports it without writing. On the +deployment server Dokploy supplies the environment directly. + +Always run `pnpm generate` after adding/renaming a collection, global, field, or block — many +files import generated types from `src/types/payload.ts` and `@/types/collections`. + +`pnpm lint` currently does **not** pass cleanly on `main` (baseline has pre-existing errors/ +warnings — see "Known Issues" below). Don't let pre-existing failures block your task, but do not +introduce new lint errors, and prefer fixing lint issues in files you already touch. + +Commits go through Husky hooks: `pre-commit` runs `biome check --write` on +staged files (auto-fixing and re-staging), `commit-msg` enforces Conventional +Commits. Use the existing types (`feat`, `fix`, `chore`, `refactor`, `docs`, +`test`, `build`, `ci`, `perf`, `style`, `revert`); scopes are unrestricted. + +## Code Style (enforced by `biome.json` / `.editorconfig`) + +- 2-space indentation, LF line endings, 100-char line width. +- Single quotes for JS/TS, double quotes in JSX attributes. +- **No semicolons** (`semicolons: "asNeeded"`, ASI style) — do not add trailing semicolons. +- Trailing commas everywhere (`trailingCommas: "all"`). +- Import order is auto-organized by Biome's `organizeImports` assist action, in this group order: + 1. URL imports + 2. Node/Bun builtins + 3. `react*` / `next*` / `payload*` / `@payloadcms/**` + 4. other npm packages + 5. `@/**` path-alias imports + 6. relative imports + 7. style imports + Run `pnpm format` (or your editor's Biome integration) instead of manually sorting imports. +- `tsconfig.json` has `"strict": false` — do not rely on the compiler to catch null/undefined + bugs; be explicit and defensive, especially in Payload hooks and access-control functions. +- `import type` vs. value imports is **not** enforced (`useImportType` is off) — either style is + accepted, but prefer `import type` for type-only imports for clarity when touching a file. + +### Conventions to follow (not currently enforced by tooling — please don't add new inconsistencies) + +- **Enum-like access**: prefer dot notation (`CollectionSlug.Pages`) over bracket notation + (`CollectionSlug['Pages']`). Bracket notation is the single largest source of existing lint + noise (`lint/complexity/useLiteralKeys`); don't add more of it. +- **Exports**: prefer named exports (`export const X = ...`) over default exports for components; + this is the dominant pattern in `src/components/`. +- **Barrel files**: existing `index.ts`/`index.tsx` files use either `export * from './X'` or + `export { X } from './X'` — match whichever pattern already exists in the folder you're editing. +- **Hooks vs. utils naming**: files in `src/hooks/` use kebab-case (`use-mobile.ts`); files in + `src/lib/` use camelCase (`generateSlug.ts`). Follow the convention of the folder you're in. +- **Fields**: folder name has no suffix (`src/fields/Slug/`), but the exported factory function + has an `XField` suffix (`SlugField`, `TitleField`). Keep this pattern for new fields. +- **Globals**: naming is currently inconsistent (`SiteSettings`, `SettingsGlobalUser`, + `PDFGeneratorSettings`). When adding a new global, prefer the `XSettings` suffix pattern. +- Avoid leftover `console.log` debug statements and large commented-out code blocks — several + exist in the codebase (see Known Issues) but should not be added to. +- Avoid `any`; if you must use it, add a `biome-ignore` comment with a real justification (see + `src/lib/resolveRelation.ts` for a good example), not a placeholder like ``. + +## Architecture Notes + +- **Access control** (`src/access/`): small, composable `Access` functions (`anyone`, + `authenticated`, `authenticatedOrPublished`, `forbidden`). There is **no role/permission system** + — `authenticated` only checks "is any Payload user logged in". Treat every Payload user as + fully trusted (single-admin trust model) unless you introduce roles explicitly. +- **Collections/Blocks/Fields/Globals** are factory-function based — most fields (e.g. + `TitleField()`, `SlugField()`) accept an `overrides` object rather than being edited in place. + Reuse existing field factories instead of inlining raw Payload field configs when one exists. +- **Redis** (`src/lib/RedisHandler.ts`) exposes `get`/`set`/`invalidate` (cache) and + `publish`/`subscribe` (pub/sub, used by the SSE route). Keys/channels are plain strings — no + namespacing helper exists yet; be consistent with existing key formats when adding new ones. +- **Revalidation**: Payload collection hooks call `revalidate*` helpers (e.g. + `src/collections/Pages/hooks/revalidatePage.ts`) to invalidate Next.js cache tags after content + changes — follow this pattern for any new collection that's rendered on the frontend. + +## Security Guardrails (found during review — respect these when touching related code) + +- **SSE / Redis channels** (`app/(frontend)/api/sse/route.ts`): the `channel` query param is + matched against an allowlist (`src/lib/sse/channels.ts`) before `subscribe()` ever sees it, and + per-job channels (`bilingual-translate:`, `seed-task:`) additionally require a signed-in + `payload.auth()` session. The public channels in `SSE_CHANNELS` (e.g. `service-status`) stay + unauthenticated by design. If you add a new channel that carries non-public data, add it to the + authenticated branch rather than `SSE_CHANNELS` — see the route's own comments for the exact + split. +- **Raw SVG rendering**: `src/collections/ResumeCustomers` stores raw SVG markup rendered via + `dangerouslySetInnerHTML` in `src/components/LogoCarousel/LogoCarousel.tsx`. It is sanitized + server-side on write by a `beforeChange` hook (`src/lib/sanitizeSvg.ts`, DOMPurify with an + explicit tag/attribute deny-list) — the admin UI's client-side `svgo` pass is a bypassable + optimizer, not the security boundary. Route any other raw-HTML/SVG field through the same + `sanitizeSvg` helper (or an equivalent real, server-side sanitizer) before it's ever rendered + unescaped. +- **`CRON_SECRET`** is declared in `src/types/environment.ts` but not enforced anywhere — there + is no cron route yet. If you add one, validate this secret explicitly (ideally with + `crypto.timingSafeEqual`, not `!==`). +- Never commit real secrets. Configuration lives in Doppler, selected per clone with + `doppler setup` and written to a gitignored `.env.local` by `pnpm load-env`; + `src/types/environment.ts` declares the schema and is the only place the full set of + variables is enumerated. The one committed env file is `.env.test`, which holds dummy, + format-valid values for E2E runs. +- New authenticated API routes should mirror `app/(frontend)/api/preview/route.ts`'s pattern of + pairing a shared-secret check with a real `payload.auth()` session check where feasible. + +## Known Issues / Tech Debt (baseline, not blocking, but don't add more) + +- `pnpm lint` reports pre-existing errors/warnings, mostly `useLiteralKeys` (bracket vs. dot + access), `noExplicitAny`, `noUnusedVariables`/`noUnusedImports`. +- Leftover debug `console.log`s (e.g. `src/collections/ResumeJobs/index.ts`, + `src/blocks/ResumeDownloadsBlock/Renderer/Renderer.tsx`) and commented-out dead code (e.g. + `src/collections/ResumeSkillTags/index.ts`) exist and should be cleaned up opportunistically. +- No app-level rate limiting exists on public API routes. +- No shared logging abstraction — error logging is ad hoc `console.error` calls. + +## Testing + +- Unit tests run via **Vitest** (`pnpm test`), E2E tests via **Playwright** (`pnpm test:e2e`) — + see `README.md` for prerequisites. Co-locate unit tests as `*.test.ts` next to the code under + test; E2E specs live in `e2e/*.spec.ts` (never `*.spec.ts` under `src/`). +- Shared mocks live in `vitest.setup.ts`: `payload` (`getPayload` stubbed via `importOriginal` + spread — never replace the whole module, value imports from it are used at runtime), + `next/cache` and `redis`. `tailwind-merge`, `date-fns`, `slugify`, `pupa` and `neotraverse` are + intentionally NOT mocked — their real behavior is the contract under test. +- `TZ=UTC` is forced in `vitest.setup.ts` and date tests depend on it. Anything touching + `Interval.setToX()` or `getLocalISOString` needs `vi.useFakeTimers()` + `vi.setSystemTime()`. + Use `vi.stubEnv()` for env-dependent code (`SERVER_URL`, `PREVIEW_SECRET`). +- There is no CI-enforced coverage threshold; when fixing a bug, add a regression test near + existing tests for that module if a suitable test file already exists. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..b087a26b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,123 @@ +# syntax=docker/dockerfile:1 + +# Produces three images from one build context: +# - target `app` — the Next.js server (`pnpm run start`) +# - target `worker` — the Payload job runner (`pnpm run start:worker`) +# - target `storybook` — the built Storybook, served statically +# +# `app` and `worker` share the same `builder` stage: `pnpm run build` (via +# next.config.ts / generateStaticParams) reaches the database over Tailscale +# during static generation, so the CI job building this image must run with +# Tailscale connectivity and the full application env — see +# .github/workflows/ci.yml. The worker never re-runs the build; it reuses the +# same .next output and just boots a different process against it. +# +# There is deliberately no `output: 'standalone'` in next.config.ts, so the +# runtime stages carry the full pnpm-installed node_modules rather than a +# traced subset — bigger image, but avoids known standalone-tracing gaps with +# the Payload/Next combination this app uses. + +# Defaults to production; docker-app-development in ci.yml overrides this to +# `development` for PRs against develop via --build-arg. Declared before the +# first FROM so it's visible everywhere, but per Docker's ARG scoping rules +# it must be redeclared (bare `ARG NODE_ENV`) inside any stage that reads it. +ARG NODE_ENV=production + +# node:26-slim does not bundle corepack (dropped from the base image as of +# Node 26), so pnpm is installed directly via npm instead — pinned to match +# package.json's packageManager field. +FROM node:26-slim AS base +RUN npm install -g pnpm@11.18.0 +WORKDIR /app + +# ---- deps: install once, reused by every stage below ---------------------- +FROM base AS deps +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml* .npmrc* ./ +# pnpm-workspace.yaml's patchedDependencies points at this directory — +# without it, `pnpm install` fails outright looking for the patch file. +COPY patches ./patches +RUN pnpm install --frozen-lockfile + +# ---- builder: next build only (needs DB over Tailscale) ------------------- +FROM deps AS builder +ARG NODE_ENV +COPY . . +ENV NODE_ENV=${NODE_ENV} +# Build-time env (DATABASE_URL, REDIS_URL, S3_*, PAYLOAD_SECRET, etc.) arrives +# as a single BuildKit secret file in dotenv format — see +# .github/workflows/ci.yml's `secret-files` input — rather than as ARG/ENV, +# so none of these values are cached into an image layer or visible via +# `docker history`. +# +# It is copied to .env.production and read by @next/env's loadEnvConfig +# (which `next build` calls) rather than shell-sourced: a value containing +# spaces or shell metacharacters — e.g. USESEND_DEFAULT_FROM_NAME being +# "Mail Agent [daniel.heene.dev]" — breaks a `. file` source under dash, +# which parses each line as a shell command rather than a plain KEY=value +# assignment. dotenv's own parser has no such restriction, which is the +# whole point of using the format Payload/Next already expect instead of +# fighting it via shell semantics. The file is removed immediately after use +# so its contents never land in a layer. +# +# TEMPORARY: `payload migrate` is skipped here (plain `pnpm run build` +# instead of `pnpm run ci`) to isolate whether `next build` itself works +# cleanly in this container from whatever payload migrate's own CLI does +# differently. Restore `pnpm run ci` (migrate && build) once this is +# confirmed, so real future migrations actually run as part of the image +# build again. +RUN --mount=type=secret,id=build_env,required=true \ + cp /run/secrets/build_env .env.production && \ + pnpm run build; \ + status=$?; \ + rm -f .env.production; \ + exit $status + +# ---- app: Next.js server ---------------------------------------------------- +FROM base AS app +ARG NODE_ENV +ENV NODE_ENV=${NODE_ENV} +COPY --from=builder /app ./ +EXPOSE 3000 +# Trivial liveness probe (app/(frontend)/api/health/app) — confirms the +# Next.js server itself responds, not job-queue state; see the `worker` +# stage's HEALTHCHECK below for that. Probed with plain Node rather than +# curl, which node:26-slim doesn't carry and isn't otherwise needed here. +HEALTHCHECK --interval=60s --timeout=10s --retries=3 --start-period=30s \ + CMD node -e "fetch('http://localhost:3000/api/health/app').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" +CMD ["pnpm", "run", "start"] + +# ---- worker: Payload job runner, same build output as app ----------------- +FROM base AS worker +ARG NODE_ENV +ENV NODE_ENV=${NODE_ENV} +COPY --from=builder /app ./ +EXPOSE 3001 +# `jobs:run` itself has no HTTP listener to probe — start-worker.mjs runs a +# small health server (scripts/health-server.ts) alongside it for exactly +# this. Probed with plain Node rather than curl, which node:26-slim doesn't +# carry and isn't otherwise needed in this image. +HEALTHCHECK --interval=60s --timeout=10s --retries=3 --start-period=30s \ + CMD node -e "fetch('http://localhost:'+(process.env.JOB_RUNNER_HEALTH_PORT||3001)+'/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" +CMD ["pnpm", "run", "start:worker"] + +# ---- storybook-builder: independent build, no DB/Tailscale needed --------- +FROM deps AS storybook-builder +COPY . . +RUN pnpm run build:storybook + +# ---- storybook: static output served via `serve` --------------------------- +FROM base AS storybook +ENV NODE_ENV=production +# npm rather than `pnpm add -g`: pnpm's global bin dir isn't on PATH by +# default in this image, and configuring it is unnecessary for one package. +RUN npm install -g serve +COPY --from=storybook-builder /app/dist ./dist +EXPOSE 3000 +# Runs the `serve` binary directly rather than `pnpm run serve:storybook`: +# this stage has no node_modules/lockfile (only `dist` is copied in), so +# `pnpm run` would try to resolve/install the whole workspace at container +# startup — confirmed by testing this locally, it pulls 1000+ packages over +# the network before ever serving a request. `serve:storybook` still exists +# in package.json as the documented definition of this command; it's just +# not how this particular stage invokes it. +CMD ["serve", "-s", "dist", "-l", "3000"] diff --git a/README.md b/README.md index c1ef48ef..425756bf 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,386 @@ -# website +# Personal Website - Daniel Heene -> This repository contains all code relevant to my personal website: http://daniel.heene.io which was initially based on -> official [Payload Website Template](https://github.com/payloadcms/payload/blob/main/templates/website). +This repository contains the source code for my personal website: [daniel.heene.io](https://daniel.heene.io). -## development +> **For AI coding agents**: see [`AGENTS.md`](./AGENTS.md) for coding conventions, architecture +> notes, and known security/style guardrails before making changes. -**prerequisites**: +## Tech Stack -- I used the Vercel Blob Storage to store media files. Either you also use this and provide the token as - `BLOB_READ_WRITE_TOKEN` or you replace the storage plugin with another adapter. +- **Framework**: [Next.js 16](https://nextjs.org/) (App Router, React 19) +- **CMS**: [Payload CMS 3.x](https://payloadcms.com/) +- **Database**: [MongoDB](https://www.mongodb.com/) (via Mongoose) +- **Cache/KV**: [Redis](https://redis.io/) +- **Storage**: S3-compatible storage (local Minio in development) +- **Styling**: [Tailwind CSS 4](https://tailwindcss.com/) +- **Analytics**: [Umami](https://umami.is/) (Optional) +- **Email**: [UseSend](https://usesend.com/) (Optional) -- I used the Vercel Postgres integration as database, but any other PostgresSQL database should also work. Simply enter - the connection string as `DATABASE_URL` +## Requirements -**start local development**: +- **Node.js**: `^26.0.0` +- **pnpm**: `^11.0.0` +- **Docker**: For running local database, cache, and storage services. +## Setup & Local Development + +### 1. Environment Configuration + +Configuration and secrets are managed in [Doppler](https://doppler.com). Install the CLI, +link this directory to the project, then write the config out to `.env.local`: + +```bash +brew install dopplerhq/cli/doppler # see docs.doppler.com/docs/install-cli for other platforms +doppler login +doppler setup --project website --config +pnpm load-env # writes .env.local from the active config ``` -cp .env.example .env.local // adjust variables + +`doppler setup` stores the project and config against this directory in `~/.doppler`, so +it is a one-time step per clone. There is no checked-in default: configs differ per +developer (`development_personal` and the like), and pinning one in the repo made it easy +to build against the wrong database without noticing. `doppler configure` shows what the +current directory resolves to. + +`pnpm load-env` is the only thing that talks to Doppler. Next loads `.env.local` +automatically, so no package script wraps `doppler run` — `pnpm dev`, `pnpm payload` and +the rest just work. **Re-run it after changing anything in Doppler, or after switching +configs** with `doppler setup --config `; nothing detects drift on its own. + +- `pnpm load-env --check` reports whether `.env.local` is current and exits non-zero if + not, without writing. +- The file is gitignored and written owner-only (`0600`) — it holds every secret the + project uses. It is never generated as a side effect of another script. +- To inspect what will be written without touching the filesystem, run `doppler secrets`. + +### 2. Start Services + +Launch the infrastructure (MongoDB, Redis, and Minio) using Docker Compose: + +```bash +docker compose up -d +``` + +### 3. Install Dependencies + +```bash pnpm install -pnpm run dev:app ``` -**seed some data**: +### 4. Generate Payload Artifacts -During the development process i put part of my portfolio data into a seed function to be able to start test -environments faster. As a logged in user you can call `/api/seed` and import this data. +Payload requires generated TypeScript types and an import map for the admin panel: -**ATTENTION**: this route should be deactivated if there are more users planned +```bash +pnpm generate +``` ------ +### 5. Run the Application -### notable features: +Start the development server: -- **image metadata**: when uploading images, their average brightness, the most prominent colors as well as a BlurHash - are calculated -- **embedded svgs**: to be able to adapt the logos of the previous clients to the website theme, the svgs are sent to an - internal APi to sanitize them and adapt their properties +```bash +pnpm dev +``` -### planned features: +- **Frontend**: [http://localhost:3000](http://localhost:3000) +- **Admin Panel**: [http://localhost:3000/admin](http://localhost:3000/admin) -- **Blog**: In the future I would like to use this site as a blog as well, which is why the backend has already been - adapted to this in places -- **Storybook**: Some components already have matching stories, but currently no storybook is deployed, because I would - have to detach the deployment from vercel. -- **Testing**: To implement tests, it would also have been necessary to detach the deployment from Vercel. But I haven't - had the time to do this yet +## Environment Variables ---- +`apps/web/src/types/environment.ts` is the source of truth: it declares a Zod schema that +`next.config.ts` validates at load time, so the process exits immediately if anything +required is missing or malformed. Doppler stores the values; the list below explains them. + +Everything is **required** unless marked optional. + +### Core + +| Variable | Purpose | +| --- | --- | +| `DATABASE_URL` | MongoDB connection string. | +| `REDIS_URL` | Redis connection URL (KV adapter and cache handler). | +| `SERVER_URL` | Public URL of the server. Inlined into the client bundle. | +| `SERVER_HOST` | Host/port used for server-side URL construction. | +| `PAYLOAD_SECRET` | Encrypts Payload JWT tokens. | +| `PREVIEW_SECRET` | Authenticates Next.js/Payload draft previews. | +| `CRON_SECRET` | Reserved for cron tasks. Declared but not yet enforced by any route (see `AGENTS.md`). | + +### Status page + +| Variable | Purpose | +| --- | --- | +| `STATUS_PAGE_URL` | Status page link. Inlined into the client bundle. | +| `STATUS_PAGE_HEARTBEAT_URL` | Heartbeat endpoint pinged server-side. | + +### Storage (Minio in local dev) + +`S3_BUCKET`, `S3_REGION`, `S3_ENDPOINT`, `S3_ACCESS_KEY`, `S3_SECRET_KEY`. + +### Analytics, email, and third-party APIs + +| Variable | Purpose | +| --- | --- | +| `NEXT_PUBLIC_UMAMI_URL`, `NEXT_PUBLIC_UMAMI_SITE_ID` | Umami rewrite target and site ID (a UUID). | +| `UMAMI_USERNAME`, `UMAMI_PASSWORD` | Credentials for the server-side Umami stats query. | +| `USESEND_URL`, `USESEND_API_KEY`, `USESEND_DEFAULT_FROM_ADDRESS`, `USESEND_DEFAULT_FROM_NAME` | UseSend email provider. | +| `OPENAI_API_KEY`, `ANTHROPIC_API_KEY` | Generated alt text and meta descriptions. | +| `MAPBOX_API_KEY` | Address and coordinate lookups. | +| `UNSPLASH_ACCESS_KEY` | Stock photo search & import in the media library admin. Optional — the feature is hidden if unset. | + +### Sentry (all optional) + +With no DSN the SDK is never initialised and the app runs unchanged. `SENTRY_DSN` is public +by design and is inlined into the client bundle. `SENTRY_ENVIRONMENT`, `SENTRY_RELEASE` and +`SENTRY_TRACES_SAMPLE_RATE` tune reporting; `SENTRY_AUTH_TOKEN`, `SENTRY_ORG` and +`SENTRY_PROJECT` are only needed to upload source maps during a build; +`NEXT_PUBLIC_SENTRY_REPLAY_RATE` and `NEXT_PUBLIC_SENTRY_REPLAY_ERROR_RATE` control replay +sampling. + +### Cloudflare tunnel (all optional) + +`CLOUDFLARE_TUNNEL_HOST`, `CLOUDFLARE_TUNNEL_URL` and `CLOUDFLARE_TUNNEL_TOKEN` are only +read when starting the dev server with `--tunnel`. + +> **Fixed at build time.** `SERVER_URL`, `STATUS_PAGE_URL` and `SENTRY_DSN` are listed in +> `next.config.ts`'s `env:` block, which inlines them into the compiled bundle. On top of +> that, `cacheComponents: true` gives nearly every route a shell rendered at build time, +> so a server-side `process.env` read is captured into that shell and served from cache — +> moving the read further up the tree does not change this. All three must therefore be +> correct when the app is built, which makes a build specific to one environment. All +> three are public values, so nothing secret is baked in. + +## Production Build + +Dokploy builds the app from source on the deployment server; there is no image to +build or push. The build needs a reachable database because `generateStaticParams()` +calls `payload.find()`, and a Redis URL because the KV adapter is constructed while +`payload.config.ts` loads. + +To reproduce a production build locally: + +```bash +pnpm build +pnpm start +``` + +Notes: + +- **Three values are inlined at build time.** `SERVER_URL`, `STATUS_PAGE_URL` and + `SENTRY_DSN` are baked into the client bundle and captured in the prerendered shell + (`cacheComponents: true` gives nearly every route a build-time shell), so passing them + at run time only satisfies the schema check — it does not change what is served. Build + with the config you intend to run. Every secret and all server-only config *is* + runtime, so a deployment can be repointed at a different database, cache, bucket or + mail provider without rebuilding. +- **A production build validates only the build-time subset** of the schema; the full + schema is validated at boot, so a missing runtime variable still fails fast — at the + point where it can be supplied. +- **Private hosts need Tailscale.** The `development` config points `DATABASE_URL` and + `REDIS_URL` at hosts on the tailnet, so the build only resolves them from a machine + already on the tailnet. +- **`docker compose up -d` is only the local infrastructure** (Mongo, Redis, rustfs). + The app is not a compose service — it runs via `pnpm dev`. + +## Available Scripts + +No script wraps `doppler run`. Locally the environment comes from `.env.local`, which +Next loads on its own — see [Environment Configuration](#1-environment-configuration) for +how to generate it. On the deployment server Dokploy supplies the environment directly. +The one script that does talk to Doppler is `pnpm load-env`, which writes that file. + +- `pnpm load-env`: Writes `.env.local` from the active Doppler config (`--check` to + report drift without writing). +- `pnpm dev`: Starts the Next.js development server (and Storybook, in parallel). +- `pnpm build`: Builds the application for production. +- `pnpm start`: Starts the production server. +- `pnpm generate`: Runs `generate:types` and `generate:importmap` in parallel. +- `pnpm payload`: Wrapper for Payload CLI. +- `pnpm migrate`: Runs database migrations. +- `pnpm ci`: Sequence for CI/CD (migration + build). +- `pnpm lint`: Runs `biome check` (lint + format check) for code quality. +- `pnpm format`: Runs `biome format --write` to auto-fix formatting. +- `pnpm storybook` / `pnpm dev:storybook`: Runs Storybook for isolated component development. + +## Project Structure + +```text +. +├── app/ # Next.js App Router +│ ├── (frontend)/ # Public site routes, incl. api/ (preview, sse, heartbeat) +│ └── (payload)/ # Payload admin panel routes +├── src/ # Application Source +│ ├── access/ # Payload Access Control functions +│ ├── blocks/ # Reusable Payload Blocks (resume sections, content blocks) +│ ├── collections/ # Payload Collections (Media, Pages, BlogPosts, Resume*, Users, etc.) +│ ├── components/ # React Components +│ ├── contexts/ # React Context providers +│ ├── fields/ # Custom/reusable Payload Field factories +│ ├── globals/ # Payload Globals (SiteSettings, PDFGeneratorSettings, etc.) +│ ├── hooks/ # React hooks +│ ├── jobs-queue/ # Payload Jobs Queue tasks/workflows +│ ├── lib/ # Framework-agnostic utilities (Redis handler, caching, etc.) +│ ├── pdf/ # PDF generation (resume export) +│ ├── styles/ # CSS and Tailwind styles +│ ├── types/ # Shared/generated TypeScript types (incl. generated payload.ts) +│ └── widgets/ # Payload admin dashboard widgets +├── public/ # Static Assets +├── scripts/ # Standalone Node scripts (e.g. dev tunnel) +├── payload.config.ts # Payload CMS configuration (root-level, not under src/) +├── docker-compose.yml # Local Infrastructure +└── next.config.ts # Next.js Configuration +``` -### legacy +## Entrypoints + +- Next.js App Router under `app/` (served via `pnpm dev` / `pnpm start`). +- Payload CMS is configured in `payload.config.ts` (repo root) and integrated via `withPayload` in `next.config.ts`. +- File uploads are handled by Payload collections with the S3 storage plugin configured in `payload.config.ts`. + +## Testing + +Unit tests run with **Vitest**, end-to-end tests with **Playwright** (Chromium). + +- **Unit tests**: `pnpm test` (watch mode: `pnpm test:watch`, coverage: `pnpm test:coverage`) +- **E2E tests**: `pnpm test:e2e` (interactive UI: `pnpm test:e2e:ui`) +- **E2E in Docker Chromium**: `pnpm test:e2e:docker` + +Conventions: + +- Unit tests are co-located as `*.test.ts` next to the code under test (config: `vitest.config.ts`, + shared mocks and `TZ=UTC` in `vitest.setup.ts`). +- E2E specs live in `e2e/*.spec.ts` (config: `playwright.config.ts`). They are smoke tests only — + the site is CMS-driven, so they assert structural health, not content. + +E2E prerequisites: + +- `docker compose up -d` (MongoDB, Redis and S3 storage must be reachable). +- `.env.test` is committed with dummy, format-valid values so the app can boot. Flows backed by + real external services do **not** work with it: AI generation (OpenAI/Anthropic), Mapbox + geocoding, email (UseSend), Umami analytics and the status-page heartbeat. +- `pnpm test:e2e` starts (or reuses) the dev server automatically. The Docker flow + (`scripts/e2e-docker.sh`) expects the dev server already running on the host and uses the + `mcr.microsoft.com/playwright` image — its tag must always match the `@playwright/test` version + in `package.json`; bump them together. + +## Commits & Git Hooks + +Hooks are installed by Husky via the `prepare` script, so `pnpm install` sets +them up automatically. + +| Hook | Runs | +| --- | --- | +| `pre-commit` | `lint-staged` → `biome check --write` on staged files only | +| `commit-msg` | `commitlint` against Conventional Commits | + +Formatting fixes are re-staged automatically, so a commit that only needed +formatting still goes through. Only staged files are touched — pre-existing +issues elsewhere never block an unrelated commit. + +Commit messages follow [Conventional Commits](https://www.conventionalcommits.org): + +```text +feat(admin): add Iconify icon picker field +fix: repair the Docker build for the flat repo layout +chore!: drop Node 20 support # `!` marks a breaking change +``` + +Scopes are deliberately unrestricted — see `commitlint.config.mjs`. + +Both hooks can be skipped with `git commit --no-verify` for genuine +emergencies; the same commitlint check runs on pull requests in CI, so a +bypassed message still has to be fixed before merge. + +## Error Tracking (Sentry) + +Sentry is wired for errors, Web Vitals, logs and traces, but stays **completely +inert until `SENTRY_DSN` is set** — no DSN means `Sentry.init` is never called, +so local development is unaffected. + +| Variable | Purpose | +| --- | --- | +| `SENTRY_DSN` | Enables the SDK. Everything below is ignored without it. | +| `SENTRY_TRACES_SAMPLE_RATE` | Trace sampling, `0`–`1`. Defaults to `1` in dev, `0.1` in production. | +| `SENTRY_ENVIRONMENT` / `SENTRY_RELEASE` | Override the reported environment and release. | +| `SENTRY_AUTH_TOKEN` + `SENTRY_ORG` + `SENTRY_PROJECT` | Source-map upload during build. All three required; skipped otherwise. | +| `NEXT_PUBLIC_SENTRY_REPLAY_RATE` / `..._ERROR_RATE` | Session replay, off by default. | + +Notes: + +- `/api/sse` and `/api/health/*` are excluded from tracing — they are polled or + long-lived and would dominate the quota. +- Sentry requests are proxied through `/monitoring` so ad blockers cannot drop them. +- Source maps are deleted after upload, so they are never served publicly. + +## Features + +- **Media Optimization**: Images are stored in S3 and automatically generate `alt` text and `blurDataURL` on upload using `sharp`. +- **SVG Optimization**: Optimize SVGs for logos using `svgo` in the admin UI. Note: this is a client-side editor convenience only, not a server-side sanitization boundary — see `AGENTS.md` for the related security note. +- **Localization**: Full support for English (`en`) and German (`de`) with localized admin panel and content. +- **Modern Styling**: Powered by Tailwind CSS v4. +- **Live Preview & Server-Sent Events**: Draft/live preview via `app/(frontend)/api/preview`, and a Redis pub/sub-backed SSE endpoint (`app/(frontend)/api/sse`) for real-time status updates. + +### Data Seeding + +Seed blog topics and posts for local testing (idempotent, matched by slug): + +```bash +pnpm seed:blog # create 6 topics + 30 posts (with downloaded images) +pnpm seed:blog:clean # remove them again +``` + +Article structure and prose are randomized per post title with a seeded PRNG, so +reruns produce identical output while each post differs. Images are downloaded +from `picsum.photos` (keyless) and uploaded into the images collection; the AI +alt-text hook is skipped during seeding. + +Note: `payload run` only forwards CLI arguments after a `--` separator — see the +`seed:blog:clean` script. +- TODO: If seeding is needed, add a dedicated script or route and document usage here. + +## CI / Deployment + +A pull request against `main` or `develop` runs one pipelined quality gate +(`.github/workflows/ci.yml`), each stage gating the next: + +1. **Commit Messages** — commitlint over the PR's commit range. +2. **Unit Tests** — `vitest run --coverage` plus `deps:lint`. The suite mocks `payload` + and stubs its own environment in `vitest.setup.ts`, so it needs no database, no + tailnet and no secrets. +3. **Build app + worker images** / **Build storybook image** (run in parallel once tests + pass) — builds all three images (`Dockerfile`'s `app`, `worker`, and `storybook` + targets) and pushes them to `ghcr.io` tagged `sha-`. The app/worker build + needs a reachable database, since `generateStaticParams()` calls `payload.find()` in + several routes — the runner joins the tailnet via `tailscale/github-action` for that + step. Storybook's build touches no database, so it skips Tailscale entirely. + +These four checks are required status checks on `main` — a PR cannot merge unless all +four pass, so nothing gets built into an image (and nothing gets merged) unless it built +and tested clean first. + +On merge (`.github/workflows/promote.yml`), the images already built and pushed for that +PR's head SHA are **retagged**, not rebuilt — `docker buildx imagetools create` is a +registry metadata operation: + +- Merge to `develop` → retagged `edge`. +- Merge to `main` → once `.github/workflows/release.yml`'s semantic-release run computes + a new version, retagged `latest` and `vX.Y.Z`. + +Dokploy deploys from the resulting `ghcr.io` images rather than building from source. + +Secrets and non-secret config reach both CI and the server from Doppler: the Doppler +GitHub App syncs into GitHub environments (`Production` for `main`, `Development` +otherwise), and a PR's Docker build step uses whichever environment matches its base +branch. + +## Code Quality & Security Notes + +- Linting/formatting is enforced by [Biome](https://biomejs.dev/) (`biome.json`), not ESLint/Prettier — see `AGENTS.md` for the full style conventions. +- `pnpm lint` does not currently pass cleanly on `main` (pre-existing formatting and lint diagnostics); avoid introducing new issues when touching a file. +- See [`AGENTS.md`](./AGENTS.md) for a summary of known security guardrails (open `queryPresets` access, unauthenticated SSE channel subscription, unsanitized raw SVG rendering, unused `CRON_SECRET`) to keep in mind when working in related areas. + +--- -- website-v2: [Code](https://github.com/danielheene/website/tree/homepage-v2) | [Deployment](https://daniel-heene-9ntmp4f8l-danielheene.vercel.app) +#### Legacy Code -- website-v1: [Code](https://github.com/danielheene/website/tree/homepage-v1) +The following code of my previous websites is no longer maintained, but a dump of their code bases can still be found under the following tags: [website-v2](https://github.com/danielheene/website/tree/homepage-v2) | [website-v1](https://github.com/danielheene/website/tree/homepage-v1). diff --git a/app/(frontend)/[slug]/opengraph-image.tsx b/app/(frontend)/[slug]/opengraph-image.tsx new file mode 100644 index 00000000..999e81f6 --- /dev/null +++ b/app/(frontend)/[slug]/opengraph-image.tsx @@ -0,0 +1,98 @@ +import { notFound } from 'next/navigation' + +import { ImageResponse } from 'takumi-js/response' + +import { SHADER_PRESET_MAP } from '@/components/HeroMedia/shaderPresets' + +import { queryPageBySlug } from './page' + +export const alt = 'Page' +export const size = { + width: 1200, + height: 630, +} + +type Props = { + params: Promise<{ + slug?: string + }> +} + +export default async function Image({ params }: Props) { + const { slug = 'home' } = await params + const page = await queryPageBySlug(slug) + if (!page) notFound() + + const background = page.hero?.background + const title = page.title ?? 'Page' + + const shaderThumbnailSrc = + background?.backgroundType === 'shader' && background.shader + ? SHADER_PRESET_MAP[background.shader as keyof typeof SHADER_PRESET_MAP]?.thumbnail.src + : undefined + + // Pages' `hero.background.media` is a `hasMany: true` polymorphic upload + // field: it always resolves as an array of `{ relationTo, value }` wrapper + // objects, never a bare media object. `value` only holds the populated + // media document (with `.url`) once the relation has been resolved by the + // query this route reuses (`queryPageBySlug`, shared with `[slug]/page.tsx`). + // Mirrors the `isPopulated`/`toItems` pattern in `HeroMedia.tsx`. + const firstImageEntry = Array.isArray(background?.media) + ? background.media.find( + (entry) => + typeof entry === 'object' && + entry !== null && + entry.relationTo === 'images' && + typeof entry.value === 'object' && + entry.value !== null, + ) + : undefined + + const heroImageUrl = + background?.backgroundType === 'media' && + firstImageEntry && + typeof firstImageEntry.value === 'object' + ? (firstImageEntry.value?.url ?? undefined) + : undefined + + return new ImageResponse( +
+ {heroImageUrl && ( + // biome-ignore lint/performance/noImgElement: Takumi/OG image rendering requires a plain , not next/image + + )} + {shaderThumbnailSrc && ( + // biome-ignore lint/performance/noImgElement: Takumi/OG image rendering requires a plain , not next/image + + )} +
+

{title}

+
, + { + width: 1200, + height: 630, + }, + ) +} diff --git a/app/(frontend)/[slug]/page.tsx b/app/(frontend)/[slug]/page.tsx index c135f3bb..eb68f4e1 100644 --- a/app/(frontend)/[slug]/page.tsx +++ b/app/(frontend)/[slug]/page.tsx @@ -1,106 +1,144 @@ -import { Metadata, ResolvedMetadata } from 'next' -import { getPayload } from 'payload' +import { cache } from 'react' +import type { Metadata } from 'next' +import { cacheLife, cacheTag } from 'next/cache' import { draftMode } from 'next/headers' -import React, { cache, Fragment } from 'react' - -import configPromise from '@payload-config' -import { Media, Page as PageType } from '@payload-types' -import { generateMeta } from '@/utilities/generateMeta' import { notFound } from 'next/navigation' +import { connection } from 'next/server' +import config from '@payload-config' +import { getPayload } from 'payload' + +import { RenderBlocks } from '@/blocks/RenderBlocks' import { Headline } from '@/components/Headline' -import RichText from '@/components/RichText' -import { ImageMedia } from '@/components/ImageMedia' -import { getCachedGlobal } from '@/utilities/getGlobals' +import { HeroMedia } from '@/components/HeroMedia' +import { LivePreviewListener } from '@/components/LivePreviewListener' +import { PageContainer } from '@/components/PageContainer' +import { extractSections } from '@/lib/extractSections' +import { generateMeta } from '@/lib/generateMeta' +import { placeholderParams } from '@/lib/placeholderParams' +import { CollectionData, CollectionSlug } from '@/types/collections' export async function generateStaticParams() { - const payload = await getPayload({ config: configPromise }) - const pages = await payload.find({ - collection: 'pages', + const payload = await getPayload({ + config, + }) + const { docs = [] } = await payload.find({ + collection: CollectionSlug.Pages, draft: false, limit: 1000, overrideAccess: false, pagination: false, + where: { + slug: { + not_equals: 'home', + }, + }, select: { slug: true, }, }) - const params = pages.docs - ?.filter((doc) => { - return doc.slug !== 'home' - }) - .map(({ slug }) => { - return { slug } - }) + if (docs.length === 0) { + return placeholderParams('/[slug]') + } - return params + return docs.map(({ slug }) => ({ + slug, + })) } type PageProps = { - params: Promise<{ slug: string }> + params: Promise<{ + slug?: string + }> } + export default async function Page({ params }: PageProps) { - const { slug } = await params - const page = await queryPageBySlug({ slug }) - if (!page) return notFound() + const { isEnabled: draft } = await draftMode() + const { slug = 'home' } = await params + + const page: CollectionData = await queryPageBySlug(slug) + if (!page) notFound() - const { content, hero: heroMedia, title } = page - const hero = heroMedia as Media + const { title, layout, hero, content } = page return ( - -
- {hero && ( - + + + {title && ( +
+
+ + {title} + +
+
)} - - {title} - -
-
- -
-
+ +
+ +
+ + {draft && } + ) } -export async function generateMetadata( - { params }: PageProps, - parent: Promise, -): Promise { - const { slug } = await params - const page = await queryPageBySlug({ - slug, +export async function generateMetadata({ params }: PageProps): Promise { + const { slug = 'home' } = await params + const doc = await queryPageBySlug(slug) + return generateMeta({ + doc, + }) +} + +const queryPublishedPageBySlug = async (slug: string) => { + 'use cache' + cacheLife('max') + cacheTag(CollectionSlug.Pages) + + const payload = await getPayload({ + config, }) - const globalMeta = await getCachedGlobal('settingsMeta', 1)() - const parentMeta = await parent + const { docs = [] } = await payload.find({ + collection: CollectionSlug.Pages, + draft: false, + limit: 1, + pagination: false, + overrideAccess: false, + where: { + slug: { + equals: slug, + }, + }, + }) - return generateMeta({ doc: page, globalMeta, parentMeta }) + return (docs[0] as CollectionData) || null } -const queryPageBySlug = cache(async ({ slug }: { slug: string }): Promise => { - const { isEnabled: draft } = await draftMode() +const queryDraftPageBySlug = async (slug: string) => { + // Draft reads are request-scoped and uncached: Payload's `find()` reads the + // current time internally, which a static prerender is not allowed to observe. + // `connection()` marks this branch dynamic so the time access happens after + // Request data has been read. + await connection() - const payload = await getPayload({ config: configPromise }) + const payload = await getPayload({ + config, + }) - const result = await payload.find({ - collection: 'pages', - draft, + const { docs = [] } = await payload.find({ + collection: CollectionSlug.Pages, + draft: true, limit: 1, pagination: false, - overrideAccess: draft, + overrideAccess: true, where: { slug: { equals: slug, @@ -108,5 +146,10 @@ const queryPageBySlug = cache(async ({ slug }: { slug: string }): Promise) || null +} + +export const queryPageBySlug = cache(async (slug: string) => { + const { isEnabled: draft } = await draftMode() + return draft ? queryDraftPageBySlug(slug) : queryPublishedPageBySlug(slug) }) diff --git a/app/next/exit-preview/route.ts b/app/(frontend)/api/exit-preview/route.ts similarity index 72% rename from app/next/exit-preview/route.ts rename to app/(frontend)/api/exit-preview/route.ts index 8829e54c..a8e3e69b 100644 --- a/app/next/exit-preview/route.ts +++ b/app/(frontend)/api/exit-preview/route.ts @@ -1,6 +1,7 @@ import { draftMode } from 'next/headers' export async function GET(): Promise { - await draftMode().then((draft) => draft.disable()) + const draft = await draftMode() + draft.disable() return new Response('Draft mode is disabled') } diff --git a/app/(frontend)/api/health/app/route.ts b/app/(frontend)/api/health/app/route.ts new file mode 100644 index 00000000..558687a6 --- /dev/null +++ b/app/(frontend)/api/health/app/route.ts @@ -0,0 +1,18 @@ +/** + * Trivial liveness check for the `app` container — always 200 while the + * Next.js server can handle a request at all. Registered as this image's + * Docker `HEALTHCHECK`; see `/api/health/jobs` for the job-queue-aware + * check used by external uptime monitoring. + */ +export async function GET() { + return Response.json( + { + ok: true, + }, + { + headers: { + 'Cache-Control': 'public, max-age=60, stale-while-revalidate=300', + }, + }, + ) +} diff --git a/app/(frontend)/api/health/jobs/route.ts b/app/(frontend)/api/health/jobs/route.ts new file mode 100644 index 00000000..a3b3ca0e --- /dev/null +++ b/app/(frontend)/api/health/jobs/route.ts @@ -0,0 +1,24 @@ +import config from '@payload-config' +import { getPayload } from 'payload' + +import { checkJobsHealth } from '@/jobs-queue/lib/checkJobsHealth' + +/** + * Pulled by an external monitor (Uptime Kuma HTTP(s) check) rather than + * pushed to one, so it stays accurate even if the queue runner itself has + * stopped entirely. See `checkJobsHealth` for what "healthy" means. + */ +export async function GET() { + const payload = await getPayload({ + config, + }) + + const health = await checkJobsHealth(payload) + + return Response.json(health, { + status: health.healthy ? 200 : 503, + headers: { + 'Cache-Control': 'no-store', + }, + }) +} diff --git a/app/(frontend)/api/icons/collection/route.ts b/app/(frontend)/api/icons/collection/route.ts new file mode 100644 index 00000000..3f243673 --- /dev/null +++ b/app/(frontend)/api/icons/collection/route.ts @@ -0,0 +1,65 @@ +import { cacheLife, cacheTag } from 'next/cache' + +// imported from the leaf module, not `@/components/Icon`: that barrel re-exports +// a `'use client'` module, so on the server this name would resolve to a client +// reference stub instead of the URL string +import { ICONIFY_API } from '@/components/Icon/api' +import { + type CollectionResponse, + type IconCollection, + isAllowedPrefix, + parseCollection, +} from '@/fields/Icon/collection' +import { FAVORITE_COLLECTIONS } from '@/fields/Icon/favorites' + +/** + * One collection's icon names, cached server-side. + * + * `cacheLife('max')` because a self-hosted Iconify only gains icons when the + * sets behind it are redeployed — there is no upstream drift to chase on a + * timer. `cacheTag` gives that deploy a manual lever: `revalidateTag('icons')` + * clears every set, `icons:` clears one. + * + * With `cacheHandler` wired to Redis this entry lives there, shared across + * instances; until then it is Next's default store. Either way the browser + * stops talking to the Iconify host directly. + */ +const getCollection = async (prefix: string): Promise => { + 'use cache' + cacheTag('icons', `icons:${prefix}`) + cacheLife('max') + + const response = await fetch(`${ICONIFY_API}/collection?prefix=${encodeURIComponent(prefix)}`) + if (!response.ok) throw new Error(`Icon collection failed (HTTP ${response.status})`) + + return parseCollection(prefix, (await response.json()) as CollectionResponse) +} + +export const GET = async (request: Request): Promise => { + const prefix = new URL(request.url).searchParams.get('prefix') + + if (!isAllowedPrefix(prefix, FAVORITE_COLLECTIONS)) { + return Response.json( + { + error: 'Unknown icon collection', + }, + { + status: 400, + }, + ) + } + + try { + return Response.json(await getCollection(prefix)) + } catch (caught) { + console.error('Icon collection failed:', caught) + return Response.json( + { + error: 'Icon collection failed', + }, + { + status: 502, + }, + ) + } +} diff --git a/app/(frontend)/api/preview/route.ts b/app/(frontend)/api/preview/route.ts new file mode 100644 index 00000000..c157c056 --- /dev/null +++ b/app/(frontend)/api/preview/route.ts @@ -0,0 +1,95 @@ +import { timingSafeEqual } from 'node:crypto' + +import { draftMode } from 'next/headers' +import { redirect } from 'next/navigation' +import type { NextRequest } from 'next/server' +import configPromise from '@payload-config' +import { getPayload, type PayloadRequest, type TypedUser } from 'payload' + +import { CollectionSlugValue } from '@/types/collections' + +/** + * Compares the supplied secret in constant time, so the endpoint does not leak + * the expected value one character at a time through response timing. + * `timingSafeEqual` requires equal-length buffers, hence the length check. + */ +const matchesPreviewSecret = (candidate: string): boolean => { + const expected = Buffer.from(process.env.PREVIEW_SECRET ?? '') + const supplied = Buffer.from(candidate) + + if (expected.length === 0 || expected.length !== supplied.length) return false + + return timingSafeEqual(expected, supplied) +} + +export async function GET(req: NextRequest): Promise { + const payload = await getPayload({ + config: configPromise, + }) + + const url = req.url + const { searchParams } = new URL(url) + + const path = searchParams.get('path') + const collection = searchParams.get('collection') as CollectionSlugValue + const slug = searchParams.get('slug') + const previewSecret = searchParams.get('previewSecret') + + if (!previewSecret || !matchesPreviewSecret(previewSecret)) { + return new Response('You are not allowed to preview this page', { + status: 403, + }) + } + + if (!path || !collection || !slug) { + return new Response('Insufficient search params', { + status: 404, + }) + } + + if (!path.startsWith('/')) { + return new Response('This endpoint can only be used for relative previews', { + status: 500, + }) + } + + let user: TypedUser | null = null + + try { + /** + * `payload.auth()` resolves to `{ permissions, user }` — the result object + * is truthy even for an anonymous request, so the user has to be pulled out + * of it. Testing the result itself would let anyone holding the preview + * secret enable draft mode, and draft reads run with `overrideAccess: true`. + */ + ;({ user } = await payload.auth({ + req: req as unknown as PayloadRequest, + headers: req.headers, + })) + } catch (error) { + payload.logger.error( + { + err: error, + }, + 'Error verifying token for live preview', + ) + return new Response('You are not allowed to preview this page', { + status: 403, + }) + } + + const draft = await draftMode() + + if (!user) { + draft.disable() + return new Response('You are not allowed to preview this page', { + status: 403, + }) + } + + // You can add additional checks here to see if the user is allowed to preview this page + + draft.enable() + + redirect(path) +} diff --git a/app/(frontend)/api/sse/route.ts b/app/(frontend)/api/sse/route.ts new file mode 100644 index 00000000..ba683a11 --- /dev/null +++ b/app/(frontend)/api/sse/route.ts @@ -0,0 +1,158 @@ +import config from '@payload-config' +import { getPayload, type PayloadRequest } from 'payload' + +import { type RedisListener, subscribe } from '@/lib/RedisHandler' +import { + isBilingualTranslateChannel, + isResumeGenerateChannel, + isScheduledJobChannel, + isSeedTaskChannel, + isSseChannel, +} from '@/lib/sse/channels' + +const HEARTBEAT_INTERVAL_MS = 30_000 + +/** + * Ceiling on concurrently open streams. + * + * This endpoint is unauthenticated and each connection holds a Redis + * listener plus an interval for as long as the client keeps it open, so + * without a cap a handful of clients can exhaust the server's connections. + */ +const MAX_CONCURRENT_STREAMS = 100 +let openStreams = 0 + +/** + * Streams messages published on a Redis Pub/Sub channel to the browser via + * Server-Sent Events. + * + * @example new EventSource('/api/sse?channel=service-status') + */ +export async function GET(request: Request): Promise { + const { searchParams } = new URL(request.url) + const channel = searchParams.get('channel') + + /** + * The channel is attacker-controlled, so it is matched against an + * allowlist rather than passed through: `subscribe()` hands it straight to + * Redis, which would otherwise let anyone read any Pub/Sub channel. + * Unknown channels get the same 400 as a missing one — enumerating which + * channels exist is not something an anonymous caller needs to do. + */ + if ( + isBilingualTranslateChannel(channel) || + isSeedTaskChannel(channel) || + isScheduledJobChannel(channel) || + isResumeGenerateChannel(channel) + ) { + /** + * Unlike the public channels in `SSE_CHANNELS`, these job channels + * carry admin-only data (translated CV content, seed results, manual + * job-run outcomes, resume generation progress), so they require a + * signed-in admin session rather than being open to anonymous callers. + */ + const payload = await getPayload({ + config, + }) + + let isAuthenticated = false + try { + const { user } = await payload.auth({ + req: request as unknown as PayloadRequest, + headers: request.headers, + }) + isAuthenticated = Boolean(user) + } catch (error) { + payload.logger.error( + { + err: error, + }, + 'Error authenticating SSE request for an admin-only channel', + ) + } + + if (!isAuthenticated) { + return new Response('You must be signed in to stream this channel', { + status: 401, + }) + } + } else if (!isSseChannel(channel)) { + return new Response('Missing or unsupported "channel" query parameter', { + status: 400, + }) + } + + if (openStreams >= MAX_CONCURRENT_STREAMS) { + return new Response('Too many concurrent streams', { + status: 503, + headers: { + 'Retry-After': '30', + }, + }) + } + + const encoder = new TextEncoder() + + let heartbeatInterval: ReturnType | undefined + let unsubscribeFromChannel: (() => Promise) | undefined + + // Guarded so the slot is released exactly once, no matter which of the + // teardown paths below runs first. + let released = false + const release = () => { + if (released) return + released = true + openStreams -= 1 + } + + openStreams += 1 + + const stream = new ReadableStream({ + async start(controller) { + const listener: RedisListener = (message) => { + controller.enqueue(encoder.encode(`data: ${message}\n\n`)) + } + + try { + unsubscribeFromChannel = await subscribe(channel, listener) + } catch (error) { + // Redis unreachable: give the slot back rather than leaking it. + release() + controller.error(error) + return + } + + heartbeatInterval = setInterval(() => { + controller.enqueue(encoder.encode(': ping\n\n')) + }, HEARTBEAT_INTERVAL_MS) + + const cleanup = async () => { + if (heartbeatInterval) clearInterval(heartbeatInterval) + await unsubscribeFromChannel?.() + release() + try { + controller.close() + } catch { + // controller might already be closed + } + } + + request.signal.addEventListener('abort', () => { + void cleanup() + }) + }, + cancel() { + if (heartbeatInterval) clearInterval(heartbeatInterval) + void unsubscribeFromChannel?.() + release() + }, + }) + + return new Response(stream, { + headers: { + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache, no-transform', + Connection: 'keep-alive', + }, + }) +} diff --git a/app/(frontend)/blog/[slug]/components/FeaturedTopics.tsx b/app/(frontend)/blog/[slug]/components/FeaturedTopics.tsx new file mode 100644 index 00000000..85c3adc6 --- /dev/null +++ b/app/(frontend)/blog/[slug]/components/FeaturedTopics.tsx @@ -0,0 +1,77 @@ +import { cacheLife, cacheTag } from 'next/cache' +import Link from 'next/link' +import config from '@payload-config' +import { getPayload } from 'payload' + +import { cn } from 'tailwind-variants' + +import { generateContentPath } from '@/lib/generateContentPath' +import { CollectionSlug } from '@/types/collections' + +interface FeaturedTopicsProps { + currentSlug?: string +} + +const fetchFeaturedTopics = async () => { + 'use cache' + cacheLife('max') + cacheTag('featuredTopics') + + const payload = await getPayload({ + config, + }) + const { docs: topics } = await payload.find({ + collection: CollectionSlug.BlogTopics, + limit: 0, + pagination: false, + where: { + featured: { + equals: true, + }, + }, + select: { + slug: true, + title: true, + relatedPosts: true, + }, + sort: '_order', + depth: 2, + }) + + return topics.filter((topic) => topic.relatedPosts?.docs?.length > 0) +} + +export const FeaturedTopics = async ({ currentSlug = '/' }: FeaturedTopicsProps) => { + const topics = await fetchFeaturedTopics() + + const allTopics = [ + { + slug: '/', + title: 'All Topics', + relatedPosts: { + docs: [], + }, + }, + ...topics, + ] + + return ( +
+ {allTopics.map(({ slug, title, relatedPosts }) => ( + + {title} + {relatedPosts?.docs?.length > 0 && ( + ({relatedPosts?.docs?.length}) + )} + + ))} +
+ ) +} diff --git a/app/(frontend)/blog/[slug]/opengraph-image.tsx b/app/(frontend)/blog/[slug]/opengraph-image.tsx new file mode 100644 index 00000000..1a17fa7d --- /dev/null +++ b/app/(frontend)/blog/[slug]/opengraph-image.tsx @@ -0,0 +1,38 @@ +import { notFound } from 'next/navigation' + +import { ImageResponse } from 'takumi-js/response' + +import { RESERVED_TOPIC_SLUGS } from '@/types/blog' + +import { queryPublishedTopicBySlug } from '../_shared/BlogListPage' + +export const alt = 'Blog topic' +export const size = { + width: 1200, + height: 630, +} + +type Props = { + params: Promise<{ + slug: string + }> +} + +export default async function Image({ params }: Props) { + const { slug } = await params + if (RESERVED_TOPIC_SLUGS.includes(slug)) notFound() + + const topic = await queryPublishedTopicBySlug(slug) + if (!topic) notFound() + + return new ImageResponse( +
+

Blog

+

{topic.title}

+
, + { + width: 1200, + height: 630, + }, + ) +} diff --git a/app/(frontend)/blog/[slug]/page.tsx b/app/(frontend)/blog/[slug]/page.tsx new file mode 100644 index 00000000..885c1f4f --- /dev/null +++ b/app/(frontend)/blog/[slug]/page.tsx @@ -0,0 +1,66 @@ +import type { Metadata } from 'next' +import { notFound } from 'next/navigation' +import config from '@payload-config' +import { getPayload } from 'payload' + +import { generateMeta } from '@/lib/generateMeta' +import { placeholderParams } from '@/lib/placeholderParams' +import { RESERVED_TOPIC_SLUGS } from '@/types/blog' +import { CollectionSlug } from '@/types/collections' + +import { BlogListPage, queryPublishedTopicBySlug } from '../_shared/BlogListPage' + +export async function generateStaticParams() { + const payload = await getPayload({ + config, + }) + + const { docs = [] } = await payload.find({ + collection: CollectionSlug.BlogTopics, + pagination: false, + limit: 0, + draft: false, + select: { + slug: true, + }, + }) + + if (docs.length === 0) { + return placeholderParams('/blog/[slug]') + } + + return docs.map(({ slug }) => ({ + slug, + })) +} + +/** + * Posts filtered by topic. Later pages live at /blog//page/. + * + * See the note in /blog/page.tsx on why `searchParams` is not read here. + */ +export default async function Page({ params }: PageProps<'/blog/[slug]'>) { + const { slug } = await params + + // `/blog/post/...` and `/blog/page/...` are handled by their own routes + if (RESERVED_TOPIC_SLUGS.includes(slug)) notFound() + + const topic = await queryPublishedTopicBySlug(slug) + if (!topic) notFound() + + return +} + +export async function generateMetadata({ params }: PageProps<'/blog/[slug]'>): Promise { + const { slug } = await params + if (RESERVED_TOPIC_SLUGS.includes(slug)) { + return { + title: 'Blog', + } + } + + const topic = await queryPublishedTopicBySlug(slug) + return generateMeta({ + doc: topic, + }) +} diff --git a/app/(frontend)/blog/[slug]/page/[page]/page.tsx b/app/(frontend)/blog/[slug]/page/[page]/page.tsx new file mode 100644 index 00000000..a2f10366 --- /dev/null +++ b/app/(frontend)/blog/[slug]/page/[page]/page.tsx @@ -0,0 +1,122 @@ +import type { Metadata } from 'next' +import { notFound, redirect } from 'next/navigation' +import config from '@payload-config' +import { getPayload } from 'payload' + +import { generateMeta } from '@/lib/generateMeta' +import { PLACEHOLDER_SLUG, placeholderParams } from '@/lib/placeholderParams' +import { RESERVED_TOPIC_SLUGS } from '@/types/blog' +import { CollectionSlug } from '@/types/collections' + +import { + BlogListPage, + countTotalPages, + queryPublishedTopicBySlug, + resolvePageParam, +} from '../../../_shared/BlogListPage' + +/** + * Seeds page 2 of every topic that actually has one. Cache Components needs at + * least one param to validate against, and seeding a real topic — rather than a + * synthetic slug that only ever resolves to notFound() — means the prerendered + * shells correspond to reachable URLs. Topics with a single page contribute + * nothing here; deeper pages are generated on demand. + */ +export async function generateStaticParams() { + const payload = await getPayload({ + config, + }) + + const { docs = [] } = await payload.find({ + collection: CollectionSlug.BlogTopics, + draft: false, + limit: 1000, + overrideAccess: false, + pagination: false, + select: { + slug: true, + }, + }) + + const topics = docs.filter(({ slug }) => slug && !RESERVED_TOPIC_SLUGS.includes(slug)) + + const params = ( + await Promise.all( + topics.map(async ({ id, slug }) => { + const totalPages = await countTotalPages(id) + return Array.from( + { + length: Math.max(totalPages - 1, 0), + }, + (_, index) => ({ + slug, + page: String(index + 2), + }), + ) + }), + ) + ).flat() + + // Cache Components still requires a non-empty list when no topic paginates. + // Unlike the other routes this is reachable in a healthy build — a site whose + // topics all fit on one page is legitimate — so it warns only when the topic + // query itself came back empty. + if (params.length === 0) { + if (topics.length === 0) { + return placeholderParams('/blog/[slug]/page/[page]', { + page: '2', + }) + } + + return [ + { + slug: PLACEHOLDER_SLUG, + page: '2', + }, + ] + } + + return params +} + +/** Paginated topic listing: /blog//page/2 and beyond. */ +export default async function Page({ params }: PageProps<'/blog/[slug]/page/[page]'>) { + const { slug, page: rawPage } = await params + + if (RESERVED_TOPIC_SLUGS.includes(slug)) notFound() + + const page = resolvePageParam(rawPage) + if (page === null) notFound() + + const topic = await queryPublishedTopicBySlug(slug) + if (!topic) notFound() + + // page 1 has a canonical URL of its own; never serve it twice + if (page === 1) redirect(`/blog/${topic.slug}`) + + if (page > (await countTotalPages(topic.id))) notFound() + + return +} + +export async function generateMetadata({ + params, +}: PageProps<'/blog/[slug]/page/[page]'>): Promise { + const { slug, page } = await params + + if (RESERVED_TOPIC_SLUGS.includes(slug)) { + return { + title: 'Blog', + } + } + + const topic = await queryPublishedTopicBySlug(slug) + const meta = await generateMeta({ + doc: topic, + }) + + return { + ...meta, + title: `${meta.title ?? topic?.title ?? 'Blog'} — page ${page}`, + } +} diff --git a/app/(frontend)/blog/_shared/BlogListPage.tsx b/app/(frontend)/blog/_shared/BlogListPage.tsx new file mode 100644 index 00000000..dfd96667 --- /dev/null +++ b/app/(frontend)/blog/_shared/BlogListPage.tsx @@ -0,0 +1,362 @@ +import { Suspense } from 'react' +import { cacheLife, cacheTag } from 'next/cache' +import Image from 'next/image' +import Link from 'next/link' +import config from '@payload-config' +import { getPayload } from 'payload' + +import { format } from 'date-fns' +import { cn } from 'tailwind-variants' + +import { DuoTone } from '@/components/DuoTone' +import { SHADER_PRESET_MAP } from '@/components/HeroMedia/shaderPresets' +import { ImageMedia } from '@/components/ImageMedia' +import { PageContainer } from '@/components/PageContainer' +import { Pagination } from '@/components/Pagination' +import { CollectionSlug } from '@/types/collections' +import type { BlogPostData, Topic } from '@/types/payload' + +import { FeaturedTopics } from '../[slug]/components/FeaturedTopics' + +export const POSTS_PER_PAGE = 12 + +/** + * Parses a `/page/` segment. Returns null for anything that is not a + * positive integer so the route can 404 rather than silently showing page 1 — + * `/blog/page/abc` should not be a soft-200. + */ +export const resolvePageParam = (raw: string | string[] | undefined): number | null => { + const value = Array.isArray(raw) ? raw[0] : raw + if (!value || !/^[0-9]+$/.test(value)) return null + + const parsed = Number.parseInt(value, 10) + return parsed >= 1 ? parsed : null +} + +export const queryPublishedTopicBySlug = async (slug: string): Promise => { + 'use cache' + cacheLife('max') + cacheTag(CollectionSlug.BlogTopics) + + const payload = await getPayload({ + config, + }) + + const { docs = [] } = await payload.find({ + collection: CollectionSlug.BlogTopics, + draft: false, + limit: 1, + pagination: false, + overrideAccess: false, + where: { + slug: { + equals: slug, + }, + }, + }) + + return (docs[0] as Topic) ?? null +} + +const queryPublishedPosts = async ({ topicId, page }: { topicId?: string; page: number }) => { + 'use cache' + cacheLife('max') + cacheTag(CollectionSlug.BlogPosts) + + const payload = await getPayload({ + config, + }) + + return payload.find({ + collection: CollectionSlug.BlogPosts, + draft: false, + overrideAccess: false, + limit: POSTS_PER_PAGE, + page, + sort: '-createdAt', + depth: 2, + ...(topicId + ? { + where: { + 'topics.value': { + equals: topicId, + }, + }, + } + : {}), + }) +} + +const PostCard = ({ post }: { post: BlogPostData }) => { + // populated upload values omit mimeType, so isMediaImage() can't be used — + // the relation's target collection is the reliable discriminator + const background = post.hero?.background + const heroImage = + background?.backgroundType === 'media' && + typeof background.media === 'object' && + background.media !== null && + 'relationTo' in background.media && + background.media.relationTo === CollectionSlug.MediaImages + ? background.media.value + : undefined + // guarded like the OG image routes: `shader` is typed as the preset-key + // union but the value comes from the database, so a preset that has since + // been renamed or removed resolves to undefined — degrade to no background + // image rather than throwing and taking down the whole server-rendered list + const shaderThumbnail = + background?.backgroundType === 'shader' && typeof background.shader === 'string' + ? SHADER_PRESET_MAP[background.shader]?.thumbnail + : undefined + + return ( + + + {heroImage && typeof heroImage === 'object' && heroImage.url && ( + + )} + {shaderThumbnail && ( + + )} + +
+

+ {format(post.createdAt, 'MMMM d, yyyy')} +

+
+

+ {post.title} +

+
+
+ + ) +} + +const PostsGrid = async ({ + topicId, + basePath, + page, +}: { + topicId?: string + basePath: string + page: number +}) => { + const { + docs: posts, + totalPages, + page: currentPage = 1, + } = await queryPublishedPosts({ + topicId, + page, + }) + + if (posts.length === 0) { + return ( +

+ No posts published yet. +

+ ) + } + + return ( + <> + {posts.map((post) => ( + + ))} + + + ) +} + +/** + * Total number of pages for a listing, used by the paginated routes to reject + * out-of-range URLs. The check cannot live inside the grid: that renders behind + * a Suspense boundary, where notFound() no longer changes the response status. + */ +export const countTotalPages = async (topicId?: string): Promise => { + 'use cache' + cacheLife('max') + cacheTag(CollectionSlug.BlogPosts) + + const payload = await getPayload({ + config, + }) + + const { totalDocs } = await payload.count({ + collection: CollectionSlug.BlogPosts, + overrideAccess: false, + ...(topicId + ? { + where: { + 'topics.value': { + equals: topicId, + }, + }, + } + : {}), + }) + + return Math.max(1, Math.ceil(totalDocs / POSTS_PER_PAGE)) +} + +export interface BlogListPageProps { + /** Topic to filter by; omitted on the unfiltered /blog listing. */ + topic?: Topic | null + /** 1-based page number taken from the route. */ + page: number +} + +/** + * Shared post listing rendered by every blog route: /blog, /blog/ and + * their /page/ variants. Keeping one component means the layout, header and + * pagination cannot drift between them. + */ +export const BlogListPage = async ({ topic, page }: BlogListPageProps) => { + const basePath = topic ? `/blog/${topic.slug}` : '/blog' + + return ( + +
+
+
+
+ +

+ {topic ? topic.title : 'All Posts'} +

+

+ Blog posts are a great way to share your knowledge and expertise with the world. +

+
+ +
+
+ + {Array.from( + { + length: 4, + }, + (_, index) => ( +
+ ), + )} + + } + > + + +
+
+
+
+
+ ) +} diff --git a/app/(frontend)/blog/opengraph-image.tsx b/app/(frontend)/blog/opengraph-image.tsx new file mode 100644 index 00000000..39d5c43c --- /dev/null +++ b/app/(frontend)/blog/opengraph-image.tsx @@ -0,0 +1,19 @@ +import { ImageResponse } from 'takumi-js/response' + +export const alt = 'Blog' +export const size = { + width: 1200, + height: 630, +} + +export default async function Image() { + return new ImageResponse( +
+

Blog

+
, + { + width: 1200, + height: 630, + }, + ) +} diff --git a/app/(frontend)/blog/page.tsx b/app/(frontend)/blog/page.tsx new file mode 100644 index 00000000..87afa7ba --- /dev/null +++ b/app/(frontend)/blog/page.tsx @@ -0,0 +1,18 @@ +import type { Metadata } from 'next' + +import { BlogListPage } from './_shared/BlogListPage' + +/** + * Unfiltered post listing. Later pages live at /blog/page/. + * + * `searchParams` is deliberately not read here: doing so opts the route out of + * prerendering under Cache Components, and the layout's cached reads then fail + * the build. Legacy `?page=` links are redirected by proxy.ts instead. + */ +export default async function Page() { + return +} + +export const generateMetadata = async (): Promise => ({ + title: 'Blog', +}) diff --git a/app/(frontend)/blog/page/[page]/opengraph-image.tsx b/app/(frontend)/blog/page/[page]/opengraph-image.tsx new file mode 100644 index 00000000..fddc6580 --- /dev/null +++ b/app/(frontend)/blog/page/[page]/opengraph-image.tsx @@ -0,0 +1,28 @@ +import { ImageResponse } from 'takumi-js/response' + +export const alt = 'Blog' +export const size = { + width: 1200, + height: 630, +} + +type Props = { + params: Promise<{ + page: string + }> +} + +export default async function Image({ params }: Props) { + const { page } = await params + + return new ImageResponse( +
+

Blog

+

Page {page}

+
, + { + width: 1200, + height: 630, + }, + ) +} diff --git a/app/(frontend)/blog/page/[page]/page.tsx b/app/(frontend)/blog/page/[page]/page.tsx new file mode 100644 index 00000000..51693915 --- /dev/null +++ b/app/(frontend)/blog/page/[page]/page.tsx @@ -0,0 +1,42 @@ +import type { Metadata } from 'next' +import { notFound, redirect } from 'next/navigation' + +import { BlogListPage, countTotalPages, resolvePageParam } from '../../_shared/BlogListPage' + +/** + * Cache Components requires at least one param to validate against; without + * this the route cannot prerender and the build fails on a blocking read in + * the shared layout. Page 2 always exists once there is more than one page, + * and further pages are generated on demand. + */ +export async function generateStaticParams() { + return [ + { + page: '2', + }, + ] +} + +/** Paginated unfiltered listing: /blog/page/2 and beyond. */ +export default async function Page({ params }: PageProps<'/blog/page/[page]'>) { + const { page: rawPage } = await params + const page = resolvePageParam(rawPage) + + if (page === null) notFound() + // page 1 has a canonical URL of its own; never serve it twice + if (page === 1) redirect('/blog') + + if (page > (await countTotalPages())) notFound() + + return +} + +export async function generateMetadata({ + params, +}: PageProps<'/blog/page/[page]'>): Promise { + const { page } = await params + + return { + title: `Blog — page ${page}`, + } +} diff --git a/app/(frontend)/blog/post/[slug]/opengraph-image.tsx b/app/(frontend)/blog/post/[slug]/opengraph-image.tsx new file mode 100644 index 00000000..cb80367a --- /dev/null +++ b/app/(frontend)/blog/post/[slug]/opengraph-image.tsx @@ -0,0 +1,91 @@ +import { notFound } from 'next/navigation' + +import { ImageResponse } from 'takumi-js/response' + +import { SHADER_PRESET_MAP } from '@/components/HeroMedia/shaderPresets' + +import { queryPostBySlug } from './page' + +export const alt = 'Blog post' +export const size = { + width: 1200, + height: 630, +} + +type Props = { + params: Promise<{ + slug?: string + }> +} + +export default async function Image({ params }: Props) { + const { slug } = await params + const post = await queryPostBySlug({ + slug: slug ?? '', + }) + if (!post) notFound() + + const background = post.hero?.background + const title = post.title ?? 'Blog post' + + const shaderThumbnailSrc = + background?.backgroundType === 'shader' && background.shader + ? SHADER_PRESET_MAP[background.shader as keyof typeof SHADER_PRESET_MAP]?.thumbnail.src + : undefined + + // BlogPosts' `hero.background.media` is a `hasMany: false` polymorphic + // upload field: it resolves as a single `{ relationTo, value }` wrapper + // object (never an array), where `value` holds the populated media + // document (with `.url`) once resolved by `queryPostBySlug`. Mirrors the + // `isPopulated` discriminator in `HeroMedia.tsx`, minus the array step. + const heroImageUrl = + background?.backgroundType === 'media' && + background.media && + typeof background.media === 'object' && + 'relationTo' in background.media && + background.media.relationTo === 'images' && + typeof background.media.value === 'object' + ? (background.media.value?.url ?? undefined) + : undefined + + return new ImageResponse( +
+ {heroImageUrl && ( + // biome-ignore lint/performance/noImgElement: Takumi/OG image rendering requires a plain , not next/image + + )} + {shaderThumbnailSrc && ( + // biome-ignore lint/performance/noImgElement: Takumi/OG image rendering requires a plain , not next/image + + )} +
+

{title}

+
, + { + width: 1200, + height: 630, + }, + ) +} diff --git a/app/(frontend)/blog/post/[slug]/page.tsx b/app/(frontend)/blog/post/[slug]/page.tsx new file mode 100644 index 00000000..51e78712 --- /dev/null +++ b/app/(frontend)/blog/post/[slug]/page.tsx @@ -0,0 +1,289 @@ +// biome-ignore-all lint: reason + +import { cache, Suspense } from 'react' +import type { Metadata } from 'next' +import { cacheLife, cacheTag } from 'next/cache' +import { draftMode } from 'next/headers' +import Link from 'next/link' +import { notFound } from 'next/navigation' +import config from '@payload-config' +import { getPayload } from 'payload' + +import { format } from 'date-fns' + +import { ArticleSidebar } from '@/components/ArticleSidebar' +import { HeroMedia } from '@/components/HeroMedia' +import { RichText } from '@/components/RichText' +import { extractHeadings } from '@/lib/extractHeadings' +import { generateMeta } from '@/lib/generateMeta' +import { reduceDataToBilingualLanguage } from '@/lib/i18n' +import { generateBlogPosting, generateBreadcrumbList } from '@/lib/jsonLd' +import { placeholderParams } from '@/lib/placeholderParams' +import { resolveRelations } from '@/lib/resolveRelation' +import { highlightRichText } from '@/lib/shiki/highlightRichText' +import { CollectionData, CollectionSlug } from '@/types/collections' + +import { size } from './opengraph-image' + +export async function generateStaticParams() { + const payload = await getPayload({ + config, + }) + + const { docs = [] } = await payload.find({ + collection: CollectionSlug['BlogPosts'], + draft: false, + limit: 1000, + overrideAccess: false, + pagination: false, + select: { + slug: true, + }, + }) + + if (docs.length === 0) { + return placeholderParams('/blog/post/[slug]') + } + + return docs.map(({ slug }) => ({ + slug, + })) +} + +type PageProps = { + params: Promise<{ + slug?: string + }> +} + +export default async function Page({ params: paramsPromise }: PageProps) { + const { slug } = await paramsPromise + + const post = await queryPostBySlug({ + slug, + }) + if (!post) return notFound() + + const { title, content, hero, createdAt, updatedAt, topics } = post + const baseUrl = process.env.SERVER_URL || 'https://danielheene.de' + const postUrl = `${baseUrl}/posts/${slug}` + + const headings = extractHeadings(content) + // Shiki is server-only, so code blocks are highlighted here and handed to + // RichText, which renders on the client + const highlightedCode = await highlightRichText(content) + + // topics are a polymorphic hasMany relation — only populated entries are usable + const topicList = (topics ?? []) + .map(({ value }) => value) + .filter((value) => typeof value === 'object' && value !== null) + const primaryTopic = topicList[0] + + const heroImageData = { + url: `${baseUrl}/blog/post/${slug}/opengraph-image`, + width: size.width, + height: size.height, + alt: title, + } + // + // // Extract keywords from tags + // const postTags = tags + // ? tags.map((tag) => (typeof tag === 'object' ? (tag as BlogTopic).title : '')).filter(Boolean) + // : undefined + + // Get category name for breadcrumb + // const category = + // typeof categories === 'object' ? (categories as BlogCategory) : null + // const categoryName = category?.title || 'Blog' + // const categorySlug = category?.slug || '' + + // Generate BlogPosting schema + const blogPostingSchema = generateBlogPosting({ + headline: title, + url: postUrl, + datePublished: createdAt, + dateModified: updatedAt || createdAt, + image: heroImageData, + author: { + name: 'Daniel Heene', + url: baseUrl, + }, + // keywords: postTags, + }) + + // Generate BreadcrumbList schema + const breadcrumbSchema = generateBreadcrumbList([ + { + name: 'Home', + url: baseUrl, + }, + // { + // name: categoryName, + // url: `${baseUrl}/categories/${categorySlug}`, + // }, + { + name: title, + }, + ]) + + return ( +
+
+
+ {/* A post carries at most one hero image, so this never becomes a carousel. */} + +
+
+ +
+
+ +
+

+ {title} +

+ {post.meta?.description && ( +

+ {post.meta.description} +

+ )} + {topicList.length > 0 && ( +
    + {topicList.map((topic) => ( +
  • + + {topic.title} + +
  • + ))} +
+ )} +
+
+
+
+ +
+
+ {/* scroll-mt keeps TOC anchor targets clear of the fixed header */} +
+ {content ? ( + // RichText is a Client Component that calls randomUUID(), which + // Cache Components requires to sit behind a Suspense boundary + }> + + + ) : ( +

This post has no content yet.

+ )} +
+ + +
+
+
+
+
+ ) +} + +export async function generateMetadata({ params: paramsPromise }: PageProps): Promise { + const { slug } = await paramsPromise + const doc = await queryPostBySlug({ + slug, + }) + return generateMeta({ + doc, + }) +} + +const queryPublishedPostBySlug = async ( + slug: string, +): Promise> => { + 'use cache' + cacheLife('max') + cacheTag(CollectionSlug.BlogPosts) + + const payload = await getPayload({ + config, + }) + + const { docs = [] } = await payload.find({ + collection: CollectionSlug['BlogPosts'], + draft: false, + limit: 1, + pagination: false, + overrideAccess: false, + where: { + slug: { + equals: slug, + }, + }, + }) + + if (!docs[0]) return null + + return reduceDataToBilingualLanguage(await resolveRelations(docs[0])) +} + +const queryDraftPostBySlug = async ( + slug: string, +): Promise> => { + const payload = await getPayload({ + config, + }) + + const { docs = [] } = await payload.find({ + collection: CollectionSlug['BlogPosts'], + draft: true, + limit: 1, + pagination: false, + overrideAccess: true, + where: { + slug: { + equals: slug, + }, + }, + }) + + if (!docs[0]) return null + + return reduceDataToBilingualLanguage(await resolveRelations(docs[0])) +} + +export const queryPostBySlug = cache( + async ({ slug }: { slug: string }): Promise> => { + const { isEnabled: draft } = await draftMode() + return draft ? queryDraftPostBySlug(slug) : queryPublishedPostBySlug(slug) + }, +) diff --git a/app/(frontend)/download/resume.pdf/route.tsx b/app/(frontend)/download/resume.pdf/route.tsx new file mode 100644 index 00000000..92f09093 --- /dev/null +++ b/app/(frontend)/download/resume.pdf/route.tsx @@ -0,0 +1,47 @@ +import { renderToBuffer } from '@react-pdf/renderer' +import type { NextRequest } from 'next/server' + +import { z } from 'zod' + +import { generateContentURL } from '@/lib/generateContentURL' +import { ResumeDocument } from '@/pdf' +import { buildResumeDocumentData } from '@/pdf/lib/buildResumeDocumentData' + +export async function GET(request: NextRequest) { + const localeParam = request.nextUrl.searchParams.get('locale') + const locale = localeParam === 'de' ? 'de' : 'en' + + const fileName = 'resume.pdf' + + const result = await buildResumeDocumentData({ + fileName, + fileUrl: generateContentURL({ + path: '/resume/document/latest', + }), + creationDate: new Date(), + locale, + }) + if (!result.success) { + const prettyErrors = z.prettifyError(result.error) + return new Response(prettyErrors, { + status: 404, + }) + } + + const fileBuffer = await renderToBuffer() + + const blob = new Blob( + [ + Buffer.from(fileBuffer), + ], + { + type: 'application/pdf', + }, + ) + return new Response(blob, { + status: 200, + headers: { + 'Content-Type': 'application/pdf', + }, + }) +} diff --git a/app/(frontend)/layout.tsx b/app/(frontend)/layout.tsx index 57edd38f..8a63ac2c 100644 --- a/app/(frontend)/layout.tsx +++ b/app/(frontend)/layout.tsx @@ -1,32 +1,79 @@ -import type { Metadata } from 'next' -import React, { JSX, ReactNode } from 'react' +import '#frontend.css' + +import { JSX, ReactNode, Suspense } from 'react' +import type { Metadata, Viewport } from 'next' + +import { cn } from 'tailwind-variants' import { Footer } from '@/components/Footer' import { Header } from '@/components/Header' -import { LivePreviewListener } from '@/components/LivePreviewListener' +import { DraftModeListener } from '@/components/LivePreviewListener' +import { AllProviders } from '@/components/Providers' +import { SkipToMainContent } from '@/components/SkipToMainContent' import { Toasty } from '@/components/Toasty' - -import '@styles/frontend.css' -import { Analytics } from '@vercel/analytics/next' -import { SpeedInsights } from '@vercel/speed-insights/next' +import { UmamiSuppressionFlag } from '@/components/UmamiSuppressionFlag' +import PPFrama from '@/fonts/pp-frama/next' +import PPFramaText from '@/fonts/pp-frama-text/next' +import PPSupplyMono from '@/fonts/pp-supply-mono/next' +import PPSupplySans from '@/fonts/pp-supply-sans/next' +import { fetchGlobalUserSettingsCached, fetchSiteSettingsCached } from '@/lib/fetchers' +import { generatePersonSchema, generateWebSiteSchema, JsonLd } from '@/lib/jsonLd' export default async function RootLayout({ children, }: { children: ReactNode | ReactNode[] }): Promise { + const globalUserSettings = await fetchGlobalUserSettingsCached() + const SiteSettings = await fetchSiteSettingsCached() + const personSchema = generatePersonSchema(globalUserSettings) + const webSiteSchema = generateWebSiteSchema(SiteSettings) + return ( - - + + + + - -
+ {/* + `draftMode()` is a runtime API, so it is read inside this boundary + rather than in the layout body — otherwise it blocks the whole route + from prerendering under `cacheComponents`. + */} + + + + {/* + `isTrackingSuppressed()` calls `cookies()` — a runtime API — so it + is read inside this boundary rather than in the layout body, + otherwise it blocks the whole route from prerendering under + `cacheComponents`. + */} + + + + +
{children}
-
- - + @@ -34,18 +81,52 @@ export default async function RootLayout({ } export const metadata: Metadata = { - metadataBase: new URL(process.env.NEXT_PUBLIC_SERVER_URL), - creator: 'Daniel Heene', - publisher: 'Daniel Heene', - openGraph: { - images: `/og-image.webp`, - }, + metadataBase: new URL(process.env.SERVER_URL), + title: process.env.SERVER_URL, + icons: [ - { url: `/favicon.ico`, rel: 'icon', sizes: '32x32' }, { - url: `/favicon.svg`, + rel: 'shortcut icon', + url: '/favicon.ico', + sizes: '16x16 32x32 48x48', + type: 'image/x-icon', + }, + { rel: 'icon', + url: '/favicon.svg', type: 'image/svg+xml', }, + { + rel: 'icon', + url: '/favicon-96x96.png', + type: 'image/png', + sizes: '96x96', + }, + { + rel: 'icon', + url: '/favicon-192x192.png', + type: 'image/png', + sizes: '192x192', + }, + { + rel: 'icon', + url: '/favicon-512x512.png', + type: 'image/png', + sizes: '512x512', + }, + { + rel: 'apple-touch-icon', + url: '/apple-touch-icon.png', + type: 'image/png', + sizes: '180x180', + }, ], } + +export const viewport: Viewport = { + width: 'device-width', + initialScale: 1, + maximumScale: 1, + userScalable: false, + colorScheme: 'light dark', +} diff --git a/app/(frontend)/not-found.tsx b/app/(frontend)/not-found.tsx index cddf6acd..90006966 100644 --- a/app/(frontend)/not-found.tsx +++ b/app/(frontend)/not-found.tsx @@ -1,18 +1,36 @@ import Link from 'next/link' -import React from 'react' import { Button } from '@/components/Button' +import { HeroMedia } from '@/components/HeroMedia' +import { Icon } from '@/components/Icon' +import { fetchSiteSettingsCached } from '@/lib/fetchers' + +export default async function NotFound() { + const { + general: { errorHero }, + } = await fetchSiteSettingsCached() -export default function NotFound() { return ( -
-
-

404

-

This page could not be found.

+ +
+
+

404

+

This page could not be found.

+
+
- -
+ ) } diff --git a/app/(frontend)/opengraph-image.tsx b/app/(frontend)/opengraph-image.tsx new file mode 100644 index 00000000..62eeac9a --- /dev/null +++ b/app/(frontend)/opengraph-image.tsx @@ -0,0 +1,34 @@ +import { cn } from 'tailwind-variants' +import { ImageResponse } from 'takumi-js/response' + +import { fetchGlobalUserSettingsCached, fetchSiteSettingsCached } from '@/lib/fetchers' + +export const alt = 'Website' +export const size = { + width: 1200, + height: 630, +} + +export default async function Image() { + const { + general: { description }, + } = await fetchSiteSettingsCached() + const { name } = await fetchGlobalUserSettingsCached() + + return new ImageResponse( +
+

{name}

+ {description && ( +

{description}

+ )} +
, + { + width: 1200, + height: 630, + }, + ) +} diff --git a/app/(frontend)/page.tsx b/app/(frontend)/page.tsx index 5944808c..6aba7d64 100644 --- a/app/(frontend)/page.tsx +++ b/app/(frontend)/page.tsx @@ -1,24 +1,5 @@ -import React from 'react' -import { getCachedGlobal } from '@/utilities/getGlobals' -import { SectionRenderer } from '@/components/SectionRenderer' -import { generateMeta } from '@/utilities/generateMeta' -import { ResolvingMetadata } from 'next' +import PageTemplate, { generateMetadata } from './[slug]/page' -export default async function Page() { - const sections = await Promise.all([ - getCachedGlobal('resumeHero', 1)(), - getCachedGlobal('resumeAboutMe', 1)(), - getCachedGlobal('resumeExperience', 1)(), - getCachedGlobal('resumeProjects', 1)(), - getCachedGlobal('resumeCustomers', 1)(), - getCachedGlobal('resumeContact', 1)(), - ]) +export default PageTemplate - return -} - -export async function generateMetadata(_props, parent: ResolvingMetadata) { - const globalMeta = await getCachedGlobal('settingsMeta', 1)() - const parentMeta = await parent - return generateMeta({ doc: { meta: { title: 'Portfolio' } }, globalMeta, parentMeta }) -} +export { generateMetadata } diff --git a/app/(frontend)/resume/[slug]/components/ChecksumFootnote.client.tsx b/app/(frontend)/resume/[slug]/components/ChecksumFootnote.client.tsx new file mode 100644 index 00000000..8f0c3076 --- /dev/null +++ b/app/(frontend)/resume/[slug]/components/ChecksumFootnote.client.tsx @@ -0,0 +1,57 @@ +'use client' + +import { useState } from 'react' + +import { cn } from 'tailwind-variants' + +import { Icon } from '@/components/Icon' + +export interface ChecksumEntry { + locale: string + label: string + checksum: string +} + +/** + * Truncates a hex checksum to `first…last` for compact display, e.g. + * `a1b2c3…f9e8d7`. Copy-to-clipboard still copies the full value. + */ +const truncateChecksum = (checksum: string, edge = 8): string => + checksum.length <= edge * 2 + 1 ? checksum : `${checksum.slice(0, edge)}…${checksum.slice(-edge)}` + +export const ChecksumRow = ({ label, checksum }: ChecksumEntry) => { + const [copied, setCopied] = useState(false) + + const handleCopy = async () => { + try { + await navigator.clipboard.writeText(checksum) + setCopied(true) + setTimeout(() => setCopied(false), 1500) + } catch { + // Clipboard access can fail (permissions, insecure context); the + // checksum is still visible/selectable, so this is a soft failure. + } + } + + return ( + + ) +} diff --git a/app/(frontend)/resume/[slug]/components/ResumePreviewCarousel.tsx b/app/(frontend)/resume/[slug]/components/ResumePreviewCarousel.tsx new file mode 100644 index 00000000..1e4f26cd --- /dev/null +++ b/app/(frontend)/resume/[slug]/components/ResumePreviewCarousel.tsx @@ -0,0 +1,106 @@ +'use client' + +import { useEffect, useState } from 'react' + +import Autoplay from 'embla-carousel-autoplay' +import Fade from 'embla-carousel-fade' +import useEmblaCarousel from 'embla-carousel-react' +import { cn } from 'tailwind-variants' + +import { type HeroMediaItem, HeroSlide } from '@/components/HeroMedia/HeroSlide' + +/** How long the cross-fade takes. */ +const FADE_MS = 1200 + +/** Dwell time before advancing to the next slide. */ +const DWELL_MS = 6000 + +export interface ResumePreviewCarouselProps { + items: HeroMediaItem[] + className?: string +} + +/** + * Cross-fading carousel for the EN/DE resume-preview thumbnails, with + * click-to-jump dots. + * + * A scoped sibling of `HeroCarousel` rather than an extension of it — + * `HeroCarousel` is shared full-bleed hero background infrastructure used + * across the whole site (page heroes, 404, …), and this component's dots are + * specific to having exactly one slide per locale here. Reuses `HeroSlide` + * for the actual fade/image rendering so the two stay visually consistent. + */ +export const ResumePreviewCarousel = ({ items, className }: ResumePreviewCarouselProps) => { + const [emblaRef, emblaApi] = useEmblaCarousel( + { + loop: true, + // Fade replaces translation, so dragging would fight the effect. + watchDrag: false, + duration: FADE_MS / 10, // Embla expresses duration in ~10ms ticks. + }, + [ + Fade(), + Autoplay({ + delay: DWELL_MS, + stopOnInteraction: false, + stopOnMouseEnter: false, + }), + ], + ) + + const [selected, setSelected] = useState(0) + + useEffect(() => { + if (!emblaApi) return + + const onSelect = () => setSelected(emblaApi.selectedScrollSnap()) + + onSelect() + emblaApi.on('select', onSelect) + + return () => { + emblaApi.off('select', onSelect) + } + }, [ + emblaApi, + ]) + + return ( +
+
+
+ {items.map((item, index) => ( + undefined} + priority={index === 0} + /> + ))} +
+
+ + {items.length > 1 && ( +
+ {items.map((item, index) => ( +
+ )} +
+ ) +} diff --git a/app/(frontend)/resume/[slug]/opengraph-image.tsx b/app/(frontend)/resume/[slug]/opengraph-image.tsx new file mode 100644 index 00000000..c76e4bc5 --- /dev/null +++ b/app/(frontend)/resume/[slug]/opengraph-image.tsx @@ -0,0 +1,36 @@ +import { notFound } from 'next/navigation' + +import { ImageResponse } from 'takumi-js/response' + +import { queryResumeDocumentBySlug } from './page' + +export const alt = 'Resume' +export const size = { + width: 1200, + height: 630, +} + +type Props = { + params: Promise<{ + slug: string + }> +} + +export default async function Image({ params }: Props) { + const { slug } = await params + const resume = await queryResumeDocumentBySlug(slug) + if (!resume) notFound() + + return new ImageResponse( +
+

Resume

+

+ {resume.title ?? 'Resume'} +

+
, + { + width: 1200, + height: 630, + }, + ) +} diff --git a/app/(frontend)/resume/[slug]/page.tsx b/app/(frontend)/resume/[slug]/page.tsx new file mode 100644 index 00000000..455e1f96 --- /dev/null +++ b/app/(frontend)/resume/[slug]/page.tsx @@ -0,0 +1,310 @@ +import { Suspense } from 'react' +import type { Metadata } from 'next' +import { cacheLife, cacheTag } from 'next/cache' +import Link from 'next/link' +import config from '@payload-config' +import { getPayload } from 'payload' + +import { format } from 'date-fns' +import { cn } from 'tailwind-variants' + +import { ResumeDownloadButton } from '@/blocks/ResumeDownloadsBlock/Renderer/ResumeDownloadButton' +import { Banner } from '@/components/Banner' +import type { HeroMediaItem } from '@/components/HeroMedia/HeroSlide' +import { ResumeChecksumValidator } from '@/components/ResumeCheckumValidatior/ResumeChecksumValidator' +import { fetchGlobalUserSettingsCached, fetchSiteSettingsCached } from '@/lib/fetchers' +import { placeholderParams } from '@/lib/placeholderParams' +import { CollectionData, CollectionSlug } from '@/types/collections' +import { MediaImage, ResumeDocumentData } from '@/types/payload' + +import { ChecksumEntry, ChecksumRow } from './components/ChecksumFootnote.client' +import { ResumePreviewCarousel } from './components/ResumePreviewCarousel' + +/** Anchor id for the checksum-validation section, linked from the caption above the fold. */ +const validateAnchorId = 'validate' + +/** First populated thumbnail for a locale, or `null` if that set is empty/unpopulated. */ +const firstThumbnail = ( + thumbnails: { + relationTo: 'images' + value: string | MediaImage + }[] = [], +): MediaImage | null => { + const populated = thumbnails.find((thumbnail) => typeof thumbnail.value === 'object') + return (populated?.value as MediaImage | undefined) ?? null +} + +export default async function ResumeDocumentPage({ params }: PageProps<'/resume/[slug]'>) { + const { slug } = await params + + const resume = await queryResumeDocumentBySlug(slug) + const newerVersions = await fetchNewerDocumentVersions(resume) + + const thumbnailEn = firstThumbnail(resume?.thumbnails_en) + const thumbnailDe = firstThumbnail(resume?.thumbnails_de) + + // Cross-fades between both locales' previews when both exist; falls back + // to whichever single one is populated, or nothing (the white placeholder + // stays bare) when neither is. + const previewItemsOrGaps: (HeroMediaItem | null)[] = [ + thumbnailEn + ? { + kind: 'image' as const, + id: `${thumbnailEn.id}-en`, + url: thumbnailEn.url, + alt: '', + blurDataURL: thumbnailEn.blurDataURL, + } + : null, + thumbnailDe + ? { + kind: 'image' as const, + id: `${thumbnailDe.id}-de`, + url: thumbnailDe.url, + alt: '', + blurDataURL: thumbnailDe.blurDataURL, + } + : null, + ] + const previewItems: HeroMediaItem[] = previewItemsOrGaps.filter( + (item): item is HeroMediaItem => item !== null, + ) + + const documentEn = + typeof resume?.document_en?.value === 'object' ? resume.document_en.value : null + const documentDe = + typeof resume?.document_de?.value === 'object' ? resume.document_de.value : null + + const checksumEntries: ChecksumEntry[] = [ + resume?.checksum_en && { + locale: 'en', + label: 'EN', + checksum: resume.checksum_en, + }, + resume?.checksum_de && { + locale: 'de', + label: 'DE', + checksum: resume.checksum_de, + }, + ].filter((entry): entry is ChecksumEntry => Boolean(entry)) + + const isLatest = (newerVersions ?? 0) === 0 + + return ( +
+
+
+
+
+

+ Resume Document +

+ {resume?.createdAt && ( +

+ {format(new Date(resume.createdAt), 'PP')} +

+ )} +
+ + {resume && + (isLatest ? ( + + The document version you came from is still the latest version. + + ) : ( + + There have been newer versions since you downloaded this PDF. + + ))} + +
+ {documentEn && ( +
+ + {checksumEntries + .filter((entry) => entry.locale === 'en') + .map((entry) => ( + + ))} +
+ )} + {documentDe && ( +
+ + {checksumEntries + .filter((entry) => entry.locale === 'de') + .map((entry) => ( + + ))} +
+ )} +
+ +

+ Download the resume in your preferred language above, or check out the{' '} + + always up to date web version + + . Want to make sure a PDF you already have hasn't been tampered with?{' '} + + Validate it below + + . +

+
+ +
+
+ {previewItems.length > 0 && } +
+
+
+
+
+
+

+ Validate a document +

+ Loading…
} + > + + +
+ +
+ ) +} + +export async function generateStaticParams() { + const payload = await getPayload({ + config, + }) + + const { docs = [] } = await payload.find({ + collection: CollectionSlug.ResumeDocuments, + draft: false, + pagination: false, + select: { + slug: true, + }, + }) + + if (docs.length === 0) { + return placeholderParams('/resume/[slug]') + } + + return docs.map(({ slug }) => ({ + slug, + })) +} + +export async function generateMetadata({ params }: PageProps<'/resume/[slug]'>): Promise { + const { slug } = await params + const resume = await queryResumeDocumentBySlug(slug) + + const { + general: { siteName }, + } = await fetchSiteSettingsCached() + const { name, url } = await fetchGlobalUserSettingsCached() + + const title = resume?.title ?? 'Resume' + const description = resume?.createdAt + ? `Resume document generated on ${format(new Date(resume.createdAt), 'PP')}${ + name ? ` by ${name}` : '' + }. Download the PDF or validate a copy's checksum.` + : `Resume document${name ? ` by ${name}` : ''}. Download the PDF or validate a copy's checksum.` + + return { + title, + description, + creator: name, + authors: name + ? [ + { + name, + url, + }, + ] + : undefined, + // `images` is deliberately omitted: Next auto-discovers this route's + // sibling opengraph-image.tsx and infers its URL. + openGraph: { + type: 'website', + title, + description, + siteName: siteName ?? undefined, + }, + } +} + +export const fetchNewerDocumentVersions = async (doc: ResumeDocumentData) => { + 'use cache' + cacheLife('max') + cacheTag(CollectionSlug.ResumeDocuments) + + const payload = await getPayload({ + config, + }) + const { docs } = await payload.find({ + collection: CollectionSlug.ResumeDocuments, + pagination: false, + // limit: 0, + where: { + createdAt: { + greater_than_equal: doc?.createdAt, + }, + }, + }) + return Array.isArray(docs) ? docs.length - 1 : 0 +} + +export const queryResumeDocumentBySlug = async (slug: string) => { + 'use cache' + cacheLife('max') + cacheTag(CollectionSlug.ResumeDocuments) + + const payload = await getPayload({ + config, + }) + + const { docs = [] } = await payload.find({ + collection: CollectionSlug.ResumeDocuments, + draft: false, + limit: 1, + pagination: false, + // overrideAccess: false, + where: { + slug: { + equals: slug, + }, + }, + }) + + return (docs[0] as CollectionData) || null +} diff --git a/app/(images)/api/image/sanitize-svg/route.ts b/app/(images)/api/image/sanitize-svg/route.ts deleted file mode 100644 index 69728c76..00000000 --- a/app/(images)/api/image/sanitize-svg/route.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { NextRequest, NextResponse } from 'next/server' -import { JSDOM } from 'jsdom' -import DOMPurify from 'dompurify' -import { optimize } from 'svgo' - -const window = new JSDOM('').window -const purify = DOMPurify(window) - -type RequestData = { - logo: string -} - -export async function POST(request: NextRequest) { - const { logo: requestData }: RequestData = await request.json() - - try { - const sanitizedData = purify.sanitize(requestData, { - USE_PROFILES: { svg: true }, - KEEP_CONTENT: true, - FORBID_TAGS: ['style', 'script', 'image', 'g'], - FORBID_ATTR: ['class', 'style', 'fill', 'id', 'width', 'height'], - }) - - const optimizedData = optimize(sanitizedData, { - multipass: true, - plugins: ['preset-default', 'mergePaths'], - }) - - return NextResponse.json({ - logo: optimizedData.data, - }) - } catch (_) { - return NextResponse.json({ - logo: null, - }) - } -} diff --git a/app/(payload)/admin/[[...segments]]/not-found.tsx b/app/(payload)/admin/[[...segments]]/not-found.tsx index 66bc224d..60c0985f 100644 --- a/app/(payload)/admin/[[...segments]]/not-found.tsx +++ b/app/(payload)/admin/[[...segments]]/not-found.tsx @@ -1,9 +1,10 @@ /* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ -import type { Metadata } from 'next' +import type { Metadata } from 'next' import config from '@payload-config' /* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ import { generatePageMetadata, NotFoundPage } from '@payloadcms/next/views' + import { importMap } from '../importMap' type Args = { @@ -16,9 +17,18 @@ type Args = { } export const generateMetadata = ({ params, searchParams }: Args): Promise => - generatePageMetadata({ config, params, searchParams }) + generatePageMetadata({ + config, + params, + searchParams, + }) const NotFound = ({ params, searchParams }: Args) => - NotFoundPage({ config, params, searchParams, importMap }) + NotFoundPage({ + config, + params, + searchParams, + importMap, + }) export default NotFound diff --git a/app/(payload)/admin/[[...segments]]/page.tsx b/app/(payload)/admin/[[...segments]]/page.tsx index 3a186a79..5d081a8b 100644 --- a/app/(payload)/admin/[[...segments]]/page.tsx +++ b/app/(payload)/admin/[[...segments]]/page.tsx @@ -1,9 +1,10 @@ /* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ -import type { Metadata } from 'next' +/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ +import type { Metadata } from 'next' import config from '@payload-config' -/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ import { generatePageMetadata, RootPage } from '@payloadcms/next/views' + import { importMap } from '../importMap' type Args = { @@ -15,12 +16,19 @@ type Args = { }> } -export const generateMetadata = ({ params, searchParams }: Args): Promise => { - return generatePageMetadata({ config, params, searchParams }) -} +export const generateMetadata = ({ params, searchParams }: Args): Promise => + generatePageMetadata({ + config, + params, + searchParams, + }) -const Page = ({ params, searchParams }: Args) => { - return RootPage({ config, params, searchParams, importMap }) -} +const Page = ({ params, searchParams }: Args) => + RootPage({ + config, + params, + searchParams, + importMap, + }) export default Page diff --git a/app/(payload)/admin/importMap.js b/app/(payload)/admin/importMap.js index 55c29c55..b0ef70e5 100644 --- a/app/(payload)/admin/importMap.js +++ b/app/(payload)/admin/importMap.js @@ -1,63 +1,152 @@ +import { default as default_60b9f65365606d3c11eae014a9a986c5 } from '@/fields/Title/CellWithThumbnail' +import { default as default_f4e2381ac6c67e8deed93345830aa6f3 } from '@/fields/Slug/components/FieldComponent' +import { default as default_66655c4d62aab79adfa093c97fdff25e } from '@/fields/HeroBackground/Components/FieldComponent' +import { default as default_9b6261ce8a0d1158d29e3a547520dffd } from '@/fields/Icon/Field' import { RscEntryLexicalCell as RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e } from '@payloadcms/richtext-lexical/rsc' import { RscEntryLexicalField as RscEntryLexicalField_44fe37237e0ebf4470c9990d8cb7b07e } from '@payloadcms/richtext-lexical/rsc' import { LexicalDiffComponent as LexicalDiffComponent_44fe37237e0ebf4470c9990d8cb7b07e } from '@payloadcms/richtext-lexical/rsc' -import { InlineCodeFeatureClient as InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' -import { HorizontalRuleFeatureClient as HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' -import { BlockquoteFeatureClient as BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' -import { ChecklistFeatureClient as ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' -import { OrderedListFeatureClient as OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' -import { UnorderedListFeatureClient as UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' -import { IndentFeatureClient as IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' -import { HeadingFeatureClient as HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' -import { InlineToolbarFeatureClient as InlineToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' import { FixedToolbarFeatureClient as FixedToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' import { BoldFeatureClient as BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' import { ItalicFeatureClient as ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' import { UnderlineFeatureClient as UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' -import { ParagraphFeatureClient as ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { StrikethroughFeatureClient as StrikethroughFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { AlignFeatureClient as AlignFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' import { LinkFeatureClient as LinkFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' -import { OverviewComponent as OverviewComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client' -import { MetaTitleComponent as MetaTitleComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client' -import { MetaImageComponent as MetaImageComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client' -import { MetaDescriptionComponent as MetaDescriptionComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client' -import { PreviewComponent as PreviewComponent_a8a977ebc872c5d5ea7ee689724c0860 } from '@payloadcms/plugin-seo/client' -import { default as default_7b109d3062af01ed9592366521ebe8d0 } from '../../../src/payload/components/TagInputField' -import { default as default_56ea69957ed8e2100ebbad94d87c50a3 } from '../../../src/payload/components/ExperienceRowLabel' -import { default as default_db036b5e11bd3c97dadc0c39e263ba61 } from '../../../src/payload/components/CustomerLogoField' -import { default as default_05693a968214610021ea3fff62b64334 } from '../../../src/payload/components/CustomersRowLabel' -import { default as default_25a5cf3faf5e08eebe54818d469bcd19 } from '../../../src/payload/components/Icon' -import { default as default_c7b97bbbec2f12a09b3a4e5bba180831 } from '../../../src/payload/components/Logo' -import { VercelBlobClientUploadHandler as VercelBlobClientUploadHandler_16c82c5e25f430251a3e3ba57219ff4e } from '@payloadcms/storage-vercel-blob/client' +import { ParagraphFeatureClient as ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { HeadingFeatureClient as HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { OrderedListFeatureClient as OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { UnorderedListFeatureClient as UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { ChecklistFeatureClient as ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { BlockquoteFeatureClient as BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { InlineCodeFeatureClient as InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { UploadFeatureClient as UploadFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { IconPickerFeatureClient as IconPickerFeatureClient_fe65449e66dc9de6fc636d8a4630114d } from '@/fields/Icon/lexical/feature.client' +import { TableFeatureClient as TableFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { IndentFeatureClient as IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { BlocksFeatureClient as BlocksFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { HorizontalRuleFeatureClient as HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { RelationshipFeatureClient as RelationshipFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { default as default_7ec004ac4b8008ecdc0f3947d3557629 } from '@/fields/Meta/MetaSerpField/FieldComponent' +import { default as default_72b1e1394ea6e44d1092fa18980ba9fd } from '@/fields/Meta/MetaTitleField/FieldComponent' +import { default as default_a57516f3ad5847138e2e9cad77905a21 } from '@/fields/Meta/MetaDescriptionField/FieldComponent' +import { default as default_12d303178d17fe8b227602206bf99ee0 } from '@/fields/SectionGroup/components/DescriptionComponent' +import { SeedActions as SeedActions_51b46a0db5b98e49ecd919f9ce43dfec } from '@/components/AdminPanel/SeedActions' +import { ExportListMenuItem as ExportListMenuItem_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { ImportListMenuItem as ImportListMenuItem_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { default as default_739727f92d93200cec032c1e61a6cb15 } from '@/fields/Toggle/components/FieldComponent' +import { default as default_22b4891c4f5fa760ee9f626882377967 } from '@/fields/Protected/components/FieldComponent' +import { AltField as AltField_24f51e17ebe211ea3e1b6c287f79c7cc } from '@/collections/MediaImages/components' +import { UnsplashSearch as UnsplashSearch_5e5cb6c43e4b5799bbd5217d983bc5d0 } from '@/components/AdminPanel/UnsplashSearch' +import { MediaScopeTabs as MediaScopeTabs_4629bc42a060e6d23d7d57d776e5da7b } from '@/components/AdminPanel/MediaScopeTabs' +import { default as default_390597f1ad60ab95e5b4fbebc846ccb5 } from '@/fields/SVGUpload/components/FieldComponent' +import { default as default_ee50e315ea91373bea7c5cab35816793 } from '@/fields/BilingualRichText/components/TranslateControls' +import { FormatField as FormatField_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { LimitField as LimitField_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { Page as Page_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { SortBy as SortBy_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { SortOrder as SortOrder_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { SelectionToUseField as SelectionToUseField_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { FieldsToExport as FieldsToExport_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { CollectionField as CollectionField_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { ExportPreview as ExportPreview_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { ExportSaveButton as ExportSaveButton_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { ImportPreview as ImportPreview_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { ImportSaveButton as ImportSaveButton_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { default as default_eab0cf681484e45124c7c61673362c49 } from '@/fields/Template/Components/FieldComponent' +import { default as default_184096423d48b3396fdb451647a008e7 } from '@/fields/Duration/components/FieldComponent' +import { default as default_d04b05675537c5553065b881d10ad13c } from '@/globals/PDFGeneratorSettings/components/SkillSortingField' +import { default as default_4aa97ec439b446e1ea9d86b3c25e31f2 } from '@/globals/PDFGeneratorSettings/components/GenerateButton' +import { default as default_25737e4ba5d8de2c3d84ba8d21bbf4ab } from '@/globals/SettingsGlobalUser/components/LanguagesRowLabel' +import { default as default_e59c21704d4dab5076151afaebd7876b } from '@/fields/Address/components/LabelComponent' +import { default as default_741a914cdfef7b5df9221de4f2e22dd9 } from '@/fields/Address/components/FieldComponent' +import { default as default_8a51036bc2d88e014190cca6baa944f2 } from '@/globals/SettingsGlobalUser/components/SameAsRowLabel' +import { default as default_7fee387b14eeaddab1962311bb67b35e } from '@/blocks/LegalPublisherBlock/Renderer' +import { default as default_fc395b9a25a9319ce396eaf2d5ad72f0 } from '@/blocks/LegalAuthorshipsBlock/AdminInfo' +import { default as default_dbb6fe4ada93d1133d8de1ea56eb20d6 } from '@/fields/ResumeBlock/components/FieldComponent' +import { Nav as Nav_a316a6ec12a12cd0fe58ccec01a444ca } from '@/components/AdminPanel' +import { Icon as Icon_a316a6ec12a12cd0fe58ccec01a444ca } from '@/components/AdminPanel' +import { Logo as Logo_a316a6ec12a12cd0fe58ccec01a444ca } from '@/components/AdminPanel' +import { ImportExportProvider as ImportExportProvider_cdf7e044479f899a31f804427d568b36 } from '@payloadcms/plugin-import-export/rsc' +import { AdminErrorBoundary as AdminErrorBoundary_e5a9e14bdbe97e70ba60697217fe7688 } from '@payloadcms/plugin-sentry/client' +import { S3ClientUploadHandler as S3ClientUploadHandler_f97aa6c64367fa259c5bc0567239ef24 } from '@payloadcms/storage-s3/client' +import { ScheduledJobsWidget as ScheduledJobsWidget_5a82a9e565d2b9686dc0a96e9db621b7 } from '@/widgets/ScheduledJobsWidget' +import { UmamiWidget as UmamiWidget_e8503f7e90ff08c694ccb2bb86491894 } from '@/widgets/UmamiWidget' +import { CollectionCards as CollectionCards_f9c02e79a4aed9a3924487c0cd4cafb1 } from '@payloadcms/next/rsc' +/** @type import('payload').ImportMap */ export const importMap = { + "@/fields/Title/CellWithThumbnail#default": default_60b9f65365606d3c11eae014a9a986c5, + "@/fields/Slug/components/FieldComponent#default": default_f4e2381ac6c67e8deed93345830aa6f3, + "@/fields/HeroBackground/Components/FieldComponent#default": default_66655c4d62aab79adfa093c97fdff25e, + "@/fields/Icon/Field#default": default_9b6261ce8a0d1158d29e3a547520dffd, "@payloadcms/richtext-lexical/rsc#RscEntryLexicalCell": RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e, "@payloadcms/richtext-lexical/rsc#RscEntryLexicalField": RscEntryLexicalField_44fe37237e0ebf4470c9990d8cb7b07e, "@payloadcms/richtext-lexical/rsc#LexicalDiffComponent": LexicalDiffComponent_44fe37237e0ebf4470c9990d8cb7b07e, - "@payloadcms/richtext-lexical/client#InlineCodeFeatureClient": InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#HorizontalRuleFeatureClient": HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#BlockquoteFeatureClient": BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#ChecklistFeatureClient": ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#OrderedListFeatureClient": OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#UnorderedListFeatureClient": UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#IndentFeatureClient": IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#HeadingFeatureClient": HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#InlineToolbarFeatureClient": InlineToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, "@payloadcms/richtext-lexical/client#FixedToolbarFeatureClient": FixedToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, "@payloadcms/richtext-lexical/client#BoldFeatureClient": BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, "@payloadcms/richtext-lexical/client#ItalicFeatureClient": ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, "@payloadcms/richtext-lexical/client#UnderlineFeatureClient": UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#ParagraphFeatureClient": ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#StrikethroughFeatureClient": StrikethroughFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#AlignFeatureClient": AlignFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, "@payloadcms/richtext-lexical/client#LinkFeatureClient": LinkFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/plugin-seo/client#OverviewComponent": OverviewComponent_a8a977ebc872c5d5ea7ee689724c0860, - "@payloadcms/plugin-seo/client#MetaTitleComponent": MetaTitleComponent_a8a977ebc872c5d5ea7ee689724c0860, - "@payloadcms/plugin-seo/client#MetaImageComponent": MetaImageComponent_a8a977ebc872c5d5ea7ee689724c0860, - "@payloadcms/plugin-seo/client#MetaDescriptionComponent": MetaDescriptionComponent_a8a977ebc872c5d5ea7ee689724c0860, - "@payloadcms/plugin-seo/client#PreviewComponent": PreviewComponent_a8a977ebc872c5d5ea7ee689724c0860, - "/payload/components/TagInputField#default": default_7b109d3062af01ed9592366521ebe8d0, - "/payload/components/ExperienceRowLabel#default": default_56ea69957ed8e2100ebbad94d87c50a3, - "/payload/components/CustomerLogoField#default": default_db036b5e11bd3c97dadc0c39e263ba61, - "/payload/components/CustomersRowLabel#default": default_05693a968214610021ea3fff62b64334, - "/payload/components/Icon#default": default_25a5cf3faf5e08eebe54818d469bcd19, - "/payload/components/Logo#default": default_c7b97bbbec2f12a09b3a4e5bba180831, - "@payloadcms/storage-vercel-blob/client#VercelBlobClientUploadHandler": VercelBlobClientUploadHandler_16c82c5e25f430251a3e3ba57219ff4e + "@payloadcms/richtext-lexical/client#ParagraphFeatureClient": ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#HeadingFeatureClient": HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#OrderedListFeatureClient": OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#UnorderedListFeatureClient": UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#ChecklistFeatureClient": ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#BlockquoteFeatureClient": BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#InlineCodeFeatureClient": InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#UploadFeatureClient": UploadFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@/fields/Icon/lexical/feature.client#IconPickerFeatureClient": IconPickerFeatureClient_fe65449e66dc9de6fc636d8a4630114d, + "@payloadcms/richtext-lexical/client#TableFeatureClient": TableFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#IndentFeatureClient": IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#BlocksFeatureClient": BlocksFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#HorizontalRuleFeatureClient": HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#RelationshipFeatureClient": RelationshipFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@/fields/Meta/MetaSerpField/FieldComponent#default": default_7ec004ac4b8008ecdc0f3947d3557629, + "@/fields/Meta/MetaTitleField/FieldComponent#default": default_72b1e1394ea6e44d1092fa18980ba9fd, + "@/fields/Meta/MetaDescriptionField/FieldComponent#default": default_a57516f3ad5847138e2e9cad77905a21, + "@/fields/SectionGroup/components/DescriptionComponent#default": default_12d303178d17fe8b227602206bf99ee0, + "@/components/AdminPanel/SeedActions#SeedActions": SeedActions_51b46a0db5b98e49ecd919f9ce43dfec, + "@payloadcms/plugin-import-export/rsc#ExportListMenuItem": ExportListMenuItem_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-import-export/rsc#ImportListMenuItem": ImportListMenuItem_cdf7e044479f899a31f804427d568b36, + "@/fields/Toggle/components/FieldComponent#default": default_739727f92d93200cec032c1e61a6cb15, + "@/fields/Protected/components/FieldComponent#default": default_22b4891c4f5fa760ee9f626882377967, + "@/collections/MediaImages/components#AltField": AltField_24f51e17ebe211ea3e1b6c287f79c7cc, + "@/components/AdminPanel/UnsplashSearch#UnsplashSearch": UnsplashSearch_5e5cb6c43e4b5799bbd5217d983bc5d0, + "@/components/AdminPanel/MediaScopeTabs#MediaScopeTabs": MediaScopeTabs_4629bc42a060e6d23d7d57d776e5da7b, + "@/fields/SVGUpload/components/FieldComponent#default": default_390597f1ad60ab95e5b4fbebc846ccb5, + "@/fields/BilingualRichText/components/TranslateControls#default": default_ee50e315ea91373bea7c5cab35816793, + "@payloadcms/plugin-import-export/rsc#FormatField": FormatField_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-import-export/rsc#LimitField": LimitField_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-import-export/rsc#Page": Page_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-import-export/rsc#SortBy": SortBy_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-import-export/rsc#SortOrder": SortOrder_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-import-export/rsc#SelectionToUseField": SelectionToUseField_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-import-export/rsc#FieldsToExport": FieldsToExport_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-import-export/rsc#CollectionField": CollectionField_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-import-export/rsc#ExportPreview": ExportPreview_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-import-export/rsc#ExportSaveButton": ExportSaveButton_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-import-export/rsc#ImportPreview": ImportPreview_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-import-export/rsc#ImportSaveButton": ImportSaveButton_cdf7e044479f899a31f804427d568b36, + "@/fields/Template/Components/FieldComponent#default": default_eab0cf681484e45124c7c61673362c49, + "@/fields/Duration/components/FieldComponent#default": default_184096423d48b3396fdb451647a008e7, + "@/globals/PDFGeneratorSettings/components/SkillSortingField#default": default_d04b05675537c5553065b881d10ad13c, + "@/globals/PDFGeneratorSettings/components/GenerateButton#default": default_4aa97ec439b446e1ea9d86b3c25e31f2, + "@/globals/SettingsGlobalUser/components/LanguagesRowLabel#default": default_25737e4ba5d8de2c3d84ba8d21bbf4ab, + "@/fields/Address/components/LabelComponent#default": default_e59c21704d4dab5076151afaebd7876b, + "@/fields/Address/components/FieldComponent#default": default_741a914cdfef7b5df9221de4f2e22dd9, + "@/globals/SettingsGlobalUser/components/SameAsRowLabel#default": default_8a51036bc2d88e014190cca6baa944f2, + "@/blocks/LegalPublisherBlock/Renderer#default": default_7fee387b14eeaddab1962311bb67b35e, + "@/blocks/LegalAuthorshipsBlock/AdminInfo#default": default_fc395b9a25a9319ce396eaf2d5ad72f0, + "@/fields/ResumeBlock/components/FieldComponent#default": default_dbb6fe4ada93d1133d8de1ea56eb20d6, + "@/components/AdminPanel#Nav": Nav_a316a6ec12a12cd0fe58ccec01a444ca, + "@/components/AdminPanel#Icon": Icon_a316a6ec12a12cd0fe58ccec01a444ca, + "@/components/AdminPanel#Logo": Logo_a316a6ec12a12cd0fe58ccec01a444ca, + "@payloadcms/plugin-import-export/rsc#ImportExportProvider": ImportExportProvider_cdf7e044479f899a31f804427d568b36, + "@payloadcms/plugin-sentry/client#AdminErrorBoundary": AdminErrorBoundary_e5a9e14bdbe97e70ba60697217fe7688, + "@payloadcms/storage-s3/client#S3ClientUploadHandler": S3ClientUploadHandler_f97aa6c64367fa259c5bc0567239ef24, + "@/widgets/ScheduledJobsWidget#ScheduledJobsWidget": ScheduledJobsWidget_5a82a9e565d2b9686dc0a96e9db621b7, + "@/widgets/UmamiWidget#UmamiWidget": UmamiWidget_e8503f7e90ff08c694ccb2bb86491894, + "@payloadcms/next/rsc#CollectionCards": CollectionCards_f9c02e79a4aed9a3924487c0cd4cafb1 } diff --git a/app/(payload)/api/graphql-playground/route.ts b/app/(payload)/api/graphql-playground/route.ts deleted file mode 100644 index 7b7f2799..00000000 --- a/app/(payload)/api/graphql-playground/route.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ -/* DO NOT MODIFY it because it could be re-written at any time. */ -import config from '@payload-config' -import { GRAPHQL_PLAYGROUND_GET } from '@payloadcms/next/routes' - -export const GET = GRAPHQL_PLAYGROUND_GET(config) diff --git a/app/(payload)/api/graphql/route.ts b/app/(payload)/api/graphql/route.ts deleted file mode 100644 index c2723e43..00000000 --- a/app/(payload)/api/graphql/route.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ -/* DO NOT MODIFY it because it could be re-written at any time. */ -import config from '@payload-config' -import { GRAPHQL_POST } from '@payloadcms/next/routes' - -export const POST = GRAPHQL_POST(config) diff --git a/app/(payload)/api/og/route.tsx b/app/(payload)/api/og/route.tsx deleted file mode 100644 index 07c82a72..00000000 --- a/app/(payload)/api/og/route.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { ImageResponse } from 'next/og' -// App router includes @vercel/og. -// No need to install it. - -export async function GET(request: Request) { - try { - const { searchParams } = new URL(request.url) - - // ?title= - const hasTitle = searchParams.has('title') - // const hasDescription = searchParams.has('description') - const hasImage = searchParams.has('image') - const title = hasTitle ? searchParams.get('title')?.slice(0, 100) : null - // const description = hasDescription ? searchParams.get('description') : null - const image = hasImage ? searchParams.get('image') : null - - // const imageData = await fetch(image).then(async (res) => { - // const arrayBuffer = await res.arrayBuffer() - // return `data:${res.headers.get('content-type')};base64,${Buffer.from(arrayBuffer).toString('base64')}` - // }) - // - - const img = new URL(`/_next/image`, request.url) - img.searchParams.set('url', image) - img.searchParams.set('w', '1200') - img.searchParams.set('q', '85') - - return new ImageResponse( - ( - <div - style={{ - backgroundImage: `url("${img.toString()}")`, - backgroundPosition: 'center', - backgroundSize: 'cover', - width: '100%', - height: '100%', - display: 'flex', - flexDirection: 'column', - justifyContent: 'center', - alignItems: 'center', - }} - > - <div style={{ fontSize: '30px', color: '#fff' }}>{title}</div> - </div> - ), - { - width: 1200, - height: 630, - }, - ) - } catch (_e: unknown) { - return new Response(`Failed to generate the image`, { - status: 500, - }) - } -} diff --git a/app/(payload)/custom.scss b/app/(payload)/custom.scss deleted file mode 100644 index 25d682e3..00000000 --- a/app/(payload)/custom.scss +++ /dev/null @@ -1,108 +0,0 @@ -//@tailwind base; - -@import "@styles/payload.css"; - -html { - font-size: 16px; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - - -body { - @apply bg-background text-foreground; -} - -a { - @apply underline ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2; -} - -.radio-input { - .radio-input__styled-radio::before { - box-sizing: content-box; - } -} - - -div.field-type.text > [for='field-meta__title'], -div.field-type.textarea > [for='field-meta__description'] { - display: none; -} - -div.field-type.rich-text-lexical { - background-color: rgb(255 255 255 / 1%); - - .editor { - min-height: 300px; - - .editor { - min-height: unset - } - } -} - -.tabs-field__tabs .tabs-field__tab-button { - @apply font-pp-supply-mono text-lg tracking-wider; -} - -.doc-header .doc-header__title { - @apply font-pp-supply-mono text-4xl; -} - -.btn { - @apply inline-flex justify-center items-center min-h-10 no-underline m-0; - - &.btn--style-primary { - @apply bg-primary text-white; - - &:not(.btn--disabled):hover { - @apply bg-primary-500; - } - - &.btn--disabled { - @apply bg-primary saturate-50 contrast-50; - } - } - - &.btn--style-secondary { - @apply bg-transparent text-white; - - &:not(.btn--disabled):hover { - @apply bg-transparent; - } - - &.btn--disabled { - @apply bg-gray-500 saturate-50 contrast-50 text-white; - } - } - - .btn__content { - @apply pt-px font-black font-mono uppercase; - } -} - -.tabs-field__tab-button.tabs-field__tab-button--active { - - &::after { - @apply bg-primary-500; - } -} - -.list-header, -.file-field__dropzoneButtons { - @apply items-center; -} - -.login__form__inputWrap + a { - @apply font-mono text-sm opacity-60; -} - -.login__form__inputWrap > .field-type input { - @apply font-mono text-base; -} - -label.field-label:not(.unstyled) { - @apply font-mono text-base; -} - - diff --git a/app/(payload)/layout.tsx b/app/(payload)/layout.tsx index 8df141ae..8fef763a 100644 --- a/app/(payload)/layout.tsx +++ b/app/(payload)/layout.tsx @@ -2,18 +2,27 @@ /* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ import config from '@payload-config' import '@payloadcms/next/css' + +import type React from 'react' import type { ServerFunctionClient } from 'payload' import { handleServerFunctions, RootLayout } from '@payloadcms/next/layouts' -import React from 'react' + +import { cn } from 'tailwind-variants' + +import PPFrama from '@/fonts/pp-frama/next' +import PPFramaText from '@/fonts/pp-frama-text/next' +import PPSupplyMono from '@/fonts/pp-supply-mono/next' +import PPSupplySans from '@/fonts/pp-supply-sans/next' import { importMap } from './admin/importMap.js' -import './custom.scss' + +import '@/styles/payload.css' type Args = { children: React.ReactNode } -const serverFunction: ServerFunctionClient = async function (args) { +const serverFunction: ServerFunctionClient = async (args) => { 'use server' return handleServerFunctions({ ...args, @@ -23,7 +32,20 @@ const serverFunction: ServerFunctionClient = async function (args) { } const Layout = ({ children }: Args) => ( - <RootLayout config={config} importMap={importMap} serverFunction={serverFunction}> + <RootLayout + config={config} + importMap={importMap} + serverFunction={serverFunction} + htmlProps={{ + className: cn([ + PPSupplySans.variable, + PPSupplyMono.variable, + PPFrama.variable, + PPFramaText.variable, + ]), + suppressHydrationWarning: true, + }} + > {children} </RootLayout> ) diff --git a/app/global-error.tsx b/app/global-error.tsx new file mode 100644 index 00000000..2f643f21 --- /dev/null +++ b/app/global-error.tsx @@ -0,0 +1,60 @@ +'use client' + +import { useEffect } from 'react' + +import * as Sentry from '@sentry/nextjs' + +/** + * Root error boundary. + * + * Next only reports errors caught here if they are forwarded explicitly — + * without this, a crash in the root layout or a Server Component render would + * never reach Sentry. It replaces the entire document, so it carries its own + * html/body. + */ +export default function GlobalError({ + error, + reset, +}: { + error: Error & { + digest?: string + } + reset: () => void +}) { + useEffect(() => { + Sentry.captureException(error) + }, [ + error, + ]) + + return ( + <html lang="en"> + <body className="flex min-h-svh flex-col items-center justify-center gap-6 bg-background p-8 text-foreground"> + <div className="flex max-w-md flex-col items-center gap-4 text-center"> + <h1 className="font-mono text-2xl font-semibold">Something went wrong</h1> + <p className="text-muted-foreground"> + The error has been reported. Try again, or head back to the homepage. + </p> + {error.digest && ( + <p className="font-mono text-xs text-muted-foreground/70">Reference: {error.digest}</p> + )} + <div className="mt-2 flex items-center gap-3"> + <button + type="button" + onClick={reset} + className="rounded-md border border-border px-4 py-2 font-mono text-sm transition-colors hover:bg-muted" + > + Try again + </button> + <a + href="/" + className="rounded-md border border-border px-4 py-2 font-mono text-sm transition-colors hover:bg-muted" + > + Homepage + </a> + </div> + </div> + </body> + </html> + ) +} diff --git a/app/manifest.ts b/app/manifest.ts new file mode 100644 index 00000000..7e34af70 --- /dev/null +++ b/app/manifest.ts @@ -0,0 +1,35 @@ +import type { MetadataRoute } from 'next' + +export default async function manifest(): Promise<MetadataRoute.Manifest> { + return { + start_url: '/', + display: 'standalone', + background_color: '#000000', + theme_color: '#1D27F2', + icons: [ + { + src: '/favicon.ico', + sizes: '16x16 32x32 48x48', + type: 'image/x-icon', + }, + { + src: '/favicon-96x96.png', + sizes: '96x96', + type: 'image/png', + purpose: 'maskable', + }, + { + src: '/favicon-192x192.png', + sizes: '192x192', + type: 'image/png', + purpose: 'maskable', + }, + { + src: '/favicon-512x512.png', + sizes: '512x512', + type: 'image/png', + purpose: 'maskable', + }, + ], + } +} diff --git a/app/next/exit-preview/GET.ts b/app/next/exit-preview/GET.ts deleted file mode 100644 index 8829e54c..00000000 --- a/app/next/exit-preview/GET.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { draftMode } from 'next/headers' - -export async function GET(): Promise<Response> { - await draftMode().then((draft) => draft.disable()) - return new Response('Draft mode is disabled') -} diff --git a/app/next/preview/route.ts b/app/next/preview/route.ts deleted file mode 100644 index fed2b84c..00000000 --- a/app/next/preview/route.ts +++ /dev/null @@ -1,37 +0,0 @@ -import jwt from 'jsonwebtoken' -import { draftMode } from 'next/headers' -import { redirect } from 'next/navigation' - -const payloadToken = 'payload-token' - -export async function GET( - req: Request & { - cookies: { - get: (name: string) => { - value: string - } - } - }, -): Promise<Response> { - const token = req.cookies.get(payloadToken)?.value - const { searchParams } = new URL(req.url) - const path = searchParams.get('path') - - if (!path) { - return new Response('No path provided', { status: 404 }) - } - - if (!token) { - new Response('You are not allowed to preview this page', { status: 403 }) - } - - const user = jwt.decode(token, process.env.PAYLOAD_SECRET) - - if (!user) { - await draftMode().then((draft) => draft.disable()) - return new Response('You are not allowed to preview this page', { status: 403 }) - } - - await draftMode().then((draft) => draft.enable()) - redirect(path) -} diff --git a/app/robots.ts b/app/robots.ts new file mode 100644 index 00000000..bb594633 --- /dev/null +++ b/app/robots.ts @@ -0,0 +1,35 @@ +import type { MetadataRoute } from 'next' + +export default async function robots(): Promise<MetadataRoute.Robots> { + return { + rules: [ + { + userAgent: '*', + disallow: [ + '/', + ], + }, + { + userAgent: [ + 'Googlebot', + 'Bingbot', + 'YandexBot', + 'DuckDuckBot', + 'Applebot', + ], + allow: [ + '/', + ], + disallow: [ + '/admin', + '/api', + '/_next', + '/static', + '/.well-known', + ], + }, + ], + host: process.env.SERVER_URL, + sitemap: `${process.env.SERVER_URL}/sitemap.xml`, + } +} diff --git a/app/sitemap.ts b/app/sitemap.ts new file mode 100644 index 00000000..6cbd0b76 --- /dev/null +++ b/app/sitemap.ts @@ -0,0 +1,84 @@ +import type { MetadataRoute } from 'next' +import config from '@payload-config' +import { getPayload } from 'payload' + +import { generateContentURL } from '@/lib/generateContentURL' +import { CollectionSlug } from '@/types/collections' + +type RenderedCollection = + | CollectionSlug['Pages'] + | CollectionSlug['BlogPosts'] + | CollectionSlug['BlogTopics'] + +export default async function sitemap(): Promise<MetadataRoute.Sitemap> { + const pages = await getCollectionSitemapEntries(CollectionSlug['Pages']) + const posts = await getCollectionSitemapEntries(CollectionSlug['BlogPosts'], true) + const tags = await getCollectionSitemapEntries(CollectionSlug['BlogTopics'], true) + + return [ + ...pages, + ...posts, + ...tags, + ] +} + +async function getCollectionData(collection: RenderedCollection): Promise< + Array<{ + slug: string + updatedAt: string + }> +> { + const payload = await getPayload({ + config, + }) + + const { docs } = await payload.find({ + collection, + limit: 10000, + pagination: false, + // BlogTopics has no drafts/versions system, so `draft` is not a valid + // query option for it (see src/collections/BlogTopics/index.ts). + ...(collection === CollectionSlug['BlogTopics'] + ? {} + : { + draft: false, + }), + where: {}, + select: { + slug: true, + updatedAt: true, + }, + sort: 'updatedAt', + }) + + return docs.map(({ slug, updatedAt }) => ({ + slug, + updatedAt, + })) +} + +async function getCollectionSitemapEntries<T extends RenderedCollection>( + collection: T, + createIndex: boolean = false, +) { + const data = await getCollectionData(collection) + const index = createIndex + ? [ + { + slug: '', + updatedAt: data?.[0]?.updatedAt ?? new Date().toISOString(), + }, + ] + : [] + + return [ + ...index, + ...data, + ].map(({ slug, updatedAt }) => ({ + url: generateContentURL({ + collection, + slug, + }), + lastModified: updatedAt, + })) +} diff --git a/biome.json b/biome.json new file mode 100644 index 00000000..8d2ccec3 --- /dev/null +++ b/biome.json @@ -0,0 +1,195 @@ +{ + "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "includes": [ + "/*.js", + "/*.jsx", + "/*.ts", + "/*.tsx", + "/*.json", + "**/*.js", + "**/*.jsx", + "**/*.ts", + "**/*.tsx", + "**/*.json", + "**/*.jsonc", + "**/*.css", + "!!**/dist", + "!!**/build", + "!!**/.cache", + "!!**/.next", + "!!**/.turbo", + "!!**/node_modules", + "!!**/coverage", + "!!**/playwright-report", + "!!**/test-results", + "!!**/next-env.d.ts", + "!!**/admin/importMap.js" + ], + "ignoreUnknown": false + }, + "formatter": { + "enabled": true, + "formatWithErrors": true, + "indentStyle": "space", + "indentWidth": 2, + "lineEnding": "lf", + "lineWidth": 100, + "attributePosition": "auto", + "bracketSameLine": false, + "bracketSpacing": true, + "expand": "always", + "useEditorconfig": true, + "includes": [ + "**", + "!**/.tmp", + "!**/.git", + "!**/.hg", + "!**/.pnp.*", + "!**/.svn", + "!**/.yarn/**", + "!**/build", + "!**/dist", + "!**/node_modules", + "!**/temp", + "!**/docs/**", + "!**/tsconfig.json", + "!**/src/types/payload.ts", + "!**/README.md" + ] + }, + "linter": { + "enabled": true, + "domains": { + "react": "recommended", + "next": "recommended", + "project": "recommended", + "types": "recommended" + }, + "rules": { + "preset": "recommended", + "style": { + "useImportType": { + "level": "off" + } + }, + "suspicious": { + "noArrayIndexKey": "off", + "noUselessEscapeInString": "off" + }, + "a11y": { + "noSvgWithoutTitle": "off", + "useValidAriaRole": { + "level": "warn", + "options": { + "ignoreNonDom": true, + "allowInvalidRoles": [ + "application", + "draggable" + ] + } + }, + "noNoninteractiveTabindex": { + "level": "warn" + } + } + } + }, + "css": { + "parser": { + "tailwindDirectives": true, + "cssModules": true + } + }, + "javascript": { + "formatter": { + "enabled": true, + "jsxQuoteStyle": "double", + "quoteProperties": "asNeeded", + "trailingCommas": "all", + "semicolons": "asNeeded", + "arrowParentheses": "always", + "bracketSameLine": false, + "quoteStyle": "single", + "attributePosition": "auto", + "bracketSpacing": true, + "trailingNewline": true + } + }, + "json": { + "formatter": { + "enabled": true + } + }, + "html": { + "formatter": { + "enabled": true, + "indentScriptAndStyle": false, + "selfCloseVoidElements": "always" + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": { + "level": "on", + "options": { + "groups": [ + [ + ":URL:" + ], + ":BLANK_LINE", + [ + ":BUN:", + ":NODE:" + ], + ":BLANK_LINE:", + "react*", + "react/**", + "@react*", + "@react*/**", + "react-*", + "react-*/**", + "next*", + "next/**", + "next-*", + "next-*/**", + "@payload-config", + "payload", + "@payloadcms/**", + "payload-*", + ":BLANK_LINE:", + [ + ":PACKAGE:", + ":PACKAGE_WITH_PROTOCOL:", + "!@/**", + "!react*", + "!@react*", + "!next*", + "!@next*", + "!payload*", + "!@payloadcms/**", + "!@payload*" + ], + ":BLANK_LINE:", + [ + ":ALIAS:", + "@/**" + ], + ":BLANK_LINE:", + ":PATH:", + ":BLANK_LINE:", + ":STYLE:" + ] + } + } + } + } + } +} diff --git a/commitlint.config.mjs b/commitlint.config.mjs new file mode 100644 index 00000000..1b79c122 --- /dev/null +++ b/commitlint.config.mjs @@ -0,0 +1,59 @@ +/** + * Conventional Commits, enforced on the commit-msg hook. + * + * The repo already follows this convention (28 of the last 30 commits matched + * before this was added), so the rules mostly stop drift rather than impose a + * new style. + * + * Scopes are intentionally unrestricted: the ones in use — fonts, storybook, + * ci, sse, richtext, pdf, codeblock, admin — track areas of the codebase that + * keep changing, and a fixed allowlist would need editing more often than it + * would catch a genuine mistake. + * + * @type {import('@commitlint/types').UserConfig} + */ +export default { + extends: [ + '@commitlint/config-conventional', + ], + rules: { + /** + * Bodies are where the *why* lives, so the subject can stay short. 100 is + * the conventional default; the header limit is the one that actually + * bites, and wrapping is handled by the editor rather than a hard error. + */ + 'body-max-line-length': [ + 0, + 'always', + ], + 'footer-max-line-length': [ + 0, + 'always', + ], + + /** Longer than this stops being scannable in `git log --oneline`. */ + 'header-max-length': [ + 2, + 'always', + 100, + ], + + 'type-enum': [ + 2, + 'always', + [ + 'build', + 'chore', + 'ci', + 'docs', + 'feat', + 'fix', + 'perf', + 'refactor', + 'revert', + 'style', + 'test', + ], + ], + }, +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..b3028e0e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,105 @@ +x-healthcheck-props: &healthcheck-props + interval: 5s + timeout: 20s + retries: 10 + + + +services: + mongo: + image: mongo:8 + restart: always + ports: + - "27017:27017" + volumes: + - "mongo-data:/data/db" + command: --storageEngine=wiredTiger + healthcheck: + <<: *healthcheck-props + test: [ "CMD-SHELL", "echo 'db.runCommand(\"ping\").ok' | mongosh 127.0.0.1:27017/productiondb --quiet | grep -q 1" ] + + redis: + image: redis:8-alpine + restart: always + ports: + - "6379:6379" + volumes: + - "redis-data:/data" + # `notify-keyspace-events Exe` is required by the Next cache handler + # (@trieb.work/nextjs-turbo-redis-cache): it subscribes to key-event + # notifications to keep its tag manifest in sync across instances, and + # refuses to start when they are disabled. + command: redis-server --maxmemory-policy noeviction --notify-keyspace-events Exe + healthcheck: + <<: *healthcheck-props + test: [ "CMD-SHELL", "redis-cli PING" ] + + storage: + image: rustfs/rustfs:latest + restart: always + ports: + - "9000:9000" + - "9001:9001" + environment: + RUSTFS_ACCESS_KEY: ${S3_ACCESS_KEY} + RUSTFS_SECRET_KEY: ${S3_SECRET_KEY} + volumes: + - "storage-data:/data" + healthcheck: + <<: *healthcheck-props + test: [ "CMD-SHELL", "curl -f http://127.0.0.1:9000/health" ] + + create-bucket: + image: minio/mc:RELEASE.2025-08-13T08-35-41Z + restart: "no" + depends_on: + storage: + condition: service_healthy + environment: + S3_ACCESS_KEY: ${S3_ACCESS_KEY} + S3_SECRET_KEY: ${S3_SECRET_KEY} + S3_BUCKET: ${S3_BUCKET} + configs: + - source: cors.json + target: /tmp/cors.json + entrypoint: + - /bin/sh + - -c + - | + set -e + + until mc alias set storage http://storage:9000 $${S3_ACCESS_KEY} $${S3_SECRET_KEY}; do + echo 'storage is not ready yet, retrying in 2 seconds...' + sleep 2 + done + + echo 'create bucket if not exists' + mc mb storage/$${S3_BUCKET} --ignore-existing + + echo 'set policy PUBLIC (download only) for bucket' + mc anonymous set download storage/$${S3_BUCKET} + + echo 'set cors rules' + mc cors set storage/$${S3_BUCKET} /tmp/cors.json + +configs: + cors.json: + content: | + <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2020-10-22/"> + <CORSRule> + <AllowedOrigin>http://localhost:3000</AllowedOrigin> + <AllowedOrigin>https://daniel.heene.io</AllowedOrigin> + <AllowedOrigin>https://daniel.heene.dev</AllowedOrigin> + <AllowedOrigin>https://daniel.heene.nexus</AllowedOrigin> + <AllowedMethod>GET</AllowedMethod> + <AllowedMethod>PUT</AllowedMethod> + <AllowedMethod>POST</AllowedMethod> + <AllowedMethod>HEAD</AllowedMethod> + <AllowedHeader>*</AllowedHeader> + </CORSRule> + </CORSConfiguration> + +volumes: + mongo-data: + redis-data: + storage-data: diff --git a/docs/superpowers/specs/2026-08-23-simplify-linkfield-design.md b/docs/superpowers/specs/2026-08-23-simplify-linkfield-design.md new file mode 100644 index 00000000..c71dc261 --- /dev/null +++ b/docs/superpowers/specs/2026-08-23-simplify-linkfield-design.md @@ -0,0 +1,103 @@ +# Simplify LinkField — Design Spec + +## Goal + +Replace the current `LinkField` (custom ReactSelect target picker, pupa-template label with live `{title}` substitution, optional appearance select) with a simpler, mostly-declarative field built from stock Payload field types plus the existing `IconField`. + +## Current state (for reference) + +`src/fields/Link/index.ts` builds a `group` field with: +- Row 1: `reference` (custom `TargetField` component — combined document/URL ReactSelect, 75%) + `newTab` checkbox (25%) +- Hidden `url` text field, written by `TargetField` +- Row 2: `iconBefore` (IconField, 15%) + `label` (`TemplateField`, pupa `{title}` template, custom `LabelField` component, 70%) + `iconAfter` (IconField, 15%) +- `resolvedLabel`: virtual field, `afterRead` hook renders the `label` template against the resolved target's title +- `iconOnly` checkbox (own row) +- Optional `appearance` select, gated by `withAppearanceSelect` (never actually turned on at any real call site) + +## New design + +One `group` field, three rows, all using stock Payload field types except `IconField` (kept as-is). + +### Row 1 (`type: 'row'`) +| Field | Width | Type | Notes | +|---|---|---|---| +| `linkType` | 50% | `select` | Options: `Linked document` (`reference`) / `Custom URL` (`url`). `defaultValue: 'reference'`, `required: true`. Drives which field row 2 shows. **Naming note:** lexical's own built-in `LinkFeature` already has a base field named `linkType` (values `'internal'`/`'custom'`). Because `LinkField({...}).fields` is spread as an *array* into `LinkFeature({ fields: [...LinkField().fields] })` (see `src/fields/RichText/index.ts`), lexical's `transformExtraFields` **replaces** its base fields with these rather than merging — so there is never a collision at runtime between two different `linkType` fields on the same node. This repo's `linkType` reuses the name deliberately, with `'reference'` standing in for lexical's `'internal'` and `'url'` for its `'custom'`. `creditsLinkValidation.test.ts` previously asserted `linkType` must be *absent* from `LinkField()`'s sanitized fields, as proof the replacement was happening; that assertion is rewritten (see Consumer updates) to assert `linkType` is present with this field's own values instead. | +| `newTab` | 25% | `checkbox` | "Open in new tab" — unchanged from today. | +| `iconOnly` | 25% | `checkbox` | "Icon only" — moved up from its old standalone row; same label/description as today. | + +### Row 2 (`type: 'row'`) +Both fields occupy the row but only one is ever visible, switched by `linkType`: + +| Field | Type | Condition | Notes | +|---|---|---|---| +| `reference` | `relationship` | shown when resolved mode is `reference` (see fallback below) | Stock admin UI, no custom `Field` component. `relationTo: [pages, blogPosts, blogTopics]`, `maxDepth: 1`. Replaces the current custom `TargetField`/`fetchLinkTargetOptions` picker entirely. | +| `url` | `text` | shown when resolved mode is `url` | Label "Custom URL". Validated by the existing `isValidCustomURL`. | + +**Legacy-data fallback.** `linkType` is a new field — documents saved before this change have no value for it. Both fields' `admin.condition` resolve the effective mode the same way, shared via one helper: + +```ts +// src/fields/Link/lib/resolveLinkTypeMode.ts +export const resolveLinkTypeMode = (siblingData: { linkType?: string; url?: string }): 'reference' | 'url' => { + if (siblingData?.linkType === 'url' || siblingData?.linkType === 'reference') return siblingData.linkType + return siblingData?.url ? 'url' : 'reference' +} +``` + +`reference`'s condition is `(_, siblingData) => resolveLinkTypeMode(siblingData) === 'reference'`; `url`'s is the `=== 'url'` counterpart. This is a UI-only fallback for documents that predate `linkType` — it does not write `linkType` back; the field simply saves an explicit value the next time the document is edited and saved. No migration or `afterRead` backfill is needed. + +Each field's own `validate` checks the resolved mode (via the same helper, reading `siblingData`) and requires a value only when it is the active mode — so an inactive, hidden field never blocks save. + +### Row 3 (`type: 'row'`) +| Field | Width | Type | Notes | +|---|---|---|---| +| `iconBefore` | 15% | `IconField({ name: 'iconBefore' })` | Unchanged. | +| `label` | 70% | `text` | **Plain text input.** Required, no default value, no template substitution. When `iconOnly` is checked this becomes the field whose value is used as the link's `aria-label` (already true today via `CMSLink`'s `iconOnly` branch — no change needed there beyond removing `resolvedLabel`). | +| `iconAfter` | 15% | `IconField({ name: 'iconAfter' })` | `admin.condition: (_, siblingData) => !siblingData?.iconOnly` — the field (and its layout cell) disappears from row 3 when Icon only is checked. | + +When `iconAfter` is hidden by the condition, `label` keeps its own configured width (70%); Payload's row layout does not need `label` to reflow to fill the gap — this matches how conditional fields already behave elsewhere in the codebase (e.g. `Media/index.ts`). + +### Removed entirely +- `appearance` field, `appearanceOptions` export, `withAppearanceSelect` config option (no real call site sets it to `true` — confirmed via repo-wide search; only its own now-obsolete test does). +- `resolvedLabel` virtual field and its `afterRead` hook wiring. +- `src/fields/Link/hooks/renderLinkLabel.ts` + `renderLinkLabel.test.ts`. +- `src/fields/Link/components/LabelField.tsx` + `LabelField.client.tsx`. +- `src/fields/Link/components/TargetField.tsx` + `TargetField.client.tsx`. +- `src/fields/Link/lib/resolveTitleFromOptions.ts` + test. +- `src/fields/Link/lib/fetchLinkTargetOptions.ts` + test. +- `src/fields/Link/lib/deriveLinkTitle.ts` + test (only consumer was the template-title machinery being removed). +- `src/fields/Link/lib/siblingPath.ts` + test (only consumers were `LabelField.client.tsx` and `TargetField.client.tsx`, both removed). +- The stray `removin` token currently sitting mid-file at `src/fields/Link/index.ts:102` (pre-existing artifact, unrelated to any real code path) is deleted as part of the rewrite. + +### Added +- `src/fields/Link/lib/resolveLinkTypeMode.ts` (+ test) — the shared mode-resolution helper described above. + +### Kept as-is +- `IconField` usage (`iconBefore`, `iconAfter`). +- `isValidCustomURL` validation logic. +- `resolveLinkTarget.ts` / `LinkFieldDataLean` / `LinkTarget` types — still the shape `CMSLink` and every consumer read link data through. `resolveLinkTarget` still switches on `reference` vs `url` being populated, independent of `linkType` (which only exists to drive the *editing* UI, not the resolved-href logic). + +## Consumer updates + +- **`src/components/Link/index.tsx` (`CMSLink`)**: drop `resolvedLabel` from destructuring and the `text = resolvedLabel || label` fallback — render `label` directly. `iconOnly`/aria-label/icon rendering logic is unchanged. +- **`src/types/payload.ts`**: regenerated via `payload generate:types` after the field change (adds `linkType`, drops `resolvedLabel` and `appearance`). +- **`src/lib/unsplash/buildCreditsValue.ts`**: its `linkNode` helper writes `{ reference: null, url, newTab: true, label: text }` — add `linkType: 'url'`. Update its long comment block (enumerates the flat field list and explicitly says "no `linkType` field"; that line is now wrong and must be corrected to describe the replaced-but-reused name). +- **`src/lib/unsplash/buildCreditsValue.test.ts`**: the `fields` equality assertions (`toEqual({ reference: null, url, newTab: true, label })`) need `linkType: 'url'` added to each expected object. The test titled `'emits no linkType field — the caption editor replaces the base link fields'` is rewritten to assert the opposite: every link node's `fields.linkType` equals `'url'`. Rename the test to describe what it now checks (e.g. `'emits LinkField's own linkType — not lexical's default internal/custom values'`). +- **`src/lib/unsplash/creditsLinkValidation.test.ts`**: the sanitized-schema assertion `expect(names).not.toContain('linkType')` is inverted to `expect(names).toContain('linkType')` (proving the replacement happened, now via presence with this field's own values rather than absence). The `arrayContaining([...])` list gains `'linkType'`. The last test in the file (`'a link node that omits label...'`) already passes `linkType: 'custom'` in its input `data` — that literal must become `linkType: 'url'`, since `'custom'` is lexical's own vocabulary and is not one of this field's valid `select` options (an invalid option would now fail sanitized validation instead of passing through). Every other `validateLinkFields(linkFields, {...})` call in this file that omits `linkType` from its `data` object should keep omitting it *only* if the intent is to test the missing-value case; the "reports no validation errors" test's `link.fields` already come from `buildCreditsValue`, so once that emits `linkType: 'url'` this test needs no further change beyond what flows through automatically. +- **`src/lib/unsplash/creditsRendering.test.tsx`**: check for any `fields:` literal enumerating the flat shape and add `linkType: 'url'` if present. +- **`src/lib/seed/pages.ts:184-189`**: the footer/legal link seed builder writes `{ newTab, label, url, reference: null }` directly. Add `linkType: 'url'` to this literal so seeded data is valid under the new required `linkType` field. +- **`src/lib/seed/lexical.ts`**: comment references `LinkField().fields` shape — update if it enumerates specific field names. +- **`src/fields/Link/index.test.ts`**: rewrite. Remove assertions about `appearance`/`withAppearanceSelect`, `resolvedLabel` virtual field, and the old `type`/`icon` fields (already-obsolete checks). Add assertions for: `linkType` select with correct options/default, `reference`/`url` conditional visibility wiring (including the legacy-data fallback), `label` being a plain required text field with no `defaultValue`, `iconAfter`'s `admin.condition` hiding it when `iconOnly` is true. +- **`src/fields/LinkGroup/index.ts`**, **`src/globals/SiteSettings/index.ts`**: both call `LinkField()` with no overrides — no changes needed beyond the field shape change itself. +- **`src/fields/RichText/index.ts:113-117`**: spreads `LinkField().fields` into `LinkFeature` — no changes needed beyond the field shape change itself (no field-name-specific logic here). + +## Testing + +- `src/fields/Link/index.test.ts`: primary coverage of the new field shape (see above). +- `src/fields/Link/lib/resolveLinkTypeMode.test.ts`: new unit test for the fallback helper — explicit `linkType` wins; absent `linkType` with `url` set infers `'url'`; absent `linkType` with neither set infers `'reference'`. +- `src/lib/unsplash/*.test.ts`: verify they still pass against the new field list; update fixtures/comments referencing removed fields. +- Manual/admin-UI check not required for this plan (no browser testing requested), but the plan's tasks should leave the codebase typechecking and all existing tests green. + +## Out of scope + +- No changes to `IconField`, `isValidCustomURL`, `resolveLinkTarget`, or how `CMSLink` resolves hrefs. +- No DB migration for existing production data — handled entirely by the `resolveLinkTypeMode` UI fallback described above. diff --git a/e2e/smoke.spec.ts b/e2e/smoke.spec.ts new file mode 100644 index 00000000..ab05dd36 --- /dev/null +++ b/e2e/smoke.spec.ts @@ -0,0 +1,38 @@ +import { expect, test } from '@playwright/test' + +/** + * Smoke tests only — the site is CMS-driven and the database may be empty, + * so these assert structural health (status codes, shell rendering), not + * content. Content-level E2E requires a seed script (future work). + */ +test.describe('smoke', () => { + test('homepage responds and renders a document', async ({ page }) => { + const response = await page.goto('/') + expect(response?.status()).toBeLessThan(400) + await expect(page.locator('body')).toBeVisible() + await expect(page).toHaveTitle(/.+/) + }) + + test('admin panel serves the Payload login screen', async ({ page }) => { + // Target /admin/login directly: the unauthenticated redirect from /admin + // uses the absolute SERVER_URL, so this only works when the browser + // origin matches it (the Docker flow uses host networking for this). + await page.goto('/admin/login') + // An empty database redirects further to /admin/create-first-user. + await expect(page).toHaveURL(/\/admin\/(login|create-first-user)/) + await expect(page.locator('form')).toBeVisible() + }) + + test('unknown route returns a 404 page', async ({ page }) => { + const response = await page.goto('/this-route-does-not-exist-abc123') + expect(response?.status()).toBe(404) + }) + + test('no uncaught page errors on the homepage', async ({ page }) => { + const errors: string[] = [] + page.on('pageerror', (error) => errors.push(error.message)) + await page.goto('/') + await page.waitForLoadState('networkidle') + expect(errors).toEqual([]) + }) +}) diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index 2cca03c6..00000000 --- a/eslint.config.js +++ /dev/null @@ -1,61 +0,0 @@ -import eslint from '@eslint/js' -import tseslint from 'typescript-eslint' - -export default [ - { - languageOptions: { - globals: { - process: 'readable', - }, - }, - }, - eslint.configs.recommended, - ...tseslint.configs.recommended, - { - name: 'ignores', - ignores: [ - '.eslintrc.js', - '**/.git', - '**/.hg', - '**/.pnp.*', - '**/.svn', - '**/.yarn/**', - '**/.storybook/**', - '**/stories/**', - '**.stories.**', - '**/build/**', - '**/dist/**', - '**/node_modules/**', - '**/temp/**', - '**/migrations/**', - ], - }, - { - name: 'typescript', - files: ['**/*.ts', '**/*.tsx'], - languageOptions: { - parserOptions: { - project: ['./tsconfig.json'], - tsconfigRootDir: import.meta.dirname, - }, - globals: { - process: 'readable', - }, - }, - rules: { - '@typescript-eslint/ban-ts-comment': 0, - '@typescript-eslint/no-unused-vars': [ - 'error', - { - args: 'all', - argsIgnorePattern: '^_', - caughtErrors: 'all', - caughtErrorsIgnorePattern: '^_', - destructuredArrayIgnorePattern: '^_', - varsIgnorePattern: '^_', - ignoreRestSiblings: true, - }, - ], - }, - }, -] diff --git a/global.d.ts b/global.d.ts new file mode 100644 index 00000000..e16c8533 --- /dev/null +++ b/global.d.ts @@ -0,0 +1,54 @@ +namespace NodeJS { + interface ProcessEnv { + NODE_ENV: string + + SERVER_HOST: string + SERVER_URL: string + + PAYLOAD_SECRET: string + PREVIEW_SECRET: string + CRON_SECRET: string + + DATABASE_URL: string + REDIS_URL: string + + S3_BUCKET: string + S3_ACCESS_KEY: string + S3_SECRET_KEY: string + S3_REGION: string + S3_ENDPOINT: string + + UMAMI_USERNAME: string + UMAMI_PASSWORD: string + NEXT_PUBLIC_UMAMI_URL: string + NEXT_PUBLIC_UMAMI_SITE_ID: string + + USESEND_URL: string + USESEND_API_KEY: string + USESEND_DEFAULT_FROM_ADDRESS: string + USESEND_DEFAULT_FROM_NAME: string + + OPENAI_API_KEY: string + ANTHROPIC_API_KEY: string + MAPBOX_API_KEY: string + + STATUS_PAGE_URL: string + STATUS_PAGE_HEARTBEAT_URL: string + + CLOUDFLARE_TUNNEL_HOST?: string + CLOUDFLARE_TUNNEL_URL?: string + CLOUDFLARE_TUNNEL_TOKEN?: string + } + + type ReadableStream = import('typescript').ReadableStream +} + +declare module '@payloadcms/next/css' +declare module '*.css' + +declare module '*.module.css' { + const classes: { + readonly [key: string]: string + } + export default classes +} diff --git a/instrumentation-client.test.ts b/instrumentation-client.test.ts new file mode 100644 index 00000000..9b9a38ce --- /dev/null +++ b/instrumentation-client.test.ts @@ -0,0 +1,52 @@ +// @vitest-environment jsdom +import { beforeEach, describe, expect, it, vi } from 'vitest' + +vi.mock('@sentry/nextjs', () => ({ + init: vi.fn(), + browserTracingIntegration: vi.fn(), + captureRouterTransitionStart: vi.fn(), +})) + +vi.mock('@/lib/umami/track', () => ({ + trackPageview: vi.fn(), +})) + +/** + * The module reads `SENTRY_ENABLED` (derived from `SENTRY_DSN`) at import + * time and calls `Sentry.init` as a side effect, so the DSN is stubbed empty + * here to keep `Sentry.init` from running during the test. + */ +const loadInstrumentationClient = async () => { + vi.resetModules() + vi.stubEnv('SENTRY_DSN', '') + return import('./instrumentation-client') +} + +beforeEach(() => { + vi.unstubAllEnvs() +}) + +describe('module evaluation (initial page load)', () => { + it('fires an initial bare Umami pageview when window is defined', async () => { + const { trackPageview } = await import('@/lib/umami/track') + + await loadInstrumentationClient() + + expect(trackPageview).toHaveBeenCalledWith() + }) +}) + +describe('onRouterTransitionStart', () => { + it('captures the router transition start and fires an Umami pageview for the destination href', async () => { + const Sentry = await import('@sentry/nextjs') + const { trackPageview } = await import('@/lib/umami/track') + const { onRouterTransitionStart } = await loadInstrumentationClient() + vi.mocked(trackPageview).mockClear() + + onRouterTransitionStart('/new/path', 'push') + + expect(Sentry.captureRouterTransitionStart).toHaveBeenCalledWith('/new/path', 'push') + expect(trackPageview).toHaveBeenCalledWith('/new/path') + expect(trackPageview).not.toHaveBeenCalledWith() + }) +}) diff --git a/instrumentation-client.ts b/instrumentation-client.ts new file mode 100644 index 00000000..8ff4de90 --- /dev/null +++ b/instrumentation-client.ts @@ -0,0 +1,58 @@ +import * as Sentry from '@sentry/nextjs' + +import { SENTRY_ENABLED, sharedSentryOptions } from '@/lib/sentry/options' +import { trackPageview } from '@/lib/umami/track' + +if (SENTRY_ENABLED) { + Sentry.init({ + ...sharedSentryOptions, + + /** + * Session replay is opt-in per deployment: it is the most expensive + * feature by quota and captures user interaction, so it stays off unless + * SENTRY_REPLAY_SAMPLE_RATE is set. + */ + replaysSessionSampleRate: Number.parseFloat(process.env.NEXT_PUBLIC_SENTRY_REPLAY_RATE ?? '0'), + replaysOnErrorSampleRate: Number.parseFloat( + process.env.NEXT_PUBLIC_SENTRY_REPLAY_ERROR_RATE ?? '0', + ), + + integrations: [ + // browser tracing records navigation/page-load spans, which is also what + // carries Web Vitals (LCP, CLS, INP, TTFB) into the performance view + Sentry.browserTracingIntegration(), + ], + }) +} + +/** + * Fires an Umami pageview for the very first page load, before any + * client-side navigation has happened. This is a genuine module-level side + * effect that runs once per page load in the browser (and no-ops during + * SSR/build, where `window` is undefined). Replaces the auto-tracking + * Umami's vendor script used to do via `data-auto-track`, which tracked + * every page view including the first. + * + * Note: `window.__UMAMI_SUPPRESSED__` is set by a Suspense-streamed script + * rendered later in `<body>` (see `src/components/UmamiSuppressionFlag/`), + * so at the moment this module first evaluates, that flag may not be set yet + * even for a session that should be suppressed. This is the same accepted, + * bounded race documented in `UmamiSuppressionFlag.tsx` — not something this + * call needs to work around. + */ +if (typeof window !== 'undefined') { + trackPageview() +} + +/** + * Required for Sentry to instrument client-side navigations. Also fires an + * Umami pageview on each transition, replacing the auto-tracking Umami's + * vendor script used to do via `data-auto-track`. `onRouterTransitionStart` + * fires BEFORE `location` updates to the destination, so `href` is passed + * explicitly rather than letting `trackPageview` derive the URL from + * `location` (which would still point at the page being left). + */ +export const onRouterTransitionStart = (href: string, navigationType: string): void => { + Sentry.captureRouterTransitionStart(href, navigationType) + trackPageview(href) +} diff --git a/instrumentation.ts b/instrumentation.ts new file mode 100644 index 00000000..410daa1c --- /dev/null +++ b/instrumentation.ts @@ -0,0 +1,41 @@ +import * as Sentry from '@sentry/nextjs' + +/** + * Server and edge runtime initialisation. + * + * Next calls this once per runtime before any application code runs, which is + * what lets Sentry instrument Payload, the jobs queue and route handlers. + */ +export const register = async () => { + const { SENTRY_ENABLED, sharedSentryOptions } = await import('@/lib/sentry/options') + + if (!SENTRY_ENABLED) return + + if (process.env.NEXT_RUNTIME === 'nodejs') { + Sentry.init({ + ...sharedSentryOptions, + integrations: [ + Sentry.redisIntegration(), + Sentry.mongooseIntegration(), + Sentry.zodErrorsIntegration(), + // captures console.* as structured logs alongside errors + Sentry.consoleLoggingIntegration({ + levels: [ + 'warn', + 'error', + ], + }), + ], + }) + } + + if (process.env.NEXT_RUNTIME === 'edge') { + Sentry.init(sharedSentryOptions) + } +} + +/** + * Reports errors thrown by Server Components, route handlers and middleware. + * Without this only client-side errors would reach Sentry. + */ +export const onRequestError = Sentry.captureRequestError diff --git a/llms.txt b/llms.txt new file mode 100644 index 00000000..c4fdc29f --- /dev/null +++ b/llms.txt @@ -0,0 +1,53 @@ +# Daniel Heene's Personal Website + +> Source for [daniel.heene.io](https://daniel.heene.io): a personal website, blog, and resume +> builder built on Next.js 16 (App Router, React 19) and Payload CMS 3.x, with MongoDB, Redis, +> and S3-compatible storage. + +This is a code repository, not a documentation site — the files below are the entry points an +AI coding agent should read before making changes, not end-user docs. `AGENTS.md` is the most +important file: read it first, every time. + +## Start Here + +- [AGENTS.md](AGENTS.md): Required reading before any change — stack, code style, architecture + notes, and known security guardrails (public SSE channels remain unauthenticated by design, + unsanitized raw SVG rendering, unenforced `CRON_SECRET`). +- [README.md](README.md): Setup and local development — Doppler-based env config, Docker + services, available scripts, project structure, testing, CI/deployment. + +## Configuration + +- [payload.config.ts](payload.config.ts): Payload CMS configuration (collections, globals, + plugins, S3 storage, KV cache) — repo root, not under `src/`. +- [next.config.ts](next.config.ts): Next.js configuration, including the `env:` block that + inlines `SERVER_URL`, `STATUS_PAGE_URL`, and `SENTRY_DSN` at build time. +- [src/types/environment.ts](src/types/environment.ts): Zod schema and source of truth for all + environment variables; validated at process start. +- [docker-compose.yml](docker-compose.yml): Local infrastructure (MongoDB, Redis, S3-compatible + storage) — the app itself runs via `pnpm dev`, not as a compose service. +- [biome.json](biome.json): Linting/formatting rules (Biome, not ESLint/Prettier). +- [vitest.config.ts](vitest.config.ts) / [vitest.setup.ts](vitest.setup.ts): Unit test config + and shared mocks (`payload`, `next/cache`, `redis`). +- [playwright.config.ts](playwright.config.ts): E2E test config (Chromium). +- [commitlint.config.mjs](commitlint.config.mjs): Conventional Commits enforcement. + +## Source Layout + +- [app/](app): Next.js App Router — `(frontend)` for the public site and its API routes + (preview, sse, heartbeat), `(payload)` for the admin panel. +- [src/collections/](src/collections): Payload Collections (Media, Pages, BlogPosts, Resume*, + Users, etc.). +- [src/globals/](src/globals): Payload Globals (SiteSettings, PDFGeneratorSettings, etc.). +- [src/blocks/](src/blocks): Reusable Payload Blocks (resume sections, content blocks). +- [src/fields/](src/fields): Custom/reusable Payload field factories. +- [src/access/](src/access): Access control functions — no role system; any authenticated + Payload user is fully trusted. +- [src/components/](src/components): React components. +- [src/lib/](src/lib): Framework-agnostic utilities, including `RedisHandler.ts` (cache + + pub/sub for SSE) and `lib/seed/` (shared seed/clean logic for fixture data, used by both + CLI scripts and the admin panel). +- [src/emails/](src/emails): React Email templates and rendering (contact form notifications). +- [src/pdf/](src/pdf): PDF generation (resume export). +- [src/jobs-queue/](src/jobs-queue): Payload Jobs Queue tasks/workflows. +- [e2e/](e2e): Playwright E2E specs — structural smoke tests, not content assertions. diff --git a/next-env.d.ts b/next-env.d.ts index 1b3be084..c4b7818f 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,5 +1,6 @@ /// <reference types="next" /> /// <reference types="next/image-types/global" /> +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/next.config.ts b/next.config.ts index 7fe9737d..342e39e1 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,39 +1,396 @@ -import { withPayload } from '@payloadcms/next/withPayload' +import { ChildProcess, spawn } from 'node:child_process' + import { NextConfig } from 'next' -import { RemotePattern } from 'next/dist/shared/lib/image-config' - -const SERVER_URL = - process.env['VERCEL_ENV'] === 'production' - ? process.env['VERCEL_PROJECT_PRODUCTION_URL'] - : process.env['VERCEL_ENV'] === 'preview' || process.env['VERCEL_ENV'] === 'development' - ? process.env['VERCEL_URL'] - : 'localhost:3000' -const SERVER_PROTOCOL = process.env['VERCEL_ENV'] ? 'https' : 'http' - -const nextConfig: NextConfig = { - turbopack: { - resolveExtensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.wasm', '.json'], - }, - - reactStrictMode: true, - serverExternalPackages: ['@napi-rs/canvas', 'node-vibrant', 'dompurify', 'svgo'], - eslint: { ignoreDuringBuilds: true }, - - images: { - formats: ['image/avif', 'image/webp'], - remotePatterns: [ - !process.env['VERCEL_ENV'] ? { hostname: 'localhost', port: '3000' } : null, - process.env['VERCEL_ENV'] ? { hostname: SERVER_URL, protocol: SERVER_PROTOCOL } : null, - { hostname: 'daniel.heene.io', protocol: 'https' }, - { hostname: 'daniel.heene.dev', protocol: 'https' }, - { hostname: '*.vercel.app', protocol: 'https' }, - ].filter(Boolean) as RemotePattern[], - }, - - env: { - NEXT_PUBLIC_SERVER_URL: `${SERVER_PROTOCOL}://${SERVER_URL}`, - PAYLOAD_PUBLIC_SERVER_URL: `${SERVER_PROTOCOL}://${SERVER_URL}`, - }, -} +import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD } from 'next/constants' +import { withPayload } from '@payloadcms/next/withPayload' + +import { withSentryConfig } from '@sentry/nextjs' +import z from 'zod' + +import { envSchema } from '@/types/environment' + +let server: ChildProcess | null = null +const createTunnel = (token: string) => + new Promise<ChildProcess | null>((resolve) => { + // No `shell: true`: the token is passed as its own argv entry rather than + // concatenated into a command string, which also silences DEP0190. + const childProcess = spawn( + 'npx', + [ + 'wrangler', + 'tunnel', + 'run', + '--token', + token, + ], + { + stdio: 'ignore', + }, + ) + + /** + * Reap the tunnel with the dev server. Without this every `next dev` + * leaves a live `wrangler tunnel run` behind, and they accumulate + * silently across restarts. + * + * Only `exit` is hooked: scripts/dev.mjs already forwards SIGINT/SIGTERM + * to this process and re-raises them, so adding handlers here would + * replace Node's default signal behaviour and let the wrapper's own + * exit-code handling be pre-empted by a hardcoded `process.exit(0)`. + */ + process.once('exit', () => { + if (!childProcess.killed) { + childProcess.kill('SIGTERM') + } + }) + + /** + * `spawn` fires for npx itself, so it only proves the launcher started — + * wrangler may still fail afterwards (missing binary, rejected token). + * An early exit is therefore treated as a failed tunnel, and whichever + * of the two settles first wins. + */ + childProcess.once('spawn', () => { + resolve(childProcess) + }) + childProcess.once('error', () => { + resolve(null) + }) + childProcess.once('exit', (code) => { + if (code !== 0) resolve(null) + }) + }) + +export default async (phase, { defaultConfig }) => { + /** + * The tunnel is opt-in via `pnpm dev --tunnel`, which scripts/dev.mjs + * translates into DEV_TUNNEL=1. Having the credentials in .env.local is + * no longer enough to start it — otherwise every `next dev` opens a + * public tunnel as a side effect of the file being present. + * + * This runs before validation so the addresses it swaps in are the ones + * the schema checks. + */ + const tunnelRequested = phase === PHASE_DEVELOPMENT_SERVER && process.env.DEV_TUNNEL === '1' + + if (tunnelRequested) { + const { CLOUDFLARE_TUNNEL_URL, CLOUDFLARE_TUNNEL_HOST, CLOUDFLARE_TUNNEL_TOKEN } = process.env + + if (!CLOUDFLARE_TUNNEL_URL || !CLOUDFLARE_TUNNEL_HOST || !CLOUDFLARE_TUNNEL_TOKEN) { + console.error( + '\n[tunnel] --tunnel needs CLOUDFLARE_TUNNEL_URL, CLOUDFLARE_TUNNEL_HOST and CLOUDFLARE_TUNNEL_TOKEN\n', + ) + process.exit(1) + } + + process.env.SERVER_HOST = CLOUDFLARE_TUNNEL_HOST + process.env.SERVER_URL = CLOUDFLARE_TUNNEL_URL + } + + /* Environment validation */ + const parsedEnv = envSchema.safeParse(process.env) + if (!parsedEnv.success) { + console.error(`\n${z.prettifyError(parsedEnv.error)}\n`) + process.exit(1) + } + + if (tunnelRequested) { + // Next reloads this config on edit; the tunnel outlives those reloads. + if (!server) { + server = await createTunnel(process.env.CLOUDFLARE_TUNNEL_TOKEN) + + if (!server) { + console.error('\n[tunnel] failed to start `wrangler tunnel run` — is wrangler installed?\n') + process.exit(1) + } + } + + /** + * Only this process has the tunnel URL — .env.local is loaded by Next, + * not by scripts/dev.mjs. Hand it to the wrapper, which splices it into + * Next's address block and swallows this marker. + * + * stderr, not stdout: Next captures stdout while the config loads, so a + * marker written there never reaches the parent. + */ + process.stderr.write(`__DEV_TUNNEL_URL__${process.env.SERVER_URL}\n`) + } + + const nextConfig: NextConfig = { + poweredByHeader: false, + productionBrowserSourceMaps: false, + reactStrictMode: true, + cacheComponents: true, + + experimental: { + appNewScrollHandler: true, + turbopackServerFastRefresh: true, + serverActions: { + bodySizeLimit: '10mb', + }, + }, -export default withPayload(nextConfig) + /** + * Allowed Dev Origins + */ + allowedDevOrigins: [ + 'localhost:3000', + '*.localhost:3000', + 'daniel.heene.nexus', + '*.daniel.heene.nexus', + 'daniel.heene.local', + '*.daniel.heene.local', + ], + + /** + * Environment Variables + * + * Anything listed here is INLINED into the compiled bundle by Next and + * can no longer be changed by the runtime environment. + * + * These three are structurally build-time and cannot be made runtime, + * which is worth stating plainly because it is not obvious: + * + * - SENTRY_DSN → instrumentation-client.ts calls Sentry.init at + * module scope, before any component renders. + * - SENTRY_RELEASE → same module-scope Sentry.init call reads this + * to tag client events with the release. It must + * reach the browser bundle the same way the DSN + * does, and must be byte-identical to the + * `release.name` given to withSentryConfig below + * — that's the value CI's release object is + * created under. + * - SERVER_URL → read by robots.ts and the root layout's + * metadataBase, both of which are prerendered. + * - STATUS_PAGE_URL → reaches ServiceStatus through the Footer, which + * renders inside the prerendered shell. + * + * With `cacheComponents: true` nearly every route has a shell rendered + * at build time, so a process.env read on the server is captured into + * that shell and served from cache — moving the read up the tree does + * not change this. All three are public values (a DSN ships to the + * browser SDK; the other two are this site's own addresses), so the + * cost is that images are environment-specific, not that anything + * secret is baked in. + * + * Everything else — every secret and all server-only config — is read + * from the container environment at boot and is genuinely runtime. + */ + env: { + SERVER_URL: process.env.SERVER_URL, + STATUS_PAGE_URL: process.env.STATUS_PAGE_URL, + SENTRY_DSN: process.env.SENTRY_DSN, + SENTRY_RELEASE: process.env.SENTRY_RELEASE, + }, + + /** + * Logging + */ + logging: { + fetches: { + fullUrl: true, + hmrRefreshes: true, + }, + serverFunctions: true, + incomingRequests: true, + browserToTerminal: 'error', + }, + + serverExternalPackages: [ + // WASM decoder must not be inlined by Turbopack (invalid octal escapes + // in the generated template string break the server chunk) + 'mediabunny', + '@mediabunny/server', + '@react-pdf/renderer', + 'svgo', + 'pdf-parse', + 'node-av', + '@takumi-rs/core', + '@napi-rs/canvas', + ], + + turbopack: { + resolveExtensions: [ + '.ts', + '.tsx', + '.js', + '.jsx', + '.mjs', + '.cjs', + '.mdx', + '.wasm', + '.json', + '.css', + '.scss', + '.svg', + ], + }, + + /** + * Configuration object for Next.js image optimization settings. + * Defines supported image formats, responsive breakpoints, and security policies for image handling. + */ + images: { + formats: [ + 'image/webp', + 'image/avif', + ], + deviceSizes: [ + 640, + 750, + 828, + 1080, + 1200, + 1920, + 2048, + 3840, + ], + imageSizes: [ + 16, + 32, + 48, + 64, + 96, + 128, + 256, + 384, + ], + remotePatterns: [ + new URL('http://localhost:3000/**'), + new URL('https://daniel.heene.io/**'), + new URL('https://daniel.heene.dev/**'), + new URL('https://daniel.heene.review/**'), + new URL('https://daniel.heene.nexus/**'), + new URL('https://daniel.heene.local/**'), + new URL('https://fsn1.your-objectstorage.com/**'), + new URL('https://nbg1.your-objectstorage.com/**'), + new URL('https://hel1.your-objectstorage.com/**'), + new URL('https://cdn.pixabay.com/**'), + new URL('https://images.unsplash.com/**'), + ], + localPatterns: [ + { + pathname: '**', + }, + ], + contentDispositionType: 'inline', + contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;", + dangerouslyAllowSVG: true, + }, + + // webpack: (config, context) => { + // const nextConfig = { + // ...config, + // } + // nextConfig.resolve = { + // ...config.resolve, + // extensionAlias: { + // '.cjs': [ + // '.cts', + // '.cjs', + // ], + // '.js': [ + // '.ts', + // '.tsx', + // '.js', + // '.jsx', + // ], + // '.mjs': [ + // '.mts', + // '.mjs', + // ], + // }, + // alias: { + // ...config.resolve.alias, + // '@': path.resolve(__dirname, 'src'), + // }, + // } + // + // return config + // }, + + async headers() { + return [ + { + source: '/:path*{/}?', + headers: [ + { + key: 'X-Accel-Buffering', + value: 'no', + }, + ], + }, + ] + }, + + async rewrites() { + const rewrites = [] + + if (process.env['NEXT_PUBLIC_UMAMI_URL']) { + rewrites.push({ + source: '/stats/:match*', + destination: `${process.env['NEXT_PUBLIC_UMAMI_URL']}/:match*`, + }) + } + + return rewrites + }, + } + + const configWithPayload = withPayload(nextConfig, { + devBundleServerPackages: false, + }) + + /** + * Source maps are only uploaded when an auth token is present, so local and + * CI builds without Sentry credentials behave exactly as before. Without the + * upload, production stack traces stay minified but error capture still works. + */ + const uploadSourceMaps = Boolean( + process.env.SENTRY_AUTH_TOKEN && process.env.SENTRY_ORG && process.env.SENTRY_PROJECT, + ) + + return withSentryConfig(configWithPayload, { + org: process.env.SENTRY_ORG, + project: process.env.SENTRY_PROJECT, + authToken: process.env.SENTRY_AUTH_TOKEN, + + silent: !process.env.CI, + sourcemaps: { + disable: !uploadSourceMaps, + // uploaded maps are deleted afterwards so they are never served publicly + deleteSourcemapsAfterUpload: true, + }, + + /** + * Pins the release this build creates/finalizes in Sentry to the exact + * same string every runtime tags its events with (SENTRY_RELEASE, read + * above into the `env` block for the client bundle and directly by + * instrumentation.ts for server/edge). Without an explicit name here the + * plugin falls back to the git HEAD SHA, which drifts from + * SENTRY_RELEASE the moment that's set to anything else — two releases + * result: one with commits and no events, one with events and no + * commits. semantic-release (.github/workflows/release.yml) sets + * SENTRY_RELEASE to `website@<version>` before this build runs. + * + * `deploy.env` records this build under an environment so the release's + * Deploys tab isn't permanently empty — see SENTRY_ENVIRONMENT in + * src/lib/sentry/options.ts for the same value used at runtime. + */ + release: { + name: process.env.SENTRY_RELEASE, + deploy: process.env.SENTRY_RELEASE + ? { + env: process.env.SENTRY_ENVIRONMENT || process.env.NODE_ENV || 'production', + } + : undefined, + }, + + // proxies Sentry requests through the app so ad blockers cannot drop them + tunnelRoute: '/monitoring', + + // `disableLogger` and `automaticVercelMonitors` are deliberately omitted: + // both are deprecated and webpack-only, and this project builds with + // Turbopack, so setting them only emits warnings. + }) +} diff --git a/package.json b/package.json index eae03d01..0ffc0ee4 100644 --- a/package.json +++ b/package.json @@ -1,130 +1,191 @@ { "name": "website", "version": "1.0.0", - "private": "true", + "private": true, "description": "", "license": "MIT", "type": "module", + "imports": { + "#payload.css": "./src/styles/payload.css", + "#frontend.css": "./src/styles/frontend.css" + }, "scripts": { - "build": "next build", - "build:app": "next build", - "build:storybook": "storybook build --ci --quiet --disable-telemetry", - "chore": "pnpm run --parallel \"/^chore:.*/\"", - "chore:reinstall": "rm -rf node_modules && rm pnpm-lock.yaml && pnpm --ignore-workspace install", - "chore:sort": "pnpm dlx sort-package-json", - "ci": "payload migrate && pnpm build", - "dev": "next dev --turbopack", - "dev:app": "next dev --turbopack", - "dev:storybook": "storybook dev -p 6006 --ci --quiet --disable-telemetry", - "generate": "pnpm run --parallel \"/^generate:.*/\" payload", - "generate:importmap": "payload generate:importmap", - "generate:types": "payload generate:types", - "ii": "pnpm --ignore-workspace install", - "lint": "next lint", - "lint:fix": "next lint --fix", - "payload": "payload", - "load-env": "pnpm run load-env:clean && pnpm run load-env:download", - "load-env:clean": "pnpm -c exec \"rm -f .env .env.local || true\"", - "load-env:download": "doppler secrets download --format env --no-file > .env.local || true", - "start": "next start" + "build": "SENTRY_RELEASE=\"${SENTRY_RELEASE:-website@$(node -p 'require(\"./package.json\").version')}\" pnpm run next build", + "build:storybook": "storybook build -o dist", + "chore:reinstall": "pnpm --shell-mode exec rm -rf node_modules && pnpm --shell-mode exec rm pnpm-lock.yaml && pnpm install", + "chore:sort": "sort-package-json", + "ci": "pnpm run migrate && pnpm run build", + "deps:fix": "syncpack fix --dependency-types prod,dev,peer", + "deps:lint": "syncpack lint --dependency-types prod,dev,peer", + "deps:update": "syncpack update", + "dev": "NODE_OPTIONS=\"--trace-deprecation --disable-warning=DeprecationWarning\" node scripts/dev.mjs", + "dev:app": "pnpm run next dev", + "dev:storybook": "pnpm run storybook dev -p 6006", + "email:dev": "email dev --dir src/emails --port 3005", + "format": "biome format --write", + "generate": "pnpm run generate:types && pnpm run generate:importmap", + "generate:importmap": "pnpm run payload generate:importmap", + "generate:types": "pnpm run payload generate:types", + "lint": "biome check", + "load-env": "node scripts/load-env.mjs", + "links:migrate": "pnpm run payload run scripts/migrate-link-field-naming.ts", + "migrate": "pnpm run payload migrate", + "next": "NODE_OPTIONS=\"--trace-deprecation --disable-warning=DeprecationWarning\" next", + "payload": "NODE_OPTIONS=\"--trace-deprecation --disable-warning=DeprecationWarning\" payload", + "prepare": "husky", + "refs:backfill": "pnpm run payload run scripts/backfill-references.ts", + "release": "semantic-release", + "release:dry-run": "semantic-release --dry-run --no-ci", + "seed:pages": "pnpm run payload run scripts/seed-pages.ts", + "seed:pages:clean": "pnpm run payload run scripts/seed-pages.ts -- --clean", + "seed:topics": "pnpm run payload run scripts/seed-topics.ts", + "seed:topics:clean": "pnpm run payload run scripts/seed-topics.ts -- --clean", + "seed:posts": "pnpm run payload run scripts/seed-posts.ts", + "seed:posts:clean": "pnpm run payload run scripts/seed-posts.ts -- --clean", + "serve:storybook": "serve -s dist -l 3000", + "start": "pnpm run next start", + "start:worker": "node scripts/start-worker.mjs", + "storybook": "NODE_OPTIONS=\"--trace-deprecation --disable-warning=DeprecationWarning\" storybook", + "test": "vitest run", + "test:coverage": "vitest run --coverage", + "test:e2e": "node --env-file=.env.test node_modules/@playwright/test/cli.js test", + "test:e2e:docker": "./scripts/e2e-docker.sh", + "test:e2e:ui": "node --env-file=.env.test node_modules/@playwright/test/cli.js test --ui", + "test:watch": "vitest", + "typecheck": "tsc --noEmit" }, "dependencies": { - "@lexical/headless": "^0.27.1", - "@lexical/html": "^0.27.1", - "@lexical/link": "^0.27.1", - "@lexical/list": "^0.27.1", - "@lexical/mark": "^0.27.1", - "@lexical/markdown": "^0.27.1", - "@lexical/react": "^0.27.1", - "@lexical/rich-text": "^0.27.1", - "@lexical/selection": "^0.27.1", - "@lexical/table": "^0.27.1", - "@lexical/utils": "^0.27.1", - "@payloadcms/db-postgres": "^3.36.1", - "@payloadcms/email-nodemailer": "^3.36.1", - "@payloadcms/live-preview-react": "^3.36.1", - "@payloadcms/next": "^3.79.1", - "@payloadcms/plugin-redirects": "^3.36.1", - "@payloadcms/plugin-seo": "^3.36.1", - "@payloadcms/richtext-lexical": "^3.36.1", - "@payloadcms/storage-vercel-blob": "^3.36.1", - "@payloadcms/translations": "^3.36.1", - "@payloadcms/ui": "^3.36.1", - "@radix-ui/react-slot": "^1.2.0", - "@sendgrid/mail": "^8.1.5", - "@vercel/analytics": "^1.5.0", - "@vercel/blob": "^1.0.1", - "@vercel/speed-insights": "^1.2.0", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "date-fns": "^4.1.0", - "dompurify": "^3.3.2", - "duration-fns": "^3.0.2", + "@ai-sdk/anthropic": "^4.0.26", + "@iconify/react": "^6.0.2", + "@mediabunny/server": "^1.52.2", + "@napi-rs/canvas": "^1.0.3", + "@paper-design/shaders-react": "^0.0.80", + "@payloadcms/db-mongodb": "^3.87.0", + "@payloadcms/kv-redis": "^3.87.0", + "@payloadcms/live-preview-react": "^3.87.0", + "@payloadcms/next": "^3.87.0", + "@payloadcms/plugin-import-export": "^3.87.0", + "@payloadcms/richtext-lexical": "^3.87.0", + "@payloadcms/storage-s3": "^3.87.0", + "@payloadcms/translations": "^3.87.0", + "@payloadcms/ui": "^3.87.0", + "@radix-ui/react-collapsible": "^1.1.20", + "@radix-ui/react-separator": "^1.1.15", + "@radix-ui/react-slot": "^1.3.3", + "@radix-ui/react-switch": "^1.3.7", + "@radix-ui/react-tooltip": "^1.2.16", + "@react-pdf/renderer": "^4.5.1", + "@react-pdf/types": "^2.11.1", + "@sindresorhus/slugify": "^3.0.0", + "@tailwindcss/typography": "^0.5.20", + "ai": "^7.0.45", + "date-fns": "^4.4.0", + "dedent": "^1.7.2", "embla-carousel-autoplay": "^8.6.0", + "embla-carousel-fade": "^8.6.0", "embla-carousel-react": "^8.6.0", - "graphql": "^16.11.0", - "jsdom": "^26.1.0", - "jsonwebtoken": "^9.0.2", - "lexical": "^0.27.1", - "lodash-es": "^4.17.23", - "lucide-react": "^0.479.0", - "next": "15.5.10", - "nodemailer": "^8.0.4", - "nodemailer-sendgrid": "^1.0.3", - "payload": "^3.75.0", - "react": "^19.1.0", - "react-blurhash": "^0.3.0", - "react-dom": "^19.1.0", - "react-icons": "^5.5.0", - "react-toastify": "^11.0.5", - "sharp": "^0.34.1", - "svgo": "^3.3.3", - "type-fest": "^4.40.1" + "hash-wasm": "^4.12.0", + "hyphen": "^1.14.1", + "isomorphic-dompurify": "^3.22.0", + "jose": "^5.10.0", + "jsdom": "^30.0.1", + "libphonenumber-js": "^1.13.10", + "lodash-es": "^4.18.1", + "mediabunny": "^1.52.2", + "nanoid": "^6.0.0", + "neotraverse": "^1.0.1", + "next": "^16.2.12", + "next-themes": "^0.4.6", + "ogl": "^1.0.11", + "payload": "^3.87.0", + "pdf-parse": "^2.4.5", + "pretty-ms": "^9.3.0", + "pupa": "^3.3.0", + "react": "^19.2.7", + "react-dom": "^19.2.7", + "react-email": "^6.9.2", + "react-select": "^5.10.2", + "recharts": "^3.10.1", + "redis": "4.7.0", + "schema-dts": "^2.0.0", + "sharp": "^0.35.3", + "shiki": "^4.4.3", + "svgo": "^4.0.2", + "tailwind-merge": "^3.6.0", + "tailwind-variants": "^3.3.1", + "tailwindcss": "^4.3.0", + "takumi-js": "^2.5.4", + "timestring": "^7.0.0", + "type-fest": "^5.7.0", + "usehooks-ts": "^3.1.1", + "zod": "^4.4.2" }, "devDependencies": { - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "^9.26.0", - "@next/eslint-plugin-next": "^15.3.1", - "@payloadcms/eslint-config": "^3.28.0", - "@storybook/addon-docs": "^8.6.12", - "@storybook/addon-essentials": "^8.6.12", - "@storybook/addon-interactions": "^8.6.12", - "@storybook/addon-links": "^8.6.12", - "@storybook/addon-onboarding": "^8.6.12", - "@storybook/addon-viewport": "^8.6.12", - "@storybook/blocks": "^8.6.12", - "@storybook/components": "^8.6.12", - "@storybook/nextjs": "^8.6.12", - "@storybook/react": "^8.6.12", - "@storybook/test": "^8.6.12", - "@storybook/theming": "^8.6.12", - "@tailwindcss/typography": "^0.5.16", - "@types/jsdom": "^21.1.7", + "@biomejs/biome": "^2.5.6", + "@commitlint/cli": "^21.2.1", + "@commitlint/config-conventional": "^21.2.0", + "@payloadcms/plugin-sentry": "^3.87.0", + "@playwright/test": "~1.62.1", + "@react-email/ui": "^6.9.2", + "@semantic-release/changelog": "^7.0.0", + "@semantic-release/commit-analyzer": "^13.0.1", + "@semantic-release/git": "^11.0.1", + "@semantic-release/github": "^12.0.9", + "@semantic-release/npm": "^13.1.5", + "@semantic-release/release-notes-generator": "^14.1.1", + "@sentry/nextjs": "^10.69.0", + "@storybook/addon-a11y": "^10.5.5", + "@storybook/addon-docs": "^10.5.5", + "@storybook/addon-onboarding": "^10.5.5", + "@storybook/addon-themes": "^10.5.5", + "@storybook/addon-webpack5-compiler-swc": "^4.0.3", + "@storybook/nextjs": "^10.5.5", + "@tailwindcss/postcss": "^4.2.4", + "@testing-library/dom": "^10.4.1", + "@testing-library/jest-dom": "^7.0.1", + "@testing-library/react": "^16.3.2", + "@types/hyphen": "^1.14.0", + "@types/jsdom": "^30.0.0", "@types/lodash-es": "^4.17.12", - "@types/node": "^22.15.3", - "@types/nodemailer": "^6.4.17", - "@types/nodemailer-sendgrid": "^1.0.3", - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.3", - "autoprefixer": "^10.4.21", - "cssnano": "^7.0.6", - "eslint": "^9.26.0", - "eslint-config-next": "^15.3.1", - "eslint-plugin-storybook": "^0.12.0", - "file-loader": "^6.2.0", - "polished": "^4.3.1", - "postcss": "^8.5.3", - "prettier": "^3.5.3", - "sort-package-json": "^3.2.0", - "storybook": "^8.6.17", - "tailwind-merge": "^2.6.0", - "tailwindcss": "^3.4.17", - "tailwindcss-animate": "^1.0.7", - "typescript": "^5.8.3", - "typescript-eslint": "^8.31.1" + "@types/node": "^26.1.2", + "@types/react": "^19.2.18", + "@types/react-dom": "^19.2.4", + "@types/timestring": "^7.0.0", + "@vitest/coverage-v8": "^4.1.10", + "autoprefixer": "^10.5.3", + "cssnano": "^8.0.1", + "husky": "^9.1.7", + "lint-staged": "^17.3.0", + "next": "^16.2.12", + "playwright": "~1.62.1", + "postcss": "^8.5.25", + "react": "^19.2.7", + "react-docgen-typescript": "^2.4.0", + "react-dom": "^19.2.7", + "semantic-release": "^25.0.9", + "sort-package-json": "^4.0.0", + "storybook": "^10.5.5", + "styled-jsx": "^5.1.7", + "syncpack": "^15.3.2", + "tsconfig-paths-webpack-plugin": "^4.2.0", + "typescript": "^6.0.3", + "vitest": "^4.1.10", + "wrangler": "^4.118.0" + }, + "lint-staged": { + "*.{ts,tsx,js,jsx,mjs,cjs,json,jsonc,css}": [ + "biome check --write --no-errors-on-unmatched" + ] + }, + "resolutions": { + "pdfjs-dist": "5.4.296", + "react": "^19.2.7", + "react-dom": "^19.2.7", + "redis": "4.7.0" }, - "packageManager": "pnpm@9.12.0+sha512.4abf725084d7bcbafbd728bfc7bee61f2f791f977fd87542b3579dcb23504d170d46337945e4c66485cd12d588a0c0e570ed9c477e7ccdd8507cf05f3f92eaca", + "packageManager": "pnpm@11.18.0", "engines": { - "node": "^22.0.0" + "node": "^26.0.0", + "pnpm": "^11.0.0" } } diff --git a/patches/pdfjs-dist@5.4.296.patch b/patches/pdfjs-dist@5.4.296.patch new file mode 100644 index 00000000..550ed849 --- /dev/null +++ b/patches/pdfjs-dist@5.4.296.patch @@ -0,0 +1,12 @@ +diff --git a/legacy/build/pdf.mjs b/legacy/build/pdf.mjs +--- a/legacy/build/pdf.mjs ++++ b/legacy/build/pdf.mjs +@@ -21368,7 +21368,7 @@ class PDFWorker { + const worker = await import( + /*webpackIgnore: true*/ + /*@vite-ignore*/ +- this.workerSrc); ++ this.workerSrc ?? "./pdf.worker.mjs"); // https://github.com/vercel/next.js/issues/65406 + return worker.WorkerMessageHandler; + }; + return shadow(this, "_setupFakeWorkerGlobal", loader()); diff --git a/payload-exports/2026-07-24_12-25-18-resume-customers.json b/payload-exports/2026-07-24_12-25-18-resume-customers.json new file mode 100644 index 00000000..2ef94709 --- /dev/null +++ b/payload-exports/2026-07-24_12-25-18-resume-customers.json @@ -0,0 +1,86 @@ +[ + { + "title": "11Freunde", + "slug": "11freunde", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 400 102\">\n <path d=\"m296.692 53.256-14.38-42.367h-14.787v80.23h13.36l.223-47.59 16.634 47.59h12.346v-80.23h-13.171zm84.037 25.469V56.863h15.606v-13.07h-15.606V23.285h18.48V10.89h-33.13v80.23h33.917V78.725zM96.797 91.118h14.65V57.765h15.69v-13.07h-15.69v-21.41h18.63V10.89h-33.28zm99.123-34.255h15.607v-13.07H195.92V23.285h18.482V10.89h-33.13v80.23h33.919V78.725h-19.27zm49.797 17.726c0 4.136-2.76 5.847-5.525 5.847s-5.525-1.711-5.525-5.847v-63.7H220.16v62.143c0 14.37 8.693 19.661 20.037 19.664 11.332-.003 20.027-5.294 20.027-19.664V10.89h-14.507zM.009 101h86.525V1H.009zm45.6-20.7h8.788V28.468h-8.789v-8.901c4.732-2.029 11.381-5.184 15.439-8.677h6.422V80.3h8.787v10.818h-30.65V80.301zm-35.3 0h8.79V28.468h-8.79v-8.901c4.732-2.029 11.38-5.184 15.437-8.677h6.424V80.3h8.788v10.818h-30.65zm326.456-69.41h-19.369v80.23h19.369c13.972 0 22.247-6.343 22.247-23.244V34.133c0-16.9-8.275-23.243-22.247-23.243m7.6 56.986c-.02 8.587-2.213 11.524-7.15 11.524h-5.171V22.61h5.17c4.937 0 7.13 2.936 7.15 11.524zm-169.11-31.928v-2.792c0-16.901-8.276-22.267-22.248-22.267h-17.414v80.23h14.65V57.764h3.493l6.872 33.354h14.761l-8.635-36.989c6.4-3.196 8.525-10.16 8.525-18.182m-14.65-.725c0 5.746-.574 11.149-5.983 11.149h-4.381V22.608h3.217c4.958 0 7.149 1.984 7.149 10.661v1.954z\"/>\n</svg>\n", + "id": "6a6339ec3c6e0726c3955302" + }, + { + "title": "Aktion Mensch", + "slug": "aktion-mensch", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 500 200\">\n <path d=\"M225.506 199.42q-.576 0-1.305-.02c-7.6-.1-7.7-.7-6.3-20.1 2-25.1 2.198-26.3 5.198-28.5 1.5-1.1 4.2-2.4 6-2.8 1.9-.4 3.801-.7 4.301-.6s2.8 4.7 5.1 10.2c2.3 5.4 5.1 11.7 6.2 13.9l2.1 4 1.2-3c.6-1.7 3.2-7.7 5.7-13.3 5.1-11.4 6.6-12.8 12.6-11.1 6 1.6 6.6 3.1 7.7 18.6.5 7.7 1.5 17.5 2.1 21.8.6 4.2.8 8.3.5 9.1-.7 1.9-10.9 1.9-12.5.1-.6-.8-1.8-7.1-2.6-14.2-.8-7-1.7-13-1.9-13.2-.5-.6-6.6 15.2-6.6 17.1 0 2.7-4.4 6.7-7.5 6.9-2.9.2-3.3-.3-9.1-11.8l-6.2-11.9-.6 11.9c-.4 6.6-.8 13.1-.9 14.5-.174 2.012-.502 2.417-3.194 2.42m65.964-.58c-2.107.021-2.835-.477-4.27-1.54-4.7-3.5-6.6-10.2-6.6-23.8-.1-9.4-.4-12.3-1.6-13.2-1.3-1.1-1.3-1.5 0-4 2.3-4.2 8.7-7.2 18.7-8.8 4.8-.7 11.5-1.3 14.8-1.2 5.7.2 6 .3 6.3 2.8.2 1.9-.6 3.4-3.2 5.7-3.4 3-5.2 3.4-17.1 4.4-2.9.3-3 .5-3.3 5.6l-.3 5.4 2.8-.6c13.8-2.7 15.3-2.8 16.8-1.6 2.2 1.9 1.8 5.7-.7 7.4-1.3.8-5.8 2-10.1 2.7-4.3.6-8 1.5-8.2 1.9-.5.8 1.1 6.9 2.3 8.6.5.9 2.6.9 8.2-.1 8.5-1.5 11-.8 11 3 0 3.3-1.7 4-15.3 6.1-5.437.796-8.37 1.221-10.23 1.24m31.78-.725c-2.3.018-2.25-4.918-2.25-22.215v-22.1l3.4-3.4c3.6-3.6 7.6-4.5 7.6-1.7 0 1.9 8.5 13.4 16.1 21.7l5.4 5.9 1.1-13.6c1.2-14.4 1.6-15.6 6.9-18.9 4.3-2.6 6-2 5.9 2.2-1.2 43.9-1.6 46.2-8.3 49-2.7 1.1-3.5.9-7.4-1.3-2.3-1.4-7.8-6.2-12.1-10.7l-7.8-8.2.3 7.4c.3 9.1-.3 11.2-4.5 13.8-1.99 1.217-3.38 2.108-4.35 2.115m72.937-1.478c-4.887.012-9.886-.837-13.486-2.537-6.1-3-10.701-7.6-10.701-10.7 0-2.8.8-2.9 5.7-.9 4.6 1.9 14.4 1.9 19 0 3.3-1.4 3.5-1.7 2.1-3.1-.8-.8-4.1-2.2-7.3-3-8.2-2.2-12.5-4.6-16.8-9.3-5.8-6.4-6.1-11.1-1.1-17.1 2.9-3.3 7.2-5.9 11.9-7.1 4.3-1 5.6-1 9.6.1 4.6 1.3 10.8 6.8 11.2 9.9.2 2.4 0 2.5-6.3 2.5-5.1.1-7.2.6-9.7 2.4-5.1 3.7-4.4 5.8 2.5 7.2 11.1 2.3 19.9 8.9 22.3 16.9 1.5 5.2-.3 8.8-6.1 12.1-3.15 1.75-7.925 2.624-12.813 2.637m44.584-1.578c-3.559-.026-7.033-.565-9.57-1.659-15.4-6.4-19.302-29.9-7.102-43.7 2.1-2.5 5.802-5.4 8.102-6.6 7.4-3.6 14.4-2.3 20.6 3.8 4.7 4.8 4.3 6.1-2 6.1-12.4.1-21.801 9.5-21.801 21.8 0 6.6 3.1 9.7 8.9 8.9 2.1-.2 5.2-1.5 6.9-2.7 2.8-2.1 3.1-2.1 6-.6 3.6 1.9 7.4 6.4 7 8.5-.2.8-2.3 2.5-4.7 3.8-3.038 1.574-7.753 2.391-12.329 2.359m48.113-2.301C485.854 192.73 485 189.9 485 181.8v-7.9l-6.7.298-6.8.301.3 7.2c.4 6.6.2 7.2-2 8.7-1.3.8-3.9 1.7-5.8 1.8-4.1.4-4.7-1.2-4.9-11.5-.1-6.2-.3-6.9-3.3-9.6-3.4-3-3.4-6.1 0-6.1 1.7 0 2-1.1 2.6-8.7.4-5.3 1.2-9.3 2-10.1s3.5-1.7 6-1.9l4.6-.6v20l6.1.7c3.4.3 6.6.3 7.1 0 .7-.4.8-3.4.4-8.1-.8-8.9.4-11.5 6.7-14.4 2.3-1 4.4-1.9 4.7-1.9 2.3 0 2.7 3.2 3.3 24.2l.6 22.7-2.9 2.5c-1.6 1.3-4.4 2.7-6.2 3.1-.718.172-1.354.263-1.916.258M232.701 137c-9.5 0-14.701-3.2-14.701-9.1 0-1.9-.6-1.6-4.9 2.4-7.5 7-8.8 7-17.4.1-3.9-3.2-14.1-12.8-22.6-21.2l-15.4-15.3.6 6.8c.4 3.7.9 10.4 1.3 14.9l.6 8-3.1 2.7c-5.6 4.7-17.4 7-23.5 4.7-1.8-.7-3.7-.5-6.8.6-5.5 2-14.2 2.1-16.5.3-.9-.8-4-6.5-6.9-12.7-4.5-9.5-5.7-11.2-7.6-11.1-1.3 0-14.8 1.7-30.1 3.7l-27.9 3.7-4.2 7.5c-4.6 8.3-6.9 10-13.7 10-8.9 0-18.1-4.9-19.5-10.5-.7-2.9 2.1-8.7 23.1-47C46.7 33 56.9 15.6 59.8 13.3c5.7-4.7 19.5-7 25.6-4.2 2 .9 6.1 9 21.3 42 10.3 22.4 19 40.3 19.1 39.8.2-.5-.1-11.6-.7-24.7-.6-13-1.1-30.1-1.1-38 0-13.9.1-14.4 2.5-16.6 1.3-1.3 4.6-3 7.2-3.9 5.7-2 17.2-1.8 19.7.2 1.4 1.1 1.6 4 1.7 18.5.1 9.4.4 18.1.7 19.3.6 2 2.2.3 12.4-12.5 13.9-17.5 16.1-19.8 18.8-20.7 3.4-1.1 11.6 2.4 17 7.2 7.1 6.4 7.3 8 1.3 15-3.9 4.6-16 19.7-25.6 32-.7.9 1.2 3.6 6.4 9.5 7.5 8.2 29.7 28.8 31.1 28.8.5 0 .7-7.3.6-16.3l-.3-16.2-8.7-.3c-8-.3-8.9-.5-10.8-2.9-3.8-4.9-1.8-20.7 3.1-23.3 1-.6 4.9-1 8.7-1 4.4 0 7.3-.5 7.9-1.3.6-.6 1.3-7 1.7-14.1.3-7 1.1-13.7 1.7-14.8 1.8-3.4 10.9-6.9 18.1-6.9 3.5 0 7.4.4 8.8.9 5 1.9 5.2 2.9 4.4 19.8l-.7 15.7 21.1-.7 21-.7.7 8.6.7 8.6 3.1-5.3c1.6-2.9 6.8-9.1 11.6-13.8 14-13.9 27.1-18.9 44-17 14.4 1.6 25.5 7.6 34 18.4 2.6 3.3 5.3 7 6 8.1 1 1.6 1.1-.5.7-10.9-.3-7.6-.1-13.7.5-14.8 1.2-2.3 9.1-6.3 14.2-7.2 6.7-1.2 9.4.5 22.2 14.5 6.6 7.2 16.5 17.4 22 22.7l10 9.6.5-21.9.5-21.9 3.2-2.2c6.1-4.1 23.9-5.7 27.8-2.4.9.7 1.3 9.2 1.8 32.2.3 17.2 1.1 40.2 1.8 51.1.9 14.8.9 20.4 0 22.3-1.3 3-8.2 6.3-13.2 6.4-6.3 0-18-9.1-41.1-31.8-7-7-12.9-12.4-13.2-12.2-.2.3-.1 9 .4 19.5.6 15.9.5 19.4-.7 21.3-3.8 6.1-24.1 10.7-29.1 6.6-2-1.7-2.3-3.1-2.8-12.9-.8-16.6-.9-16.9-4.5-10.7-1.6 2.9-5.9 8.3-9.4 12.1-10.7 11.3-22.3 16.1-39 16.1-16.5 0-28.4-4.9-38.5-15.7-3.3-3.5-6.9-8-8-10.1l-2-3.7.7 9.8c.6 9.2.5 9.9-1.6 12.1-5.7 6-21.5 9.2-27.3 5.4-2.2-1.5-2.7-2.7-3.6-10.5-.6-4.8-1.6-16.2-2.2-25.3s-1.3-18.4-1.6-20.7l-.5-4.1-4.9-.4-5-.3v56.7l-2.8 2.8c-3.4 3.4-8.7 5-16.5 5m114.416-38.225c3.278-.037 6.552-1.027 9.283-3.076C363 90.6 366.1 75.8 362.2 68c-1-2-3.2-4.2-5.2-5.2-7.8-4-19.9-.3-24.4 7.4-2.8 4.7-2.8 14.9 0 20.3 2.818 5.381 8.674 8.342 14.517 8.275M55.35 84.735a1 1 0 0 0 .248-.036c1-.3 7.3-1.299 13.9-2.199S82.2 80.6 83.2 80.2c1.4-.6.899-2.2-3.701-12.1-2.9-6.2-6-12-6.7-12.8-2-2-3.3-.3-11.8 16.1-5.25 10.032-6.721 13.295-5.649 13.334m222.02-48.993c-6.55.046-11.596-2.379-14.97-7.441-5.9-8.8-3.201-20.7 6.099-26.4C270.8.4 273.5 0 280.4 0c8.6 0 8.9.1 12.1 3.3 4.1 4.1 5.2 9 3.6 16.3-2.4 10.5-7.9 15.6-17.4 16.1q-.675.038-1.33.042\"/>\n</svg>\n", + "id": "6a6339fe3c6e0726c3955341" + }, + { + "title": "DOUGLAS", + "slug": "douglas", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 501 93\">\n <path d=\"M99.517.015C90.853-.068 82.44 2.431 75.11 7.096c2.249 1.75 4.248 3.666 5.998 5.832a37.5 37.5 0 0 1 18.41-4.582c21.66 0 36.988 15.911 36.988 38.07 0 21.993-15.412 37.821-36.988 37.821-21.41 0-36.738-15.745-36.738-37.82a40.6 40.6 0 0 1 4.082-18.244 23.1 23.1 0 0 0-5.998-6.415c-4.581 7.414-6.914 15.911-6.914 24.658 0 26.825 19.16 46.402 45.651 46.402 26.242 0 45.902-19.91 45.902-46.402 0-26.49-19.744-46.4-45.985-46.4M212.98 56.413c0 3.749-.5 7.498-1.416 11.08-3.166 10.663-11.996 16.66-23.825 16.66-11.746 0-20.577-5.997-23.742-16.66-1-3.582-1.417-7.331-1.417-11.08V1.765h-8.83V57.33c0 4.665.666 9.33 1.916 13.828 4.332 13.579 15.495 21.66 32.24 21.66 16.66 0 27.74-8.33 32.239-21.91 1.166-3.665 1.832-9.247 1.832-13.828V1.765h-8.83zM58.447 79.156c-2.415 1.083-4.998 1.832-7.58 2.332-4.665.917-9.414 1.25-14.246 1.166H9.714V10.012h26.99c4.75-.083 9.498.333 14.246 1.166 17.078 3.666 26.49 15.995 26.49 35.238a44.4 44.4 0 0 1-3.665 18.244c1.582 2.583 3.582 4.832 5.831 6.748 4.332-7.08 6.665-15.661 6.665-24.992 0-23.242-12.246-38.57-33.156-43.152-4.998-1-10.08-1.5-15.162-1.416H.8v89.137h37.154c5.082.083 10.164-.333 15.162-1.333 3.915-.833 7.664-2.166 11.246-4.082-2.332-1.75-4.332-3.999-5.915-6.414m423.36-35.988-9.414-4.582c-7.998-3.916-12.496-8.664-12.496-16.161 0-8.331 5.748-14.33 14.745-14.33 9.247 0 14.495 6.499 15.911 16.829h8.331C497.301 7.679 487.304.015 474.642.015c-13.912 0-23.575 10.08-23.575 22.826 0 11.663 7.08 19.077 18.16 24.242l9.497 4.415c6.748 3.166 12.912 8.247 12.912 17.328 0 9.163-6.497 15.411-16.16 15.411-10.414 0-17.995-5.998-19.578-20.243h-8.83c1.416 19.66 12.662 28.824 28.324 28.824 15.245 0 25.408-10.164 25.408-24.409-.167-14.162-9.414-20.576-18.994-25.241m-77.641-41.32-34.572 89.137h9.913l10.58-28.324h36.738l10.663 28.324h10.163L412.996 1.848zm19.576 52.483h-30.49l10.33-27.408c1.833-4.832 3.416-9.663 4.915-14.495 1.583 4.832 3.25 9.663 5.082 14.495zm-87.47-52.483h-8.83v89.137h35.737l3.499-8.33h-30.406zm-69.31 48.234v8.33h42.069c-3.25 15.495-16.162 25.825-33.24 25.825-21.659 0-36.654-15.828-36.654-37.904 0-21.992 15.245-37.904 36.655-37.904 14.328 0 26.074 7.414 31.323 20.243h9.496C311.113 11.095 295.12.1 275.791.1c-26.074 0-45.484 19.91-45.484 46.317 0 27.158 18.744 46.568 45.485 46.568 25.325 0 43.402-18.244 43.152-42.735z\"/>\n</svg>\n", + "id": "6a633a0c3c6e0726c395537b" + }, + { + "title": "EDEKA", + "slug": "edeka", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 500 73\">\n <path d=\"M0 37v36h85V54H38v-7h47V30H38v-7h47V1H0zm94-.1V73h33.5c20.7 0 35.4-.4 38.7-1.1 18.2-3.8 28.5-16.4 29.6-36.1.8-15.8-4.5-25.6-17-31.4l-6.3-2.9-39.2-.3L94 .9zM147.2 26c5.4 1.5 7.8 5.1 7.8 11.6 0 4.8-.4 5.9-3.4 9.2-3.3 3.6-3.6 3.7-11.5 4l-8.1.4V25h5.8c3.1 0 7.4.5 9.4 1M201 37v36h85.1l-.3-9.2-.3-9.3-23.2-.3L239 54v-7l23.3-.2 23.2-.3.3-8.3.3-8.2H239v-7l23.3-.2 23.2-.3.3-10.8.3-10.7H201zm94 0v36h37.9l.3-11.5.3-11.6 8.9 11.6 8.9 11.5 39.5-.2 39.5-.3 1.1-4 1.2-4h24.7l1.5 4.2 1.4 4.3h39.6l-7.4-22.8c-4.1-12.5-9.3-28.7-11.6-36L476.7 1h-61.2L404 35.5c-6.3 19-11.8 34.4-12.1 34.3-.4-.2-6.4-7.4-13.4-16.1-11.1-13.9-12.5-16-11.3-17.5.7-.9 7.2-8.7 14.3-17.2 7.2-8.5 13.4-16.1 13.9-16.8.6-.9-4-1.2-21.7-1.2h-22.4l-9.1 13.7-9.2 13.8V1h-38zm153.4-5.8c1.5 5.4 2.9 10.5 3.2 11.3.5 1.2-.6 1.5-6.6 1.5-6.3 0-7.1-.2-6.6-1.8.3-.9 1.7-6.3 3.2-12 1.5-5.6 3.1-9.9 3.5-9.5s1.9 5.2 3.3 10.5\"/>\n</svg>\n", + "id": "6a633a173c6e0726c39553b0" + }, + { + "title": "empto", + "slug": "empto", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 499 148\">\n <path d=\"M356 11v10.9l-6.7.3-6.8.3v17l6.8.3 6.7.3v27.4c0 25 .2 27.9 2 32.8 3.5 9.4 10.2 13.8 22 14.5 4.2.2 10.2-.1 13.4-.8l5.7-1.2-.5-3.6c-.3-2.1-.8-6.1-1.2-9l-.6-5.3-4.4.7c-5.4.8-9.7-.8-11.3-4.2-.7-1.6-1.1-10.9-1.1-26.9V40h16V22h-16V0h-24zm79.1 10.5c-14.9 3.3-23.6 10.6-27.2 22.7-1.9 6.1-2 8.7-1.7 25.5.4 16.8.7 19.4 2.8 24.7 3 7.8 9.7 14.5 17.6 17.7 5.5 2.2 7.2 2.4 24.9 2.4 15.7 0 19.9-.3 24.5-1.8 10.5-3.5 16.8-9.6 20.6-20.2 2.6-7.4 3.2-34.7 1-44.9-3-13.2-9.7-20.6-22.5-24.7-8.7-2.8-30.5-3.6-40-1.4m35.4 21.1c2.9 1.4 4.7 3.4 6.5 7 2.3 4.5 2.5 6 2.5 18.4 0 16.3-1.6 21-8.8 25.1-3.9 2.2-5.2 2.4-18.2 2.4-16.7 0-20.4-1.3-24.5-8.6-2.1-3.8-2.5-5.9-2.8-16.5-.7-19.2 2.4-26.2 12.8-29.3 1.9-.5 9.1-.9 16-.8 10.4.2 13.2.6 16.5 2.3M27.3 22.8c-7 2.5-12.3 6.2-16.6 11.4C3.1 43.7 0 53.5 0 68.6c0 11.2 1.9 19.1 6.3 26.7 3.9 6.6 12.8 14.2 19.5 16.7 7.2 2.8 19.5 3.6 28.9 2 7.5-1.2 21-7 21.9-9.3.4-1.2-5-14.7-5.9-14.7-.3 0-3.1 1.2-6.3 2.6-8.3 3.7-22.2 4.5-27.9 1.6-6.1-3.1-9.6-8-11-15.5l-.7-3.7h27.1c24.2 0 27.2-.2 27.8-1.6 1.2-3.1-1.4-24.7-3.6-30.6C73 34.9 66.6 28 58.8 24.5c-8.3-3.8-23.3-4.6-31.5-1.7m22.8 19.8c3 2.6 4.9 7.5 4.9 12.4v4H24.8l.7-3.3c1.2-5.7 4.7-11.8 7.9-13.9 4.1-2.5 13.5-2.1 16.7.8m87.4-18.8c-3.3 1.6-7.4 4.5-9.2 6.5l-3.1 3.6-.7-6-.7-5.9H88v7.5c0 8.3-.7 7.5 8.5 9.3l4 .8.3 28.2.2 28.1-3.7 1c-2.1.5-4.7 1.1-5.8 1.3-1.8.3-2 1.2-2.3 7.6l-.3 7.2H136V98.2l-4.7-.9-4.8-.8-.3-25.2-.2-25.1 3-2.6c5.4-4.5 16-4.8 20.6-.5 3.8 3.5 4.4 7.9 4.4 31.1v21.7l-4.7 1.3-4.8 1.4-.3 7.2-.3 7.2H188V98.2l-3.7-.7c-2.1-.4-4.4-1.1-5-1.7-1-.8-1.3-6.8-1.3-24 0-25.8.1-26.3 7.3-30 5.4-2.7 13.6-2.2 17.2 1.2s4.5 9.9 4.5 32.5v20.4l-4.2 1.1c-2.4.6-4.9 1.3-5.5 1.5-.9.3-1.3 2.7-1.3 7.5v7h47V98.2l-4.8-.7c-2.6-.3-5.3-.9-5.9-1.3-.8-.5-1.3-8.9-1.5-26.7-.5-29.4-1-32-7.8-39.8-5.8-6.6-12.3-9-22.5-8.5-9.7.6-14.5 2.8-20.6 9.6l-4.3 4.8-3.1-4.5C168 24.3 161 21 151.1 21c-6.3 0-8.7.5-13.6 2.8M291 23c-2.5 1.2-6.1 3.7-8.1 5.6l-3.6 3.5-.7-5.1-.7-5-17.7.2-17.7.3-.3 6.3c-.2 3.6.2 6.9.8 7.7.6.7 3.4 1.6 6.3 2s5.5 1.3 5.9 1.9.8 21 .8 45.3c0 49.7.7 45.4-7.7 46.8l-4.3.7V148h48.1l-.3-7.2c-.3-8 .6-7-9-9.2l-2.8-.6v-26.4l3.3 3.1c5.8 5.6 9.3 6.8 19.2 6.8 7.8 0 9.7-.4 14.7-2.8 9.2-4.5 15.8-13.9 18.8-26.7 1.8-7.7 1.6-26.1-.4-34-3.3-12.9-10-22.6-18.8-27.1-6.3-3.3-19.6-3.8-25.8-.9m11.6 18.6c7 3.3 10.9 15 10.2 30.4-.5 10.5-2.7 16.8-7.2 21-3.5 3.2-13.6 4.1-18.5 1.6-7.2-3.8-7.1-3.4-7.1-26 0-19.3.1-20.5 2.2-23.1 4.2-5.3 13.6-7.1 20.4-3.9\"/>\n</svg>\n", + "id": "6a633a1f3c6e0726c39553d6" + }, + { + "title": "FestivalGuide", + "slug": "festivalguide", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 501 293\">\n <path d=\"M197.09 292.597c-5.356.033-10.72-1.61-13.689-4.698-2.9-3-2.901-3.1-3.201-17.6-.3-13.3-.499-14.6-2.299-15-1.3-.4-1.9-1.4-1.9-3.4v-2.898h19v2.898c0 2.1-.6 3-2.1 3.4-2 .5-2.101 1.1-1.701 13 .2 10.6.6 12.8 2.201 14.6 2.3 2.5 7.198 2.8 10.398.5 2.1-1.4 2.202-2.2 2.202-14.5 0-10.6-.3-13.1-1.5-13.5-.9-.4-1.5-1.9-1.5-3.5v-2.898h14v2.898c0 1.6-.6 3.1-1.5 3.5-1.2.4-1.5 2.801-1.5 12.801 0 13.7-1.602 19-6.702 21.9-2.884 1.666-6.544 2.474-10.209 2.497M135 292.3c-12 0-18-7.1-18-21.6 0-11.5 4-17.8 13.6-21.2 5.2-1.9 7.5-1.8 12.4.1 3.1 1.3 4.4 1.4 5.3.5.6-.6 2.1-1.1 3.4-1.1 2.2 0 2.3.4 2.3 6.5v7.2c0 .5-1.1.9-2.4 1.1-2.1.3-2.8-.3-4-3.1-2.7-6.6-9.2-8.7-14.1-4.5-5 4.5-5.9 21.5-1.4 27.2 3.8 4.9 11.9 2.5 11.9-3.4 0-2.1-.599-2.9-2.599-3.4s-2.501-1.2-2.201-3.4l.3-2.7h9.5c9.3 0 9.5 0 9.8 2.4.2 1.4-.3 3-1.2 3.6-1 .8-1.6 3.3-1.8 8.1-.3 6.4-.5 6.9-2.6 7.2-1.3.2-3.2-.4-4.2-1.3-1.7-1.5-2-1.5-5.2.1-1.9 1-5.5 1.7-8.8 1.7m118-.2-9.2-.3-9.3-.3-.3-2.8c-.3-2.2.1-3 1.701-3.4 2-.5 2.1-1.2 2.1-14.9 0-13.3-.1-14.4-2-15.4s-2.701-4-1.301-5.3c.3-.4 4.6-.7 9.5-.7h8.8v3q0 3-1.5 3c-1.3 0-1.5 2.3-1.5 14.9 0 12.3.3 15 1.5 15.5.9.3 1.5 1.8 1.5 3.6zm33.577-.218a80 80 0 0 1-4.076-.082c-7.9-.3-8.001-.3-8.301-3.1-.3-2.2.1-3 1.701-3.4 2-.5 2.1-1.2 2.1-15.3 0-13.9-.1-14.8-2-15.3s-2.701-3.6-1.301-5c.3-.4 5.7-.7 11.9-.7 17.7 0 25.7 4 28.5 14.3 2.4 8.9-.7 18.9-7.3 23.7-4.2 3.063-11.922 4.824-21.223 4.882M348 291.5c-17.3 0-17.501-.001-17.801-2.201-.2-1.4.4-2.7 1.701-3.5 2-1.2 2.1-2.2 2.1-15.5 0-13.2-.1-14.3-2-15.3s-2.701-4-1.301-5.3c.3-.4 8.2-.7 17.5-.7H365v7.6c0 7.2-.1 7.5-2.2 7.2-1.2-.2-2.7-1.3-3.3-2.4-2.2-4.5-3.599-5.4-8.599-5.4h-4.9v6.1c0 5.2.198 6 1.798 5.7.9-.2 2.402-1.8 3.202-3.5 1-2.2 2.198-3.3 3.798-3.3 2.1 0 2.202.3 2.202 9s-.102 9-2.202 9c-1.6 0-2.798-1.1-3.798-3.3-.8-1.7-2.302-3.3-3.202-3.5-1.6-.3-1.798.5-1.798 6.2v6.6h4.798c5.2 0 8.302-2.2 9.702-6.8.4-1.5 1.4-2.2 3.1-2.2 2.5 0 2.498.1 2.198 7.7l-.298 7.8zm-58-6.5h3.4c2.2 0 4.499-.9 6.299-2.4 2.7-2.3 2.8-2.801 2.8-11.901 0-8.7-.2-9.8-2.4-12.1-1.8-1.9-3.5-2.6-6.3-2.6H290zm-192.8-7.5-2.8-2.7c-4.8-4.5-16.7-8.7-29-10.3-2.8-.3-14.9-.7-27-.9-19.7-.2-22.4-.4-26.4-2.3-7.9-3.6-12-10-11.9-18.3 0-2.4.098-2.4 1.198-.5.7 1.1 2.6 3.4 4.4 5.1 5 4.9 9.802 5.7 33.302 4.9 17.9-.6 21.8-.4 31.1 1.3 17.7 3.3 25.798 8.9 26.698 18.4zm291.18-1.248c-.302-.015-.459-.344-.58-.953-.7-3.1 1.2-9.7 3.5-12.1 3.5-3.8 13.6-7.8 23.7-9.6 7.6-1.4 14.5-1.6 32.5-1.4 22.5.3 23.1.2 27.8-2.1 3.4-1.6 5.4-3.4 6.5-5.9l1.7-3.5.3 4.8c.4 6.5-2.9 11.4-10.1 15-5.4 2.6-5.9 2.6-29.799 3-25.5.4-32.601 1.3-44.201 5.6-3.2 1.2-7.1 3.5-8.7 5.1-1.424 1.425-2.18 2.074-2.62 2.053M97.593 226.909C86.687 226.94 77.346 222.305 72 214.1c-3.2-5.1-6-15.5-6-22.7v-4.1l-8.6-.7c-4.8-.3-8.8-.5-9-.4-.1.2-.9 5.7-1.8 12.2-2.5 19.4-7.402 26.3-19.802 28.1C16.098 228.1 5 221.3 5 213.1v-3.5l4 4.2c3.6 3.7 4.6 4.2 8.6 4.2 3.9 0 4.7-.4 6.3-3.1 3-4.9 4.3-14.3 8.6-60.9.8-9.1 2-19.5 2.5-23.2 1.7-11.2 1.598-11.4-3.202-12.2-11.2-1.8-20.8-9.4-23.5-18.5-2.9-10-.198-20.2 6.602-24.7 6-4 11.5-4.2 19-.9 10.2 4.6 17.5 14.5 20.2 27.2 1.3 6.5.899 6.5 22.099 2.3 23.8-4.6 40.4-6.3 60.3-6.4 9.9-.1 19.5.2 21.3.6l3.2.7V92c0-35.3 18-65.1 49.3-81.5 10.4-5.4 15.3-7.2 24.7-9s30.7-1.3 40.5.9c8.7 2 25.7 10.2 32.7 15.9 2.9 2.3 6.8 5.3 8.701 6.6 4.8 3.4 14.8 17.2 19.2 26.6 5.2 11.1 7.999 22.9 8.599 36.1l.6 11.2 3.601-1.2c5.5-1.7 37.4-1.2 53.2.8 7.5.9 19 2.8 25.5 4.2 20 4.2 18.1 4.3 18.9-.7 2.9-17.4 17.8-31.3 33.5-31.3 12.7 0 20 7.3 20 20 0 16.1-13 26.9-34.5 28.7l-3 .2-1.202 12c-.7 6.6-1.699 16.5-2.199 22-.6 5.5-1.9 19-3.1 30-3.1 28.5-2.1 34.5 5.8 34.5 2.7 0 4.2-.8 7.101-3.8 2-2 4.099-4.6 4.799-5.7 1.1-1.8 1.201-1.8 1.201 1 .1 7-5.302 14.2-12.602 16.6-7.6 2.5-21.398-1.6-24.398-7.2-1.1-2.1-1.1-2.1-4.3 1-8.7 8.4-25.5 7.5-31.2-1.6-1-1.5-1.9-3-2-3.2-.2-.2-1.7 1.3-3.5 3.3-5.7 6.5-12.802 8.6-22.602 6.6-4.8-1-6.598-2.1-10.398-5.9-6.3-6.2-7.4-10.3-7.4-27.7v-14.1l-4.6 1.5c-4.6 1.5-4.6 1.5-8.4 11.1-7.1 18.1-15.3 29.7-23.9 33.7-5.7 2.7-15.1 3.2-22.1 1.3-5.1-1.4-11.6-8-13.4-13.7l-1.401-4.3-2.299 4.7c-4.7 9.8-12.2 14.4-23.4 14.4-6.9 0-15.202-3.8-17.702-8.1-1-1.6-2.098-2.9-2.398-2.9-.4 0-1.8 1.4-3 3.1-1.2 1.8-4.601 4.3-7.701 5.7-4.9 2.2-6.4 2.4-14.2 2-13.7-.8-19.4-5.1-20.7-15.5-.5-4.4.6-13.7 5.5-49.4 1-6.9 1.6-13.1 1.4-13.8-.2-.6-1.4-1.1-2.7-1.1-3.6 0-5.5-1-5.5-3 0-4 1.1-5 5.5-5h4.2l1.3-9.3c.7-5 1.7-9.8 2.2-10.5.6-.7 3.5-1.2 7.3-1.2 9.8 0 10.901 2.6 7.901 17.8l-.602 3.1 8.801.3c8.4.3 8.9.4 9.2 2.6.6 4.1-1.4 5.2-9.8 5.2-9.2 0-9.799.4-11.099 9.2-7.6 51.4-7.2 48.1-6.4 54.1 1 7.1 3.8 9.7 10.5 9.7 6.3 0 10.2-1.9 13-6.5 2.1-3.4 4.9-15 6.9-28.5.5-3.6 1.9-12.7 3-20.3 1.2-7.6 2.1-16.4 2.1-19.6 0-3.1.499-6.2 1.199-6.9 1.9-1.9 14.3-1.6 15.9.5 1.9 2.2 1.5 13.3-1 30.4-3.5 23.2-4.7 40-3.199 44.8 2.1 7.2 9.3 7.7 16.1 1.2 6.5-6.2 7.098-10.1 6.798-43.9-.3-28.7-.3-29.2 1.9-31.3 1.4-1.4 3.8-2.3 7-2.6 4.2-.4 5.402-.1 7.702 1.9 4 3.4 4.6 8.9 3.5 29.9-1 17.9-.1 34.6 2.2 43.1 1.2 4.5 4.899 8.8 7.599 8.8 2.1 0 6-2.5 8.6-5.5 3.9-4.6 13.7-28.7 13.7-33.9 0-.8-1.3-1.9-2.9-2.5-7.4-3.1-13.2-12.9-13.9-23.6-.9-14.6 5.3-22.8 17.3-22.8 8.6 0 15.3 5.2 17.6 13.6 1.4 5.1 1.4 15.7 0 21.7-1.6 6.7-1.6 6.7 3.1 6.1 3.3-.5 4.4-1.1 4.6-2.6.6-3.9 4.5-15 6.8-19.6 5-10 16.301-16.9 27.301-16.9 5.3 0 12.399 3 14.299 5.9 1.2 2 1.3 1.9 3.8-1 4.6-5.5 21-7 21-1.9 0 1.1-1 2-3 2.3-2.5.6-3.1 1.3-4.4 5.9-1.7 5.8-6.6 50.6-6.6 59.9 0 3.2.7 7.7 1.6 9.9 1.4 3.5 2 4 4.9 4 1.8 0 4.4-.9 5.7-2 5.3-4.1 5.7-6.1 10.8-55 1.1-10.7 2.5-23.1 3-27.4.6-4.4 1-9.6 1-11.7 0-3.6-.2-3.9-3.7-4.8-2.1-.6-7.8-1.7-12.8-2.6-38.4-6.5-77.1-7.9-86.5-3l-3.2 1.7.601-3.9c1.7-10.4 1.8-28.1.1-36.4-6.3-31.3-27.902-54.8-60.202-65.5-8.3-2.7-9.798-2.9-25.298-2.9-15.4 0-17 .2-25 2.8-11 3.7-19.1 7.7-26.5 13.2-3.3 2.4-7.001 5.1-8.301 6-4.5 3.3-14.299 16.8-18.799 26-7.6 15.8-10.3 35.9-6.9 51.5 2 9.2 2.198 8.9-4.202 6.7-5.3-1.7-7.698-1.9-26.298-1.4-11.3.3-26.1 1.3-33 2.1-16.9 2.1-32.7 4.5-37.5 5.6-2.2.5-5.4 1-7.1 1s-3.602.6-4.102 1.2c-.6.7-1.999 12.1-3.199 25.3S49.7 170.7 49.4 172.1c-.6 2.6-.5 2.6 8.1 3.7 4.8.7 9.1.9 9.6.6s.9-1.6.9-2.8c0-4.5 5.098-20.1 8.298-25.5 6-10.1 16.2-15 28.9-13.8 11.4 1 16.902 7.3 16.702 19.4-.1 7.9-1.2 11.5-5.5 17.5-4.1 5.8-10.1 9.7-19.8 13l-8.1 2.7.1 8.8c.1 10.2 2.699 17.7 7.599 21.8 4.5 3.8 12.2 2.9 20-2.2 3.7-2.5 3.8-2.7 3.8-8.9 0-5.2.4-6.7 2.5-9.2 4.3-5.2 11.8-5.4 17.5-.5 2.5 2 3 3.2 3 6.8 0 5.3-1.5 7-7 7.9-3.1.5-4.1 1-3.8 2.3.9 4.9 15.401 8 21.701 4.6 5.5-2.9 7.6-6.5 7.6-13.1 0-7.8-2.601-11.3-15.801-21.2s-16.3-14.4-16-23.6c.4-14.7 8.8-23.2 25.3-25.6 18.9-2.8 32.1 5 32.3 19.1.1 6.8-1.9 10.9-6.1 12.6-4.6 2-8.099 1.9-11.799-.4-3.5-2.1-4.401-5-3.201-9.8 1-4 4.2-6.3 8.5-6.3 4.1 0 4.4-2.5.8-6.4-3.1-3.3-6.4-4.6-12.2-4.6-11.6 0-17.8 11.4-12.3 22.4 1.6 3.1 5 6.3 14 12.8 14.3 10.5 17.3 14.6 17.8 24.9.3 5.1-.1 7.7-1.8 11.7-4.6 10.7-14.2 15.5-31 15.5-11.7.1-19.7-2.2-24-6.8-2.9-3.1-4.1-3.1-6.9-.1-3.3 3.5-11.7 6.8-18.699 7.4q-1.418.105-2.807.109m288.705-7.94c3.9.045 8.344-3.799 10.202-10.269 1.6-5.8 5.5-41.3 5.5-50.7 0-7.6-1.6-14.2-4.1-16.9s-8.901-2.9-11.201-.3c-2.7 3-4.5 9.4-6.6 23.9-3.9 26.8-3.7 41.3.7 50.3 1.293 2.696 3.312 3.944 5.5 3.97M87.8 177.9l3.801-.5c15.5-2.2 23.4-10.298 23.4-23.898 0-5.5-2.799-10.502-6.599-12.102-4.2-1.8-4.2-1.8-8.4.4-5.9 2.9-9.6 12.401-11.6 29.901zm245.036-5.57c1.048.026 1.375-.966 2.166-4.129.7-2.6 1.498-8.8 1.798-13.9l.5-9.2-3.6-3.6c-1.9-1.9-4.098-3.5-4.798-3.4-2.5.1-5.4 1.6-7.4 3.8-2.4 2.7-3.3 13.2-1.5 18.5 1.3 4.1 7.199 10.1 11.199 11.5.703.252 1.224.419 1.635.429m-76.596-45.58c-2.278.047-4.672-.825-6.838-2.85-3.4-3.2-3.402-11.6-.102-14.6 1.2-1.1 2.902-2.299 3.702-2.599 5.5-2 11.6.8 12.6 5.7 1.509 8.121-3.542 14.23-9.362 14.349M34.97 108.703c1.002.015 1.756-.078 2.131-.303C38.9 107.3 37.5 93 35 87.1c-1.2-2.7-3.2-5.9-4.5-7.1-3.1-2.9-10.2-3.7-13.3-1.5-8 5.8-7.1 20.3 1.6 26.2 2.843 1.869 11.828 3.936 16.17 4.002m428.73-1.701h4.5c9.6 0 20.601-5.401 24.901-12.301 2.7-4.3 2.1-11-1.4-14.4-3-3.1-9.8-4-14.2-1.9-6.3 2.8-12.2 13.4-13.3 23.8z\"/>\n</svg>\n", + "id": "6a633a2c3c6e0726c395540b" + }, + { + "title": "Filmszene Köln", + "slug": "filmszene-koeln", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 499 135\">\n <path d=\"M314 135c-1.2 0-.8-.7 14.9-32.5 6.8-13.7 12.7-26 13.2-27.3.8-2.1.7-2.2-5.1-2.2h-6V14h33v11h-20v12h17.1l9.1-18.7C375.3 8 379.6.2 379.8.9s-6.2 14.5-14.2 30.8c-8 16.2-14.6 29.7-14.6 29.9s2.5.4 5.5.4c3.1 0 5.5.5 5.5 1 0 .6-2.9 6.8-6.5 14L349 89.9l8.5 15.1c4.7 8.3 8.5 15.3 8.5 15.5 0 .3-3.3.5-7.3.5h-7.3l-7.5-13.3-7.4-13.2-.3 13.2-.3 13.2-7.2.3-7.2.3-3.3 6.7c-1.7 3.8-3.6 6.8-4.2 6.8m75.5-13.5c-7.2 0-11.5-2.2-16.2-8.3-3.9-5.2-5.3-9.5-6-18.8-1.2-15.1 4.5-27.4 14.7-31.8 7-3 15.5-1.3 21.3 4.2 10.4 9.9 11.7 34.2 2.4 46.4-4.7 6.1-9 8.3-16.2 8.3m30.5-.5V62h13v48h20v11zm39 0V61.9l6.2.3 6.2.3 7.5 15 7.6 15 .3-15.3.3-15.2H499v59h-11l-7.7-15.5C476 97 472.2 90 471.8 90c-.5 0-.8 7-.8 15.5V121zm-69.5-11.5c3.3 0 4.2-.5 5.8-3.3 3.9-6.6 3.5-25.5-.6-30.4-3.3-3.9-6.2-4.4-9.1-1.5-3.5 3.5-4.9 9.8-4.4 19.8.5 11.4 2.7 15.4 8.3 15.4M174.242 73.918c-2.772-.023-5.557-.815-8.941-2.418L160 69.1v-6.6c0-6.6.7-7.8 3.1-4.9 3.1 3.8 10.3 5.6 12.7 3.2 2.7-2.7 1.3-6.4-5.4-13.9-9.9-11.1-12.2-17.6-9.1-25.2 1.7-3.9 3.5-5.5 8.4-7.3 4.3-1.6 12.3-1.3 16.6.7 2.4 1.1 2.7 1.7 2.7 6.6 0 2.9-.2 5.3-.5 5.3s-2.2-.7-4.2-1.5c-5.3-2.2-10-2-10.8.5s.6 4.7 7.2 11.9c7.7 8.5 9.5 11.6 10.1 17 .8 8.8-3.1 15.4-10.7 18-2.072.691-3.961 1.034-5.858 1.018M39 73.1V14h14l-.2 29.2-.3 29.3-6.7.3zm100 0-.2-17.8-.3-17.8-5.1 9.5c-2.8 5.2-5.7 9.6-6.5 9.8-.9.1-3.3-3.3-6.4-9l-5-9.3-.3 17.2L115 73h-13V13.9l6.3.3 6.2.3 6 11.2c3.3 6.2 6.3 10.9 6.6 10.5.4-.4 3.3-5.6 6.5-11.5l5.8-10.8 6 .3 6.1.3v58l-6.2.3zM63 73V14h13v48h20v11zm150.7 0c-10.1 0-18.6-.2-18.9-.5s3.9-11 9.2-23.8l9.8-23.2-8.9-.3-8.9-.3v-4.8c0-2.6.3-5.1.7-5.4 1-1 35.3-.8 35.3.2 0 .4-1.4 4.1-3.1 8.2-7.6 18.2-15.9 38.2-15.9 38.6 0 .1 4.3.3 9.5.3h9.5v11zm25.3 0V14h33v11h-20v12h18v11h-18v14h20v11zm42 0V13.9l6.1.3 6.1.3 7.7 15 7.6 14.9.3-15.2.3-15.2H321v59h-11l-8.2-16.3-8.3-16.2-.3 16.2L293 73zM.5 72.5.2 43.2 0 14h30v11H14.2l-.4 6-.3 6H30v10.9l-8.1.3-8.1.3-.1 12-.2 12zM346.4 62c2 0 3-1.2 5.5-6.6 1.7-3.6 3.1-6.8 3.1-7s-2.5-.4-5.5-.4H344v7c0 6.7.1 7 2.4 7m50.05-6.514c-1.372.008-2.75-.574-3.65-1.886-1.2-1.7-.9-5.1.4-6.4.7-.7 2.1-1.2 3.3-1.2 2.9 0 4.5 1.9 4.5 5.2 0 2.624-2.266 4.274-4.55 4.286m-14.15-.629a8 8 0 0 1-.9-.056c-3.4-.4-4.8-3.701-2.8-6.701 2.7-3.8 8.4-2.2 8.4 2.5 0 2.628-1.889 4.27-4.7 4.257\"/>\n</svg>\n", + "id": "6a633a3a3c6e0726c3955446" + }, + { + "title": "GEBERIT", + "slug": "geberit", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 498 68\">\n <path d=\"M113.5 1.4c-8.8 2-12.8 3.9-17.8 8.5-6.7 6.2-9.1 12.5-9.2 24.1 0 7.9.4 10.4 2.4 14.7 6 13.4 21 20.3 41.4 19 5.1-.3 11.6-1.1 14.5-1.7l5.2-1.2V29h-28v12h11v6.4c0 7.1-.5 7.6-6.8 7.6-8.3 0-16.4-4.5-19.6-10.9-4.1-7.9-2.3-19.6 3.9-25 7.8-6.8 22.8-7.9 35.8-2.6 1.5.6 1.7 0 1.7-6.3V3.1L144.3 2c-6-1.8-23.9-2.2-30.8-.6M0 34v33h67V1H0zm164 0v33h48V55h-30V40h27V27h-27V14.1l14.8-.3 14.7-.3v-12l-23.7-.3L164 1zm62 0v33.2l18.8-.4c18-.3 18.9-.4 24.3-3 7.5-3.7 10.3-8.6 9.7-16.9-.5-6.9-3-10.3-9-12.1l-3.8-1.1 3.1-1.5c5.2-2.6 8.3-7.7 8.3-13.6 0-7-2.6-11.3-8.9-14.6-4.7-2.4-5.9-2.5-23.7-2.9L226 .8zm31.8-18.4c3.1 2.2 2.9 6.7-.4 9.3-2 1.6-4.1 2.1-8.5 2.1H243V14h6.3c4 0 7 .5 8.5 1.6m-.3 24.8c3.9 1.7 5.4 5.3 3.9 9.5-1.1 3.1-5.8 5-12.6 5l-4.8.1V39h5c2.8 0 6.6.6 8.5 1.4M292 34v33h48V55h-30V40h27V27h-27V14h29V1h-47zm62-6.8c0 14.5-.3 29.3-.7 33l-.6 6.8H371V41h4.1c6.1 0 8.9 3.4 13 15.8l3.3 10.2h8.8c4.8 0 8.8-.4 8.8-.9 0-1.5-8.9-25.9-10.2-28.1-.7-1.1-2.1-2.3-3.2-2.6-1.6-.5-1.2-1 1.9-2.8 4.8-2.7 7.5-6.3 8.4-11.2 1.5-8.8-1.6-14.9-9.4-18.5-3.4-1.6-6.7-1.9-23.2-1.9H354zm32.5-10.7c2.8 2.7 3 4.2 1.4 7.9-1.4 3-5.5 4.6-12 4.6H371V14h6.5c5.7 0 6.9.3 9 2.5M420 34v33h18V1h-18zm28-26.5V14h16v53.1l8.8-.3 8.7-.3.3-26.3.2-26.2h16V1h-50z\"/>\n</svg>\n", + "id": "6a633a463c6e0726c395547a" + }, + { + "title": "INTRO", + "slug": "intro", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-3.452 -3.452 464.221 121.986\">\n <path d=\"M0 103.659h33.511V0H0zm165.703-73.593h21.34v.828c.026 43.207 4.047 73.79 55.806 73.79h21.702V74.62H242.85c-6.168 0-11.071-1.822-14.575-5.418-7.706-7.902-7.326-22.867-7.049-33.794.04-1.6.078-3.115.091-4.521l.004-.82h43.232V0h-98.85zM107.05 0H47.99v103.26h33.511V30.066h22.219c15.008 0 23.97 8.666 23.97 23.181v50.413h33.512V51.594C161.203 20.252 139.947 0 107.051 0m251 0h-24.049c-37.015 0-55.806 24.451-55.806 59.866v44.088h33.51V59.867c0-14.607 8.93-29.801 23.97-29.801h22.375zm40.15 0h-28.99v30.61h28.99c15.04 0 27.28 12.082 27.28 26.93 0 14.851-12.24 26.932-27.28 26.932-14.763 0-26.82-11.635-27.266-26.103h-31.842c.457 31.346 26.799 56.712 59.109 56.712 32.597 0 59.115-25.811 59.115-57.541 0-31.728-26.518-57.54-59.115-57.54\"/>\n</svg>\n", + "id": "6a633ae43c6e0726c39554af" + }, + { + "title": "MELT! Festival", + "slug": "melt-festival", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 228\">\n <g clip-path=\"url(#a)\" transform=\"matrix(5.067 0 0 -5.067 -118.699 1925.22)\">\n <path d=\"M65.158 369.791c-.456 0-.96-.37-1.124-.826l-11.863-33.06h-9.58l6.187 16.952h-7.929v16.108c0 .456-.37.826-.826.826h-5.108a.826.826 0 0 1-.826-.826v-33.058h-9.091v33.058c0 5.477 4.44 9.917 9.917 9.917h4.461c5.477 0 9.918-4.44 9.918-9.917v-14.442l5.199 14.442c1.972 5.477 4.746 9.917 10.659 9.917h4.117c5.478 0 9.918-4.44 9.918-9.917v-33.06h-9.092v33.06c0 .456-.37.826-.826.826zm143.285 9.09v-9.089h-21.551c.022-.272.035-.551.035-.828v-33.058h-9.09v33.058a.827.827 0 0 1-.827.826h-19.37v9.091h19.37c4.701 0 8.638-3.27 9.659-7.66l6.665 7.66zm-81.868-33.884.002-9.091H96.524c-5.478 0-9.918 4.44-9.918 9.917v23.141c0 5.477 4.44 9.917 9.918 9.917h30.268l-.001-9.091H96.524a.826.826 0 0 1-.827-.826v-14.626l7.825 7.601h22.472v-9.091H95.697v-7.025c0-.457.37-.826.827-.826zm97.512 0v-9.091h-9.091v42.975h9.091v-26.058l-7.626-7.826zm-80.094 0h27.273v-9.091h-27.273c-5.478 0-9.918 4.44-9.918 9.917v33.059l9.091-.001v-33.058c0-.457.37-.826.827-.826\"/>\n </g>\n</svg>\n", + "id": "6a633aee3c6e0726c39554df" + }, + { + "title": "OBI ", + "slug": "obi", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 614.3 145.7\">\n <path d=\"m614.3 121-36.7-16.3V41.1l34.9-15.4V5.4H460.1v20.3L495 41.1v63.6L458.3 121v19.3h156zm-174.5-17v-3.7c0-7.4-3.7-14.8-8.3-19.7s-10.9-8.5-18.3-10.2C420 68.7 425.8 65 430 60c4.2-4.9 6.7-10.8 6.7-19.9v-3.3c0-10.6-3.6-17.4-9.4-22.7S414.5 5.5 400 5.5H225v22.9l28.8 12.8v63.5l-30.7 13.6v22h179.3c13 0 21.1-3.5 27.3-9.2s10.1-13.1 10.1-23.6zm-116-71.7h24.6c8.6 0 10.7 1.2 12.6 3.1s3.1 4.4 3.1 9.2v2.3c0 4.4-1.2 7.2-3.1 9.1s-3.4 3.1-12.6 3.1h-24.6zm41.9 67.1v1.2c0 4.4-1.2 7.2-3.1 9.1s-3.4 3.1-12.6 3.1h-26.3V86H350c8.6 0 10.7 1.2 12.6 3.1s3.1 4.4 3.1 9.2zM190.2 18.9c-10-10-21.4-16.1-80.4-16.1h-7.4C43.4 2.8 32 9 22 18.9c-10 10-16.3 21-16.3 51v5.8c0 30 6.2 41.1 16.3 51 10 10 21.4 16.1 80.4 16.1h7.4c59 0 70.4-6.2 80.4-16.1 10-10 16.3-21 16.3-51v-5.8c0-30-6.2-41.1-16.3-51m-66 27.8V99c0 5.6-1.7 9.2-4.5 12s-7.1 4.5-12.3 4.5H105c-5.2 0-9.5-1.7-12.3-4.5s-4.5-6.5-4.5-12V46.7c0-5.6 1.7-9.2 4.5-12.1 2.8-2.8 7.1-4.5 12.3-4.5h2.4c5.2 0 9.5 1.7 12.3 4.5s4.5 6.5 4.5 12.1\"/>\n</svg>\n", + "id": "6a633bb13c6e0726c3955512" + }, + { + "title": "Sage", + "slug": "sage", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 257 145\">\n <path d=\"M157.107 144.817c-11.885-1.591-21.721-9.1-25.065-19.134-2.809-8.43-1.152-14.945 3.947-15.52 2.306-.26 3.803.156 5.242 1.456 1.474 1.332 1.857 2.322 2.18 5.636.948 9.704 8.106 16.218 17.823 16.218 3.505 0 5.689-.474 8.64-1.874 5.711-2.71 8.734-7.871 8.394-14.328-.228-4.322-2.021-7.616-5.62-10.322-2.813-2.114-6.692-3.887-14.003-6.402-10.117-3.48-14.706-5.71-19.018-9.24-8.017-6.567-11.054-18.632-7.517-29.87 1.509-4.795 3.511-8.081 7.195-11.809 5.497-5.56 12.652-8.42 21.047-8.41 15.148.016 27.437 9.411 30.209 23.091.432 2.132.52 3.745.374 6.813-.301 6.325-1.863 10.848-4.737 13.723-3.23 3.23-8.188 2.658-10.12-1.169-.964-1.907-.94-3.046.12-5.525 1.581-3.697 2.136-5.84 2.136-8.255 0-4.639-1.555-8.52-4.74-11.838-2.335-2.431-4.941-3.91-8.496-4.819-9.141-2.337-17.993 2.302-20.892 10.95-1.03 3.073-1.033 7.736-.008 10.619.963 2.705 2.758 5.226 5.018 7.049 2.547 2.053 8.175 4.767 14.409 6.948 10.07 3.523 13.483 5.115 17.764 8.288 4.378 3.245 7.024 6.996 8.694 12.324.674 2.15.782 3.19.784 7.509 0 4.218-.119 5.428-.754 7.621-2.974 10.261-10.917 17.465-21.816 19.785-2.965.632-8.35.864-11.19.484zM24.764 100.034C12.726 98.135 3.576 90.508.774 80.038c-.89-3.325-.962-9.243-.155-12.55 1.18-4.829 4.028-9.001 6.76-9.903 2.311-.763 5.356.277 6.878 2.349 1.185 1.614 1.144 3.531-.147 6.855-1.441 3.709-1.723 5.676-1.243 8.679.975 6.105 5.307 10.808 11.678 12.68 2.556.75 7.438.704 10.01-.096 9.013-2.806 13.035-12.527 8.634-20.875-2.162-4.102-7.07-7.244-17.092-10.94-10.71-3.95-14.694-6.142-19.096-10.51-3.442-3.414-5.07-6.145-6.213-10.429-.992-3.711-.992-10.243 0-13.972C2.826 13.662 7.899 7.47 15.025 3.95 19.333 1.82 23.048.992 28.245 1c8.99.012 15.714 2.694 21.563 8.596 4.619 4.661 6.783 9.094 7.494 15.355.692 6.094-1.578 9.162-6.546 8.846-3.207-.204-5.245-2.101-5.614-5.226-.657-5.552-1.867-8.47-4.674-11.278-5.473-5.474-14.9-6.444-21.454-2.208-6.7 4.33-8.456 14.237-3.641 20.542 2.507 3.285 6.753 5.705 16.793 9.573 7.78 2.998 10.546 4.289 13.98 6.527 5.039 3.284 8.337 7.272 10.015 12.106 3.731 10.752.32 23.187-8.286 30.205-2.638 2.15-7.322 4.48-10.772 5.357-3.09.786-9.355 1.11-12.34.64zm64.397-.036c-9.303-1.334-18.299-8.088-22.297-16.74-1.992-4.313-2.648-7.474-2.62-12.627.03-5.373.685-8.287 2.894-12.87 2.91-6.035 7.552-10.61 13.755-13.555 4.447-2.11 6.833-2.683 12.034-2.893 6.741-.271 11.878.927 17.004 3.966 2.536 1.504 6.625 5.217 8.385 7.614 1.812 2.469 3.849 6.865 4.792 10.343.865 3.19.873 3.332.995 17.566.11 12.82.064 14.506-.438 15.819-1.776 4.651-9.208 4.945-11.499.454-.585-1.146-.645-2.313-.776-14.93-.119-11.422-.235-14.042-.704-15.83-1.42-5.413-4.741-9.794-9.024-11.902-10.304-5.07-22.244 1.145-24.461 12.734-.606 3.166-.603 4.38.02 7.328a18.03 18.03 0 0 0 4.375 8.502c4.402 4.756 9.19 6.232 16.363 5.047 3.457-.57 4.828-.304 6.466 1.258 3.462 3.301 2.148 7.88-2.791 9.728-3.49 1.306-7.85 1.651-12.473.988m134.57.024c-10.565-1.55-19.435-8.127-23.727-17.594-3.267-7.204-3.196-16.665.18-23.971 3.686-7.978 10.545-13.832 19.097-16.297 3.632-1.047 12.015-1.12 15.878-.14 12.775 3.244 21.06 12.936 21.175 24.768.028 2.726-.063 3.176-.95 4.796-.59 1.076-1.539 2.173-2.385 2.755-2.565 1.765-4.219 1.976-15.5 1.976-9.94 0-10.262-.02-11.693-.752-1.969-1.007-2.76-2.174-2.933-4.332-.116-1.453-.002-1.972.64-2.908 1.73-2.52 1.723-2.52 11.028-2.705 7.87-.157 8.39-.207 8.853-.836 1.015-1.378-.36-4.962-2.864-7.466-3.05-3.05-7.501-4.741-12.44-4.727-5.193.016-8.799 1.48-12.319 5.004-7.23 7.238-7.378 18.596-.334 25.777 3.596 3.666 7.638 5.312 13.043 5.312 5.36 0 7.508-.728 15.87-5.384 7.326-4.077 12.973 3.472 6.869 9.182-6.184 5.783-17.78 8.965-27.488 7.541z\"/>\n</svg>\n", + "id": "6a633bc63c6e0726c395555a" + }, + { + "title": "Splash! Festival", + "slug": "splash-festival", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 254 160\">\n <path fill-rule=\"evenodd\" d=\"M77.624 87.266c-.653-3.365-2.602-5.292-5.345-5.292-.408 0-.833.044-1.267.123-1.919.377-3.947 1.928-5.298 4.063-1.615 2.548-2.166 5.723-1.541 8.938.31 1.598 1.445 5.304 5.291 5.304.42 0 .865-.042 1.32-.133 4.343-.843 8.19-6.06 6.84-13.003m54.215-4.573-.003-.214-.566.107c-1.519.298-9.055 1.995-8.207 6.359.193.996.897 1.524 2.04 1.524q.428-.002.926-.095c3.145-.614 5.821-4.736 5.81-7.681M234.21 23.68l-1.213 39.212-11.959 2.323-1.217-38.739Zm-18.797 34.293v25.298l-13.84 2.69.037-23.36c-.024-.819-.1-1.634-.202-2.16-.386-1.979-1.378-2.58-3.42-2.178-4.992.972-7.927 6.862-7.891 11.996l.024 17.927-13.839 2.693v-6.317c-.51 1.457-1.265 2.848-2.384 4.097-2.547 2.853-6.429 4.853-11.24 5.786-1.6.315-3.251.467-4.916.467-6.353 0-11.09-2.236-12.218-2.82l.012 4.763-12.733 2.475-.003-3.013c-.003-.18-.003-.353.003-.53-1.46 2.059-4.5 5.338-9.483 6.304a14.5 14.5 0 0 1-2.816.277c-3.81 0-8.131-1.616-10.073-5.9l.007 7.303-.358.124c-.07.022-1.71.57-3.498.916-1.47.282-2.854.427-4.117.427-5.868 0-9.429-3.029-10.59-9-.216-1.114-.264-2.4-.301-3.68-.508 3.397-1.643 6.64-3.486 9.512-3.198 4.989-8.092 8.445-13.422 9.48-3.843.744-7.551.163-10.428-1.643.031.596.057 1.444.057 2.462l.04 15.615-13.765 2.682-.03-21.574c-.51 1.417-1.254 2.774-2.346 4.008-2.543 2.847-6.43 4.848-11.24 5.78-1.6.314-3.252.47-4.912.47-7.154 0-12.28-2.845-12.494-2.97l-.437-.251 5.238-10.376.478.272c.031.017 3.077 1.735 7.174 1.735.927 0 1.849-.085 2.741-.258 1.784-.348 3.527-1.236 3.355-2.119-.17-.875-2.307-1.377-4.57-1.903-4.781-1.118-12.006-2.816-13.477-10.394-.706-3.624.477-7.309 3.327-10.367 2.63-2.818 6.517-4.896 10.66-5.704 1.813-.351 3.64-.53 5.43-.53 6.167 0 9.96 2.076 10.118 2.164l.398.217-4.159 10.782-.527-.299c-.022-.011-2.276-1.264-5.88-1.264-1.042 0-2.108.107-3.17.31-1.742.342-3.515 1.268-3.34 2.191.13.663 2.169 1.118 4.139 1.555 4.584 1.035 11.281 2.613 13.482 9.124l-.033-26.527 12.582-2.447.005 2.63c.003.228 0 .456-.008.675 2.265-3.113 5.803-5.356 9.784-6.125 1.176-.23 2.34-.346 3.46-.346 7.689 0 13.329 5.405 15.09 14.466.042.219.028.439.067.663l-.008-32.832 13.839-2.687.032 38.693c-.035 1.019.067 2.27.183 2.86.263 1.354 1.112 1.775 2.746 1.466.49-.101.874-.196 1.15-.27.023-4.297 2.29-8.197 6.716-11.38 5.565-4.003 12.702-5.707 15.511-6.25l.07-.016a13 13 0 0 0-.088-.906c-.406-2.083-1.906-2.705-4.871-2.125-4.62.894-10.05 5.455-10.105 5.5l-.505.428-5.094-10.048.327-.264c.288-.24 7.215-5.844 15.679-7.489a24.4 24.4 0 0 1 4.662-.46c4.271 0 11.69 1.308 13.394 10.069.2 1.032.32 2.29.36 3.855l.046 17.912 4.535-8.995.48.275c.032.018 3.072 1.737 7.171 1.737.926 0 1.85-.084 2.742-.265 1.782-.343 3.527-1.23 3.354-2.11-.17-.877-2.306-1.377-4.572-1.908-4.781-1.121-12-2.812-13.476-10.397-.702-3.623.479-7.306 3.33-10.36 2.627-2.82 6.512-4.898 10.658-5.702a28 28 0 0 1 5.43-.535c6.166 0 9.963 2.075 10.12 2.165l.397.221-4.16 10.776-.527-.297c-.024-.013-2.278-1.264-5.88-1.264-1.041 0-2.108.105-3.168.312-1.745.337-3.52 1.273-3.341 2.188.13.66 2.165 1.116 4.138 1.558 4.621 1.038 11.385 2.635 13.532 9.28V34.94l13.84-2.692-.005 17.98c0 .474-.007.919-.015 1.313 2.11-3.307 6.137-6.052 10.31-6.863a19.7 19.7 0 0 1 3.727-.38c4.178 0 9.478 1.605 10.96 9.26.268 1.368.31 2.93.314 4.416Zm5.367 11.674 12.737-2.47.011 12.574-12.733 2.474ZM253 111.738V.894l-6.793 1.27L4.79 47.386l-4.678.876v110.846l6.79-1.27 241.42-45.22Z\"/>\n</svg>\n", + "id": "6a63320b3c6e0726c3955291" + }, + { + "title": "T-Systems", + "slug": "t-systems", + "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1530.99 314.14\">\n <path d=\"M56.69 187.08H0v-56.69h56.69zM0 0v96.38h17.01v-2.83c0-45.35 25.51-73.7 73.7-73.7h2.83v204.09c0 28.35-11.34 39.68-39.68 39.68h-8.5v19.84h147.4v-19.84h-8.5c-28.35 0-39.68-11.34-39.68-39.68V19.84h2.83c48.19 0 73.7 28.35 73.7 73.7v2.83h17.01V0zm181.42 187.08h56.69v-56.69h-56.69zm165.66 3.84h45.83c3.73 19.01 16.3 26.48 33.27 26.48 19.35 0 29.2-10.86 29.2-25.46s-9.51-22.07-27.16-26.82l-26.14-7.47c-35.98-9.84-50.58-35.98-50.58-63.82 0-43.11 32.25-70.95 74.35-70.95 45.83 0 70.61 26.82 75.02 68.57h-44.81c-2.72-16.97-12.56-25.46-30.21-25.46-15.62 0-27.5 9.51-27.5 24.78s10.52 21.05 23.08 24.44l26.14 7.13c33.95 8.83 54.66 33.95 54.66 66.88 0 45.49-33.61 71.29-76.04 71.29-46.85 0-75.02-24.78-79.1-69.59Zm281.77-99.47h46.85l-63.82 181.28c-8.83 24.78-25.8 41.42-53.64 41.42-8.49 0-17.99-1.02-26.48-4.41v-34.97c5.09 1.36 11.54 2.04 17.99 2.04 10.86 0 17.31-4.07 22.41-17.99l3.73-9.84-59.07-157.52h46.85l31.91 99.13h2.04l31.23-99.13Zm56.64 117.12h40.74c2.38 11.88 10.18 16.97 21.73 16.97s19.01-5.77 19.01-15.28-7.47-14.26-18.33-17.31l-22.41-5.77c-23.76-6.45-38.7-21.39-38.7-49.9s23.08-50.92 60.43-50.92c34.63 0 57.71 19.69 61.11 52.62h-42.1c-1.7-11.88-8.15-17.65-19.01-17.65s-17.65 6.79-17.65 15.28 5.09 13.24 14.6 15.28l22.07 5.77c27.84 7.13 42.43 23.76 42.43 49.22 0 32.59-23.76 53.64-61.45 53.64s-59.75-19.35-62.46-51.94Zm173.98-1.7v-78.08h-27.84V91.45h27.84V64.97l35.64-32.93h8.15v59.41h41.76v37.34h-41.76v72.65c0 12.22 7.13 18.67 19.69 18.67 6.45 0 12.9-1.02 18.67-2.38v34.29c-9.17 4.07-19.01 5.77-31.23 5.77-30.21 0-50.92-17.65-50.92-50.92m250.46-23.08h-102.52c2.38 30.89 14.94 39.72 31.57 39.72 13.24 0 22.07-5.09 26.14-15.28h44.13c-6.45 32.25-34.29 52.28-70.27 52.28-43.79 0-73.33-31.57-73.33-87.25s28.52-87.25 74.35-87.25c42.77 0 70.61 32.59 70.61 82.49 0 5.77 0 11.54-.68 15.28Zm-101.16-31.57h60.43c-3.06-22.07-14.6-29.2-29.2-29.2-15.96 0-27.16 7.13-31.23 29.2m366.12-5.43v108.29h-43.79V152.22c0-15.96-5.77-26.14-21.39-26.14-16.97 0-28.18 12.56-28.18 32.93v96.07h-43.79V152.22c0-15.96-5.77-26.14-21.39-26.14-16.63 0-27.84 12.9-27.84 32.93v96.07h-43.79V91.45h41.08v20.03h2.04c8.49-15.96 24.1-25.46 43.79-25.46 22.07 0 36.66 8.83 43.79 26.14h2.04c9.17-16.97 26.48-26.14 47.53-26.14 33.27 0 49.9 20.71 49.9 60.77m32.19 61.78h40.74c2.38 11.88 10.18 16.97 21.73 16.97s19.01-5.77 19.01-15.28-7.47-14.26-18.33-17.31l-22.41-5.77c-23.76-6.45-38.7-21.39-38.7-49.9s23.08-50.92 60.43-50.92c34.63 0 57.71 19.69 61.11 52.62h-42.1c-1.7-11.88-8.15-17.65-19.01-17.65s-17.65 6.79-17.65 15.28 5.09 13.24 14.6 15.28l22.07 5.77c27.84 7.13 42.43 23.76 42.43 49.22 0 32.59-23.76 53.64-61.45 53.64s-59.75-19.35-62.46-51.94Z\"/>\n</svg>\n", + "id": "6a6332553c6e0726c39552c9" + } +] diff --git a/payload.config.ts b/payload.config.ts new file mode 100644 index 00000000..c02c5e93 --- /dev/null +++ b/payload.config.ts @@ -0,0 +1,339 @@ +import path from 'node:path' +import * as process from 'node:process' +import { fileURLToPath } from 'node:url' + +import { buildConfig } from 'payload' +import { mongooseAdapter } from '@payloadcms/db-mongodb' +import { redisKVAdapter } from '@payloadcms/kv-redis' +import { importExportPlugin } from '@payloadcms/plugin-import-export' +import { sentryPlugin } from '@payloadcms/plugin-sentry' +import { lexicalEditor } from '@payloadcms/richtext-lexical' +import { s3Storage } from '@payloadcms/storage-s3' + +import * as Sentry from '@sentry/nextjs' +import sharp from 'sharp' + +import { BLOCKS } from '@/blocks' +import { COLLECTIONS } from '@/collections' +import { GLOBALS } from '@/globals' +import { TASKS } from '@/jobs-queue/tasks' +import { WORKFLOWS } from '@/jobs-queue/workflows' +import { SENTRY_ENABLED } from '@/lib/sentry/options' +import { useSendAdapter } from '@/lib/useSendAdapter' +import { redirectsPlugin } from '@/plugins/redirects' +import { referencesPlugin } from '@/plugins/references' +import { CollectionSlug } from '@/types/collections' +import { QueueSlug } from '@/types/jobs-queue' +import { SKILL_TYPE } from '@/types/select-options' + +const filename = fileURLToPath(import.meta.url) +const dirname = path.dirname(filename) + +export const config = buildConfig({ + admin: { + autoRefresh: true, + components: { + graphics: { + Icon: '@/components/AdminPanel#Icon', + Logo: '@/components/AdminPanel#Logo', + }, + Nav: '@/components/AdminPanel#Nav', + }, + dashboard: { + defaultLayout: [ + { + widgetSlug: 'umami-widget', + width: 'full', + }, + ], + widgets: [ + { + slug: 'scheduled-jobs-widget', + label: 'Scheduled Jobs', + Component: '@/widgets/ScheduledJobsWidget#ScheduledJobsWidget', + minWidth: 'full', + maxWidth: 'full', + }, + { + slug: 'umami-widget', + label: 'Umami', + Component: '@/widgets/UmamiWidget#UmamiWidget', + minWidth: 'full', + maxWidth: 'full', + }, + ], + }, + dateFormat: 'yyyy-MM-dd HH:mm', + importMap: { + baseDir: path.resolve(dirname), + }, + + livePreview: { + breakpoints: [ + { + label: 'Mobile', + name: 'mobile', + width: 375, + height: 667, + }, + { + label: 'Tablet', + name: 'tablet', + width: 768, + height: 1024, + }, + { + label: 'Desktop', + name: 'desktop', + width: 1440, + height: 900, + }, + ], + }, + + meta: { + icons: [ + { + rel: 'icon', + url: '/favicon.ico', + sizes: '16x16 32x32 48x48', + type: 'image/x-icon', + }, + { + rel: 'icon', + url: '/favicon.svg', + type: 'image/svg+xml', + }, + ], + }, + suppressHydrationWarning: true, + timezones: { + supportedTimezones: [ + { + label: 'Europe/Berlin', + value: 'Europe/Berlin', + }, + ], + defaultTimezone: 'Europe/Berlin', + }, + user: CollectionSlug.Users, + }, + bin: [], + blocks: BLOCKS, + csrf: [ + process.env.SERVER_URL, + ], + cors: { + origins: [ + process.env.SERVER_URL, + ], + headers: [], + }, + defaultDepth: 10, + editor: lexicalEditor(), + db: mongooseAdapter({ + url: process.env.DATABASE_URL, + }), + collections: COLLECTIONS, + debug: process.env.NODE_ENV !== 'production', + // biome-ignore lint/correctness/useHookAtTopLevel: <useSend is a mailing service, not a React hook> + email: useSendAdapter({ + apiKey: process.env.USESEND_API_KEY, + useSendUrl: process.env.USESEND_URL, + defaultFromAddress: process.env.USESEND_DEFAULT_FROM_ADDRESS, + defaultFromName: process.env.USESEND_DEFAULT_FROM_NAME, + }), + endpoints: [], + folders: { + browseByFolder: false, + }, + globals: GLOBALS, + graphQL: { + disable: true, + disablePlaygroundInProduction: true, + }, + jobs: { + enableConcurrencyControl: true, + tasks: TASKS, + workflows: WORKFLOWS, + shouldAutoRun: async () => { + return process.env.PAYLOAD_JOBS_ENABLE_APP_WORKERS === 'true' + }, + deleteJobOnComplete: false, + autoRun: [ + { + cron: '* * * * *', + queue: QueueSlug.Default, + limit: 10, + }, + { + cron: '* * * * *', + queue: QueueSlug.ResumeGeneration, + limit: 10, + }, + ], + jobsCollectionOverrides: ({ defaultJobsCollection }) => ({ + ...defaultJobsCollection, + admin: { + ...defaultJobsCollection.admin, + hidden: false, + }, + }), + }, + kv: redisKVAdapter({ + redisURL: process.env.REDIS_URL, + }), + + localization: false, + plugins: [ + referencesPlugin(), + redirectsPlugin(), + importExportPlugin({ + collections: undefined, + defaultVersionStatus: 'published', + overrideImportCollection: ({ collection }) => ({ + ...collection, + slug: CollectionSlug.PayloadImports, + admin: { + ...collection.admin, + hidden: false, + }, + }), + overrideExportCollection: ({ collection }) => ({ + ...collection, + slug: CollectionSlug.PayloadExports, + admin: { + ...collection.admin, + hidden: false, + }, + }), + }), + // nestedDocsPlugin({ + // collections: [CollectionSlug['ResumeSkills']], + // + // }), + /** + * Reports errors raised inside Payload — collection hooks, access control, + * the jobs queue and admin requests — which sit outside the Next.js request + * lifecycle that `onRequestError` covers. + * + * Gated on the same DSN check as the rest of the SDK, so it is inert + * without credentials. + */ + sentryPlugin({ + enabled: SENTRY_ENABLED, + Sentry, + options: { + // 500s are captured by default; 401/403/404 are normal traffic and + // would drown the real failures + captureErrors: [ + 400, + 409, + 500, + ], + context: ({ defaultContext, req }) => ({ + ...defaultContext, + tags: { + ...defaultContext.tags, + source: 'payload', + }, + user: req?.user + ? { + id: String(req.user.id), + email: req.user.email, + } + : defaultContext.user, + }), + }, + }), + s3Storage({ + enabled: true, + collections: { + [CollectionSlug.MediaImages]: { + prefix: CollectionSlug.MediaImages, + }, + [CollectionSlug.MediaVideos]: { + prefix: CollectionSlug.MediaVideos, + }, + [CollectionSlug.MediaDocuments]: { + prefix: CollectionSlug.MediaDocuments, + }, + [CollectionSlug.MediaAudios]: { + prefix: CollectionSlug.MediaAudios, + }, + }, + useCompositePrefixes: true, + clientUploads: true, + disableLocalStorage: true, + bucket: process.env.S3_BUCKET, + config: { + credentials: { + accessKeyId: process.env.S3_ACCESS_KEY, + secretAccessKey: process.env.S3_SECRET_KEY, + }, + forcePathStyle: true, + endpoint: process.env.S3_ENDPOINT, + region: process.env.S3_REGION, + }, + }), + ], + serverURL: process.env.SERVER_URL, + secret: process.env.PAYLOAD_SECRET, + sharp, + telemetry: false, + typescript: { + outputFile: path.resolve(dirname, 'src/types/payload.ts'), + schema: [ + ({ jsonSchema }) => ({ + ...jsonSchema, + definitions: { + ...jsonSchema.definitions, + SkillType: { + title: 'SkillType', + type: 'string', + enum: Object.values(SKILL_TYPE), + }, + SkillTypeSortable: { + title: 'SkillTypeSortable', + type: 'object', + properties: { + id: { + $ref: '#/definitions/SkillType', + }, + label: { + type: 'string', + }, + }, + additionalProperties: false, + required: [ + 'id', + 'label', + ], + }, + SkillEntrySortable: { + title: 'SkillEntrySortable', + type: 'object', + properties: { + id: { + type: 'string', + }, + label: { + type: 'string', + }, + caption: { + type: 'string', + }, + }, + additionalProperties: false, + required: [ + 'id', + 'label', + ], + }, + }, + }), + ], + }, +}) + +export default config diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 00000000..e429ca75 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,67 @@ +import { defineConfig, devices } from '@playwright/test' + +const PORT = Number(process.env.PORT ?? 3000) +const baseURL = process.env.E2E_BASE_URL ?? `http://localhost:${PORT}` + +/** + * E2E configuration. + * + * Env: run via `pnpm test:e2e` which loads .env.test through Node's native + * --env-file flag. Prerequisite: `docker compose up -d` (Mongo/Redis/S3). + * + * E2E_NO_SERVER=1 skips the managed web server — used by the Docker flow + * (scripts/e2e-docker.sh), where the app already runs on the host. + */ +export default defineConfig({ + testDir: './e2e', + testMatch: '**/*.spec.ts', + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: process.env.CI + ? [ + [ + 'github', + ], + [ + 'html', + { + open: 'never', + }, + ], + ] + : [ + [ + 'list', + ], + ], + timeout: 30_000, + expect: { + timeout: 10_000, + }, + use: { + baseURL, + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + }, + projects: [ + { + name: 'chromium', + use: { + ...devices['Desktop Chrome'], + }, + }, + ], + webServer: process.env.E2E_NO_SERVER + ? undefined + : { + command: 'pnpm run dev:app', + url: baseURL, + reuseExistingServer: !process.env.CI, + timeout: 180_000, + stdout: 'pipe', + stderr: 'pipe', + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 28fd9c9d..d50abaa7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,448 +4,652 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + sharp: ^0.35.3 + redis: 4.7.0 + pdfjs-dist: 5.4.296 + '@emnapi/runtime': ^2.0.0-alpha + react: ^19.2.7 + react-dom: ^19.2.7 + +patchedDependencies: + pdfjs-dist@5.4.296: 0c6e5007245f52a72a7bac88eb25aeec5e405661a0a455cbd10d5c13504232e8 + importers: .: dependencies: - '@lexical/headless': - specifier: ^0.27.1 - version: 0.27.1 - '@lexical/html': - specifier: ^0.27.1 - version: 0.27.1 - '@lexical/link': - specifier: ^0.27.1 - version: 0.27.1 - '@lexical/list': - specifier: ^0.27.1 - version: 0.27.1 - '@lexical/mark': - specifier: ^0.27.1 - version: 0.27.1 - '@lexical/markdown': - specifier: ^0.27.1 - version: 0.27.1 - '@lexical/react': - specifier: ^0.27.1 - version: 0.27.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(yjs@13.6.26) - '@lexical/rich-text': - specifier: ^0.27.1 - version: 0.27.1 - '@lexical/selection': - specifier: ^0.27.1 - version: 0.27.1 - '@lexical/table': - specifier: ^0.27.1 - version: 0.27.1 - '@lexical/utils': - specifier: ^0.27.1 - version: 0.27.1 - '@payloadcms/db-postgres': - specifier: ^3.36.1 - version: 3.36.1(@opentelemetry/api@1.9.0)(@types/react@19.1.2)(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react@19.1.0) - '@payloadcms/email-nodemailer': - specifier: ^3.36.1 - version: 3.36.1(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3)) + '@ai-sdk/anthropic': + specifier: ^4.0.26 + version: 4.0.27(zod@4.4.3) + '@iconify/react': + specifier: ^6.0.2 + version: 6.0.2(react@19.2.8) + '@mediabunny/server': + specifier: ^1.52.2 + version: 1.52.2(mediabunny@1.52.2)(supports-color@10.2.2) + '@napi-rs/canvas': + specifier: ^1.0.3 + version: 1.0.3 + '@paper-design/shaders-react': + specifier: ^0.0.80 + version: 0.0.80(@types/react@19.2.18)(react@19.2.8) + '@payloadcms/db-mongodb': + specifier: ^3.87.0 + version: 3.87.0(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2) + '@payloadcms/kv-redis': + specifier: ^3.87.0 + version: 3.87.0(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2) '@payloadcms/live-preview-react': - specifier: ^3.36.1 - version: 3.36.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^3.87.0 + version: 3.87.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@payloadcms/next': - specifier: ^3.79.1 - version: 3.79.1(@types/react@19.1.2)(graphql@16.11.0)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - '@payloadcms/plugin-redirects': - specifier: ^3.36.1 - version: 3.36.1(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3)) - '@payloadcms/plugin-seo': - specifier: ^3.36.1 - version: 3.36.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + specifier: ^3.87.0 + version: 3.87.0(@types/react@19.2.18)(graphql@16.14.2)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3) + '@payloadcms/plugin-import-export': + specifier: ^3.87.0 + version: 3.87.0(@payloadcms/ui@3.87.0(@types/react@19.2.18)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@payloadcms/richtext-lexical': - specifier: ^3.36.1 - version: 3.36.1(@faceless-ui/modal@3.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@faceless-ui/scroll-info@2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@payloadcms/next@3.79.1(@types/react@19.1.2)(graphql@16.11.0)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3))(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(yjs@13.6.26) - '@payloadcms/storage-vercel-blob': - specifier: ^3.36.1 - version: 3.36.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + specifier: ^3.87.0 + version: 3.87.0(d814e5a826d0728ec24c6450222035ea) + '@payloadcms/storage-s3': + specifier: ^3.87.0 + version: 3.87.0(@types/react@19.2.18)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3) '@payloadcms/translations': - specifier: ^3.36.1 - version: 3.36.1 + specifier: ^3.87.0 + version: 3.87.0 '@payloadcms/ui': - specifier: ^3.36.1 - version: 3.36.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + specifier: ^3.87.0 + version: 3.87.0(@types/react@19.2.18)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3) + '@radix-ui/react-collapsible': + specifier: ^1.1.20 + version: 1.1.20(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-separator': + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-slot': - specifier: ^1.2.0 - version: 1.2.0(@types/react@19.1.2)(react@19.1.0) - '@sendgrid/mail': - specifier: ^8.1.5 - version: 8.1.5 - '@vercel/analytics': - specifier: ^1.5.0 - version: 1.5.0(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(react@19.1.0) - '@vercel/blob': - specifier: ^1.0.1 - version: 1.0.1 - '@vercel/speed-insights': - specifier: ^1.2.0 - version: 1.2.0(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(react@19.1.0) - class-variance-authority: - specifier: ^0.7.1 - version: 0.7.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 + specifier: ^1.3.3 + version: 1.3.3(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-switch': + specifier: ^1.3.7 + version: 1.3.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-tooltip': + specifier: ^1.2.16 + version: 1.2.16(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@react-pdf/renderer': + specifier: ^4.5.1 + version: 4.5.1(react@19.2.8) + '@react-pdf/types': + specifier: ^2.11.1 + version: 2.11.1 + '@sindresorhus/slugify': + specifier: ^3.0.0 + version: 3.0.0 + '@tailwindcss/typography': + specifier: ^0.5.20 + version: 0.5.20(tailwindcss@4.3.3) + ai: + specifier: ^7.0.45 + version: 7.0.47(zod@4.4.3) date-fns: - specifier: ^4.1.0 - version: 4.1.0 - dompurify: - specifier: ^3.3.2 - version: 3.3.2 - duration-fns: - specifier: ^3.0.2 - version: 3.0.2 + specifier: ^4.4.0 + version: 4.4.0 + dedent: + specifier: ^1.7.2 + version: 1.7.2(babel-plugin-macros@3.1.0) embla-carousel-autoplay: specifier: ^8.6.0 version: 8.6.0(embla-carousel@8.6.0) + embla-carousel-fade: + specifier: ^8.6.0 + version: 8.6.0(embla-carousel@8.6.0) embla-carousel-react: specifier: ^8.6.0 - version: 8.6.0(react@19.1.0) - graphql: - specifier: ^16.11.0 - version: 16.11.0 + version: 8.6.0(react@19.2.8) + hash-wasm: + specifier: ^4.12.0 + version: 4.12.0 + hyphen: + specifier: ^1.14.1 + version: 1.14.1 + isomorphic-dompurify: + specifier: ^3.22.0 + version: 3.22.0(@noble/hashes@1.8.0)(canvas@3.2.3) + jose: + specifier: ^5.10.0 + version: 5.10.0 jsdom: - specifier: ^26.1.0 - version: 26.1.0 - jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 - lexical: - specifier: ^0.27.1 - version: 0.27.1 + specifier: ^30.0.1 + version: 30.0.1(@noble/hashes@1.8.0)(canvas@3.2.3) + libphonenumber-js: + specifier: ^1.13.10 + version: 1.13.10 lodash-es: - specifier: ^4.17.23 - version: 4.17.23 - lucide-react: - specifier: ^0.479.0 - version: 0.479.0(react@19.1.0) + specifier: ^4.18.1 + version: 4.18.1 + mediabunny: + specifier: ^1.52.2 + version: 1.52.2 + nanoid: + specifier: ^6.0.0 + version: 6.0.0 + neotraverse: + specifier: ^1.0.1 + version: 1.0.1 next: - specifier: 15.5.10 - version: 15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0) - nodemailer: - specifier: ^8.0.4 - version: 8.0.4 - nodemailer-sendgrid: - specifier: ^1.0.3 - version: 1.0.3 + specifier: ^16.2.12 + version: 16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + ogl: + specifier: ^1.0.11 + version: 1.0.11 payload: - specifier: ^3.75.0 - version: 3.75.0(graphql@16.11.0)(typescript@5.8.3) + specifier: ^3.87.0 + version: 3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3) + pdf-parse: + specifier: ^2.4.5 + version: 2.4.5 + pretty-ms: + specifier: ^9.3.0 + version: 9.3.0 + pupa: + specifier: ^3.3.0 + version: 3.3.0 react: - specifier: ^19.1.0 - version: 19.1.0 - react-blurhash: - specifier: ^0.3.0 - version: 0.3.0(blurhash@2.0.5)(react@19.1.0) + specifier: ^19.2.7 + version: 19.2.8 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) - react-icons: - specifier: ^5.5.0 - version: 5.5.0(react@19.1.0) - react-toastify: - specifier: ^11.0.5 - version: 11.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^19.2.7 + version: 19.2.8(react@19.2.8) + react-email: + specifier: ^6.9.2 + version: 6.9.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2) + react-select: + specifier: ^5.10.2 + version: 5.10.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2) + recharts: + specifier: ^3.10.1 + version: 3.10.1(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react-is@17.0.2)(react@19.2.8)(redux@5.0.1) + redis: + specifier: 4.7.0 + version: 4.7.0 + schema-dts: + specifier: ^2.0.0 + version: 2.0.0(typescript@6.0.3) sharp: - specifier: ^0.34.1 - version: 0.34.1 + specifier: ^0.35.3 + version: 0.35.3(@types/node@26.1.2) + shiki: + specifier: ^4.4.3 + version: 4.4.3 svgo: - specifier: ^3.3.3 - version: 3.3.3 + specifier: ^4.0.2 + version: 4.0.2 + tailwind-merge: + specifier: ^3.6.0 + version: 3.6.0 + tailwind-variants: + specifier: ^3.3.1 + version: 3.3.1(tailwind-merge@3.6.0)(tailwindcss@4.3.3) + tailwindcss: + specifier: ^4.3.0 + version: 4.3.3 + takumi-js: + specifier: ^2.5.4 + version: 2.5.4(csstype@3.2.3)(react@19.2.8) + timestring: + specifier: ^7.0.0 + version: 7.0.0 type-fest: - specifier: ^4.40.1 - version: 4.40.1 + specifier: ^5.7.0 + version: 5.8.0 + usehooks-ts: + specifier: ^3.1.1 + version: 3.1.1(react@19.2.8) + zod: + specifier: ^4.4.2 + version: 4.4.3 devDependencies: - '@eslint/eslintrc': - specifier: ^3.3.1 - version: 3.3.1 - '@eslint/js': - specifier: ^9.26.0 - version: 9.26.0 - '@next/eslint-plugin-next': - specifier: ^15.3.1 - version: 15.3.1 - '@payloadcms/eslint-config': - specifier: ^3.28.0 - version: 3.28.0(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(jiti@2.4.2)(ts-api-utils@2.4.0(typescript@5.8.3)) + '@biomejs/biome': + specifier: ^2.5.6 + version: 2.5.6 + '@commitlint/cli': + specifier: ^21.2.1 + version: 21.2.1(@types/node@26.1.2)(conventional-commits-parser@7.1.2)(typescript@6.0.3) + '@commitlint/config-conventional': + specifier: ^21.2.0 + version: 21.2.0 + '@payloadcms/plugin-sentry': + specifier: ^3.87.0 + version: 3.87.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + '@playwright/test': + specifier: ~1.62.1 + version: 1.62.1 + '@react-email/ui': + specifier: ^6.9.2 + version: 6.9.2(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4) + '@semantic-release/changelog': + specifier: ^7.0.0 + version: 7.0.0(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3)) + '@semantic-release/commit-analyzer': + specifier: ^13.0.1 + version: 13.0.1(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2) + '@semantic-release/git': + specifier: ^11.0.1 + version: 11.0.1(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2) + '@semantic-release/github': + specifier: ^12.0.9 + version: 12.0.9(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2) + '@semantic-release/npm': + specifier: ^13.1.5 + version: 13.1.5(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3)) + '@semantic-release/release-notes-generator': + specifier: ^14.1.1 + version: 14.1.1(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2) + '@sentry/nextjs': + specifier: ^10.69.0 + version: 10.69.0(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(react@19.2.8)(supports-color@10.2.2)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + '@storybook/addon-a11y': + specifier: ^10.5.5 + version: 10.5.5(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8)) '@storybook/addon-docs': - specifier: ^8.6.12 - version: 8.6.12(@types/react@19.1.2)(storybook@8.6.17(prettier@3.5.3)) - '@storybook/addon-essentials': - specifier: ^8.6.12 - version: 8.6.12(@types/react@19.1.2)(storybook@8.6.17(prettier@3.5.3)) - '@storybook/addon-interactions': - specifier: ^8.6.12 - version: 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/addon-links': - specifier: ^8.6.12 - version: 8.6.12(react@19.1.0)(storybook@8.6.17(prettier@3.5.3)) + specifier: ^10.5.5 + version: 10.5.5(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(esbuild@0.28.1)(rollup@4.62.3)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0))(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) '@storybook/addon-onboarding': - specifier: ^8.6.12 - version: 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/addon-viewport': - specifier: ^8.6.12 - version: 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/blocks': - specifier: ^8.6.12 - version: 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.17(prettier@3.5.3)) - '@storybook/components': - specifier: ^8.6.12 - version: 8.6.12(storybook@8.6.17(prettier@3.5.3)) + specifier: ^10.5.5 + version: 10.5.5(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8)) + '@storybook/addon-themes': + specifier: ^10.5.5 + version: 10.5.5(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8)) + '@storybook/addon-webpack5-compiler-swc': + specifier: ^4.0.3 + version: 4.0.3(@swc/helpers@0.5.23)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) '@storybook/nextjs': - specifier: ^8.6.12 - version: 8.6.12(esbuild@0.19.12)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0)(storybook@8.6.17(prettier@3.5.3))(type-fest@4.40.1)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.105.4(esbuild@0.19.12)) - '@storybook/react': - specifier: ^8.6.12 - version: 8.6.12(@storybook/test@8.6.12(storybook@8.6.17(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.17(prettier@3.5.3))(typescript@5.8.3) - '@storybook/test': - specifier: ^8.6.12 - version: 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/theming': - specifier: ^8.6.12 - version: 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@tailwindcss/typography': - specifier: ^0.5.16 - version: 0.5.16(tailwindcss@3.4.17) + specifier: ^10.5.5 + version: 10.5.5(@swc/core@1.15.47(@swc/helpers@0.5.23))(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(babel-plugin-macros@3.1.0)(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(supports-color@10.2.2)(type-fest@5.8.0)(typescript@6.0.3)(uglify-js@3.19.3)(webpack-hot-middleware@2.26.1)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + '@tailwindcss/postcss': + specifier: ^4.2.4 + version: 4.3.3 + '@testing-library/dom': + specifier: ^10.4.1 + version: 10.4.1 + '@testing-library/jest-dom': + specifier: ^7.0.1 + version: 7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10) + '@testing-library/react': + specifier: ^16.3.2 + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@types/hyphen': + specifier: ^1.14.0 + version: 1.14.0 '@types/jsdom': - specifier: ^21.1.7 - version: 21.1.7 + specifier: ^30.0.0 + version: 30.0.0 '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 '@types/node': - specifier: ^22.15.3 - version: 22.15.3 - '@types/nodemailer': - specifier: ^6.4.17 - version: 6.4.17 - '@types/nodemailer-sendgrid': - specifier: ^1.0.3 - version: 1.0.3 + specifier: ^26.1.2 + version: 26.1.2 '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.2.18 + version: 19.2.18 '@types/react-dom': - specifier: ^19.1.3 - version: 19.1.3(@types/react@19.1.2) + specifier: ^19.2.4 + version: 19.2.4(@types/react@19.2.18) + '@types/timestring': + specifier: ^7.0.0 + version: 7.0.0 + '@vitest/coverage-v8': + specifier: ^4.1.10 + version: 4.1.10(vitest@4.1.10) autoprefixer: - specifier: ^10.4.21 - version: 10.4.21(postcss@8.5.3) + specifier: ^10.5.3 + version: 10.5.4(postcss@8.5.25) cssnano: - specifier: ^7.0.6 - version: 7.0.6(postcss@8.5.3) - eslint: - specifier: ^9.26.0 - version: 9.26.0(jiti@2.4.2) - eslint-config-next: - specifier: ^15.3.1 - version: 15.3.1(eslint-plugin-import-x@4.11.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-storybook: - specifier: ^0.12.0 - version: 0.12.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - file-loader: - specifier: ^6.2.0 - version: 6.2.0(webpack@5.105.4(esbuild@0.19.12)) - polished: - specifier: ^4.3.1 - version: 4.3.1 + specifier: ^8.0.1 + version: 8.0.2(postcss@8.5.25) + husky: + specifier: ^9.1.7 + version: 9.1.7 + lint-staged: + specifier: ^17.3.0 + version: 17.3.0 + playwright: + specifier: ~1.62.1 + version: 1.62.1 postcss: - specifier: ^8.5.3 - version: 8.5.3 - prettier: - specifier: ^3.5.3 - version: 3.5.3 + specifier: ^8.5.25 + version: 8.5.25 + react-docgen-typescript: + specifier: ^2.4.0 + version: 2.4.0(typescript@6.0.3) + semantic-release: + specifier: ^25.0.9 + version: 25.0.9(supports-color@10.2.2)(typescript@6.0.3) sort-package-json: - specifier: ^3.2.0 - version: 3.2.0 + specifier: ^4.0.0 + version: 4.0.0 storybook: - specifier: ^8.6.17 - version: 8.6.17(prettier@3.5.3) - tailwind-merge: - specifier: ^2.6.0 - version: 2.6.0 - tailwindcss: - specifier: ^3.4.17 - version: 3.4.17 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.17) + specifier: ^10.5.5 + version: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) + styled-jsx: + specifier: ^5.1.7 + version: 5.1.7(@babel/core@7.29.7(supports-color@10.2.2))(babel-plugin-macros@3.1.0)(react@19.2.8) + syncpack: + specifier: ^15.3.2 + version: 15.3.2 + tsconfig-paths-webpack-plugin: + specifier: ^4.2.0 + version: 4.2.0 typescript: - specifier: ^5.8.3 - version: 5.8.3 - typescript-eslint: - specifier: ^8.31.1 - version: 8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^6.0.3 + version: 6.0.3 + vitest: + specifier: ^4.1.10 + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.1)(jsdom@30.0.1(@noble/hashes@1.8.0)(canvas@3.2.3))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0)) + wrangler: + specifier: ^4.118.0 + version: 4.118.0(@types/node@26.1.2) packages: - '@adobe/css-tools@4.4.1': - resolution: {integrity: sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==} + '@actions/core@3.0.1': + resolution: {integrity: sha512-a6d/Nwahm9fliVGRhdhofo40HjHQasUPusmc7vBfyky+7Z+P2A1J68zyFVaNcEclc/Se+eO595oAr5nwEIoIUA==} + + '@actions/exec@3.0.0': + resolution: {integrity: sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==} + + '@actions/http-client@4.0.1': + resolution: {integrity: sha512-+Nvd1ImaOZBSoPbsUtEhv+1z99H12xzncCkz0a3RuehINE81FZSe2QTj3uvAPTcJX/SCzUQHQ0D1GrPMbrPitg==} + + '@actions/io@3.0.2': + resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} + + '@adobe/css-tools@4.5.0': + resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + + '@ai-sdk/anthropic@4.0.27': + resolution: {integrity: sha512-ecrPWkYf+sHDLHErHAU/yjJfNevUzT0i6TuoQLb58oadnquSHcLQ5NMLLWjbr6d1rxYdzI7ftulIJ03VH9yM3w==} + engines: {node: '>=22'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/gateway@4.0.36': + resolution: {integrity: sha512-N1P6bdW/aC5rxLeuGYgx3X4el3DoZy8UWlky+g+AeIZSmxaEi/AToHJL4cmZ6nCPHk1byqJWwC+PaOZG0hK0dw==} + engines: {node: '>=22'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider-utils@5.0.18': + resolution: {integrity: sha512-UBNCrkxS5llgN2/RXLBRkjCFTIuL6YB1Goq5c+yRecnznhtX4XPjTwLHz2hrsTltTVZ0rqVegtnwFXdPBkjDHA==} + engines: {node: '>=22'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider@4.0.4': + resolution: {integrity: sha512-tbHKNLirllUNF3ZlkCsXnwab2ZV1Sl4b1H/Cp9ruCce15IBmskE8Gwkk0yo9xDWY+jho2of7lVXtwSsyrq7cwQ==} + engines: {node: '>=22'} '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@apidevtools/json-schema-ref-parser@11.9.3': resolution: {integrity: sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==} engines: {node: '>= 16'} - '@asamuzakjp/css-color@2.8.3': - resolution: {integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==} + '@apm-js-collab/code-transformer-bundler-plugins@0.7.3': + resolution: {integrity: sha512-qNbPwuMZ8f5ZuGj/ttPeB7a6C/S1bB6tNYaEL5vNiRKydSAxa4AU0gxCWgaP4fVju+AuwhcumSFjrEcGF9Dv7Q==} + engines: {node: '>=18.0.0'} - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} + '@apm-js-collab/code-transformer@0.18.1': + resolution: {integrity: sha512-u1Hb6bHjWtkSpiprwVP6YaHC1DTN4RAU3zYkUDUe7WMnJwdyU1pwTL9dFKiSJB9IiLue/EQovmyx6xhU7FFtAQ==} + hasBin: true + + '@apm-js-collab/tracing-hooks@0.13.0': + resolution: {integrity: sha512-mTvWz9rnQwx1U3h0XPTHaX7bgfkpipLLTQyjlC2cdhQpQEuoLT0AGzoydeoq2NxfEVv6fWOOETcSbb2nptleyw==} + + '@asamuzakjp/css-color@6.0.5': + resolution: {integrity: sha512-mbhpPMmnw/kwW19aRNmSUl1QzLbdGo1SCuE49BT98MNwqF6zaHb3o2owssFc/PEO/4t2UjqtCNwocuDtJornzA==} + engines: {node: ^22.13.0 || >=24.0.0} + + '@asamuzakjp/dom-selector@8.3.0': + resolution: {integrity: sha512-UJLfKXBhrc8i1vH2eJXuYQMwlsLKWFw3O+CPqXSuVEiikeAim3UgrfWX0k4tA/X8cRFM8iZ7OaqBokFGbYusdg==} + engines: {node: ^22.13.0 || >=24.0.0} + + '@aws-sdk/checksums@3.1000.24': + resolution: {integrity: sha512-7TWLjypP8kk3savsDBRuhZJx7mBuFFA2136BQhwwLllsAnO4Tmq/p+SXZaNxbuulkzUFz3BZzj0bb4YzexZcNQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/client-s3@3.1100.0': + resolution: {integrity: sha512-5IvIlW6kWOC9EPq2RM7VQUgfDF2QFHHFgQJ2DichmrYBDg5yiAmqMkDiHqUSkFYosVexXaXD/lV4yYxTyA27zw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/core@3.977.4': + resolution: {integrity: sha512-CEkcQlMOQJCvul60U7wdAOACjtdgFWDsfJI+6wUOGdhGNV2lGbuJpi/R50QLpFG3Tp+sQxa/RmzC3X7KHbhuTA==} + engines: {node: '>=20.0.0'} + deprecated: |- + Deprecated due to Document number parsing bug in JSON, see + https://github.com/aws/aws-sdk-js-v3/issues/8246. Newer version available. + + '@aws-sdk/credential-provider-env@3.972.65': + resolution: {integrity: sha512-lJT2aRw9wCV8jPHyFJjdZLD4HTydL6/22AnCSOB8e/LqOc55nEJGLHkJQeSxhn8QiqyjFwPKQFtMw0ovjRUY/g==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-http@3.972.67': + resolution: {integrity: sha512-N7fw/15hSwI/CPxe5ohOyb7O4ge9f5me1gVIn8OIkBRB0squ8OJqQyDyH/HoL+Sb1W5xdC88jVC+bHkw73iu+Q==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-ini@3.973.10': + resolution: {integrity: sha512-Zh9XRaPnDN9buO7GfWBubS22R6Nq5D6hbyYEMN05LiOnXugm/8WDjUx6y756bSPbdn3aJB2qG4zFW3bN82QhoQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-login@3.972.72': + resolution: {integrity: sha512-zZapIKwaHp7TdTf9hbH1I3CVUdEupmt7FXO/BoTQGC+4h6NkXKWpqF2p5WyfpjurDLHCpSyh+BzMlAg8arqWLA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-node@3.972.76': + resolution: {integrity: sha512-1yzLmRiYSgGC25v7ZZEwJn/auhHHTIHgFOmzL2f36hf1+7jSLcX+1QrAz4760WEzPiiQl8xmlpFhHfl2OoyVzA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-process@3.972.65': + resolution: {integrity: sha512-e5DbbNteOSalN58U83G6kFa4ECLEuGbGqNBHIXE7zYXA/m4GHblIGjFbSH7wYv6gBV8iNSDcRZBKfQZF5vF9nw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-sso@3.973.9': + resolution: {integrity: sha512-0V0u4t+KBku9fbh5CPCaC5hUWwSzDafp8nCuDy817zWbp2gz80jO44rMQkiwnZ+k54B+tjAtzRy00DJRGTKGBg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.972.71': + resolution: {integrity: sha512-e4dwiRltGAaQ+2yxw57Hj0l/BF3BHiG14+QpYE7bGYBlpAq/fkIri2BDhjWon8c0mhhtd2txQBAkQb9BcTStFg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/lib-storage@3.1100.0': + resolution: {integrity: sha512-QPK8SeQFIx2PEOe8EJhWJSJ/hAJe5+D/3cd7DmbS8oiY3kZK9CbERn33345aizHATgcAKvKNZ8Wr2kpf2StwAQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@aws-sdk/client-s3': ^3.1100.0 + + '@aws-sdk/middleware-sdk-s3@3.972.70': + resolution: {integrity: sha512-APdP0iODt39AkjCjzTFIoFrxDH/Cz3CpWRDKLcsJg7eOnfE1htkxL9BhDoe/xL7cXdoMwh2HBYv3DiT1uf64NQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/nested-clients@3.997.39': + resolution: {integrity: sha512-wU5NPnj62Sb7A8xn/Zb+xThe05P3otNtDl37iOIi5DDMeCesNeCckaG+eXWGUs12Z9R34I8CD05TaTe6SIa61g==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/s3-request-presigner@3.1100.0': + resolution: {integrity: sha512-YXl2CNTJi9sCWCZufz4efHgYUrLSHg+b6NnbLbUZKXjazlcPjYRE8liZ50ckj7ZSVaB6LHY3C8/8Sz7CcrLkmQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.996.43': + resolution: {integrity: sha512-lKekx8bLBXSv4O+cslk9Zfnw2XKSkWBs3uWL5QGhH2ZAQfNS7FE0vcSSN2vD/AhxX54ZTywWxR4STThoeOXlBA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/token-providers@3.1100.0': + resolution: {integrity: sha512-THf3MkgY3fNJZ3zdgSenLqR7gSE68KccCj1RCKretlG73Ppszvues02VpCUO9NlB/tZDC483FvGCld+AiPCkvg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/types@3.974.2': + resolution: {integrity: sha512-3W6IUtSxFbH6X7Wb7DzGCV5QiFQsd0g8bOfntpmDxQlzBoKWUMBu/JPQR0DwkE+Hpnxd6db1tXbOwdeHddG6cA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/xml-builder@3.972.37': + resolution: {integrity: sha512-zKq4HQum8JwDyEuyfuI4bbiAcU0KxP6qy+9PR/IsR92IyE/DaBAikzAS50tjxip4bqIIANpCcG+Yyj6CVhXupg==} + engines: {node: '>=20.0.0'} - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + '@aws/lambda-invoke-store@0.3.0': + resolution: {integrity: sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ==} + engines: {node: '>=18.0.0'} + + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.3': - resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} engines: {node: '>=6.9.0'} - '@babel/core@7.26.0': - resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.27.1': - resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.9': - resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + '@babel/helper-annotate-as-pure@7.29.7': + resolution: {integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.9': - resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.25.9': - resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + '@babel/helper-create-class-features-plugin@7.29.7': + resolution: {integrity: sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.26.3': - resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} + '@babel/helper-create-regexp-features-plugin@7.29.7': + resolution: {integrity: sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.3': - resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + '@babel/helper-define-polyfill-provider@0.6.8': + resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-member-expression-to-functions@7.25.9': - resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.29.7': + resolution: {integrity: sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.25.9': - resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + '@babel/helper-optimise-call-expression@7.29.7': + resolution: {integrity: sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.25.9': - resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.25.9': - resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + '@babel/helper-remap-async-to-generator@7.29.7': + resolution: {integrity: sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.25.9': - resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + '@babel/helper-replace-supers@7.29.7': + resolution: {integrity: sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': - resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + '@babel/helper-skip-transparent-expression-wrappers@7.29.7': + resolution: {integrity: sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + '@babel/helper-wrap-function@7.29.7': + resolution: {integrity: sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.25.9': - resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.29.2': - resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.27.1': - resolution: {integrity: sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==} + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': - resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7': + resolution: {integrity: sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7': + resolution: {integrity: sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': - resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7': + resolution: {integrity: sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': - resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.7': + resolution: {integrity: sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': - resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.29.7': + resolution: {integrity: sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': - resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7': + resolution: {integrity: sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -466,26 +670,26 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.26.0': - resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + '@babel/plugin-syntax-import-assertions@7.29.7': + resolution: {integrity: sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.26.0': - resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + '@babel/plugin-syntax-import-attributes@7.29.7': + resolution: {integrity: sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.25.9': - resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + '@babel/plugin-syntax-jsx@7.29.7': + resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.25.9': - resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + '@babel/plugin-syntax-typescript@7.29.7': + resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -496,344 +700,350 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-arrow-functions@7.25.9': - resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + '@babel/plugin-transform-arrow-functions@7.29.7': + resolution: {integrity: sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.25.9': - resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} + '@babel/plugin-transform-async-generator-functions@7.29.7': + resolution: {integrity: sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-to-generator@7.25.9': - resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} + '@babel/plugin-transform-async-to-generator@7.29.7': + resolution: {integrity: sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.25.9': - resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} + '@babel/plugin-transform-block-scoped-functions@7.29.7': + resolution: {integrity: sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.25.9': - resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} + '@babel/plugin-transform-block-scoping@7.29.7': + resolution: {integrity: sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.25.9': - resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + '@babel/plugin-transform-class-properties@7.29.7': + resolution: {integrity: sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.26.0': - resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} + '@babel/plugin-transform-class-static-block@7.29.7': + resolution: {integrity: sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.25.9': - resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + '@babel/plugin-transform-classes@7.29.7': + resolution: {integrity: sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.25.9': - resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + '@babel/plugin-transform-computed-properties@7.29.7': + resolution: {integrity: sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.25.9': - resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + '@babel/plugin-transform-destructuring@7.29.7': + resolution: {integrity: sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.25.9': - resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + '@babel/plugin-transform-dotall-regex@7.29.7': + resolution: {integrity: sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.25.9': - resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + '@babel/plugin-transform-duplicate-keys@7.29.7': + resolution: {integrity: sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': - resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7': + resolution: {integrity: sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-dynamic-import@7.25.9': - resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + '@babel/plugin-transform-dynamic-import@7.29.7': + resolution: {integrity: sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-explicit-resource-management@7.29.7': + resolution: {integrity: sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.26.3': - resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} + '@babel/plugin-transform-exponentiation-operator@7.29.7': + resolution: {integrity: sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.25.9': - resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + '@babel/plugin-transform-export-namespace-from@7.29.7': + resolution: {integrity: sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.25.9': - resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} + '@babel/plugin-transform-for-of@7.29.7': + resolution: {integrity: sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.25.9': - resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + '@babel/plugin-transform-function-name@7.29.7': + resolution: {integrity: sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.25.9': - resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + '@babel/plugin-transform-json-strings@7.29.7': + resolution: {integrity: sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.25.9': - resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + '@babel/plugin-transform-literals@7.29.7': + resolution: {integrity: sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.25.9': - resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + '@babel/plugin-transform-logical-assignment-operators@7.29.7': + resolution: {integrity: sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.25.9': - resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + '@babel/plugin-transform-member-expression-literals@7.29.7': + resolution: {integrity: sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.25.9': - resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + '@babel/plugin-transform-modules-amd@7.29.7': + resolution: {integrity: sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.26.3': - resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + '@babel/plugin-transform-modules-commonjs@7.29.7': + resolution: {integrity: sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.25.9': - resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + '@babel/plugin-transform-modules-systemjs@7.29.7': + resolution: {integrity: sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.25.9': - resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + '@babel/plugin-transform-modules-umd@7.29.7': + resolution: {integrity: sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': - resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + '@babel/plugin-transform-named-capturing-groups-regex@7.29.7': + resolution: {integrity: sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.25.9': - resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + '@babel/plugin-transform-new-target@7.29.7': + resolution: {integrity: sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.25.9': - resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} + '@babel/plugin-transform-nullish-coalescing-operator@7.29.7': + resolution: {integrity: sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.25.9': - resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + '@babel/plugin-transform-numeric-separator@7.29.7': + resolution: {integrity: sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.25.9': - resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + '@babel/plugin-transform-object-rest-spread@7.29.7': + resolution: {integrity: sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.25.9': - resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + '@babel/plugin-transform-object-super@7.29.7': + resolution: {integrity: sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.25.9': - resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + '@babel/plugin-transform-optional-catch-binding@7.29.7': + resolution: {integrity: sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.25.9': - resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + '@babel/plugin-transform-optional-chaining@7.29.7': + resolution: {integrity: sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.25.9': - resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + '@babel/plugin-transform-parameters@7.29.7': + resolution: {integrity: sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.25.9': - resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + '@babel/plugin-transform-private-methods@7.29.7': + resolution: {integrity: sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.25.9': - resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + '@babel/plugin-transform-private-property-in-object@7.29.7': + resolution: {integrity: sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.25.9': - resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + '@babel/plugin-transform-property-literals@7.29.7': + resolution: {integrity: sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-display-name@7.25.9': - resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==} + '@babel/plugin-transform-react-display-name@7.29.7': + resolution: {integrity: sha512-+1wdDMGNb4UPeY3Q4L5yLiYe6TXPXubs4NjrgRFw13hPRLJfEMw2Q5OXkee6/IfdqePIeW4Jjwe3aBh7SdKz4Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-development@7.25.9': - resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} + '@babel/plugin-transform-react-jsx-development@7.29.7': + resolution: {integrity: sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.25.9': - resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} + '@babel/plugin-transform-react-jsx@7.29.7': + resolution: {integrity: sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-pure-annotations@7.25.9': - resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==} + '@babel/plugin-transform-react-pure-annotations@7.29.7': + resolution: {integrity: sha512-H5E+HBgDpr6Q5t+Aj11tL7XkIui1jhbIoArVQnqjgXo5/3YxkN7ZEBcWF4RQlB0T4rrxJQbXS6kiFV6B7XTqUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.25.9': - resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + '@babel/plugin-transform-regenerator@7.29.7': + resolution: {integrity: sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regexp-modifiers@7.26.0': - resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + '@babel/plugin-transform-regexp-modifiers@7.29.7': + resolution: {integrity: sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-reserved-words@7.25.9': - resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + '@babel/plugin-transform-reserved-words@7.29.7': + resolution: {integrity: sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-runtime@7.25.9': - resolution: {integrity: sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==} + '@babel/plugin-transform-runtime@7.29.7': + resolution: {integrity: sha512-xmAscdE/AsqRW7vutbPNoUmu/nF5SrLKPs7aoJgEjo35lLKA/Bc0i2rMv/hr1+Y0o1bQCiVtith3u2vdgRL39Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-shorthand-properties@7.25.9': - resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + '@babel/plugin-transform-shorthand-properties@7.29.7': + resolution: {integrity: sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.25.9': - resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + '@babel/plugin-transform-spread@7.29.7': + resolution: {integrity: sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-sticky-regex@7.25.9': - resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + '@babel/plugin-transform-sticky-regex@7.29.7': + resolution: {integrity: sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.25.9': - resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} + '@babel/plugin-transform-template-literals@7.29.7': + resolution: {integrity: sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.25.9': - resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} + '@babel/plugin-transform-typeof-symbol@7.29.7': + resolution: {integrity: sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.26.3': - resolution: {integrity: sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==} + '@babel/plugin-transform-typescript@7.29.7': + resolution: {integrity: sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.25.9': - resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + '@babel/plugin-transform-unicode-escapes@7.29.7': + resolution: {integrity: sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.25.9': - resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + '@babel/plugin-transform-unicode-property-regex@7.29.7': + resolution: {integrity: sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-regex@7.25.9': - resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + '@babel/plugin-transform-unicode-regex@7.29.7': + resolution: {integrity: sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.25.9': - resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + '@babel/plugin-transform-unicode-sets-regex@7.29.7': + resolution: {integrity: sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.26.0': - resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} + '@babel/preset-env@7.29.7': + resolution: {integrity: sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -843,72 +1053,280 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-react@7.26.3': - resolution: {integrity: sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==} + '@babel/preset-react@7.29.7': + resolution: {integrity: sha512-C+PV1TFUPTmBQGoPBL8j2QmLpZ117YTCwxIZeJOM96GbYMFSc7/pOXU5lVykwnZxyTqQxRsvoRk6f2FktZgGHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.26.0': - resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} + '@babel/preset-typescript@7.29.7': + resolution: {integrity: sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.27.1': - resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} - '@babel/template@7.27.1': - resolution: {integrity: sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.1': - resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.1': - resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} - engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} + + '@biomejs/biome@2.5.6': + resolution: {integrity: sha512-lxVNjv7UF6KfhMJfL9gaUHbWdJdHbsAj6OSmwSYNdhRuG67NxNQ4Xdvh3TUxsSK9sBzJBQhEJj3AopmmNJ5pSA==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@2.5.6': + resolution: {integrity: sha512-zMOLZP4oMrjh6m1zcSj1ud2awUPgTuMVbmQhYYWL7J8HwCnbHHBvTm7VBTRuY7epT5bez76IpKYQ11ZAqHFlnw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@2.5.6': + resolution: {integrity: sha512-JAC1VqzvO7Th5ZplU0G2uGfkZbxEe9uDDektPAhF0JLusoz1w+T4okp2bkykI0bbaO2vslKiRfj4gU43JaGreA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-eUa3jeeYvfMt19LBeh6E5PUZpxnTC4JqNWo+EDjTtQjAr2xLGnWaxACtVU1DQqmHYbvThlJzLX+ZsYgrqh2qVw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@biomejs/cli-linux-arm64@2.5.6': + resolution: {integrity: sha512-6XsYwCFkp5sMxl85ffhgeGpGgs6A7dRYFnkceZ7WVxvycuTnGdD5xa534Z3xfrBQ0JCMK/mujT6ZNPJoghedwg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@biomejs/cli-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-2Vp13QdKysH3HIWLaYLhUUwbK+jbZonJD1K+Lr0d0RO4wH7mkYd43vJixEDm8cUWrowoRz4UUHF1nm9Ae7ym8A==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@biomejs/cli-linux-x64@2.5.6': + resolution: {integrity: sha512-Pop9VXCFUhFTMfFefZ39S+u2rOPyNp5iHlxbZRwXGACHLy2r0jjiRgJHmaEKJzL3SyxlVeGShXhvvElvWowonA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@biomejs/cli-win32-arm64@2.5.6': + resolution: {integrity: sha512-tDGshcm6BdkZOCGnTDX0Y8/U4IfBSlnUU7T56nNDuPEfed+aHg+u8G36NB43fJVl0Os6+QURXIE1yuD7AaEofA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.5.6': + resolution: {integrity: sha512-WN05KwXnTO/2J45RQPvzZMXf7tZUIofHoR35xIPfCo7pQ2RFidxI8sfb5mGsaTxdMmEOzHzOPRCdA5/fCpc7xQ==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] '@borewit/text-codec@0.2.2': resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} - '@csstools/color-helpers@5.0.2': - resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} - engines: {node: '>=18'} + '@bramus/specificity@2.4.2': + resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} + hasBin: true - '@csstools/css-calc@2.1.2': - resolution: {integrity: sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==} - engines: {node: '>=18'} + '@cloudflare/kv-asset-handler@0.5.0': + resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} + engines: {node: '>=22.0.0'} + + '@cloudflare/unenv-preset@2.16.1': + resolution: {integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.4 - '@csstools/css-tokenizer': ^3.0.3 + unenv: 2.0.0-rc.24 + workerd: '>1.20260305.0 <2.0.0-0' + peerDependenciesMeta: + workerd: + optional: true - '@csstools/css-color-parser@3.0.8': - resolution: {integrity: sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==} - engines: {node: '>=18'} + '@cloudflare/workerd-darwin-64@1.20260730.1': + resolution: {integrity: sha512-+MBHmPaiTe2KajryW0T24rZvWFxb41hD3d8anNzQqHzft6vSEb18+sp0znSwxgij7ApPhSM1+vhkNg4f3YMguA==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20260730.1': + resolution: {integrity: sha512-SBHKntPkKvNPgaCrTe99xC1CAl8ygJDzlYfK0LbuJ1muKadIw35WnhO0wu894fKBtllsVQdNzDLee+cm0ppLSQ==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-linux-64@1.20260730.1': + resolution: {integrity: sha512-ouyPOSMbiKPeSwUJUvxtMcxGAXs2J4aPE4T5ABIYX5ClcQx5j5bbHTmnqOQEY8sAuLTPjH7dY+iB6UI5ISlwwA==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20260730.1': + resolution: {integrity: sha512-YQ+Mi78U3TPdgBPtwq+Sm6rJU+Ihl2y0pjYtuuKkdmUbYzL7oLR6Xqq9wljhasnuCFICssDJaqhMep5WizYoEQ==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-windows-64@1.20260730.1': + resolution: {integrity: sha512-27fAN+vUECW1oYVc1KOcHYpkL8COM2Uxtxql7TL595kxbjoqS5yckw7NLz7bTf2pALFCZWjqXDjZGJ/xbG4ZKQ==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@colordx/core@5.5.0': + resolution: {integrity: sha512-3PxTH8itZzltK0U9jTwVVnjLXvnDYuq3m+QXsHkENxWiPRh4WaoLcs1SQjqgZ55kS+QyirpH5BVwzP2gMVG6EQ==} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@commitlint/cli@21.2.1': + resolution: {integrity: sha512-blsZGe29hJ72VGEFVl72IVYX+1vsfINpjA9yWQA6i7OKD/McGEOXg08sKIRKjFk4JvzhV/9n0l3i6NooPLTNfg==} + engines: {node: '>=22.12.0'} + hasBin: true + + '@commitlint/config-conventional@21.2.0': + resolution: {integrity: sha512-Qf8WRDVcyVd14if6VTWenebxFbKnVnbzPUJjlzjkyJGeHK2xCGd63Dr1XZzj0plXKQb9P0BfOxoc1HVeCo2BWQ==} + engines: {node: '>=22.12.0'} + + '@commitlint/config-validator@21.2.0': + resolution: {integrity: sha512-t7AzNHAKeIdo/3NRGwzpufKHsKkPHmFs/56N2Fnsh0/r0rGtnQzTxk6vnFgjaGr4hdSQKNB50/KAhR9Yk4LJKA==} + engines: {node: '>=22.12.0'} + + '@commitlint/ensure@21.2.0': + resolution: {integrity: sha512-76IF9vDNS13lAzEEik9eKwzt8f9hYhWiwVXZ2AnyLCz5/f511FsEQ3pw1X3/zSQpdRLQU7i5qDMVKyXi1GWjSg==} + engines: {node: '>=22.12.0'} + + '@commitlint/execute-rule@21.0.1': + resolution: {integrity: sha512-RifH+FmImozKBE6mozhF4K3r2RRKP7SMi/Q/zLCmExtp5e05lhHOUYqGBlFBAGNHaZxU/WYw1XuugYK9jQzqnA==} + engines: {node: '>=22.12.0'} + + '@commitlint/format@21.2.0': + resolution: {integrity: sha512-c4q64xaav2U83t7k7RyzJerBZurPer7FxUOY0RL5L/6CZijZ7K+s6HIBGIghj0ey1P2+seRX0J9XQYtDued6tg==} + engines: {node: '>=22.12.0'} + + '@commitlint/is-ignored@21.2.0': + resolution: {integrity: sha512-4/eB0vBN7L88O/oC4ajAEqi7j2ZfNgxl/+11RfAV9YosejZgDXhY2C9VcHnHJhOzPLoSy5P3Mg/46kqeyJfXKw==} + engines: {node: '>=22.12.0'} + + '@commitlint/lint@21.2.0': + resolution: {integrity: sha512-ceO5dp9pLjEZ6y6qbq/uXWXDPykqqlTsyzoQ0NzecpisSJhK3kTy9qzQoPeJuWG/IMNdV1lO0RgmzqoAlSi1uw==} + engines: {node: '>=22.12.0'} + + '@commitlint/load@21.2.0': + resolution: {integrity: sha512-RjlzWQqruRwIenJEfZtq7kG97co97nKoHpflE5YnF61tDLXxHPrdWImgzw6VL6MlFyaOcVlk74eBV8ZQmc3oIA==} + engines: {node: '>=22.12.0'} + + '@commitlint/message@21.2.0': + resolution: {integrity: sha512-YxGoiXD/HXNXLJPrQwE5poXa+XH0CBEm+mdvbHQP0g6MV/dmJyUFCzPNzZbxL93GvZ70TmtTK0Z0/IBpAqHv8g==} + engines: {node: '>=22.12.0'} + + '@commitlint/parse@21.2.0': + resolution: {integrity: sha512-QHWxG4d0PLTF634/AdyZ0MQS+CLn5YOuJlCFhMMlSGKFxzYGUetkHBj18xgBD+6fVzUrA2lrCdi/vlS2f/oYXg==} + engines: {node: '>=22.12.0'} + + '@commitlint/read@21.2.1': + resolution: {integrity: sha512-hUW7EJQnNTL0vPOmVMNK4CrnrNBN0nN+JJHReFkdHO5y4iyHeEmTBwuC15OCqUTjxWo7idnH1LftfpWVIaPWIA==} + engines: {node: '>=22.12.0'} + + '@commitlint/resolve-extends@21.2.0': + resolution: {integrity: sha512-4O/1j51+79Wth9s/MGxt/5gs0XYLDgNlYpltQfhAvLE0itusLKs9zruxbiNg1oOkmkb9L9L4USYGjEj7n87NxA==} + engines: {node: '>=22.12.0'} + + '@commitlint/rules@21.2.0': + resolution: {integrity: sha512-C2yXMNpiB8ETZKfx5JD8+ExgF8vTU1VQMKPSUUYwqKpw9oJWQBrlXBpdU038mj2WPjof7o9UzFpmTyBeGMZwZg==} + engines: {node: '>=22.12.0'} + + '@commitlint/to-lines@21.0.1': + resolution: {integrity: sha512-bd1BFII7p1EQZre9Kaj+kKaMFP3cFCdt21K7DItVux9XP5WjLgJ0/Uy1pJJh9aPwVJ6SKg62PxqlZaHI8hQAXw==} + engines: {node: '>=22.12.0'} + + '@commitlint/top-level@21.2.0': + resolution: {integrity: sha512-Y5gmQ+KxzqCrBFJfLvFEPvvwD3LDiNZoTT2yeFBm96M8qhmqSzQc5DvX3rheAaAMjyIvMXOCLS/mWfdpONsjyQ==} + engines: {node: '>=22.12.0'} + + '@commitlint/types@21.2.0': + resolution: {integrity: sha512-7zVFCDB2reMvJH5dmbKnOQPjZEvjdJTH8jc0U/PIPU1r3/+vf5pD1HlfitV2MWsWXrvu7u39iY1lyLUPOaN0Gw==} + engines: {node: '>=22.12.0'} + + '@conventional-changelog/git-client@3.1.0': + resolution: {integrity: sha512-Tqa/gHco2WJWa740NRjOrfKVvzIqxkZpecb8bemaQ8sKM5PXb1UK4uTyTb/1wIqNuOVaDOFxyBdhTIQZn6gdjQ==} + engines: {node: '>=22'} + peerDependencies: + conventional-commits-filter: ^6.0.1 + conventional-commits-parser: ^7.0.1 + peerDependenciesMeta: + conventional-commits-filter: + optional: true + conventional-commits-parser: + optional: true + + '@conventional-changelog/template@1.2.1': + resolution: {integrity: sha512-TzlTVpKPjaqW6qOYjQcYUDuGsLCNsvFHVBXkYGTAnf5V37jCWrE5haKNXzz0WZUtVHjrpV76L1buANjwXMfT8w==} + engines: {node: '>=22'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@csstools/color-helpers@6.1.0': + resolution: {integrity: sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==} + engines: {node: '>=20.19.0'} + + '@csstools/css-calc@3.3.0': + resolution: {integrity: sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.4 - '@csstools/css-tokenizer': ^3.0.3 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-parser-algorithms@3.0.4': - resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} - engines: {node: '>=18'} + '@csstools/css-color-parser@4.1.10': + resolution: {integrity: sha512-UZhQLIUyJaaMepqehrCODwCg2KW25vFvLWBmqYFaPclYvvxzj/sG8LBOhBFCp11i9uE7t1EyS+RAoV9tztPFyw==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-tokenizer': ^3.0.3 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-tokenizer@3.0.3': - resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} - engines: {node: '>=18'} + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.1.7': + resolution: {integrity: sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==} + peerDependencies: + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true + + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} '@date-fns/tz@1.2.0': resolution: {integrity: sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==} @@ -916,66 +1334,51 @@ packages: '@dnd-kit/accessibility@3.1.1': resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==} peerDependencies: - react: '>=16.8.0' - - '@dnd-kit/core@6.0.8': - resolution: {integrity: sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + react: ^19.2.7 '@dnd-kit/core@6.3.1': resolution: {integrity: sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==} peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + react: ^19.2.7 + react-dom: ^19.2.7 '@dnd-kit/modifiers@9.0.0': resolution: {integrity: sha512-ybiLc66qRGuZoC20wdSSG6pDXFikui/dCNGthxv4Ndy8ylErY0N3KVxY2bgo7AWwIbxDmXDg3ylAFmnrjcbVvw==} peerDependencies: '@dnd-kit/core': ^6.3.0 - react: '>=16.8.0' + react: ^19.2.7 '@dnd-kit/sortable@10.0.0': resolution: {integrity: sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==} peerDependencies: '@dnd-kit/core': ^6.3.0 - react: '>=16.8.0' - - '@dnd-kit/sortable@7.0.2': - resolution: {integrity: sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==} - peerDependencies: - '@dnd-kit/core': ^6.0.7 - react: '>=16.8.0' + react: ^19.2.7 '@dnd-kit/utilities@3.2.2': resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} peerDependencies: - react: '>=16.8.0' + react: ^19.2.7 - '@drizzle-team/brocli@0.10.2': - resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} + '@emnapi/core@1.11.2': + resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} - '@emnapi/core@1.4.3': - resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} - '@emnapi/core@1.9.1': - resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} + '@emnapi/core@2.0.0-alpha.3': + resolution: {integrity: sha512-AZypUeJ/yByuxyS7BlSNRDOMLMlROYtjYdIAuBmJssVz1UJDSeYxLrdizhXCFYhedC5bqd/ASy8EuNXbVVXp9g==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@2.0.0-alpha.3': + resolution: {integrity: sha512-hFPAhMUjJD9BSyCANEISPOogeXC9Zo9ZQl7L6vKnaVsMkCtzznaW/naYypeyl0Gv5rYfWYsZbpixTMpjDJzQeA==} - '@emnapi/runtime@1.9.0': - resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==} + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@emnapi/runtime@1.9.1': - resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} - - '@emnapi/wasi-threads@1.2.0': - resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + '@emnapi/wasi-threads@2.0.1': + resolution: {integrity: sha512-9DsSk+o5NBX0CCJT8s0EROGSGxjR/tKu6aBTaVyq+SjAEQH4XcdcRxPBRzsBLizTTJ49MJjF+jgu3qnO9GLQcQ==} '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -993,7 +1396,7 @@ packages: resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} peerDependencies: '@types/react': '*' - react: '>=16.8.0' + react: ^19.2.7 peerDependenciesMeta: '@types/react': optional: true @@ -1010,7 +1413,7 @@ packages: '@emotion/use-insertion-effect-with-fallbacks@1.2.0': resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} peerDependencies: - react: '>=16.8.0' + react: ^19.2.7 '@emotion/utils@1.4.2': resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} @@ -1018,1928 +1421,3011 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@esbuild-kit/core-utils@3.3.2': - resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} - deprecated: 'Merged into tsx: https://tsx.is' - - '@esbuild-kit/esm-loader@2.6.5': - resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} - deprecated: 'Merged into tsx: https://tsx.is' - - '@esbuild/aix-ppc64@0.19.12': - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.27.4': - resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.18.20': - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.19.12': - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.27.4': - resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.18.20': - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.19.12': - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.4': - resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.18.20': - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.19.12': - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} - cpu: [x64] - os: [android] + cpu: [arm64] + os: [darwin] - '@esbuild/android-x64@0.27.4': - resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.18.20': - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.19.12': - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} + engines: {node: '>=18'} cpu: [arm64] - os: [darwin] + os: [freebsd] - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] + cpu: [x64] + os: [freebsd] - '@esbuild/darwin-arm64@0.27.4': - resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] - os: [darwin] + os: [linux] - '@esbuild/darwin-x64@0.18.20': - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] - '@esbuild/darwin-x64@0.19.12': - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} engines: {node: '>=18'} - cpu: [x64] - os: [darwin] + cpu: [loong64] + os: [linux] - '@esbuild/darwin-x64@0.27.4': - resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} - cpu: [x64] - os: [darwin] + cpu: [mips64el] + os: [linux] - '@esbuild/freebsd-arm64@0.18.20': - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.19.12': - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] + cpu: [riscv64] + os: [linux] - '@esbuild/freebsd-arm64@0.27.4': - resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] + cpu: [s390x] + os: [linux] - '@esbuild/freebsd-x64@0.18.20': - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} + engines: {node: '>=18'} cpu: [x64] - os: [freebsd] + os: [linux] - '@esbuild/freebsd-x64@0.19.12': - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] - os: [freebsd] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] - '@esbuild/freebsd-x64@0.27.4': - resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} engines: {node: '>=18'} cpu: [x64] - os: [freebsd] + os: [openbsd] - '@esbuild/linux-arm64@0.18.20': - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + engines: {node: '>=18'} cpu: [arm64] - os: [linux] + os: [openharmony] - '@esbuild/linux-arm64@0.19.12': - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] - os: [linux] + os: [win32] - '@esbuild/linux-arm64@0.27.4': - resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} - cpu: [arm64] - os: [linux] + cpu: [ia32] + os: [win32] - '@esbuild/linux-arm@0.18.20': - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] - '@esbuild/linux-arm@0.19.12': - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] + '@exodus/bytes@1.15.1': + resolution: {integrity: sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@noble/hashes': ^1.8.0 || ^2.0.0 + peerDependenciesMeta: + '@noble/hashes': + optional: true - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] + '@faceless-ui/modal@3.0.0': + resolution: {integrity: sha512-o3oEFsot99EQ8RJc1kL3s/nNMHX+y+WMXVzSSmca9L0l2MR6ez2QM1z1yIelJX93jqkLXQ9tW+R9tmsYa+O4Qg==} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 - '@esbuild/linux-arm@0.27.4': - resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] + '@faceless-ui/scroll-info@2.0.0': + resolution: {integrity: sha512-BkyJ9OQ4bzpKjE3UhI8BhcG36ZgfB4run8TmlaR4oMFUbl59dfyarNfjveyimrxIso9RhFEja/AJ5nQmbcR9hw==} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 - '@esbuild/linux-ia32@0.18.20': - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] + '@faceless-ui/window-info@3.0.1': + resolution: {integrity: sha512-uPjdJYE/j7hqVNelE9CRUNOeXuXDdPxR4DMe+oz3xwyZi2Y4CxsfpfdPTqqwmNAZa1P33O+ZiCyIkBEeNed0kw==} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 - '@esbuild/linux-ia32@0.19.12': - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] + '@fidm/asn1@1.0.4': + resolution: {integrity: sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ==} + engines: {node: '>= 8'} - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] + '@fidm/x509@1.2.1': + resolution: {integrity: sha512-nwc2iesjyc9hkuzcrMCBXQRn653XuAUKorfWM8PZyJawiy1QzLj4vahwzaI25+pfpwOLvMzbJ0uKpWLDNmo16w==} + engines: {node: '>= 8'} - '@esbuild/linux-ia32@0.27.4': - resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} - '@esbuild/linux-loong64@0.18.20': - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} - '@esbuild/linux-loong64@0.19.12': - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] + '@floating-ui/react-dom@2.1.9': + resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] + '@floating-ui/react@0.27.20': + resolution: {integrity: sha512-CMqMy7OaXl9W0eq1Uy7L7i2Y/anPvHmFmESd2CEw0t5YvZhcVCeo4MBevAmswRllX7Y2dEidA4ozGPunLSTQpw==} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 - '@esbuild/linux-loong64@0.27.4': - resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} - '@esbuild/linux-mips64el@0.18.20': - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] + '@iconify/react@6.0.2': + resolution: {integrity: sha512-SMmC2sactfpJD427WJEDN6PMyznTFMhByK9yLW0gOTtnjzzbsi/Ke/XqsumsavFPwNiXs8jSiYeZTmLCLwO+Fg==} + peerDependencies: + react: ^19.2.7 - '@esbuild/linux-mips64el@0.19.12': - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.27.4': - resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} - engines: {node: '>=18'} - cpu: [mips64el] + '@img/sharp-darwin-arm64@0.35.3': + resolution: {integrity: sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.35.3': + resolution: {integrity: sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [darwin] + + '@img/sharp-freebsd-wasm32@0.35.3': + resolution: {integrity: sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==} + engines: {node: '>=20.9.0'} + os: [freebsd] + + '@img/sharp-libvips-darwin-arm64@1.3.2': + resolution: {integrity: sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.3.2': + resolution: {integrity: sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.3.2': + resolution: {integrity: sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==} + cpu: [arm64] os: [linux] + libc: [glibc] - '@esbuild/linux-ppc64@0.18.20': - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] + '@img/sharp-libvips-linux-arm@1.3.2': + resolution: {integrity: sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==} + cpu: [arm] os: [linux] + libc: [glibc] - '@esbuild/linux-ppc64@0.19.12': - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} + '@img/sharp-libvips-linux-ppc64@1.3.2': + resolution: {integrity: sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==} cpu: [ppc64] os: [linux] + libc: [glibc] - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} - engines: {node: '>=18'} - cpu: [ppc64] + '@img/sharp-libvips-linux-riscv64@1.3.2': + resolution: {integrity: sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==} + cpu: [riscv64] os: [linux] + libc: [glibc] - '@esbuild/linux-ppc64@0.27.4': - resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} - engines: {node: '>=18'} - cpu: [ppc64] + '@img/sharp-libvips-linux-s390x@1.3.2': + resolution: {integrity: sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==} + cpu: [s390x] os: [linux] + libc: [glibc] - '@esbuild/linux-riscv64@0.18.20': - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] + '@img/sharp-libvips-linux-x64@1.3.2': + resolution: {integrity: sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==} + cpu: [x64] os: [linux] + libc: [glibc] - '@esbuild/linux-riscv64@0.19.12': - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} - cpu: [riscv64] + '@img/sharp-libvips-linuxmusl-arm64@1.3.2': + resolution: {integrity: sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==} + cpu: [arm64] os: [linux] + libc: [musl] - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} - engines: {node: '>=18'} - cpu: [riscv64] + '@img/sharp-libvips-linuxmusl-x64@1.3.2': + resolution: {integrity: sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==} + cpu: [x64] os: [linux] + libc: [musl] - '@esbuild/linux-riscv64@0.27.4': - resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} - engines: {node: '>=18'} - cpu: [riscv64] + '@img/sharp-linux-arm64@0.35.3': + resolution: {integrity: sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==} + engines: {node: '>=20.9.0'} + cpu: [arm64] os: [linux] + libc: [glibc] - '@esbuild/linux-s390x@0.18.20': - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] + '@img/sharp-linux-arm@0.35.3': + resolution: {integrity: sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==} + engines: {node: '>=20.9.0'} + cpu: [arm] os: [linux] + libc: [glibc] - '@esbuild/linux-s390x@0.19.12': - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} - cpu: [s390x] + '@img/sharp-linux-ppc64@0.35.3': + resolution: {integrity: sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==} + engines: {node: '>=20.9.0'} + cpu: [ppc64] os: [linux] + libc: [glibc] - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} - engines: {node: '>=18'} - cpu: [s390x] + '@img/sharp-linux-riscv64@0.35.3': + resolution: {integrity: sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==} + engines: {node: '>=20.9.0'} + cpu: [riscv64] os: [linux] + libc: [glibc] - '@esbuild/linux-s390x@0.27.4': - resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} - engines: {node: '>=18'} + '@img/sharp-linux-s390x@0.35.3': + resolution: {integrity: sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==} + engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] + libc: [glibc] - '@esbuild/linux-x64@0.18.20': - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} + '@img/sharp-linux-x64@0.35.3': + resolution: {integrity: sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] + libc: [glibc] - '@esbuild/linux-x64@0.19.12': - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} - cpu: [x64] + '@img/sharp-linuxmusl-arm64@0.35.3': + resolution: {integrity: sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==} + engines: {node: '>=20.9.0'} + cpu: [arm64] os: [linux] + libc: [musl] - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} - engines: {node: '>=18'} + '@img/sharp-linuxmusl-x64@0.35.3': + resolution: {integrity: sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] + libc: [musl] - '@esbuild/linux-x64@0.27.4': - resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] + '@img/sharp-wasm32@0.35.3': + resolution: {integrity: sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==} + engines: {node: '>=20.9.0'} - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] + '@img/sharp-webcontainers-wasm32@0.35.3': + resolution: {integrity: sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==} + engines: {node: '>=20.9.0'} + cpu: [wasm32] - '@esbuild/netbsd-arm64@0.27.4': - resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} - engines: {node: '>=18'} + '@img/sharp-win32-arm64@0.35.3': + resolution: {integrity: sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==} + engines: {node: '>=20.9.0'} cpu: [arm64] - os: [netbsd] + os: [win32] - '@esbuild/netbsd-x64@0.18.20': - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] + '@img/sharp-win32-ia32@0.35.3': + resolution: {integrity: sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==} + engines: {node: ^20.9.0} + cpu: [ia32] + os: [win32] - '@esbuild/netbsd-x64@0.19.12': - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} + '@img/sharp-win32-x64@0.35.3': + resolution: {integrity: sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==} + engines: {node: '>=20.9.0'} cpu: [x64] - os: [netbsd] + os: [win32] - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] + '@ioredis/commands@1.10.0': + resolution: {integrity: sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==} - '@esbuild/netbsd-x64@0.27.4': - resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - '@esbuild/openbsd-arm64@0.27.4': - resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} - '@esbuild/openbsd-x64@0.18.20': - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - '@esbuild/openbsd-x64@0.19.12': - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@esbuild/openbsd-x64@0.27.4': - resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - '@esbuild/openharmony-arm64@0.27.4': - resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] + '@leichtgewicht/ip-codec@2.0.5': + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@esbuild/sunos-x64@0.18.20': - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] + '@lexical/clipboard@0.41.0': + resolution: {integrity: sha512-Ex5lPkb4NBBX1DCPzOAIeHBJFH1bJcmATjREaqpnTfxCbuOeQkt44wchezUA0oDl+iAxNZ3+pLLWiUju9icoSA==} - '@esbuild/sunos-x64@0.19.12': - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] + '@lexical/code@0.41.0': + resolution: {integrity: sha512-0hoNi1KC9/N3SBOGcOcFqnT0OpwmcRRAhfxTKMGqfCtCvAMzULVwZ8RWc9/NV9bKYESgBTW5D9xkDANP2mspHg==} - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] + '@lexical/devtools-core@0.41.0': + resolution: {integrity: sha512-FzJtluBhBc8bKS11TUZe72KoZN/hnzIyiiM0SPJAsPwGpoXuM01jqpXQGybWf/1bWB+bmmhOae7O4Nywi/Csuw==} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 - '@esbuild/sunos-x64@0.27.4': - resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] + '@lexical/dragon@0.41.0': + resolution: {integrity: sha512-gBEqkk8Q6ZPruvDaRcOdF1EK9suCVBODzOCcR+EnoJTaTjfDkCM7pkPAm4w90Wa1wCZEtFHvCfas+jU9MDSumg==} - '@esbuild/win32-arm64@0.18.20': - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] + '@lexical/extension@0.41.0': + resolution: {integrity: sha512-sF4SPiP72yXvIGchmmIZ7Yg2XZTxNLOpFEIIzdqG7X/1fa1Ham9P/T7VbrblWpF6Ei5LJtK9JgNVB0hb4l3o1g==} - '@esbuild/win32-arm64@0.19.12': - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] + '@lexical/hashtag@0.41.0': + resolution: {integrity: sha512-tFWM74RW4KU0E/sj2aowfWl26vmLUTp331CgVESnhQKcZBfT40KJYd57HEqBDTfQKn4MUhylQCCA0hbpw6EeFQ==} - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] + '@lexical/headless@0.41.0': + resolution: {integrity: sha512-MH8oDuUKdM/Jq0c9vlEEkCL9pEQg4SwyrABBGIbFf+87VBJ5EWDdG9g1vJq7fKSDxfhFux7F5+i+zgUnxOQR/g==} - '@esbuild/win32-arm64@0.27.4': - resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] + '@lexical/history@0.41.0': + resolution: {integrity: sha512-kGoVWsiOn62+RMjRolRa+NXZl8jFwxav6GNDiHH8yzivtoaH8n1SwUfLJELXCzeqzs81HySqD4q30VLJVTGoDg==} - '@esbuild/win32-ia32@0.18.20': - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] + '@lexical/html@0.41.0': + resolution: {integrity: sha512-3RyZy+H/IDKz2D66rNN/NqYx87xVFrngfEbyu1OWtbY963RUFnopiVHCQvsge/8kT04QSZ7U/DzjVFqeNS6clg==} - '@esbuild/win32-ia32@0.19.12': - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] + '@lexical/link@0.41.0': + resolution: {integrity: sha512-Rjtx5cGWAkKcnacncbVsZ1TqRnUB2Wm4eEVKpaAEG41+kHgqghzM2P+UGT15yROroxJu8KvAC9ISiYFiU4XE1w==} - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} - engines: {node: '>=18'} - cpu: [ia32] + '@lexical/list@0.41.0': + resolution: {integrity: sha512-RXvB+xcbzVoQLGRDOBRCacztG7V+bI95tdoTwl8pz5xvgPtAaRnkZWMDP+yMNzMJZsqEChdtpxbf0NgtMkun6g==} + + '@lexical/mark@0.41.0': + resolution: {integrity: sha512-UO5WVs9uJAYIKHSlYh4Z1gHrBBchTOi21UCYBIZ7eAs4suK84hPzD+3/LAX5CB7ZltL6ke5Sly3FOwNXv/wfpA==} + + '@lexical/markdown@0.41.0': + resolution: {integrity: sha512-bzI73JMXpjGFhqUWNV6KqfjWcgAWzwFT+J3RHtbCF5rysC8HLldBYojOgAAtPfXqfxyv2mDzsY7SoJ75s9uHZA==} + + '@lexical/offset@0.41.0': + resolution: {integrity: sha512-2RHBXZqC8gm3X9C0AyRb0M8w7zJu5dKiasrif+jSKzsxPjAUeF1m95OtIOsWs1XLNUgASOSUqGovDZxKJslZfA==} + + '@lexical/overflow@0.41.0': + resolution: {integrity: sha512-Iy6ZiJip8X14EBYt1zKPOrXyQ4eG9JLBEoPoSVBTiSbVd+lYicdUvaOThT0k0/qeVTN9nqTaEltBjm56IrVKCQ==} + + '@lexical/plain-text@0.41.0': + resolution: {integrity: sha512-HIsGgmFUYRUNNyvckun33UQfU7LRzDlxymHUq67+Bxd5bXqdZOrStEKJXuDX+LuLh/GXZbaWNbDLqwLBObfbQg==} + + '@lexical/react@0.41.0': + resolution: {integrity: sha512-7+GUdZUm6sofWm+zdsWAs6cFBwKNsvsHezZTrf6k8jrZxL461ZQmbz/16b4DvjCGL9r5P1fR7md9/LCmk8TiCg==} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 + + '@lexical/rich-text@0.41.0': + resolution: {integrity: sha512-yUcr7ZaaVTZNi8bow4CK1M8jy2qyyls1Vr+5dVjwBclVShOL/F/nFyzBOSb6RtXXRbd3Ahuk9fEleppX/RNIdw==} + + '@lexical/selection@0.41.0': + resolution: {integrity: sha512-1s7/kNyRzcv5uaTwsUL28NpiisqTf5xZ1zNukLsCN1xY+TWbv9RE9OxIv+748wMm4pxNczQe/UbIBODkbeknLw==} + + '@lexical/table@0.41.0': + resolution: {integrity: sha512-d3SPThBAr+oZ8O74TXU0iXM3rLbrAVC7/HcOnSAq7/AhWQW8yMutT51JQGN+0fMLP9kqoWSAojNtkdvzXfU/+A==} + + '@lexical/text@0.41.0': + resolution: {integrity: sha512-gGA+Anc7ck110EXo4KVKtq6Ui3M7Vz3OpGJ4QE6zJHWW8nV5h273koUGSutAMeoZgRVb6t01Izh3ORoFt/j1CA==} + + '@lexical/utils@0.41.0': + resolution: {integrity: sha512-Wlsokr5NQCq83D+7kxZ9qs5yQ3dU3Qaf2M+uXxLRoPoDaXqW8xTWZq1+ZFoEzsHzx06QoPa4Vu/40BZR91uQPg==} + + '@lexical/yjs@0.41.0': + resolution: {integrity: sha512-PaKTxSbVC4fpqUjQ7vUL9RkNF1PjL8TFl5jRe03PqoPYpE33buf3VXX6+cOUEfv9+uknSqLCPHoBS/4jN3a97w==} + peerDependencies: + yjs: '>=13.5.22' + + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} + peerDependencies: + '@types/react': '>=16' + react: ^19.2.7 + + '@mediabunny/prores@1.52.2': + resolution: {integrity: sha512-EX7nwk7mEyn86SASjn/DXHYVaYSVeU+UyoF9Lw5xfpSWKwJhEtdYDRgiy5ecHnqftwcSwPPrtS65Bm0UP+GOxA==} + peerDependencies: + mediabunny: ^1.49.0 + + '@mediabunny/server@1.52.2': + resolution: {integrity: sha512-m4CY7OpApY7/IbBP987zEJFNfJr8ARmyIE7qU6/14Cb4A8pC+7CdaKs7uBHZsh+75ZfuCBlHEQZf4M9i+7oqOQ==} + peerDependencies: + mediabunny: ^1.45.0 + + '@minhducsun2002/leb128@1.0.0': + resolution: {integrity: sha512-eFrYUPDVHeuwWHluTG1kwNQUEUcFjVKYwPkU8z9DR1JH3AW7JtJsG9cRVGmwz809kKtGfwGJj58juCZxEvnI/g==} + + '@monaco-editor/loader@1.7.0': + resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} + + '@monaco-editor/react@4.7.0': + resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==} + peerDependencies: + monaco-editor: '>= 0.25.0 < 1' + react: ^19.2.7 + react-dom: ^19.2.7 + + '@mongodb-js/saslprep@1.4.13': + resolution: {integrity: sha512-E3Sv4eCYAlKYUTx8S3ioQcDUscOif+8zZ5OnW1IzJ+Tt+EO+ke8mn+Y3FX6N1H79picwbdOavVOb1jPi2EOyrg==} + + '@napi-rs/canvas-android-arm64@0.1.80': + resolution: {integrity: sha512-sk7xhN/MoXeuExlggf91pNziBxLPVUqF2CAVnB57KLG/pz7+U5TKG8eXdc3pm0d7Od0WreB6ZKLj37sX9muGOQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/canvas-android-arm64@1.0.3': + resolution: {integrity: sha512-7kSCdUhoXiO+AaIMXdBGdtp6EctZNkmF62Rea/BmVQlwKaM3bBhOzyGUzxyxz9dv5vdBfpyAaxhSRSJF4kqK4A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/canvas-darwin-arm64@0.1.80': + resolution: {integrity: sha512-O64APRTXRUiAz0P8gErkfEr3lipLJgM6pjATwavZ22ebhjYl/SUbpgM0xcWPQBNMP1n29afAC/Us5PX1vg+JNQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/canvas-darwin-arm64@1.0.3': + resolution: {integrity: sha512-ds14V1BPagLszQyaDTeggny5fNeTCqsUQ5QhFj9VDxSEfzrVxXtdbR0LoFyKa0Siaaw8KvqSk4t7k/WoZJwvbg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/canvas-darwin-x64@0.1.80': + resolution: {integrity: sha512-FqqSU7qFce0Cp3pwnTjVkKjjOtxMqRe6lmINxpIZYaZNnVI0H5FtsaraZJ36SiTHNjZlUB69/HhxNDT1Aaa9vA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/canvas-darwin-x64@1.0.3': + resolution: {integrity: sha512-qof3LRAAycmkV2I1izZo9RoSHF8kCQr5O05sFwv0jK8rSdYV6KHVwimo6Qb7RxZj40WHKbLHm5JDaUF0o5XUAA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.80': + resolution: {integrity: sha512-eyWz0ddBDQc7/JbAtY4OtZ5SpK8tR4JsCYEZjCE3dI8pqoWUC8oMwYSBGCYfsx2w47cQgQCgMVRVTFiiO38hHQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/canvas-linux-arm-gnueabihf@1.0.3': + resolution: {integrity: sha512-FU2kKZLmolHA9+KcUA+l1+xH3WTLUUTQDU/kLv9SEUr2TrRPu94aytOeizFJDHPs/QBcw4QL1mCQhetQXYBbag==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/canvas-linux-arm64-gnu@0.1.80': + resolution: {integrity: sha512-qwA63t8A86bnxhuA/GwOkK3jvb+XTQaTiVML0vAWoHyoZYTjNs7BzoOONDgTnNtr8/yHrq64XXzUoLqDzU+Uuw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@napi-rs/canvas-linux-arm64-gnu@1.0.3': + resolution: {integrity: sha512-GVSjntxKeA+/y/ZKf1F+cmUw1WeIkE5aMRPqnZUlBTBvBcrvgWccJAWuYCKPX4QJQwZILIIwhgdAbl51yj6fpA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@napi-rs/canvas-linux-arm64-musl@0.1.80': + resolution: {integrity: sha512-1XbCOz/ymhj24lFaIXtWnwv/6eFHXDrjP0jYkc6iHQ9q8oXKzUX1Lc6bu+wuGiLhGh2GS/2JlfORC5ZcXimRcg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@napi-rs/canvas-linux-arm64-musl@1.0.3': + resolution: {integrity: sha512-J51oK/axyZ13kxycumSMfLiDZMdWdOVvqDFI28BpuViZHE3A0bQfr8B5vg8YnPEnqLD3BSn1hkdlh2buspEcNQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@napi-rs/canvas-linux-riscv64-gnu@0.1.80': + resolution: {integrity: sha512-XTzR125w5ZMs0lJcxRlS1K3P5RaZ9RmUsPtd1uGt+EfDyYMu4c6SEROYsxyatbbu/2+lPe7MPHOO/0a0x7L/gw==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@napi-rs/canvas-linux-riscv64-gnu@1.0.3': + resolution: {integrity: sha512-CtQgQjoVTX67jS9XuCTtJ40Sl7wRLMguoFnnGnfDmCWf7kzKFZVwj5ynqUOIGKFMSB61ZCuQlwPvVNxYTTseaw==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@napi-rs/canvas-linux-x64-gnu@0.1.80': + resolution: {integrity: sha512-BeXAmhKg1kX3UCrJsYbdQd3hIMDH/K6HnP/pG2LuITaXhXBiNdh//TVVVVCBbJzVQaV5gK/4ZOCMrQW9mvuTqA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@napi-rs/canvas-linux-x64-gnu@1.0.3': + resolution: {integrity: sha512-jtfzAHFp+FRaR7zGT4jyCe6wUgAG/dVb5A4Apd8FY9jKarntDfUAlJXscugiH7ZF5kKnu7/lHFk9LaDPcrGEVQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@napi-rs/canvas-linux-x64-musl@0.1.80': + resolution: {integrity: sha512-x0XvZWdHbkgdgucJsRxprX/4o4sEed7qo9rCQA9ugiS9qE2QvP0RIiEugtZhfLH3cyI+jIRFJHV4Fuz+1BHHMg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@napi-rs/canvas-linux-x64-musl@1.0.3': + resolution: {integrity: sha512-xTzaUCKUHTY4bCGadeeRZggbRVbGUT1petg7Z8r9AJR2+D9Bqu6nQAgqBGC6D47tA70LjaaaLTrJ7wNY1T74dg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@napi-rs/canvas-win32-arm64-msvc@1.0.3': + resolution: {integrity: sha512-ktVLuBkI6QVOm5BwO/WbdGwxgeetAMJa7TTmR8qBarXF0OU2NKjvjUtPJAl2y8t+zBRczJl/1VOl9gua6WcK2g==} + engines: {node: '>= 10'} + cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.4': - resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} - engines: {node: '>=18'} - cpu: [ia32] + '@napi-rs/canvas-win32-x64-msvc@0.1.80': + resolution: {integrity: sha512-Z8jPsM6df5V8B1HrCHB05+bDiCxjE9QA//3YrkKIdVDEwn5RKaqOxCJDRJkl48cJbylcrJbW4HxZbTte8juuPg==} + engines: {node: '>= 10'} + cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.18.20': - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} + '@napi-rs/canvas-win32-x64-msvc@1.0.3': + resolution: {integrity: sha512-SGhlQ8bDjL1Cz2KnsKMasr/5sTcwG/SZkB6WCJxLsmSm/3aS2C+3p39bA7iZ2/94+NkVDySZfbiGoaSZSFHYxA==} + engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.19.12': - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} + '@napi-rs/canvas@0.1.80': + resolution: {integrity: sha512-DxuT1ClnIPts1kQx8FBmkk4BQDTfI5kIzywAaMjQSXfNnra5UFU9PwurXrl+Je3bJ6BGsp/zmshVVFbCmyI+ww==} + engines: {node: '>= 10'} + + '@napi-rs/canvas@1.0.3': + resolution: {integrity: sha512-OlI657a5XXvKGFX7kNeIzJ8rO7IXt87Mqu2H8rXE46viAuOfum/JA7ysX7+eBhxNKznT+RCZh418mndlcFX3+w==} + engines: {node: '>= 10'} + + '@napi-rs/wasm-runtime@1.2.0': + resolution: {integrity: sha512-kDoONqMa+VnZ4vvvu/ZUurpJ4gkZU57e7g69qpNgWhYcZFPUHZM2CEMKm+cG6ufDVALbjMvfmMjFVqaK7uEMnA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} + peerDependencies: + '@emnapi/core': ^2.0.0-alpha.3 + '@emnapi/runtime': ^2.0.0-alpha + + '@next/env@15.5.22': + resolution: {integrity: sha512-O5BlKb3KtsHkvO0gjjV66PuJnAgCtIEIzwkt50HRAHsQkU1t77eksIXSZV84/WMtZJjWrnDUPKHVRi0D62nSAA==} + + '@next/env@16.2.12': + resolution: {integrity: sha512-d0Z5Bc13Fa4nR8pFAKx2jay2yhJM16vlfHbTzYnUQAxlNb6B6lmn4hjt69lYNt4kRtyYP6gEM49lPRHNbIyneg==} + + '@next/env@16.3.0': + resolution: {integrity: sha512-o9r1S0BNiNreHP9Vs+Qnqd9kviDkJh8xIACY7UFZSmiGbbQRzPBBosvHzAU4TULHOIuOj/18RSsyz2qrREmIFw==} + + '@next/swc-darwin-arm64@16.2.12': + resolution: {integrity: sha512-0W1R0teHWJrqKX0FH20IzzIWAOuGtBxPGuObrxy1lE8hQvCFj49KE8a3WUg0D7sq6rn6zkM4c7YGUnhudBS6oA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-arm64@16.3.0': + resolution: {integrity: sha512-55hpqq18bEVAlxedlTt3tFqZmKg2nUXT1kn1G/BGEy0R13h3LwtwHPVzzjG6P4LLeOHE32PFDQUVaJEWvBEZBw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@16.2.12': + resolution: {integrity: sha512-Hy5Ls099+aFUmOLmIgPfLqNi6iCwhL3uQCssz5rWk+5Nkc6TUKCE83DY5BbNylfm3+mfwcSFnLRfrZDJhVxdtw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-darwin-x64@16.3.0': + resolution: {integrity: sha512-SOi96kSaF5T+0wW4koiM1bWzSPwjzTesC1p3df+FjdOi5LIQkBK/blxh7HdoKnNuI4PURF1OO7TZqtfnbWDSgw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@16.2.12': + resolution: {integrity: sha512-+YqU2h1cQkHsGfvjAsrSmst8UIFBibBGm5x3Xgel8NLMiDQtNOM4sM2GOEMvG5YiOBNeN/Ykk8cQC2S0Xrqljg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-arm64-gnu@16.3.0': + resolution: {integrity: sha512-P0gZAoPMF4dyTRzhmkV4PrqVzSOB6t4mC1oI3c4dqijJ+OVEVx5clIXAKR4/uQpsqw2KKM/0D5tVumcR2r5blg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-arm64-musl@16.2.12': + resolution: {integrity: sha512-0qjhiYBaKAqF63LA1ZWAAnKTzFUguAaZiRa5etMLGGPj/B6uEVjtIZldIzFEp3wHlB0koK6aTzqPtSdplTCjoA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@next/swc-linux-arm64-musl@16.3.0': + resolution: {integrity: sha512-tXXGKJw0m37O0eKJARVTX/TheKPhz0QFVtVVZXmOig+9YKLQOSP6hvf2pxv5DO7CLEJyTHx3Pg043CDQkv1G4Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@next/swc-linux-x64-gnu@16.2.12': + resolution: {integrity: sha512-7A3q26W+h7gnA15uqBToNuDqBEFZZcqh0mW2mn4AJh/G5pdg2RVE3n4slzLEliASZFG3NmsbEzng/x2Sh09mBg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-x64-gnu@16.3.0': + resolution: {integrity: sha512-pjGxK5EY7yWml78ALejFkWmgHsU7wbFQrISiugpH6FbUJhgEvw3xFZ/EBAtLl7QtL0WdQKiG9eWJ3mOKGTukHw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-x64-musl@16.2.12': + resolution: {integrity: sha512-qSjL/uppm+cbh21s72Ss8gkiOhQ4dExWHNGOWy6eZV7STj5WsKehgxT61beSsOj+YYQuTplL376lOCdMQU5T8w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@next/swc-linux-x64-musl@16.3.0': + resolution: {integrity: sha512-sjo++Xx+lomlPs3HRsHWhVDyGG6ms1kGW5EtHLERdII8AyG1i+f6aq68xHREO6AEMlhjTNEWBSmfJfqm9orf7g==} + engines: {node: '>= 10'} cpu: [x64] + os: [linux] + libc: [musl] + + '@next/swc-win32-arm64-msvc@16.2.12': + resolution: {integrity: sha512-X6hzsOUJac/e7AWSbn9gQ9nzHld1xWP5iyjHpYWvud8pufB679O1xg4JDyKr8Xd69Jvd+kM2Der6uftiZCmjYA==} + engines: {node: '>= 10'} + cpu: [arm64] os: [win32] - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} - engines: {node: '>=18'} + '@next/swc-win32-arm64-msvc@16.3.0': + resolution: {integrity: sha512-C5JSgiO54wURdaxdEUIXqkz04uMqC9UmPX1gtDrV/5Tf1UowdWYI8uA5hfFbPolTlp0q4KZ60xlHePNibf0VIw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@16.2.12': + resolution: {integrity: sha512-F6fakeHuFTLOPt0bslQJdf+xtT+WIP9DVn/m4y1w1mRnVPyh3D/cNvzlRkxM444xfm+IvvYNSOrKiA2CDJ0Uxw==} + engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.4': - resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} - engines: {node: '>=18'} + '@next/swc-win32-x64-msvc@16.3.0': + resolution: {integrity: sha512-fDOggsweNb5SSw0ZKVk6U+gxSyGFFlIBY/LBc1r8GUj4u/6t6oArL+Pmkg0MBnsgR+KkdsURilVH4F3GXUGepA==} + engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@noble/ciphers@1.3.0': + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@noble/curves@1.9.7': + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@octokit/auth-token@6.0.0': + resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} + engines: {node: '>= 20'} - '@eslint-react/ast@1.31.0': - resolution: {integrity: sha512-grHVhrUDxWJxH1sV21Tsn3Rvy55j9JiCqWynGCtQ1UL0dFvVWI+7sUGvt0oIFtJn6aMZrJQ8BBqpWZEtNdrjjQ==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@octokit/core@7.0.7': + resolution: {integrity: sha512-DcB0M3KFgr9ECI328lhBMVsyFT2DnmNucSBTqEN3exyNKUzkkpUSCHmTRcunF41Eou2TIQKW4seewri8ON9bSA==} + engines: {node: '>= 20'} - '@eslint-react/core@1.31.0': - resolution: {integrity: sha512-oWP/On0GQE67SyrglNwmocghOZHicl7EEzJcTc5nOsALFK7qeQil8GGu71bZ02vzAL8f9BkcD/DrxQKZZ+lp/A==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@octokit/endpoint@11.0.4': + resolution: {integrity: sha512-f1cOWoHPmxryJFknxbtDdjODWfV8A9tc8Aae6ermXPNgHFZ/x91AtHIz4gicEjL8hkJiip+u21QHJORfBv/qiA==} + engines: {node: '>= 20'} - '@eslint-react/eff@1.31.0': - resolution: {integrity: sha512-vimMkCQ9xJ09ECVVuW7aRiQD23XFij9TISs/AZsMRvezwou36vzT05qX5nkArkVALAzqIGSuEX8ez2r5N0vZ2g==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@octokit/graphql@9.0.4': + resolution: {integrity: sha512-5s15CCiY8XXQ+FG+b1YQcl6Z2FA++nwAz/tg2VUrTmnMncP+2nnGUEYANImdnxsA2Fnq+Mbl7hDjUTw7cFAwcg==} + engines: {node: '>= 20'} - '@eslint-react/eslint-plugin@1.31.0': - resolution: {integrity: sha512-rw3htCHW1sjidT/XeNZzfM7kuu/K5CGTfN9LXoH+Gz6LDNkLGSLgmuZne1qM2H0lYgHC8OxV7lKQoObhVwZkWA==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@octokit/openapi-types@27.0.0': + resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} + + '@octokit/openapi-types@28.0.0': + resolution: {integrity: sha512-0rFyLuyHvIj6uuZWuDslxkowFYdPXoNIkeAv4b27dzm2Tf4vGWXnPsMcxs7d65kLdMERgP3wc1AEPlqMz8e1cQ==} + + '@octokit/plugin-paginate-rest@14.0.0': + resolution: {integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==} + engines: {node: '>= 20'} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - typescript: - optional: true + '@octokit/core': '>=6' - '@eslint-react/jsx@1.31.0': - resolution: {integrity: sha512-DrsZz5yRFkCasUHMa+dov23/o2uU1QAv6ncwnK3aJh4tf6wKhnB55AAaSRaiTaHC4TH6c3yYVJ2SAbDNXsgUTg==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@octokit/plugin-retry@8.1.1': + resolution: {integrity: sha512-VCVvZ/R1+u3WuiBWpNavZ0mY4aaJNAsENrpBP9aLSR2QyOpQgd7DhM5j4AW7z4MQpnJYgwBPf0XqPQoNBRdQwg==} + engines: {node: '>= 20'} + peerDependencies: + '@octokit/core': '>=7' - '@eslint-react/shared@1.31.0': - resolution: {integrity: sha512-hB0mJATryhnwSG1zEIblOj/X159CpHyDqXExd3El1LovyVP/rbMccZ8qscNuYwnAsTU1FTZBZboIbSplxxumug==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@octokit/plugin-throttling@11.0.5': + resolution: {integrity: sha512-LIdrkrUv+DWbKeg/49rGuFJ3SU0d3hUS+B4MhNZLepBoNUFXms8Ic9edJjrlx+zycqJHjrMRudVpVb/bAXM2Lw==} + engines: {node: '>= 20'} + peerDependencies: + '@octokit/core': ^7.0.0 - '@eslint-react/var@1.31.0': - resolution: {integrity: sha512-4jiAqBfX6JgnmKVhuOIqHT5gAvZF5I/xXU32E79EFIgaDs0rFEy0KL+EcZJsXB20cMajg0pEiKXVWFgFwbxFPw==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@octokit/request-error@7.1.1': + resolution: {integrity: sha512-+eaY7G2VVpSf2pc5Gn1+mph837V/d/TYTJAgWL9Tb0ogGYcpN3IlAVFgjL+Vv93F/sevrxkvsYCedtpLdcFLzA==} + engines: {node: '>= 20'} - '@eslint/config-array@0.19.2': - resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@octokit/request@10.0.13': + resolution: {integrity: sha512-v2269YxL9Yf+x3d+gRI63FP0vFQEiWgLyBzxe/Y+0yFDg2B/Tzf5dhh9VNfccVAQnfcfwQWyk/y6Bn7rUXXs7A==} + engines: {node: '>= 20'} - '@eslint/config-array@0.20.0': - resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@octokit/types@16.0.0': + resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} - '@eslint/config-helpers@0.1.0': - resolution: {integrity: sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@octokit/types@17.0.0': + resolution: {integrity: sha512-ByP1v7YL5SMveFPP7+sj0/ZuWCOOg/Chs4NafOMpq6WNIM/hdGY0S7C0TCGDBWu1aGmOxmUIhMx3cO+IdwYZ1Q==} - '@eslint/config-helpers@0.2.1': - resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@opentelemetry/api-logs@0.220.0': + resolution: {integrity: sha512-CmVa4ImJ+ynfrPMNaAXHET6Bhb44SwzmfyVJFq9ni2jgXJR/l7C6gfVFddNmHP+ZOkP9cf4f9DBe68qVLTHc9w==} + engines: {node: '>=8.0.0'} - '@eslint/core@0.12.0': - resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@opentelemetry/api-logs@0.57.2': + resolution: {integrity: sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==} + engines: {node: '>=14'} - '@eslint/core@0.13.0': - resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@opentelemetry/api@1.9.1': + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} + engines: {node: '>=8.0.0'} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@opentelemetry/context-async-hooks@1.30.1': + resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@eslint/js@9.22.0': - resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@opentelemetry/core@1.30.1': + resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@eslint/js@9.26.0': - resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@opentelemetry/core@2.10.0': + resolution: {integrity: sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@opentelemetry/instrumentation-amqplib@0.46.1': + resolution: {integrity: sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@eslint/plugin-kit@0.2.8': - resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@opentelemetry/instrumentation-connect@0.43.1': + resolution: {integrity: sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@faceless-ui/modal@3.0.0': - resolution: {integrity: sha512-o3oEFsot99EQ8RJc1kL3s/nNMHX+y+WMXVzSSmca9L0l2MR6ez2QM1z1yIelJX93jqkLXQ9tW+R9tmsYa+O4Qg==} + '@opentelemetry/instrumentation-dataloader@0.16.1': + resolution: {integrity: sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==} + engines: {node: '>=14'} 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 + '@opentelemetry/api': ^1.3.0 - '@faceless-ui/modal@3.0.0-beta.2': - resolution: {integrity: sha512-UmXvz7Iw3KMO4Pm3llZczU4uc5pPQDb6rdqwoBvYDFgWvkraOAHKx0HxSZgwqQvqOhn8joEFBfFp6/Do2562ow==} + '@opentelemetry/instrumentation-express@0.47.1': + resolution: {integrity: sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==} + engines: {node: '>=14'} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc.0 + '@opentelemetry/api': ^1.3.0 - '@faceless-ui/scroll-info@2.0.0': - resolution: {integrity: sha512-BkyJ9OQ4bzpKjE3UhI8BhcG36ZgfB4run8TmlaR4oMFUbl59dfyarNfjveyimrxIso9RhFEja/AJ5nQmbcR9hw==} + '@opentelemetry/instrumentation-fs@0.19.1': + resolution: {integrity: sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==} + engines: {node: '>=14'} 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 + '@opentelemetry/api': ^1.3.0 - '@faceless-ui/window-info@3.0.1': - resolution: {integrity: sha512-uPjdJYE/j7hqVNelE9CRUNOeXuXDdPxR4DMe+oz3xwyZi2Y4CxsfpfdPTqqwmNAZa1P33O+ZiCyIkBEeNed0kw==} + '@opentelemetry/instrumentation-generic-pool@0.43.1': + resolution: {integrity: sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==} + engines: {node: '>=14'} 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 + '@opentelemetry/api': ^1.3.0 - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + '@opentelemetry/instrumentation-graphql@0.47.1': + resolution: {integrity: sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==} engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@floating-ui/core@1.7.0': - resolution: {integrity: sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==} + '@opentelemetry/instrumentation-hapi@0.45.2': + resolution: {integrity: sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@floating-ui/dom@1.7.0': - resolution: {integrity: sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==} + '@opentelemetry/instrumentation-http@0.57.2': + resolution: {integrity: sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@floating-ui/react-dom@2.1.2': - resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} + '@opentelemetry/instrumentation-ioredis@0.47.1': + resolution: {integrity: sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA==} + engines: {node: '>=14'} peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + '@opentelemetry/api': ^1.3.0 - '@floating-ui/react@0.27.8': - resolution: {integrity: sha512-EQJ4Th328y2wyHR3KzOUOoTW2UKjFk53fmyahfwExnFQ8vnsMYqKc+fFPOkeYtj5tcp1DUMiNJ7BFhed7e9ONw==} + '@opentelemetry/instrumentation-kafkajs@0.7.1': + resolution: {integrity: sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==} + engines: {node: '>=14'} peerDependencies: - react: '>=17.0.0' - react-dom: '>=17.0.0' + '@opentelemetry/api': ^1.3.0 - '@floating-ui/utils@0.2.9': - resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + '@opentelemetry/instrumentation-knex@0.44.1': + resolution: {integrity: sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@hono/node-server@1.19.11': - resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} - engines: {node: '>=18.14.1'} + '@opentelemetry/instrumentation-koa@0.47.1': + resolution: {integrity: sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==} + engines: {node: '>=14'} peerDependencies: - hono: ^4 + '@opentelemetry/api': ^1.3.0 - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} + '@opentelemetry/instrumentation-lru-memoizer@0.44.1': + resolution: {integrity: sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} + '@opentelemetry/instrumentation-mongodb@0.52.0': + resolution: {integrity: sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + '@opentelemetry/instrumentation-mongoose@0.46.1': + resolution: {integrity: sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} + '@opentelemetry/instrumentation-mysql2@0.45.2': + resolution: {integrity: sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@humanwhocodes/retry@0.4.2': - resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} - engines: {node: '>=18.18'} + '@opentelemetry/instrumentation-mysql@0.45.1': + resolution: {integrity: sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@img/colour@1.1.0': - resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} - engines: {node: '>=18'} + '@opentelemetry/instrumentation-pg@0.51.1': + resolution: {integrity: sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] + '@opentelemetry/instrumentation-redis-4@0.46.1': + resolution: {integrity: sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 - '@img/sharp-darwin-arm64@0.34.1': - resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] + '@opentelemetry/instrumentation-tedious@0.18.1': + resolution: {integrity: sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-undici@0.10.1': + resolution: {integrity: sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + + '@opentelemetry/instrumentation@0.220.0': + resolution: {integrity: sha512-xQx3E2WxP1mDvKzxLxX+CTCtNLa560YJZ3087qYHerl2YmiKpv7AH+dAy7vmx+eVrZ5BwhfWUAVoKOoxCNHcpw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.57.2': + resolution: {integrity: sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/redis-common@0.36.2': + resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==} + engines: {node: '>=14'} + + '@opentelemetry/resources@1.30.1': + resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/resources@2.10.0': + resolution: {integrity: sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@1.30.1': + resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.10.0': + resolution: {integrity: sha512-GuYQQT7QD2EeO8lcZLRQzcbOyhqAzL+6WWTKTU9mSUBYBazkEDl+VrQcXQhbB08OWM9anD1aHleVadzulpOaUQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace@2.10.0': + resolution: {integrity: sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.28.0': + resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} + engines: {node: '>=14'} + + '@opentelemetry/semantic-conventions@1.43.0': + resolution: {integrity: sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==} + engines: {node: '>=14'} + + '@opentelemetry/sql-common@0.40.1': + resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + + '@oxc-parser/binding-android-arm-eabi@0.127.0': + resolution: {integrity: sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-wasm32-wasi@0.127.0': + resolution: {integrity: sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==} + 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==} + 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==} + 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==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.127.0': + resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} + + '@oxc-project/types@0.142.0': + resolution: {integrity: sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==} + + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.24.2': + resolution: {integrity: sha512-cl4icWaZFnLdg8m6qtnh5rBMuGbxc/ptStFHLeCNwr+2cZjkjNwQu/jYRS0CHlnPecOJMpuS5M6/BH+0J/YkEg==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.24.2': + resolution: {integrity: sha512-At29QEMF6HajbQvgY8K6OXnHD1x9rad74xBEfmCB6ZqCGsdq75aK7tOYcTbOanMy8qdIBrfL3SMr3p/lfSlb9w==} + cpu: [arm64] + os: [darwin] + + '@oxc-resolver/binding-darwin-x64@11.24.2': + resolution: {integrity: sha512-A5Kqr1EUj4oIL5CF4WRssq/o5P0Y11cwoFouMRmQ7YnC/A8V93nv1nb7aSU8HwcgmXropjLNkVTl4MN87cu28Q==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@11.24.2': + resolution: {integrity: sha512-R5xkRBRRz7ceH/P5Jrc6G7FmdUdgpLYyESFAUDVTNQ9K0sGPxcp4ljiwEwEqsvNcQ4sYbMRrWcHHBCu7ksAJVw==} + cpu: [x64] + os: [freebsd] + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + resolution: {integrity: sha512-k/RuYL4L/R58IBn3wT5ma3Wh4k62bp1eYCFRWCmMsasUOqL+H6sW0VGFadEzKWXFFlz+2uIMoeMk9ySSZJHgbg==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + resolution: {integrity: sha512-bnHAak3ujYfH5pKk4NieFNbvYvernfoQDgwLddbZ3OtMYrem87/qjlA+u+aKG0oZcqSLGCful/6/CEA+aeAgaA==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': + resolution: {integrity: sha512-vDT3KHgzYp47gmtNOqL2VNhCyl5Zv643eyxm//A68J8DeUGXrvD1pZFiaT4jSfe+RInfnn1R2yVHye4enx6RnA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': + resolution: {integrity: sha512-+kMlQvbzfyEYtu5FcjE4p+ttBLpKW4d/AsAsuE69BxV6V4twZJeIQZFfD8gh/wqglY0MkPSezWXQH0jBV13MUw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': + resolution: {integrity: sha512-shjfMhmZ3gq9fv/w7bi3PnZlgOPG+2QAOFf0BJF0EgBSIGZ6PMLN2zbGEblTUYB/NKVDRyYhE2ff3dJ1QqNPkA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': + resolution: {integrity: sha512-zGelwFR5oRo+b69k8Lrzun86DyUHzfKN6cnjbR9l7Z7NIRznOE/2ZvPa1IUKqAL2PzAXOdwkfVqNvO1H2RlpAw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': + resolution: {integrity: sha512-qxZ1SWCXJY0eyhAlP6Lmo9F2Nrtx7EkYj9oCgL8apDPCwXwCEDA2U697bbT81JIc2IrVjxO4KX6WU2N+oN9Z4w==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + resolution: {integrity: sha512-sGCecF3cx2DFlH4t/z7ApnOnXqN48p5p5mlHDEnHTAukQa2P+qMVE4CwyWE9W+q/m3QJ7kKfGrIjax31f44oFQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + resolution: {integrity: sha512-k/VlMMcSzMlahb3/fENM4rTlsJ0s3fFROA0KXPBmKggqmTSaE383sl8F3KCOXPLmVsYfW6hCitMhXCEtNeZxxg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + resolution: {integrity: sha512-8hbnZyNi97b/8wapYaIF9+t9GmZKBW2vunaOc3h9HGJptH7b7XpvZqOTBSm/MpTjr7H497BlgOaSfLUdhmy2bw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + resolution: {integrity: sha512-MvyGik3a6pVgZ0t/kWlbmFxFLmXQJwgLsY2eYFHLpy0wGwRbfzeIGgDwQ3kXqE30z+kSXennRkCrT7TUvkptNg==} + cpu: [arm64] + os: [openharmony] + + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + resolution: {integrity: sha512-vHcssMPwO08RTvj/c0iOBz90attxyG3wQJ0dTcyEQK43LRpcdLWZlV5feBhv6Isn6ahbQIzHbCgfa81+RiML0Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + resolution: {integrity: sha512-uokJqro2iBqkFvJdKQLP7d8/BUmFwESQFVmIJUQKj1Xn1a/LysJoe1vmeECLF5b3jsV8CAL5sEMJXX6SdK9Nhg==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + resolution: {integrity: sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw==} + cpu: [x64] + os: [win32] + + '@paper-design/shaders-react@0.0.80': + resolution: {integrity: sha512-Y1oxUeh5D2AECo05O+4UYRbaMfQzKKYH3Q5jcvirOcoX0hTPYbezCLn5g94nvcuzxy5LN/uqwsL3jDUp8r3E+A==} + peerDependencies: + '@types/react': ^18 || ^19 + react: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + + '@paper-design/shaders@0.0.80': + resolution: {integrity: sha512-pcabvt5xDlFoEhpjUj4b1tGJMfqb0i5mXifWMNQf6z7FoOJYxYDo7F8R6k0JAh5D/7ouxjX5+N0cIq5WURyQ1Q==} + + '@payloadcms/db-mongodb@3.87.0': + resolution: {integrity: sha512-wmcz7dVn7tFK62z+eU+GKtK0A3TAeBge8U1VvNYbwkf/hz7tCf3QTacjj7rksYwFZGsm9cco4v1W81YcIpWmFg==} + peerDependencies: + payload: 3.87.0 + + '@payloadcms/graphql@3.87.0': + resolution: {integrity: sha512-P5p/AS2rdpbrHrM7lhHH8vb4LcDBxWwPQvVJf0r2hCFSX1IYg5/JcX+/By2SwOY9ybBZFiOtDTzfoXl7Kkfhrg==} + hasBin: true + peerDependencies: + graphql: ^16.8.1 + payload: 3.87.0 + + '@payloadcms/kv-redis@3.87.0': + resolution: {integrity: sha512-S5fSuDvmDaitWncfnpavuzWokENH5VSztMftygz6vnMRndZTNAGrgCKRdDen3Ij5NyZWOwYIuE09sn1yo7QKwQ==} + engines: {node: ^18.20.2 || >=20.9.0} + peerDependencies: + payload: 3.87.0 + + '@payloadcms/live-preview-react@3.87.0': + resolution: {integrity: sha512-feJ7j3T85qJD7e3EsAFeGlzvoiwHCbeFUJEOrV8oI5+MXVY+IPP1fvSeE6WiylbabxN4tVit35IlVwYLs6pEgQ==} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 + + '@payloadcms/live-preview@3.87.0': + resolution: {integrity: sha512-kR8G/G5dTs3J7p5kdIf5YSbVwP5JyQj0gsvKMvhL6UKoDx3Blx99fMNATxQYAL7IqPtRaB/DUlgLC34UyAOX6g==} + + '@payloadcms/next@3.87.0': + resolution: {integrity: sha512-kMXzuHbS8yH/rCvpvpRq1Qvwd6+/uOoT6OWY2YZHofiLbz08S60an6mG21eAJCVXRmzJ2g1M2cEDLC0oysvOfg==} + engines: {node: ^18.20.2 || >=20.9.0} + peerDependencies: + graphql: ^16.8.1 + next: '>=15.2.9 <15.3.0 || >=15.3.9 <15.4.0 || >=15.4.11 <15.5.0 || >=16.2.6 <17.0.0' + payload: 3.87.0 + + '@payloadcms/plugin-cloud-storage@3.87.0': + resolution: {integrity: sha512-LmkMtZovpeFCULlEFFQGFfyplo7u9/jQsMuwyXL6AtLHUg5oiuzivDW084hjJ4E8DFO9nQqyab3cqoChSNsRbA==} + peerDependencies: + payload: 3.87.0 + react: ^19.2.7 + react-dom: ^19.2.7 + + '@payloadcms/plugin-import-export@3.87.0': + resolution: {integrity: sha512-FfbLheHpK3geMql2Z8fml1FCloHuiXC+tksQuU+aOT6n7vZRaB00Rkkzn2xucJCs2G0xFrvLhHRkoqSrJvqKBw==} + peerDependencies: + '@payloadcms/ui': 3.87.0 + payload: 3.87.0 + + '@payloadcms/plugin-sentry@3.87.0': + resolution: {integrity: sha512-l9cA1alONn3N11lm3n4TQUnl/kBrEiJcfBp/7ryG8GWh1Nhi7ga29G43reLrLmRf6AG+glmosDjHAY13O0jmRw==} + peerDependencies: + payload: 3.87.0 + react: ^19.2.7 + react-dom: ^19.2.7 + + '@payloadcms/richtext-lexical@3.87.0': + resolution: {integrity: sha512-dgN5K5ful3TMrg/x4GJuG+YQd60TWtg9SGZznLWAVcePLsfklVb5SQsxUDHavaI4a2HF43mklLHGyYr0GK/YUQ==} + engines: {node: ^18.20.2 || >=20.9.0} + peerDependencies: + '@faceless-ui/modal': 3.0.0 + '@faceless-ui/scroll-info': 2.0.0 + '@payloadcms/next': 3.87.0 + payload: 3.87.0 + react: ^19.2.7 + react-dom: ^19.2.7 + + '@payloadcms/storage-s3@3.87.0': + resolution: {integrity: sha512-pdAmJOalEow0PQlPvwiSQMUp6oFQgh3iZRC/WcdLwV01yhon5BcnntAWrwPwgv9IuNjiAabcWnmUHgA6834pEQ==} + engines: {node: ^18.20.2 || >=20.9.0} + peerDependencies: + payload: 3.87.0 + + '@payloadcms/translations@3.87.0': + resolution: {integrity: sha512-76Ux5SUzK4OXmvlB8m3YCHNXs6fXEzhzRsJ0iBZfVgyIKvWW2fm8H6wmiCWfHeD3QCCwBnodPNOVqU0drcMnVg==} + + '@payloadcms/ui@3.87.0': + resolution: {integrity: sha512-HhSsDk+hnW8SjBPgeShxCoCM55y1HjJiAESQ/eKk41Q537JXi8Q52PStmnS+yOUdYXenDUQTLh7hChaCgGqNJw==} + engines: {node: ^18.20.2 || >=20.9.0} + peerDependencies: + next: '>=15.2.9 <15.3.0 || >=15.3.9 <15.4.0 || >=15.4.11 <15.5.0 || >=16.2.6 <17.0.0' + payload: 3.87.0 + react: ^19.2.7 + react-dom: ^19.2.7 + + '@peculiar/asn1-cms@2.8.0': + resolution: {integrity: sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA==} + + '@peculiar/asn1-csr@2.8.0': + resolution: {integrity: sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg==} + + '@peculiar/asn1-ecc@2.8.0': + resolution: {integrity: sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ==} + + '@peculiar/asn1-pfx@2.8.0': + resolution: {integrity: sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg==} + + '@peculiar/asn1-pkcs8@2.8.0': + resolution: {integrity: sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA==} + + '@peculiar/asn1-pkcs9@2.8.0': + resolution: {integrity: sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ==} + + '@peculiar/asn1-rsa@2.8.0': + resolution: {integrity: sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg==} + + '@peculiar/asn1-schema@2.8.0': + resolution: {integrity: sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==} + + '@peculiar/asn1-x509-attr@2.8.0': + resolution: {integrity: sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==} + + '@peculiar/asn1-x509@2.8.0': + resolution: {integrity: sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg==} + + '@peculiar/utils@2.0.3': + resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==} + + '@peculiar/x509@1.14.3': + resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} + engines: {node: '>=20.0.0'} + + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + + '@playwright/test@1.62.1': + resolution: {integrity: sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==} + engines: {node: '>=20'} + hasBin: true + + '@pmmmwh/react-refresh-webpack-plugin@0.5.17': + resolution: {integrity: sha512-tXDyE1/jzFsHXjhRZQ3hMl0IVhYe5qula43LDWIhVfjp9G/nT5OQY5AORVOrkEGAUltBJOfOWeETbmhm6kHhuQ==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <5.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x || 5.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@3.0.3': + resolution: {integrity: sha512-//0sR/cow/s4ICQaYoAobOl4aU8cjU6x/V24V7XkKotb9+O+3zySIYp146vpaobYHnxa4pZX8NkV54Z5AwbDKA==} + engines: {node: '>=12'} + + '@poppinss/colors@4.1.6': + resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} + + '@poppinss/dumper@0.6.5': + resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} + + '@poppinss/exception@1.2.3': + resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} + + '@preact/signals-core@1.14.4': + resolution: {integrity: sha512-HNB6HYeYKhQbJ1aKl+YRjrS4+QWHLKX6qKoUsfS/m0vqzsVaEBiZiaKbG/e+NKk2ch5ALQr/ihWaMHxiCuuWHA==} + + '@prisma/instrumentation@6.11.1': + resolution: {integrity: sha512-mrZOev24EDhnefmnZX7WVVT7v+r9LttPRqf54ONvj6re4XMF7wFTpK2tLJi4XHB7fFp/6xhYbgRel8YV7gQiyA==} + peerDependencies: + '@opentelemetry/api': ^1.8 + + '@radix-ui/primitive@1.1.7': + resolution: {integrity: sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==} + + '@radix-ui/react-arrow@1.1.15': + resolution: {integrity: sha512-v4zggRcjadnI+ClKDuijlQEW4tw3NoaeHc/PwpKnLoLLKNUG4InLegkstooLcRIUWCs+8L22dGURCVuFfOKfnA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^19.2.7 + react-dom: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collapsible@1.1.20': + resolution: {integrity: sha512-mcGesGplBnzN2sbvJETzpCNfSMyPnb29q1GRLU+Ib7bJrpIG2ywmRoh2V5VbA2uNvKikKUlVbAPks7JDjz4A8Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^19.2.7 + react-dom: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.5': + resolution: {integrity: sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==} + peerDependencies: + '@types/react': '*' + react: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.2.2': + resolution: {integrity: sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA==} + peerDependencies: + '@types/react': '*' + react: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.19': + resolution: {integrity: sha512-8g4pfOL9HoKKLWGiypT+dphVqjFfmcXO5GBnhsG6zI+lxAx/8feQpr+1LSN8Re3hiZ+XkLNS4O9ztK11/LzQ6w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^19.2.7 + react-dom: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.4': + resolution: {integrity: sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==} + peerDependencies: + '@types/react': '*' + react: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-popper@1.3.7': + resolution: {integrity: sha512-UsJrrd7w4wuKKTdvd/DNERVlwSlUcyXzjhyDwBk+3aPOsCjOY6ZSbxuw8E6lZTjjfP8Cpd0J8VVkrYUWyGYXyg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^19.2.7 + react-dom: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.17': + resolution: {integrity: sha512-vKQLcWypUnwZVvfV7UkGahH2g6ySe8M8R+zYBwPrv5byZ9QAW6cQVvNKo7GgmD+p8aYb6D9JBuvy8/WhOno2wQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^19.2.7 + react-dom: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.10': + resolution: {integrity: sha512-3wyzCQ6+ubRA+D4uv9m95JYLXxmOHp05qjrkjeA7uKHHtjpPggQzc6DAb0URl7j67oR0K2foO4ip27TiX037Bw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^19.2.7 + react-dom: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.10': + resolution: {integrity: sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^19.2.7 + react-dom: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-separator@1.1.15': + resolution: {integrity: sha512-jOLO4lssEzWpoDu7G+Ze4VjwMRUBt291pnZD0gmalREZipnTX3wadQo7Fy48GCTfe14/YRN6rw/rOJqrE85Wxw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^19.2.7 + react-dom: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.3.3': + resolution: {integrity: sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==} + peerDependencies: + '@types/react': '*' + react: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-switch@1.3.7': + resolution: {integrity: sha512-48tB/4dn2UVLBCYhTu9AuR63IHl73l/qLbLgxd86noTUor4/K4LFDAcYjK+isP5313qxaFpjPVogE7+Y0/V3Kw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^19.2.7 + react-dom: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tooltip@1.2.16': + resolution: {integrity: sha512-6EamKFRRnlpdadndbZ6LMwycfwkwPte1B42hs6QA0gYhjaOKqW4PZ4pjaW9UrlDX5eVt/OjncE7BFTPL5nmZhg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^19.2.7 + react-dom: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.4': + resolution: {integrity: sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ==} + peerDependencies: + '@types/react': '*' + react: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.2.6': + resolution: {integrity: sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ==} + peerDependencies: + '@types/react': '*' + react: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.5': + resolution: {integrity: sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg==} + peerDependencies: + '@types/react': '*' + react: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.4': + resolution: {integrity: sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==} + peerDependencies: + '@types/react': '*' + react: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.4': + resolution: {integrity: sha512-cSOCh6JlkmfjLyNcLiu2nB4v+nm+dkZ+Q5KHWk/soo4U7ZLiEQFKHK9/YmtBHjfCEaU43IBKQOc4/uJmCaiCTQ==} + peerDependencies: + '@types/react': '*' + react: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.4': + resolution: {integrity: sha512-D3anSY15EJoxrihpsXI6SMrmmonnQtR2ni7arO+Lfdg3O95b9hNXxONk8jA5C8ANdF/h5HMAxejgs8PWJ6rlhw==} + peerDependencies: + '@types/react': '*' + react: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.11': + resolution: {integrity: sha512-NFS86RYYZb4/exihaESBGOpMJFz8MGLAfu3mOBSGByVnVPC9JPASfYubxd/8KbkQK0sYAv8lVQDEQukDX/qXvQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^19.2.7 + react-dom: ^19.2.7 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.3': + resolution: {integrity: sha512-JtyZR+mqgBibTo8xea3B6ZRmzZiM/YeVBtUkas6zMuXjAlfIFIW2FgqeM9eLyvEaYX66vr6DJMK+4U6LV0KhNw==} + + '@react-email/render@2.1.0': + resolution: {integrity: sha512-F+zE3O6d6sW6Aj2UjvZAA17R7tJKM7kcq2mgV6k4HCT8jeLLFaVP2txMtH1lgqYFRMZ0Gxsd37q2PRyiXLXXxA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 + + '@react-email/ui@6.9.2': + resolution: {integrity: sha512-nCE8uZJuhNB7E6j8Prq6tfcswHMbiNwM4a+t2Q83AjgkDUhki1TwvKjQ9yfLLSquQuu9oFKNaTvYUNZ8yTdGNw==} + + '@react-pdf/fns@3.1.3': + resolution: {integrity: sha512-0I7pApDr1/RLAKbizuLy/IHTEa93LSPy/bEwYniboC3Xqnp6Od8xFJKbKEzGw2wh/5zKFFwl00g4t9RwgIMc3w==} + + '@react-pdf/font@4.0.8': + resolution: {integrity: sha512-deNd+emtZAJho1IlzKL9bRoLAGv/6oXOIKO2oZfs4RuXUrK1onLHbJO7e2YoVLPFP/sQxisRTnzdJFtd35iKwA==} + + '@react-pdf/image@3.1.0': + resolution: {integrity: sha512-ks7Ry8v711r8NvKWSELehj0BXBNPRihSnWsM09nDD8Ur175zbWBCK217LLwQMKDNYDVpkZaipdoJPom1LGaE9g==} + + '@react-pdf/layout@4.6.1': + resolution: {integrity: sha512-gN6PmWoEffvlIkifLfEhMsVucRywVMyH3rnxdyOVOhGy0nWJKKGpHyPc4plbDdpP6EfZ0r8prHXujDSkIG2nSA==} + + '@react-pdf/pdfkit@5.1.1': + resolution: {integrity: sha512-wNcdSsNlNYyGHGAgIdt453egBF7fiF9UxpRlklUfVvu8OWCrUppG9xiUrPLVoKiqWet5tMi0w6LmuFUJuYqjEg==} + + '@react-pdf/primitives@4.3.0': + resolution: {integrity: sha512-nYXoZ36pvwNzbc54+DbL8RCn15jU7woJ9D/svnh5tpUXekJ+CbI4mZLo6boSv24CvJgychOu6h7gxX03B4ps0A==} + + '@react-pdf/reconciler@2.0.0': + resolution: {integrity: sha512-7zaPRujpbHSmCpIrZ+b9HSTJHthcVZzX0Wx7RzvQGsGBUbHP4p6s5itXrAIOuQuPvDepoHGNOvf6xUuMVvdoyw==} + peerDependencies: + react: ^19.2.7 + + '@react-pdf/render@4.5.1': + resolution: {integrity: sha512-IW/N4HWJWtioBXCf7n02IR24VJJ8gbdS3jGypf+vW/rSErEx3/URRzh9UK6Ma8Fpog9+T/W6GE2NHJ5AAKHhVA==} + + '@react-pdf/renderer@4.5.1': + resolution: {integrity: sha512-5r1VQrE6FRLXX5wWUxwZzM24E2BJMo6g8AQWuS8WyPs9ugu5yMnb2g8/RpPYka/Z6J+RUEWc32wty2NoUJF42Q==} + peerDependencies: + react: ^19.2.7 + + '@react-pdf/stylesheet@6.2.1': + resolution: {integrity: sha512-2+UEk+7e+z8baaWi2l5kPLWmwtJeOI+T5wW9GGeN3iDH7vd3kbTqOpN1yt9mmfNVZFxQsnDHpznFb5v5UF983A==} + + '@react-pdf/svg@1.1.0': + resolution: {integrity: sha512-cTIHXiz9x1HrbfqzfxfZP3FRdDwUXG77QWF6Fb5MP/lV3ONxR+g0Z3hwtBatCS9HeGBQCpxX/Lzb8wHE+co1PA==} + + '@react-pdf/textkit@6.3.0': + resolution: {integrity: sha512-v6+V8nAcVwm7s2s1jIG2MD3Iw//x/k+XrH1foWOELBE4b32pyDgKyPXN/6KJE0dnX7+fVy27uctLNCLNMvzKzQ==} + + '@react-pdf/types@2.11.1': + resolution: {integrity: sha512-i9xQgfaDU9QoeNnbp6rltXCWg1huEh195rpOuN8cE4BZ2FuLdQrsIcb2dhFF9aOxXf+XBA6LOSpIW051MDD/bw==} + + '@redis/bloom@1.2.0': + resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/client@1.6.0': + resolution: {integrity: sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg==} + engines: {node: '>=14'} - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] + '@redis/graph@1.1.1': + resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==} + peerDependencies: + '@redis/client': ^1.0.0 - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] + '@redis/json@1.0.7': + resolution: {integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==} + peerDependencies: + '@redis/client': ^1.0.0 - '@img/sharp-darwin-x64@0.34.1': - resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] + '@redis/search@1.2.0': + resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==} + peerDependencies: + '@redis/client': ^1.0.0 - '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] + '@redis/time-series@1.1.0': + resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==} + peerDependencies: + '@redis/client': ^1.0.0 - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} - cpu: [arm64] - os: [darwin] + '@reduxjs/toolkit@2.12.0': + resolution: {integrity: sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw==} + peerDependencies: + react: ^19.2.7 + react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true - '@img/sharp-libvips-darwin-arm64@1.1.0': - resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} + '@rolldown/binding-android-arm64@1.2.1': + resolution: {integrity: sha512-02hOeOSryYxVrOIphmLAsqnCJWxwlzFk+pEt/N/i6OgT3lShHO7xGCU5cpgchRDHboAEbSjzgGh+O/u1GswQmA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] - os: [darwin] + os: [android] - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + '@rolldown/binding-darwin-arm64@1.2.1': + resolution: {integrity: sha512-fMsTOnN0OjFm3CyppWPitKnc8UlliVARUULW6cfU6AIqjdtgmSFWSk9vecHzZduv/yMWIHDlRhM1e8Iff9uAfA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.1.0': - resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} + '@rolldown/binding-darwin-x64@1.2.1': + resolution: {integrity: sha512-1wjKdz/XLGKHaTNHjQveQ/B23TKx4ItAqm1JbyVuvNPc4Ze0Fb48s49TAd/2zcplPl8okE/UbTgmlVfwT7eFeQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + '@rolldown/binding-freebsd-x64@1.2.1': + resolution: {integrity: sha512-Fa0jHR07E7YBN4vOEsbVf2briYNsuOowfLJaXULZM0ldMlaCaj2LJgLMbMe4iacRyZmvR8efFhgR9wKuGclQUg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] - os: [darwin] + os: [freebsd] - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} - cpu: [arm64] + '@rolldown/binding-linux-arm-gnueabihf@1.2.1': + resolution: {integrity: sha512-pzkgu1SSHGgRRyRZ4fbmSgmajbVt+epaLP99NDjFft69v/ypfTi6swBMiVdh2EkQ0OSnHE1lZDM7DRGkyAzUpA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-arm64@1.1.0': - resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} + '@rolldown/binding-linux-arm64-gnu@1.2.1': + resolution: {integrity: sha512-QI5SEDY8cbiYWHx0VO4vIc3UlS6a32vXHjU8Qy/17adEmZIPuByJg13UEvo9c/UCiUkdcVWY83C+b+JrwnNyUg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + '@rolldown/binding-linux-arm64-musl@1.2.1': + resolution: {integrity: sha512-Sm41FyCeXqmYcERoYOCbGIL5hNfd8w9LQ7Y61Bev48HkcjaJqV/iiVOaiDxjVTRMS+QKrZmD8cfPt4uMVnvM+A==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} - cpu: [arm] - os: [linux] - - '@img/sharp-libvips-linux-arm@1.1.0': - resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} - cpu: [arm] - os: [linux] - - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} - cpu: [arm] - os: [linux] - - '@img/sharp-libvips-linux-ppc64@1.1.0': - resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} - cpu: [ppc64] - os: [linux] - - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + '@rolldown/binding-linux-ppc64-gnu@1.2.1': + resolution: {integrity: sha512-2x+WhXTGl9yJYPbltW/BSEPTVz9OIWQyER4N+gJEDWkkn904eRcBzELqh/Hf7K0w/ubGbKNMv0ZC+94QK/IFEg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} - cpu: [riscv64] - os: [linux] - - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + '@rolldown/binding-linux-s390x-gnu@1.2.1': + resolution: {integrity: sha512-eEjmQpuRQayHPWWnywaWHkFT3ToPbP3RYy42VVd/B9aBGDA+Ol25EIWHxKQST3IiWJjikCWUF7KtbfqwZrzVwQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.1.0': - resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} - cpu: [s390x] - os: [linux] - - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} - cpu: [s390x] - os: [linux] - - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} - cpu: [x64] - os: [linux] - - '@img/sharp-libvips-linux-x64@1.1.0': - resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} + '@rolldown/binding-linux-x64-gnu@1.2.1': + resolution: {integrity: sha512-/Orga1fZYkLc/56jBICcHrKchl8Z2UKdDSr3LG9ToWO1lQ6a4Livk9Xz+9WN91zsz5QR3XQz2NNoSDEvP6qadw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + '@rolldown/binding-linux-x64-musl@1.2.1': + resolution: {integrity: sha512-xxBJRL+0q0Kce7orznGWLuylHDY65vuARXZRpX+hPdv+DqK2c3NlCsVA98tlWzWNEE7yPqA/1NQ5nnCrj49Y5A==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + '@rolldown/binding-openharmony-arm64@1.2.1': + resolution: {integrity: sha512-M6AdXIXw3s+/8XpKMzdGDEXGS1S7kwUsy+rcTIUIOx5Ge4nXKCtAFHFV9YKkXvGcC5WMoTjAteLzlsQROVI0Yw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] - os: [linux] + os: [openharmony] - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': - resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} - cpu: [arm64] - os: [linux] + '@rolldown/binding-wasm32-wasi@1.2.1': + resolution: {integrity: sha512-/TX0SoRGojHzSAHpfVBbavRVSazg5U3h3Y3VXfcc0cdugq6kxdqw8LPGFiPr+/7gE/60zRcsOY2Vi9b9eT0jww==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + '@rolldown/binding-win32-arm64-msvc@1.2.1': + resolution: {integrity: sha512-EvRrivJieyHG+AO9lleZWgq+g0+S7oV2C51yuqlcyU/R9net+sI4Pj0F+lUoP2bEr6TWX3SqFaaS0SzfLxSzkw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] - os: [linux] + os: [win32] - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + '@rolldown/binding-win32-x64-msvc@1.2.1': + resolution: {integrity: sha512-Z4eCmn5QJ/5+azF9knpLWKfVd9aidn0mAe9TpJgvBLId9Ax3t0+JVxBmT25Bv7NBbVW1TZyKjQjQReouMeH5UQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] - os: [linux] + os: [win32] - '@img/sharp-libvips-linuxmusl-x64@1.1.0': - resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} - cpu: [x64] - os: [linux] + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} - cpu: [x64] - os: [linux] + '@rollup/plugin-commonjs@28.0.1': + resolution: {integrity: sha512-+tNWdlWKbpB3WgBN7ijjYkq9X5uhjmcvyjEght4NmH5fAU++zfQzAJ6wumLS+dNcvwEZhKx2Z+skY8m7v0wGSA==} + engines: {node: '>=16.0.0 || 14 >= 14.17'} + peerDependencies: + rollup: ^2.68.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@rollup/pluginutils@5.4.0': + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.62.3': + resolution: {integrity: sha512-c0wdcekXtQvvn5Tsrk/+op/gUArrbWaFduBnTLP2l1cKLSQs4diMWjJw3m6A0DdzT8dAAX95KpkJ3qynCePbmw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.62.3': + resolution: {integrity: sha512-3YjElDdWN+qXAFbJ/CzPV+0wspLqh54k/I6GfdYtEJRqg7buSgc1yPM3B+93j1M4neobtkATHZTmxK2AMVGfnA==} cpu: [arm64] - os: [linux] + os: [android] - '@img/sharp-linux-arm64@0.34.1': - resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@rollup/rollup-darwin-arm64@4.62.3': + resolution: {integrity: sha512-Pch2pFNOxxz1hTjypIdPyRTR6riiwRl84+VcN9djS680fw+Co1nAJINrdpqp7KV0NvyuU8ilZXZCjd7ykJl1GQ==} cpu: [arm64] - os: [linux] + os: [darwin] - '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@rollup/rollup-darwin-x64@4.62.3': + resolution: {integrity: sha512-LEuncFUHFiF8t4yZVZvvZA1wk0pjAscRnsrn1EfTEmN4HXotBi2YtcnLRyaK6UbuczW7xZS5ES+81Rdz8Z0T6g==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.62.3': + resolution: {integrity: sha512-zvBUvsQUpOWALdDsk6qbS8bXf2VxmPisuudNDrY7x0p0jBdsoZl8HsHczIOgkQiZldmcacMKtBzpoGVNeIe2bQ==} cpu: [arm64] - os: [linux] + os: [freebsd] - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] + '@rollup/rollup-freebsd-x64@4.62.3': + resolution: {integrity: sha512-C2KmNrcSem/AMg984H/dev+si0lieQGdXdR/lYGJnuumXnFb9Y7QdiI62obFdLlxRYLBv4P0eUVIDbD4c1vVvw==} + cpu: [x64] + os: [freebsd] - '@img/sharp-linux-arm@0.34.1': - resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@rollup/rollup-linux-arm-gnueabihf@4.62.3': + resolution: {integrity: sha512-ggXnsTAEzNQx74XpunRsiZ9aBZDsI7XIa0hm2nzR9f4WzH5/f/d73ZSDaC5ejJ8YLY4NW+V3wr0tjOaeCq8hqA==} cpu: [arm] os: [linux] + libc: [glibc] - '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@rollup/rollup-linux-arm-musleabihf@4.62.3': + resolution: {integrity: sha512-2vng+FlzNUhKZxtej3IUqJgbZoQk2M/dwQM20+ULV0R/E/8tr9/P6uEf2iiGIk4HL0zMKh5Jry7mUHdUOvyGgA==} cpu: [arm] os: [linux] + libc: [musl] - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ppc64] - os: [linux] - - '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [riscv64] - os: [linux] - - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] + '@rollup/rollup-linux-arm64-gnu@4.62.3': + resolution: {integrity: sha512-LLLFZKt4/Nraf9rxDkhiU8QVgLF4WmCkfr0L4fj0fPfIZFBib0DeiFk1hhaYKd03LFAFJcxHslhDFlNJLylf5Q==} + cpu: [arm64] os: [linux] + libc: [glibc] - '@img/sharp-linux-s390x@0.34.1': - resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] + '@rollup/rollup-linux-arm64-musl@4.62.3': + resolution: {integrity: sha512-WJkdQCvS9sWNOUBJZfQRKpZGFBztRzcowI+nndmflKgU4XY+3a420FgTOSKTsVqJbnzSxeT4vaJalpOaPo2YCQ==} + cpu: [arm64] os: [linux] + libc: [musl] - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] + '@rollup/rollup-linux-loong64-gnu@4.62.3': + resolution: {integrity: sha512-PwHXCCS2n64/1Ot6rP1YEYA02MGYBcQlr8CSZZyrUG2O7NH6NklYmvr9v3Jy+5e/eDeNchc/ukmKJi9LuflMIQ==} + cpu: [loong64] os: [linux] + libc: [glibc] - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] + '@rollup/rollup-linux-loong64-musl@4.62.3': + resolution: {integrity: sha512-vUjxINQu3RC8NZS3ykk1gN65gIz8pAopOq2HXuZhiIxHdx7TFvDG+jgrdSgInu1Eza4/Rfi2VzZgyIgEH4WOaw==} + cpu: [loong64] os: [linux] + libc: [musl] - '@img/sharp-linux-x64@0.34.1': - resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] + '@rollup/rollup-linux-ppc64-gnu@4.62.3': + resolution: {integrity: sha512-wzko4aJ13+0G3kGnviCg5gnXFKd40izKsrf2uOw12US4XqprkDrmwOpeW14aSNa37V8bfPcz5Fkob6LZ3BAPmA==} + cpu: [ppc64] os: [linux] + libc: [glibc] - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] + '@rollup/rollup-linux-ppc64-musl@4.62.3': + resolution: {integrity: sha512-8120ue0JUMSwy11stlwnfdX3pPd+WZYGCDBwEHWtIHi6pOpZmsEF5QKB7a/UN+XFdqvobxz98kv8RTqikyCEBw==} + cpu: [ppc64] os: [linux] + libc: [musl] - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] + '@rollup/rollup-linux-riscv64-gnu@4.62.3': + resolution: {integrity: sha512-XLFHnR3tXMjbOCh2vtVJHmxt+995uJsTERQyseFDRA0xxMxyTZPLa3OIUlyFaO4mF/Lu0FjmWHCuPXJT1n/IOg==} + cpu: [riscv64] os: [linux] + libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.34.1': - resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] + '@rollup/rollup-linux-riscv64-musl@4.62.3': + resolution: {integrity: sha512-se6yXvNGMIl0f+RQzyh7XAmia8/9kplQx424wnG2w0C1oi6XgO6Y8otKhdXFHbHs88Ihavzmvh1NWjuovE76BQ==} + cpu: [riscv64] os: [linux] + libc: [musl] - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] + '@rollup/rollup-linux-s390x-gnu@4.62.3': + resolution: {integrity: sha512-gNoxRefktVIiGflpONuxWWXZAzIQG++z9qHO3xKwk4WdDMuQja3JHGfE1u0i3PfPDyvhypdk+WrgIJqLhGG7sg==} + cpu: [s390x] os: [linux] + libc: [glibc] - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@rollup/rollup-linux-x64-gnu@4.62.1': + resolution: {integrity: sha512-nVQGk/jStQc2V4rrkI+vPD2J+85boKqS4R4nOdPhc3eWw0kyW/b+AYRGoH8qo057XSVqaTx13AliH5qPeLTtgQ==} cpu: [x64] os: [linux] + libc: [glibc] - '@img/sharp-linuxmusl-x64@0.34.1': - resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@rollup/rollup-linux-x64-gnu@4.62.3': + resolution: {integrity: sha512-V4KtWtQfAFMU7+9/A/VDps/VI8CHd3cYz0L8sgJzz8qK7eY7wI4ruFD82UYIYvW9Z4DtlTfhQcsl4XyPHW5uSg==} cpu: [x64] os: [linux] + libc: [glibc] - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@rollup/rollup-linux-x64-musl@4.62.3': + resolution: {integrity: sha512-LBx9LYXvj2CBkMkjLdNAWLwH0MLMin7do2VcVo9kVPibGLkY0BQQut2fv7NVqkXqZ/CrAu9LqDHVV1xHCMpCPw==} cpu: [x64] os: [linux] + libc: [musl] - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-wasm32@0.34.1': - resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] + '@rollup/rollup-openbsd-x64@4.62.3': + resolution: {integrity: sha512-ABVf3Q0RCu7NcyCCOZQI0pJ3GuSdfSl8EXcy88QtdceIMIoCUdfhsJChZ64L9zVM2aJHjde1Bhn5uqSRcX9ySA==} + cpu: [x64] + os: [openbsd] - '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@rollup/rollup-openharmony-arm64@4.62.3': + resolution: {integrity: sha512-+2Cy/ldweGBLlPIKsQLF8U5N44a0KDdbrk1rAjHOM9M2K+kGdIVjHLmmrZIcx+9Ny3ke/1JomCsDI1ocb11+sg==} cpu: [arm64] - os: [win32] - - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] + os: [openharmony] - '@img/sharp-win32-ia32@0.34.1': - resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] + '@rollup/rollup-win32-arm64-msvc@4.62.3': + resolution: {integrity: sha512-dtZvzc8BedpSaFNy75x6uiWwAGTH+aZHDtdrqP6qk+WcLJrfti6sGje1ZJ9UxyzDLF23d/mV+PaMwuC0hL7UVA==} + cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@rollup/rollup-win32-ia32-msvc@4.62.3': + resolution: {integrity: sha512-Rj8Ra4noo+aYy7sKBggCx0407mws34kAb1ySyWuq5DAtFBQdkSwnsjCgPrhPe9cvgBKZIukpE+CVHvORCS93kQ==} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@img/sharp-win32-x64@0.34.1': - resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@rollup/rollup-win32-x64-gnu@4.62.3': + resolution: {integrity: sha512-vp7N084ew/odXn2gi/mzm9mUkQu9l6AiN6dt4IeUM2Uvm9o+cVmP+YkqbMOteLbiGgqBBlJZjIMYVCfOOIVbVQ==} cpu: [x64] os: [win32] - '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@rollup/rollup-win32-x64-msvc@4.62.3': + resolution: {integrity: sha512-MOG/3gTOn4Fwf574RVOaY61I5o6P90legkFADiTyn1hyjNydT+cerU2rLUwPdZkKKyJ+iT+K9p7WXK4LM1Ka6g==} cpu: [x64] os: [win32] - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.11': - resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@selderee/plugin-htmlparser2@0.11.0': + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} - '@jsdevtools/ono@7.1.3': - resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + '@semantic-release/changelog@7.0.0': + resolution: {integrity: sha512-TNPyag5db24o7jWjre7UwKB4EcL8oJxbRhnDQ7hmZRAYqzreAc6PgdxQuU3pppp5xQinYtiumL0iG8SSKvnlzg==} + engines: {node: ^22.22.2 || >=24.15} + peerDependencies: + semantic-release: '>=20.1.0' - '@lexical/clipboard@0.27.1': - resolution: {integrity: sha512-QmoX77lwDT2VxNljFkpMtQmGGof6Bv9TEv0i9c5403zE/avVm3g9Tk47bClo+Y0NruESwb79VODbdF29pbVKPQ==} + '@semantic-release/commit-analyzer@13.0.1': + resolution: {integrity: sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ==} + engines: {node: '>=20.8.1'} + peerDependencies: + semantic-release: '>=20.1.0' - '@lexical/clipboard@0.28.0': - resolution: {integrity: sha512-LYqion+kAwFQJStA37JAEMxTL/m1WlZbotDfM/2WuONmlO0yWxiyRDI18oeCwhBD6LQQd9c3Ccxp9HFwUG1AVw==} + '@semantic-release/error@4.0.0': + resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} + engines: {node: '>=18'} - '@lexical/code@0.27.1': - resolution: {integrity: sha512-Z+h9uNHWRg+EfLUMi+STo3hLKPNchr3FzG7amd51U3KqpQ+BDBTIbDe07yPiGfW3CVT++dHuKZPevDuLb0Ukdg==} + '@semantic-release/git@11.0.1': + resolution: {integrity: sha512-Zr8BUYCTZMc8V6wDKN2dpR7nJgewd9I6THL3ydLTnp3OEdTo1/4RBLNYaeRucYMsjMv+BXoCNfXA0NADj1kwhw==} + engines: {node: ^22.22.2 || >=24.15} + peerDependencies: + semantic-release: '>=20.1.0' - '@lexical/code@0.28.0': - resolution: {integrity: sha512-9LOKSWdRhxqAKRq5yveNC21XKtW4h2rmFNTucwMWZ9vLu9xteOHEwZdO1Qv82PFUmgCpAhg6EntmnZu9xD3K7Q==} + '@semantic-release/github@12.0.9': + resolution: {integrity: sha512-ODIqb0V3QqndipryEEiaBxUQCFjvv7Oese5Dt4omMGa60YRNEW0Sx3K+zri0uac2Y6S9nOlMehciWIzvvRCTGQ==} + engines: {node: ^22.14.0 || >= 24.10.0} + peerDependencies: + semantic-release: '>=24.1.0' - '@lexical/devtools-core@0.27.1': - resolution: {integrity: sha512-0GbrNtkyxs7HcdC5i+V6kkNWNCbqyZU3xxDVIFnAi1I1ODTZvgw+qeiw5/nf301mE73+L1As/LNt58Fu+LS99A==} + '@semantic-release/npm@13.1.5': + resolution: {integrity: sha512-Hq5UxzoatN3LHiq2rTsWS54nCdqJHlsssGERCo8WlvdfFA9LoN0vO+OuKVSjtNapIc/S8C2LBj206wKLHg62mg==} + engines: {node: ^22.14.0 || >= 24.10.0} peerDependencies: - react: '>=17.x' - react-dom: '>=17.x' + semantic-release: '>=20.1.0' - '@lexical/devtools-core@0.28.0': - resolution: {integrity: sha512-Fk4itAjZ+MqTYXN84aE5RDf+wQX67N5nyo3JVxQTFZGAghx7Ux1xLWHB25zzD0YfjMtJ0NQROAbE3xdecZzxcQ==} + '@semantic-release/release-notes-generator@14.1.1': + resolution: {integrity: sha512-Pbd2e2XRMUD0OxehHpgd5/YghsE76cddkRHSoDvKLK+OCy4Ewxn49rWR631MEUU01lgwF/uyVXvbnVuu6+Z6VA==} + engines: {node: '>=20.8.1'} peerDependencies: - react: '>=17.x' - react-dom: '>=17.x' + semantic-release: '>=20.1.0' + + '@sentry-internal/browser-utils@9.47.1': + resolution: {integrity: sha512-twv6YhrUlPkvKz4/iQDH4KHgcv9t4cMjmZPf4/dCSCXn4/GOjzjx2d74c1w+1KOdS7lcsQzI+MtbK6SeYLiGfQ==} + engines: {node: '>=18'} - '@lexical/dragon@0.27.1': - resolution: {integrity: sha512-drR3Pd/M0T4Z1rBn3eTQY1/xfw3V70ar0U/tXHpP62sL5y8UfcKEvzCixcN5vkkgtGK2iGvQGSCWVnBW0iyARg==} + '@sentry-internal/feedback@9.47.1': + resolution: {integrity: sha512-xJ4vKvIpAT8e+Sz80YrsNinPU0XV7jPxPjdZ4ex8R2mMvx7pM0gq8JiR/sIVmNiOE0WiUDr6VwLDE8j2APSRMA==} + engines: {node: '>=18'} - '@lexical/dragon@0.28.0': - resolution: {integrity: sha512-T6T8YaHnhU863ruuqmRHTLUYa8sfg/ArYcrnNGZGfpvvFTfFjpWb/ELOvOWo8N6Y/4fnSLjQ20aXexVW1KcTBQ==} + '@sentry-internal/replay-canvas@9.47.1': + resolution: {integrity: sha512-r9nve+l5+elGB9NXSN1+PUgJy790tXN1e8lZNH2ziveoU91jW4yYYt34mHZ30fU9tOz58OpaRMj3H3GJ/jYZVA==} + engines: {node: '>=18'} - '@lexical/hashtag@0.27.1': - resolution: {integrity: sha512-ruHxO3Koa4puM5Dopuq4YremoBZyRWUVp0eBTUSZEqQ6dlxlnIhF4gPtnKwW8i3Uftk+xu2c3Vrp0RQvNpipFg==} + '@sentry-internal/replay@9.47.1': + resolution: {integrity: sha512-O9ZEfySpstGtX1f73m3NbdbS2utwPikaFt6sgp74RG4ZX4LlXe99VAjKR464xKECpYsLmj2bYpiK4opURF0pBA==} + engines: {node: '>=18'} - '@lexical/hashtag@0.28.0': - resolution: {integrity: sha512-zcqX9Qna4lj96bAUfwSQSVEhYQ0O5erSjrIhOVqEgeQ5ubz0EvqnnMbbwNHIb2n6jzSwAvpD/3UZJZtolh+zVg==} + '@sentry/babel-plugin-component-annotate@3.6.1': + resolution: {integrity: sha512-zmvUa4RpzDG3LQJFpGCE8lniz8Rk1Wa6ZvvK+yEH+snZeaHHRbSnAQBMR607GOClP+euGHNO2YtaY4UAdNTYbg==} + engines: {node: '>= 14'} - '@lexical/headless@0.27.1': - resolution: {integrity: sha512-7HXHLCfUFFQg8ZzA+iND5cjrcld7ML+T62yhC/76Ch3pCvpj2jFJr4lo3Io9pMhgJcITTZ3qkSKIaHI7T6hXjg==} + '@sentry/babel-plugin-component-annotate@5.3.0': + resolution: {integrity: sha512-p4q8gn8wcFqZGP/s2MnJCAAd8fTikaU6A0mM97RDHQgStcrYiaS0Sc5zUNfb1V+UOLPuvdEdL6MwyxfzjYJQTA==} + engines: {node: '>= 18'} - '@lexical/headless@0.28.0': - resolution: {integrity: sha512-btcaTfw9I/xQ/XYom6iKWgsPecmRawGd/5jOhP7QDtLUp7gxgM7/kiCZFYa8jDJO6j20rXuWTkc81ynVpKvjow==} + '@sentry/browser-utils@10.69.0': + resolution: {integrity: sha512-e/u1Abj0zRPwR/deGZAP3GOULrsx67/XXnM5Skniqs4uxTsdNtPek1Nef0tpxwaQJYxwh6pWdhswLPPbbPOgBQ==} + engines: {node: '>=18'} - '@lexical/history@0.27.1': - resolution: {integrity: sha512-FCjCAJXAfkXoHNjFryAjT381ISsisy646sCBj9n6puR5iDSMmgqqCg3fWuNeWmOUL8XV/pL8KWCKwHCfj4D7KA==} + '@sentry/browser@10.69.0': + resolution: {integrity: sha512-8391tnm96YbR7b8SYfEA/NEIZuyb2r3SZrtAT0bhZtjlujcYWjo7gugQvk8sWLU9cAa/euD00eJoIoJvNfpd7Q==} + engines: {node: '>=18'} - '@lexical/history@0.28.0': - resolution: {integrity: sha512-CHzDxaGDn6qCFFhU0YKP1B8sgEb++0Ksqsj6BfDL/6TMxoLNQwRQhP3BUNNXl1kvUhxTQZgk3b9MjJZRaFKG9Q==} + '@sentry/browser@9.47.1': + resolution: {integrity: sha512-at5JOLziw5QpVYytxTDU6xijdV6lDQ/Rxp/qXJaHXud3gIK4suv2cXW+tupJfwoUoHFCnDNfccjCmPmP0yRqiA==} + engines: {node: '>=18'} - '@lexical/html@0.27.1': - resolution: {integrity: sha512-WmMPfRurd5BccSmpe+DGZA8N4CDLThek/2/rjaba+zotk9ZTbXktDO5Ie4982V4mZ2VKQfMFflKou6eY8NLcvA==} + '@sentry/bundler-plugin-core@3.6.1': + resolution: {integrity: sha512-/ubWjPwgLep84sUPzHfKL2Ns9mK9aQrEX4aBFztru7ygiJidKJTxYGtvjh4dL2M1aZ0WRQYp+7PF6+VKwdZXcQ==} + engines: {node: '>= 14'} - '@lexical/html@0.28.0': - resolution: {integrity: sha512-ayb0FPxr55Ko99/d9ewbfrApul4L0z+KpU2ZG03im7EvUPVLyIGLx4S0QguMDvQh0Vu+eJ7/EESuonDs5BCe3A==} + '@sentry/bundler-plugin-core@5.3.0': + resolution: {integrity: sha512-L5T60sWdAI3qWwdg3Ptwek/0TY59PERrxyqp4XMUkroayQvGd9r5dIW9Q1kSeXX9iJ442nXbFZKAOyCKV4Z13Q==} + engines: {node: '>= 18'} - '@lexical/link@0.27.1': - resolution: {integrity: sha512-VJ9SOBZSxcuLg5Hgtj3zhxykggzV/iS4aKx4Ggj2ZFGIgvyBVCHrs+jCCqS4GLxR5cEc7m5fkYfNQLXMojjpyg==} + '@sentry/bundler-plugins@10.69.0': + resolution: {integrity: sha512-I1otnSJIH4IOugLp+kcBbT0Kcex+J8xnHuUyzMAwCYSpZ0FMVvA723uNmkMdW0PxRRw0oEhe0qDB+t+ZjHxUiA==} + engines: {node: '>= 18'} + peerDependencies: + rollup: '>=3.2.0' + webpack: '>=5.0.0' + peerDependenciesMeta: + rollup: + optional: true + webpack: + optional: true - '@lexical/link@0.28.0': - resolution: {integrity: sha512-T5VKxpOnML5DcXv2lW3Le0vjNlcbdohZjS9f6PAvm6eX8EzBKDpLQCopr1/0KGdlLd1QrzQsykQrdU7ieC4LRg==} + '@sentry/cli-darwin@2.58.6': + resolution: {integrity: sha512-udAVvcyfNa0R+95GvPz/+43/N3TC0TYKdkQ7D7jhPSzbcMc7l2fxRNN5yB3UpCA5fWFnW4toeaqwDBhb/Wh3LA==} + engines: {node: '>=10'} + os: [darwin] - '@lexical/list@0.27.1': - resolution: {integrity: sha512-sCKwRGyRbTyZjF63ENAJPPoVKV6612vcNxRjYmGYQr9R6m834kl9lsa+H5eCDBeYxtQB7eHbDHbYj90Sd1jYHQ==} + '@sentry/cli-linux-arm64@2.58.6': + resolution: {integrity: sha512-q8mEcNNmeXMy5i+jWT30TVpH7LcP4HD21CD5XRSPAd/a912HF6EpK0ybf/1USO14WOhoXbAGi9txwaWabSe33g==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux, freebsd, android] - '@lexical/list@0.28.0': - resolution: {integrity: sha512-3a8QcZ75n2TLxP+xkSPJ2V15jsysMLMe0YoObG+ew/sioVelIU8GciYsWBo5GgQmwSzJNQJeK5cJ9p1b71z2cg==} + '@sentry/cli-linux-arm@2.58.6': + resolution: {integrity: sha512-pD0LAt5PcUzAinBwvDqc66x9+2CabHEv486yP0gRjWO7SakbaxmfVq/EXd8VLq/Tzi39LAu422UYK1lpW3MILw==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux, freebsd, android] - '@lexical/mark@0.27.1': - resolution: {integrity: sha512-P2/cgriI5yg9cieaGTtLk66oYYog+JoZ44vYnseH0G7UpGCLXQbapGAnTjQO6UGadZd/WZS4MwXVRoKvAbBOXg==} + '@sentry/cli-linux-i686@2.58.6': + resolution: {integrity: sha512-q8vNJi1eOV/4vxAFWBsEwLHoSYapaZHIf4j76KJGJXFKTkEbsjCOOsKbwUIBTQQhRgV4DFWh3ryfsPS/que4Kg==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [linux, freebsd, android] - '@lexical/mark@0.28.0': - resolution: {integrity: sha512-v5PzmTACsJrw3GvNZy2rgPxrNn9InLvLFoKqrSlNhhyvYNIAcuC4KVy00LKLja43Gw/fuB3QwKohYfAtM3yR3g==} + '@sentry/cli-linux-x64@2.58.6': + resolution: {integrity: sha512-DZu956Mhi3ZRjTBe1WdbGV46ldVbA8d2rgp/fh51GsI25zjBHah4wZnPTSzpc+YqxU6pJpg579B/r3jrIK530Q==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux, freebsd, android] - '@lexical/markdown@0.27.1': - resolution: {integrity: sha512-gs7g5MDUMFNWFBVjn7jbbYBD28Xfgem8hLoSnT0aUGDbbLtz94XBGweymHUWA4FVdWVoOQ5bV4ogTQsX30gt6w==} + '@sentry/cli-win32-arm64@2.58.6': + resolution: {integrity: sha512-nj0Ff/kmAB73EPDhR8B4O9r+NUHK5GkPCkGWC+kXVemqAJWL5jcJ5KdxG0l/S0z6RoEoltID8/43/B+TaMlT7A==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] - '@lexical/markdown@0.28.0': - resolution: {integrity: sha512-F3JXClqN4cjmXYLDK0IztxkbZuqkqS/AVbxnhGvnDYHQ9Gp8l7BonczhOiPwmJCDubJrAACP0L9LCqyt0jDRFw==} + '@sentry/cli-win32-i686@2.58.6': + resolution: {integrity: sha512-WNZiDzPbgsEMQWq4avsQ391v/xWKJDIWWWo9GYl+N/w5qcYKkoDW7wQG7T9FasI6ENn68phChTOAPXXxbfAdOg==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [win32] - '@lexical/offset@0.27.1': - resolution: {integrity: sha512-Qd4ZZKBk+ZAWNhKAdyX7LJNpl6itQvcjB1KtfL7Ad9Rfpn248p5M95rxXt+QrAe3KcW/bnDPQtxF+DzS2kanIQ==} + '@sentry/cli-win32-x64@2.58.6': + resolution: {integrity: sha512-R35WJ17oF4D2eqI1DR2sQQqr0fjRTt5xoP16WrTu91XM2lndRMFsnjh+/GttbxapLCBNlrjzia99MJ0PZHZpgA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] - '@lexical/offset@0.28.0': - resolution: {integrity: sha512-/SMDQgBPeWM936t04mtH6UAn3xAjP/meu9q136bcT3S7p7V8ew9JfNp9aznTPTx+2W3brJORAvUow7Xn1fSHmw==} + '@sentry/cli@2.58.6': + resolution: {integrity: sha512-baBcNPLLfUi9WuL+Tpri9BFaAdvugZIKelC5X0tt0Zdy+K0K+PCVSrnNmwMWU/HyaF/SEv6b6UHnXIdqanBlcg==} + engines: {node: '>= 10'} + hasBin: true - '@lexical/overflow@0.27.1': - resolution: {integrity: sha512-ZKcM9M1NYEXKutmbbqAZYNvOSrQtcvZRMzRM/3a+LSuIuaTmJ489AZS/jkagjprpAxvHd3R+wlrMorM0SBU3Ug==} + '@sentry/conventions@0.16.0': + resolution: {integrity: sha512-fO9PLmHdVURcSPUpWCItWAtgKiMwGdJHbovoSEyLplX5sxs2ugvI4CBPTrkkgqhObnZOD0CnWBKDzSVQYBKEyQ==} + engines: {node: '>=14'} - '@lexical/overflow@0.28.0': - resolution: {integrity: sha512-ppmhHXEZVicBm05w9EVflzwFavTVNAe4q0bkabWUeW0IoCT3Vg2A3JT7PC9ypmp+mboUD195foFEr1BBSv1Y8Q==} + '@sentry/core@10.69.0': + resolution: {integrity: sha512-+uuqVEeiDzYuAKjZLqsROKXvRTbl/QeH0gfGRtpYib1cud4rAFWRIkFmcR7Jb7JGFYwmReyQotiTj/hcDszTZg==} + engines: {node: '>=18'} - '@lexical/plain-text@0.27.1': - resolution: {integrity: sha512-94IQmX1bVCC84K8eUVQARNFBBAB8YMRrhUsyhv5Gh0c7ZhEGu+ty5vmAixslDuABChbxGS4czths0DAaiSIHIQ==} + '@sentry/core@9.47.1': + resolution: {integrity: sha512-KX62+qIt4xgy8eHKHiikfhz2p5fOciXd0Cl+dNzhgPFq8klq4MGMNaf148GB3M/vBqP4nw/eFvRMAayFCgdRQw==} + engines: {node: '>=18'} - '@lexical/plain-text@0.28.0': - resolution: {integrity: sha512-Jj2dCMDEfRuVetfDKcUes8J5jvAfZrLnILFlHxnu7y+lC+7R/NR403DYb3NJ8H7+lNiH1K15+U2K7ewbjxS6KQ==} + '@sentry/feedback@10.69.0': + resolution: {integrity: sha512-qrGz5Qaw93/IhMjlFN6uIaXeHwgHDaKGa6FkTAP6PonpkvSbGGqan6xfsENxzj9HUVoli1lZ6tMRDnt2qtSPhg==} + engines: {node: '>=18'} - '@lexical/react@0.27.1': - resolution: {integrity: sha512-TSSM619fVWJtIg6e805a8TaI6s4OKXdIgW9J8EkBY78Y0dExJO+2LIE6bK2biSqSdOybCiHOJirmVLV0DadajA==} + '@sentry/nextjs@10.69.0': + resolution: {integrity: sha512-48eYXezKAmSlSWtBsvwXvdHHHavXRDVIVZ3mI5vidhJwhqSs0ekwG0ZsPG3xNdaJLmnNEmavHEVupSbuuOTZZA==} + engines: {node: '>=18'} peerDependencies: - react: '>=17.x' - react-dom: '>=17.x' + next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 || ^16.0.0-0 - '@lexical/react@0.28.0': - resolution: {integrity: sha512-dWPnxrKrbQFjNqExqnaAsV0UEUgw/5M1ZYRWd5FGBGjHqVTCaX2jNHlKLMA68Od0VPIoOX2Zy1TYZ8ZKtsj5Dg==} + '@sentry/nextjs@9.47.1': + resolution: {integrity: sha512-uUcYbUHIXfmPDfakoXWoZl4u/6IMTzrlinQxlbHLYqIHRuclkqvViq6AMNmIwEYrLjRsNKFvFe32QMAHsce2NQ==} + engines: {node: '>=18'} peerDependencies: - react: '>=17.x' - react-dom: '>=17.x' - - '@lexical/rich-text@0.27.1': - resolution: {integrity: sha512-RtjCHz0406gH2VYL3XW3cxN4xduOegX/wv1S3eVrYq0YAJ/p9ltEfFMSdTvEg2HZbfciRqzeld/EFyVrTuTw/w==} - - '@lexical/rich-text@0.28.0': - resolution: {integrity: sha512-y+vUWI+9uFupIb9UvssKU/DKcT9dFUZuQBu7utFkLadxCNyXQHeRjxzjzmvFiM3DBV0guPUDGu5VS5TPnIA+OA==} - - '@lexical/selection@0.27.1': - resolution: {integrity: sha512-cSaZXE9SXvHMGMa0gbkrlFNXXMDJVu2D0ojwUKaw4HQC79FVXmFj4m1k8htuneu35hU+fiaE8D4fBIZ4/TlESg==} + next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 - '@lexical/selection@0.28.0': - resolution: {integrity: sha512-AJDi67Nsexyejzp4dEQSVoPov4P+FJ0t1v6DxUU+YmcvV56QyJQi6ue0i/xd8unr75ZufzLsAC0cDJJCEI7QDA==} - - '@lexical/table@0.27.1': - resolution: {integrity: sha512-+g8MheTEVBCO2E/4ocjJEa4X6A30zYvHO2MPGXJQH30Rm2xeznbC/R84tkqA+uL59SrsJKeFgxrlislXzQZGtg==} - - '@lexical/table@0.28.0': - resolution: {integrity: sha512-HMPCwXdj0sRWdlDzsHcNWRgbeKbEhn3L8LPhFnTq7q61gZ4YW2umdmuvQFKnIBcKq49drTH8cUwZoIwI8+AEEw==} - - '@lexical/text@0.27.1': - resolution: {integrity: sha512-Ku9e2igZWVD7FtbYMBbM6TOYEYuEfqMbihSy+8sPUvnoCXZnsYTj8HiH+DiZA72QaGPGDyIFvFeTJHFEmDB++A==} + '@sentry/node-core@10.69.0': + resolution: {integrity: sha512-IgArHczrZJxkgxoffHscj0NxQrG6kCazgmGQnlf3j58J1ec21YaUu8Tu+7G4Lo5tCiW3teQnwlKW1ttMXSqWRw==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/exporter-trace-otlp-http': '>=0.57.0 <1' + '@opentelemetry/instrumentation': '>=0.57.1 <1' + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@opentelemetry/core': + optional: true + '@opentelemetry/exporter-trace-otlp-http': + optional: true + '@opentelemetry/instrumentation': + optional: true + '@opentelemetry/sdk-trace-base': + optional: true - '@lexical/text@0.28.0': - resolution: {integrity: sha512-PT/A2RZv+ktn7SG/tJkOpGlYE6zjOND59VtRHnV/xciZ+jEJVaqAHtWjhbWibAIZQAkv/O7UouuDqzDaNTSGAA==} + '@sentry/node-core@9.47.1': + resolution: {integrity: sha512-7TEOiCGkyShJ8CKtsri9lbgMCbB+qNts2Xq37itiMPN2m+lIukK3OX//L8DC5nfKYZlgikrefS63/vJtm669hQ==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.0.0 + '@opentelemetry/core': ^1.30.1 || ^2.0.0 + '@opentelemetry/instrumentation': '>=0.57.1 <1' + '@opentelemetry/resources': ^1.30.1 || ^2.0.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.0.0 + '@opentelemetry/semantic-conventions': ^1.34.0 - '@lexical/utils@0.27.1': - resolution: {integrity: sha512-llihlrcAFZWB7o22Wnl7/UsXtfMQHwKRnsYPSJuwj1egVG3c3fCRyv5sbD7Xys3rdvuNUHLpSQa812huN11/JQ==} + '@sentry/node@10.69.0': + resolution: {integrity: sha512-xEXA1YGIiTZbrW6MWV34uS6JGQuQg2ijTI0zed+FsJb9JZKPYel/GZK8Km26vfTVb+yCXFmWZNBesKegNcVdzg==} + engines: {node: '>=18'} - '@lexical/utils@0.28.0': - resolution: {integrity: sha512-Qw00DjkS1nRK7DLSgqJpJ77Ti2AuiOQ6m5eM38YojoWXkVmoxqKAUMaIbVNVKqjFgrQvKFF46sXxIJPbUQkB0w==} + '@sentry/node@9.47.1': + resolution: {integrity: sha512-CDbkasBz3fnWRKSFs6mmaRepM2pa+tbZkrqhPWifFfIkJDidtVW40p6OnquTvPXyPAszCnDZRnZT14xyvNmKPQ==} + engines: {node: '>=18'} - '@lexical/yjs@0.27.1': - resolution: {integrity: sha512-sF/31k9rpwWRdt/Uz00E3R1eEW1k3Yck65wh8KigN/IZRlSre4Jq7vwHt+xuroIHwTP2A9XozW5CRjRindV81A==} + '@sentry/opentelemetry@10.69.0': + resolution: {integrity: sha512-3FyWV6YcEJuvLrlaKGE1dHXCI+1YO0a62w7PkwlRg8yp6K6YXkmdwu9GjqaYD+Ju4tm7uC7mHIsGFQMm0M7pqQ==} + engines: {node: '>=18'} peerDependencies: - yjs: '>=13.5.22' + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 - '@lexical/yjs@0.28.0': - resolution: {integrity: sha512-rKHpUEd3nrvMY7ghmOC0AeGSYT7YIviba+JViaOzrCX4/Wtv5C/3Sl7Io12Z9k+s1BKmy7C28bOdQHvRWaD7vQ==} + '@sentry/opentelemetry@9.47.1': + resolution: {integrity: sha512-STtFpjF7lwzeoedDJV+5XA6P89BfmFwFftmHSGSe3UTI8z8IoiR5yB6X2vCjSPvXlfeOs13qCNNCEZyznxM8Xw==} + engines: {node: '>=18'} peerDependencies: - yjs: '>=13.5.22' + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.0.0 + '@opentelemetry/core': ^1.30.1 || ^2.0.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.0.0 + '@opentelemetry/semantic-conventions': ^1.34.0 - '@mdx-js/react@3.1.0': - resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} + '@sentry/react@10.69.0': + resolution: {integrity: sha512-f0Il/JMteHjdWPNZQB3rtp1Pcj2Leb3p0KSZuv3rh0EUril9CbWtQVy5zJhoAppi+MWWmgRWa+6BpHbQf+ABQA==} + engines: {node: '>=18'} peerDependencies: - '@types/react': '>=16' - react: '>=16' + react: ^19.2.7 - '@modelcontextprotocol/sdk@1.27.1': - resolution: {integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==} + '@sentry/react@9.47.1': + resolution: {integrity: sha512-Anqt0hG1R+nktlwEiDc2FmD+6DUGMJOLuArgr7q1cSCdPbK2Gb1eZ2rF57Ui+CDo9XLvlX9QP2is/M08rrVe3w==} engines: {node: '>=18'} peerDependencies: - '@cfworker/json-schema': ^4.1.1 - zod: ^3.25 || ^4.0 - peerDependenciesMeta: - '@cfworker/json-schema': - optional: true + react: ^19.2.7 - '@monaco-editor/loader@1.5.0': - resolution: {integrity: sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw==} + '@sentry/replay-canvas@10.69.0': + resolution: {integrity: sha512-VF6nXvSninHcc7dC1Zme0RjkC7VgRMCixs6jKaQX5zTNeqTW3dZGSefSOVv+ZteRi3hJvVORq985VjUC9Z/0+A==} + engines: {node: '>=18'} - '@monaco-editor/react@4.7.0': - resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==} - peerDependencies: - monaco-editor: '>= 0.25.0 < 1' - 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 + '@sentry/replay@10.69.0': + resolution: {integrity: sha512-uRhmNhtFGPOlM0iniVmWKAX3KVXI0le41yYK/iKdPjinT9jA3ZrmykO/Fv1v/KI5znOtwa9D6eHRnDTTMRxFrg==} + engines: {node: '>=18'} + + '@sentry/server-utils@10.69.0': + resolution: {integrity: sha512-0MwHrA8+nNvMIsqf8m3cXwCBlUjr6AS7N6CZvHJtY1DkqEvQqEbD5VIrhzEyHN/KMZIgQ8XeDCQRhjnXFQGRhg==} + engines: {node: '>=18'} - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@sentry/types@9.47.1': + resolution: {integrity: sha512-npAjUpMpXMDXpFWxQFU2wBuNfIveK2qeoz5l65vaD3l6qGktF3zQ4VHWNAbfbf0o9bB7OWoDg3T/MEQ5uFbawA==} + engines: {node: '>=18'} - '@napi-rs/wasm-runtime@0.2.9': - resolution: {integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==} + '@sentry/vercel-edge@10.69.0': + resolution: {integrity: sha512-P3IsZyM3j8s4sGuxnGn1+EScVZHABsuzqv0NzIUen61ml0x+c6F6XXobvMhMcRp98fIQe1hZBpzH0VNxc7eCIA==} + engines: {node: '>=18'} - '@next/env@15.5.10': - resolution: {integrity: sha512-plg+9A/KoZcTS26fe15LHg+QxReTazrIOoKKUC3Uz4leGGeNPgLHdevVraAAOX0snnUs3WkRx3eUQpj9mreG6A==} + '@sentry/vercel-edge@9.47.1': + resolution: {integrity: sha512-mLdI/wF+toYu2i3VRcGdUn3AeTpPmAemI2Pnu6oomLKBDFnkjhCLnwCd5xuHLESJR1aJkB4M3g2+7DZcGTspXg==} + engines: {node: '>=18'} - '@next/env@15.5.13': - resolution: {integrity: sha512-6h7Fm29+/u1WBPcPaQl0xBov7KXB6i0c8oFlSlehD+PuZJQjzXQBuYzfkM32G5iWOlKsXXyRtcMaaqwspRBujA==} + '@sentry/webpack-plugin@3.6.1': + resolution: {integrity: sha512-F2yqwbdxfCENMN5u4ih4WfOtGjW56/92DBC0bU6un7Ns/l2qd+wRONIvrF+58rl/VkCFfMlUtZTVoKGRyMRmHA==} + engines: {node: '>= 14'} + peerDependencies: + webpack: '>=4.40.0' - '@next/eslint-plugin-next@15.3.1': - resolution: {integrity: sha512-oEs4dsfM6iyER3jTzMm4kDSbrQJq8wZw5fmT6fg2V3SMo+kgG+cShzLfEV20senZzv8VF+puNLheiGPlBGsv2A==} + '@sentry/webpack-plugin@5.4.0': + resolution: {integrity: sha512-J3a0BvUZ75Qxy+v/Ap3Hx4ZEcSjlPHZ/jDtxdRhXQCyNeEb8xq0uUBTI9VLtGk2eNeNucOxOEJ5ngqdNjnEH/A==} + engines: {node: '>= 18'} + peerDependencies: + webpack: '>=5.0.0' - '@next/swc-darwin-arm64@15.5.7': - resolution: {integrity: sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==} - engines: {node: '>= 10'} + '@seydx/node-av-darwin-arm64@6.1.1': + resolution: {integrity: sha512-hJ07HDFwz96MI/EY1V89/jVWXMfn/xb/32vocNhAeqnvBRMZio+hDz8lQloGynqv8iow5y9mPb7fOuzt5cW1+w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.5.7': - resolution: {integrity: sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==} - engines: {node: '>= 10'} + '@seydx/node-av-darwin-x64@6.1.1': + resolution: {integrity: sha512-7sfIEA/KkEMPMbfLlU9pGy34vE5iOpWryBFK87jDXeqLo4hB5p5qx2IDKcKfD6WBzEMk5FJScZz4rlT3J546Og==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.5.7': - resolution: {integrity: sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@next/swc-linux-arm64-musl@15.5.7': - resolution: {integrity: sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==} - engines: {node: '>= 10'} + '@seydx/node-av-linux-arm64@6.1.1': + resolution: {integrity: sha512-E5LopQ+LaTGdjmnk3KYsrKF1qRQHT22xVGijUdAcvbScfLTJz2RuJoevKT53cuNupR1gdmRmvnmq+kac4TkDRA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.5.7': - resolution: {integrity: sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==} - engines: {node: '>= 10'} + '@seydx/node-av-linux-x64@6.1.1': + resolution: {integrity: sha512-2HkBkMUSmA+1sP0PN7eFSkNJhbejgJDCXx0w0ZMRlTLqF+snz5ptf/gl/tQye9yER6I4OGW/7WVL5Y2PVneNCA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.5.7': - resolution: {integrity: sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] + '@seydx/node-av-win32-arm64-mingw@6.1.1': + resolution: {integrity: sha512-inhihhVGetTgpYaUQHfeTbG/PdBzYHqBRz79U/83C/64FHw7+sKQF125B7Hfle7tnTX3w7LoJQ+RxsoAP2RWgw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] - '@next/swc-win32-arm64-msvc@15.5.7': - resolution: {integrity: sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==} - engines: {node: '>= 10'} + '@seydx/node-av-win32-arm64-msvc@6.1.1': + resolution: {integrity: sha512-gESbRZhCkldciGV+e08PhgJ3Do2PnL1ZY8ZIIDTjutCZdw+lgZigvZGq8jQ+TnsV6Djf1pdcKx3Z2VGnIGId5Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.5.7': - resolution: {integrity: sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==} - engines: {node: '>= 10'} + '@seydx/node-av-win32-x64-mingw@6.1.1': + resolution: {integrity: sha512-DqdNMsGTMcmg/y+DwHu+slFdP5VluCFNrefhUoq7mobu2kKk0i3LBN9xz2NdeG15jKB+DCeqFmt0r5iMGymOKA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@seydx/node-av-win32-x64-msvc@6.1.1': + resolution: {integrity: sha512-GLjjoOYTqh1rvTzawgBMVKgY+8OIXMyrgD1eIqKLy3L6rWJhGvsbY+kUy15XbatGTFwStTlHK9ovTi2Xj/+9lQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + '@shikijs/core@4.4.3': + resolution: {integrity: sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==} + engines: {node: '>=20'} - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@shikijs/engine-javascript@4.4.3': + resolution: {integrity: sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==} + engines: {node: '>=20'} - '@nolyfill/is-core-module@1.0.39': - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} + '@shikijs/engine-oniguruma@4.4.3': + resolution: {integrity: sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==} + engines: {node: '>=20'} - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} - engines: {node: '>=8.0.0'} + '@shikijs/langs@4.4.3': + resolution: {integrity: sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==} + engines: {node: '>=20'} - '@parcel/watcher-android-arm64@2.5.6': - resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [android] + '@shikijs/primitive@4.4.3': + resolution: {integrity: sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==} + engines: {node: '>=20'} - '@parcel/watcher-darwin-arm64@2.5.6': - resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [darwin] + '@shikijs/themes@4.4.3': + resolution: {integrity: sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==} + engines: {node: '>=20'} - '@parcel/watcher-darwin-x64@2.5.6': - resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [darwin] + '@shikijs/types@4.4.3': + resolution: {integrity: sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==} + engines: {node: '>=20'} - '@parcel/watcher-freebsd-x64@2.5.6': - resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [freebsd] + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@parcel/watcher-linux-arm-glibc@2.5.6': - resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] + '@shinyoshiaki/binary-data@0.6.1': + resolution: {integrity: sha512-7HDb/fQAop2bCmvDIzU5+69i+UJaFgIVp99h1VzK1mpg1JwSODOkjbqD7ilTYnqlnadF8C4XjpwpepxDsGY6+w==} + engines: {node: '>=6'} - '@parcel/watcher-linux-arm-musl@2.5.6': - resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] + '@shinyoshiaki/jspack@0.0.6': + resolution: {integrity: sha512-SdsNhLjQh4onBlyPrn4ia1Pdx5bXT88G/LIEpOYAjx2u4xeY/m/HB5yHqlkJB1uQR3Zw4R3hBWLj46STRAN0rg==} - '@parcel/watcher-linux-arm64-glibc@2.5.6': - resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] + '@simple-libs/child-process-utils@2.0.0': + resolution: {integrity: sha512-dvNoRKLijXnD0XoJAz94pbNuB5GQgDr55UhpSPhffDkTT0Cmcqh9jSCOtwfT2d4H6MI9E7c4SgtMuJXZ6F3c6A==} + engines: {node: '>=22'} - '@parcel/watcher-linux-arm64-musl@2.5.6': - resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] + '@simple-libs/stream-utils@1.2.0': + resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} + engines: {node: '>=18'} - '@parcel/watcher-linux-x64-glibc@2.5.6': - resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] + '@simple-libs/stream-utils@2.0.0': + resolution: {integrity: sha512-fCTuZK4QBa+39Oz9l4OGfJfz+GpwCp3AqO7Zch3to99xHPgstVsRFpeQ8LNd2o1Gv8raL2mCFwiaHh7bFSp5DQ==} + engines: {node: '>=22'} - '@parcel/watcher-linux-x64-musl@2.5.6': - resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} - '@parcel/watcher-win32-arm64@2.5.6': - resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [win32] + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} + engines: {node: '>=18'} - '@parcel/watcher-win32-ia32@2.5.6': - resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} - engines: {node: '>= 10.0.0'} - cpu: [ia32] - os: [win32] + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} - '@parcel/watcher-win32-x64@2.5.6': - resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [win32] + '@sindresorhus/slugify@3.0.0': + resolution: {integrity: sha512-SCrKh1zS96q+CuH5GumHcyQEVPsM4Ve8oE0E6tw7AAhGq50K8ojbTUOQnX/j9Mhcv/AXiIsbCfquovyGOo5fGw==} + engines: {node: '>=20'} - '@parcel/watcher@2.5.6': - resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} - engines: {node: '>= 10.0.0'} + '@sindresorhus/transliterate@2.3.1': + resolution: {integrity: sha512-gVaaGtKYMYAMmI8buULVH3A2TXVJ98QiwGwI7ddrWGuGidGC2uRt4FHs22+8iROJ0QTzju9CuMjlVsrvpqsdhA==} + engines: {node: '>=20'} - '@payloadcms/db-postgres@3.36.1': - resolution: {integrity: sha512-I7+/KXfRZPo6q3Ht9aHlmdZ6AB7Ki/wsC124l7XtT7BmF7GF0yfM2FyuGiOAoGroJkCuGqeiMAGq6nMENzegoQ==} - peerDependencies: - payload: 3.36.1 + '@smithy/core@3.31.1': + resolution: {integrity: sha512-CyogUINxvi7C7LDsh8Syo6hVJOT9ckz4rG8dRZfTJ8r91HkMY59PnNooaj7WcHyxEkxPfBAmbgztZU+xTo76lg==} + engines: {node: '>=18.0.0'} - '@payloadcms/drizzle@3.36.1': - resolution: {integrity: sha512-YRuUwsvBlhijWnTtg49SPELpMRMDn6W5E8ytRJ/DA7I2ws9IYmIc5FCGZFgI3GH5Vat+OEJrNIH8HNItWYnLvw==} - peerDependencies: - payload: 3.36.1 + '@smithy/credential-provider-imds@4.4.16': + resolution: {integrity: sha512-QfuLWAkLzptffFW980AFeHZFdqds2B64rpEd3uJ6lgs3xVn9QegGMUgUcj+4d7dRrAsya3r58ZKpku97WcFb4w==} + engines: {node: '>=18.0.0'} - '@payloadcms/email-nodemailer@3.36.1': - resolution: {integrity: sha512-iTx1FynKKMFof1WQ3ciyjQG/F3oortnx6boUtUKhmHdnD0lqsp7aMxU+l16Jhg2Gk5+Kai1nD4go7WJ2qpRlaA==} - engines: {node: ^18.20.2 || >=20.9.0} - peerDependencies: - payload: 3.36.1 + '@smithy/fetch-http-handler@5.6.13': + resolution: {integrity: sha512-4fW86pEUOMbrD5nkbyl/tTvPHHWJFbuB2odl6ps9lWfHoXf9HWh3Q/Smh59qH1g7+c/BSZghX6bbUk4gsiMs8A==} + engines: {node: '>=18.0.0'} - '@payloadcms/eslint-config@3.28.0': - resolution: {integrity: sha512-BiGtowdT4uLdGaM1yxP3oZRZrRMi27FiIU2eJuRqiGqdCVfKYRtlNAHq5knf2ExmdV/U3yZivH4linR2DNT2eA==} + '@smithy/node-http-handler@4.9.13': + resolution: {integrity: sha512-Nmd/Nl35zfYrd+a6OO2cDJb3GPh9bgTjIUhcM+JFfjpp8/osCgboDV5nCT1I01Pv6R13eSKDKLSoVa5ZB6Zsfw==} + engines: {node: '>=18.0.0'} - '@payloadcms/eslint-plugin@3.28.0': - resolution: {integrity: sha512-oZhy8zd6WrxKwNygMfYE750yIRQEfdaoWEBR47UmKA6AMLb9p0kXygdkmnZLgNCFO4REZRUC2uHBWIh/dGqYrw==} + '@smithy/signature-v4@5.6.12': + resolution: {integrity: sha512-I6KLtq3H0qqSuV9vLglfi8puHqzygzWHOnI4z/Rdoo+q50vvo18vBRdPAvvEtcaKROz7Zn6qnPa14kRfPH6PcQ==} + engines: {node: '>=18.0.0'} - '@payloadcms/graphql@3.79.1': - resolution: {integrity: sha512-l3sVTir93q9anng7kPdbnfo1fF5XsWcDB5xW/po44gLUSmMOOqnKtMrYQy18URWqi9PwUe4W1Z7aZLbtyQgixg==} - hasBin: true - peerDependencies: - graphql: ^16.8.1 - payload: 3.79.1 + '@smithy/types@4.16.1': + resolution: {integrity: sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==} + engines: {node: '>=18.0.0'} - '@payloadcms/live-preview-react@3.36.1': - resolution: {integrity: sha512-tnsAtB5VeSVoWZAeb1XhU+bLPYUK9iJ4+6eyCDI73gTVaEuFlLr2bqzd0deZzz5OwKGt6G4LIYCdJ42tEOOwXA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - '@payloadcms/live-preview@3.36.1': - resolution: {integrity: sha512-Rc3SQhFbtEE34vULR4FxUPkj/NQ4OdW05uUlpvYoKqvDjJPsHUOtEDj9eUol7Sta+0UGqY8HziX2+n9j5OwPUA==} + '@speed-highlight/core@1.2.17': + resolution: {integrity: sha512-Z92FwKpCtfaW1V0jTU/fh3QzYEZN8wDwrzRIBoADCJfn4mJCNcJN/XegifX7BDrQ8/h9Xh/JnbyMchL0FqXrkg==} - '@payloadcms/next@3.79.1': - resolution: {integrity: sha512-tKYzB0Lxft6ds2bIhr+bXhQTSWJHwyuXS1RoYTxOAaAkHNnQkRy2Vbo/I8PSakimv5sXfy+9CV53rIYwnFLkeQ==} - engines: {node: ^18.20.2 || >=20.9.0} - peerDependencies: - graphql: ^16.8.1 - next: '>=15.2.9 <15.3.0 || >=15.3.9 <15.4.0 || >=15.4.11 <15.5.0 || >=16.2.0-canary.10 <17.0.0' - payload: 3.79.1 + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@payloadcms/plugin-cloud-storage@3.36.1': - resolution: {integrity: sha512-9diDn7r6G6ihlzIUGwsMR/LI8iN+n6M1RIViYzcvn8J9qHzxlWCXoWiN6Sy1jf/FTk2VvRdeAWB+o4AEC/rjGQ==} - peerDependencies: - payload: 3.36.1 - react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 - react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 + '@standard-schema/utils@0.3.0': + resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - '@payloadcms/plugin-redirects@3.36.1': - resolution: {integrity: sha512-fYCIll3tVO9MdpLHpK8sTMii5tUnRjntwagBIIVylNGFGaV8i7F/jjAGVxVLOp9bdMZXMPK6AKCxuvnsKr82Rw==} + '@storybook/addon-a11y@10.5.5': + resolution: {integrity: sha512-nsMnSRe7pzepXIkUUqI/rL7sp8juXOluyypU4Dz0UuYHhw/cKaxfzuO+3WJN5EtEr/gcnKYb4awxH/duPGavUw==} peerDependencies: - payload: 3.36.1 + storybook: ^10.5.5 - '@payloadcms/plugin-seo@3.36.1': - resolution: {integrity: sha512-waT4kaPrky+GRdCVZNRsU+a7KF+rwqNDsX6Bwto7Kz4er3CLdIt8Z5U4fsk3NWvQq3FvDURcxpToD+X47m3z/A==} + '@storybook/addon-docs@10.5.5': + resolution: {integrity: sha512-0YpKlimS4XE0kQ8Maa5coeefQxdyDrBHg1wOP3WTPuBe4FolFSCDveR0ge2+vuUBk+fZfn2+l+3Q2jmAWaRGDg==} peerDependencies: - payload: 3.36.1 - react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 - react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.5.5 + peerDependenciesMeta: + '@types/react': + optional: true - '@payloadcms/richtext-lexical@3.36.1': - resolution: {integrity: sha512-t2cgwBXngFehqnEO+NCuX5KrU2mnfAMWyuu3t7FmMUtO7uFvC+Y1M41qKfpzWUrDG2xAnPjbvAHIvzRFdIpcvg==} - engines: {node: ^18.20.2 || >=20.9.0} + '@storybook/addon-onboarding@10.5.5': + resolution: {integrity: sha512-QF8mn5QDJdY1LI/RqpxlruaETrPspVFVMRl0oFLSYOIQENIKLY+9Jy48zBkEeiy2vVY8aTNeWdkrnFpDc9G2qA==} peerDependencies: - '@faceless-ui/modal': 3.0.0-beta.2 - '@faceless-ui/scroll-info': 2.0.0 - '@payloadcms/next': 3.36.1 - payload: 3.36.1 - react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 - react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 + storybook: ^10.5.5 - '@payloadcms/storage-vercel-blob@3.36.1': - resolution: {integrity: sha512-YyM0kIp1tkSW0cIHbrQDj5jiA54nbqoU3bjRTR+w1aBFNQ22n1AuSTcNz6HOEUCWrPoEKKOo8Ba8Nw7YWCBxfw==} - engines: {node: ^18.20.2 || >=20.9.0} + '@storybook/addon-themes@10.5.5': + resolution: {integrity: sha512-ENZCJkvTdGYBRuaE3tEE6jRilMRdGgfYUhnFNEUXAg4II2iVYg9mnrq6tuQfwSVjGuEOTAUen/3YV+l7U4oOOA==} peerDependencies: - payload: 3.36.1 + storybook: ^10.5.5 - '@payloadcms/translations@3.36.1': - resolution: {integrity: sha512-pn2RfdKXAwIum/Pir5eF3Qa+ZYVa0G046bQAXw+cxfTaMtQ8XhzN2jbwH95ttwv3r2Qhoc7WUSYtnYZs4tHV7g==} - - '@payloadcms/translations@3.75.0': - resolution: {integrity: sha512-WbSf105UVAeanl7zPUcemhIgVM9mR8wF92nmNmic4I5+rDChC99btfvlnQrUEOt/+Y7THSiaQTgL4ytun8xd0w==} + '@storybook/addon-webpack5-compiler-swc@4.0.3': + resolution: {integrity: sha512-REJZBArIBcqzxmhQY9R1br9hjfcFYdl4FeWD/okx1eRwPZkl49aUhTYqZPrA+MWXfKJkuuNQ5vnfSoR0c9HyvA==} + engines: {node: '>=18'} + peerDependencies: + storybook: ^9.0.0 || ^10.0.0-0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0 - '@payloadcms/translations@3.79.1': - resolution: {integrity: sha512-v+UUDMqVl50TQhCPOVuVmsayw2tupDqWHfW6CzkPjA7hYuF5Wb8Bm2wyPE6sPUJB7+TqprziN3ecCUhwXyGr2A==} + '@storybook/builder-webpack5@10.5.5': + resolution: {integrity: sha512-hLjPH/A3NP5mqXsDbIdHb6+wvbPyvwjFvc+YxbEFprZPbjREIa0WP3933jf4Yg5xAjxpHdAhe7SES3k0fpR1/w==} + peerDependencies: + storybook: ^10.5.5 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - '@payloadcms/ui@3.36.1': - resolution: {integrity: sha512-SYJXZ4ma9QF58ZsG3nQxncVtWUKZwdhcVAnN17yhkYu8RQR16dmKMaN+OHgz9LZMz+/lVPZuCJu0SrHRbxeC4g==} - engines: {node: ^18.20.2 || >=20.9.0} + '@storybook/core-webpack@10.5.5': + resolution: {integrity: sha512-VkKmJ+hjV/6ztdjm83aO4gHOHcpoT/PysnV1ZDe5xuC2fc3KM4A6ArWU48nrZ48X4eBdIAmhDJKcEABCq4+4Jw==} peerDependencies: - next: ^15.2.3 - payload: 3.36.1 - react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 - react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 + storybook: ^10.5.5 - '@payloadcms/ui@3.79.1': - resolution: {integrity: sha512-NFjWW15efqhZ5tCK/1ACb61CgDO3lJZAMAYYkSwBO+ndx8TOy1EKhMX6eBZLot4114KTIm8m18vIUcFZDden8w==} - engines: {node: ^18.20.2 || >=20.9.0} + '@storybook/csf-plugin@10.5.5': + resolution: {integrity: sha512-/euibhRFqklYCZqUseokojmfYcQpXshVY2QmA1qCuxMz9SzVFD3iSTw+aFLTxpsJGGdcZJk8fnm/rEthLzZ9jA==} peerDependencies: - next: '>=15.2.9 <15.3.0 || >=15.3.9 <15.4.0 || >=15.4.11 <15.5.0 || >=16.2.0-canary.10 <17.0.0' - payload: 3.79.1 - react: ^19.0.1 || ^19.1.2 || ^19.2.1 - react-dom: ^19.0.1 || ^19.1.2 || ^19.2.1 + esbuild: '*' + rollup: '*' + storybook: ^10.5.5 + vite: '*' + webpack: '*' + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true - '@pinojs/redact@0.4.0': - resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} + '@storybook/icons@2.1.0': + resolution: {integrity: sha512-Fxh9vYpX9bQqFeHRiY8h2ApeRGDzRSMLwJwNZ/AIRqnyOKHxRKL+yFe+ctEkVJmuptRE9u1Hrn8ZZNHyfDKKNg==} + peerDependencies: + react: ^19.2.7 - '@pmmmwh/react-refresh-webpack-plugin@0.5.15': - resolution: {integrity: sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==} - engines: {node: '>= 10.13'} + '@storybook/nextjs@10.5.5': + resolution: {integrity: sha512-C5olTxXh1aNpegxN6B4QdT0EXJZhgnQr9l8eXOcsj7+1sSmqEjZrJ5kq2cQOD0/fJQMtY5Gprgugx4Df2/3FWQ==} peerDependencies: - '@types/webpack': 4.x || 5.x - react-refresh: '>=0.10.0 <1.0.0' - sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <5.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x || 5.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + next: ^14.1.0 || ^15.0.0 || ^16.0.0 + react: ^19.2.7 + react-dom: ^19.2.7 + storybook: ^10.5.5 + typescript: '*' + webpack: ^5.0.0 peerDependenciesMeta: - '@types/webpack': - optional: true - sockjs-client: + '@types/react': optional: true - type-fest: + '@types/react-dom': optional: true - webpack-dev-server: + typescript: optional: true - webpack-hot-middleware: + webpack: optional: true - webpack-plugin-serve: + + '@storybook/preset-react-webpack@10.5.5': + resolution: {integrity: sha512-mR63cbAdWfAqrFtoqo9xdwFr7U8T4pO1N5rd1jZfXDj/fk9rUxAPDL/uBvgMNfMsZHaCu9ZaYydhn9Vpmio7lw==} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 + storybook: ^10.5.5 + typescript: '*' + peerDependenciesMeta: + typescript: optional: true - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0': + resolution: {integrity: sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + typescript: '>= 4.x' + webpack: '>= 4' + + '@storybook/react-dom-shim@10.5.5': + resolution: {integrity: sha512-PIk7N3LLrZIxfNxmkvmQN1d5UQ70XEedT8n0GhBiXnM6XL09xPGB8n8TZXeJBRYluKhDQcAyQeT0/OZmcDVQJg==} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^19.2.7 + react-dom: ^19.2.7 + storybook: ^10.5.5 peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-slot@1.2.0': - resolution: {integrity: sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==} + '@storybook/react@10.5.5': + resolution: {integrity: sha512-T2Xj0ey7a9RHU6coYLC0L5lhjcdyhLCs9wNv15FvHvgmrRobkynEV72kq5vGW8tFkahNWI1X9+GZPQ6r8Nm38w==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^19.2.7 + react-dom: ^19.2.7 + storybook: ^10.5.5 + typescript: '>= 4.9.x' peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true + typescript: + optional: true - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@swc/core-darwin-arm64@1.15.47': + resolution: {integrity: sha512-GsoMtan3ojGGMGFbl31mmRu5ctZ56re8grGE8mO/OHJ8O+JRkzod02fe7X6ZQ8JvamA3imkEkx/h3u+vsOgPgA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] - '@rushstack/eslint-patch@1.11.0': - resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} + '@swc/core-darwin-x64@1.15.47': + resolution: {integrity: sha512-leTi7Rx3KF4zcC637iqWgk9SoV8VXAD8ppQYXsep63px5A/UftOcxLN1pmr8Z1si/YvX90ompP/rHgpYkgwXWg==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] - '@sendgrid/client@6.5.5': - resolution: {integrity: sha512-Nbfgo94gbWSL8PIgJfuHoifyOJJepvV8NQkkglctAEfb1hyozKhrzE6v1kPG/z4j0RodaTtXD5LJj/t0q/VhLA==} - engines: {node: '>=6.0.0'} + '@swc/core-linux-arm-gnueabihf@1.15.47': + resolution: {integrity: sha512-hBqHuoWKKIsKmDBn9qVeWqj5GWZhtlcczVaqQmNRXsDfq+voR5CxKRfamA367QjJXtceYuliLFfEL8QsskRM2g==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] - '@sendgrid/client@8.1.5': - resolution: {integrity: sha512-Jqt8aAuGIpWGa15ZorTWI46q9gbaIdQFA21HIPQQl60rCjzAko75l3D1z7EyjFrNr4MfQ0StusivWh8Rjh10Cg==} - engines: {node: '>=12.*'} + '@swc/core-linux-arm64-gnu@1.15.47': + resolution: {integrity: sha512-TBxvRz+B4K205TWHHZxWVxkC2RFNP/Mz3PNcECBos5PsKwxjg3QSJzdoebr0VCf0Bfh8HOPldKxAP/8XkFe9gA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [glibc] - '@sendgrid/helpers@6.5.5': - resolution: {integrity: sha512-uRFEanalfss5hDsuzVXZ1wm7i7eEXHh1py80piOXjobiQ+MxmtR19EU+gDSXZ+uMcEehBGhxnb7QDNN0q65qig==} - engines: {node: '>= 6.0.0'} + '@swc/core-linux-arm64-musl@1.15.47': + resolution: {integrity: sha512-3Yu3Uq/VgytqsPjTMbkPU1ExADytbdWbruJYhA584E9jrpE2Ki+R6VVPoZCeAVk1Cb7QxcRTgblw6bSa6a/R+w==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [musl] - '@sendgrid/helpers@8.0.0': - resolution: {integrity: sha512-Ze7WuW2Xzy5GT5WRx+yEv89fsg/pgy3T1E3FS0QEx0/VvRmigMZ5qyVGhJz4SxomegDkzXv/i0aFPpHKN8qdAA==} - engines: {node: '>= 12.0.0'} + '@swc/core-linux-ppc64-gnu@1.15.47': + resolution: {integrity: sha512-wfdMi5IaOaNtmh2/6geRoxIdNfqylUZFdtzTKS655y1axWfIWyx7As74vv0wVdjeCIZ3WmCI9odDd4rUttXOSQ==} + engines: {node: '>=10'} + cpu: [ppc64] + os: [linux] + libc: [glibc] - '@sendgrid/mail@6.5.5': - resolution: {integrity: sha512-DSu8oTPI0BJFH60jMOG9gM+oeNMoRALFmdAYg2PIXpL+Zbxd7L2GzQZtmf1jLy/8UBImkbB3D74TjiOBiLRK1w==} - engines: {node: '>=6.0.0'} + '@swc/core-linux-s390x-gnu@1.15.47': + resolution: {integrity: sha512-3hHYBY0yx8Ez7GMRrkhXHQzMdR5IZA6Wq5Ee4svlgwvSECLpnAJ9+0AimEGUFDvuLwE7nV/2+PYe8+Nm4rvNcQ==} + engines: {node: '>=10'} + cpu: [s390x] + os: [linux] + libc: [glibc] - '@sendgrid/mail@8.1.5': - resolution: {integrity: sha512-W+YuMnkVs4+HA/bgfto4VHKcPKLc7NiZ50/NH2pzO6UHCCFuq8/GNB98YJlLEr/ESDyzAaDr7lVE7hoBwFTT3Q==} - engines: {node: '>=12.*'} + '@swc/core-linux-x64-gnu@1.15.47': + resolution: {integrity: sha512-TjfhjgP/jGCfFHYC3JQPhJA1HwErbIJ9JfREDc1KNkvY6P0LodCgKVIlQ5deeTbkG7ih3bF5PHJLuLpaZjdRyQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [glibc] - '@storybook/addon-actions@8.6.12': - resolution: {integrity: sha512-B5kfiRvi35oJ0NIo53CGH66H471A3XTzrfaa6SxXEJsgxxSeKScG5YeXcCvLiZfvANRQ7QDsmzPUgg0o3hdMXw==} - peerDependencies: - storybook: ^8.6.12 + '@swc/core-linux-x64-musl@1.15.47': + resolution: {integrity: sha512-CQpS8Ge/avfjZd0UEwG/sds83Uu32deQXcV1Jo3jD0mmvQQqtYAjpsDZXugmheeAwmt+YIuoVtVHro8LMYHqsQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [musl] - '@storybook/addon-backgrounds@8.6.12': - resolution: {integrity: sha512-lmIAma9BiiCTbJ8YfdZkXjpnAIrOUcgboLkt1f6XJ78vNEMnLNzD9gnh7Tssz1qrqvm34v9daDjIb+ggdiKp3Q==} - peerDependencies: - storybook: ^8.6.12 + '@swc/core-win32-arm64-msvc@1.15.47': + resolution: {integrity: sha512-0W8IKHsUTYiT7G2RqtOoVWk+89yzZikIiDUb/sCK6BmQDBhN91hQSfyUtW12jhEWLzYgcfmisfsZrmZE+84U1A==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] - '@storybook/addon-controls@8.6.12': - resolution: {integrity: sha512-9VSRPJWQVb9wLp21uvpxDGNctYptyUX0gbvxIWOHMH3R2DslSoq41lsC/oQ4l4zSHVdL+nq8sCTkhBxIsjKqdQ==} - peerDependencies: - storybook: ^8.6.12 + '@swc/core-win32-ia32-msvc@1.15.47': + resolution: {integrity: sha512-ZIp49d2Z4/ka2jO9otOg4hDvTdPmp86kVOgS2M5FCPI7eKKZ1W0boxWn+8XeZrfERtFGW0AlMRm4JhlJa7l3NA==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.15.47': + resolution: {integrity: sha512-2h8Iek95vnixkBRCo+H8p09+Q5ll2NgSMFrWTy0iKt7+/t+8/T5mBpiT6c0ZxSS7wcWjwZ9sGZkK70tTSYHdDw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] - '@storybook/addon-docs@8.6.12': - resolution: {integrity: sha512-kEezQjAf/p3SpDzLABgg4fbT48B6dkT2LiZCKTRmCrJVtuReaAr4R9MMM6Jsph6XjbIj/SvOWf3CMeOPXOs9sg==} + '@swc/core@1.15.47': + resolution: {integrity: sha512-FbsO5JcfOjfH38W/rohBRBweJeERsAuIP4f377lmkmxTcq9exjtx4SkRuZY5CdfhR2CBVwDIJegBpJDffwNsOg==} + engines: {node: '>=10'} peerDependencies: - storybook: ^8.6.12 + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} + + '@swc/types@0.1.27': + resolution: {integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==} + + '@tailwindcss/node@4.3.3': + resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==} + + '@tailwindcss/oxide-android-arm64@4.3.3': + resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.3.3': + resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.3.3': + resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] - '@storybook/addon-essentials@8.6.12': - resolution: {integrity: sha512-Y/7e8KFlttaNfv7q2zoHMPdX6hPXHdsuQMAjYl5NG9HOAJREu4XBy4KZpbcozRe4ApZ78rYsN/MO1EuA+bNMIA==} - peerDependencies: - storybook: ^8.6.12 + '@tailwindcss/oxide-freebsd-x64@4.3.3': + resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] - '@storybook/addon-highlight@8.6.12': - resolution: {integrity: sha512-9FITVxdoycZ+eXuAZL9ElWyML/0fPPn9UgnnAkrU7zkMi+Segq/Tx7y+WWanC5zfWZrXAuG6WTOYEXeWQdm//w==} - peerDependencies: - storybook: ^8.6.12 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] - '@storybook/addon-interactions@8.6.12': - resolution: {integrity: sha512-cTAJlTq6uVZBEbtwdXkXoPQ4jHOAGKQnYSezBT4pfNkdjn/FnEeaQhMBDzf14h2wr5OgBnJa6Lmd8LD9ficz4A==} - peerDependencies: - storybook: ^8.6.12 + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] - '@storybook/addon-links@8.6.12': - resolution: {integrity: sha512-AfKujFHoAxhxq4yu+6NwylltS9lf5MPs1eLLXvOlwo3l7Y/c68OdxJ7j68vLQhs9H173WVYjKyjbjFxJWf/YYg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.12 - peerDependenciesMeta: - react: - optional: true + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] - '@storybook/addon-measure@8.6.12': - resolution: {integrity: sha512-tACmwqqOvutaQSduw8SMb62wICaT1rWaHtMN3vtWXuxgDPSdJQxLP+wdVyRYMAgpxhLyIO7YRf++Hfha9RHgFg==} - peerDependencies: - storybook: ^8.6.12 + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] - '@storybook/addon-onboarding@8.6.12': - resolution: {integrity: sha512-/cgxaLy6tr6xO0+QO+qV5rPZS5/c15Daywvg/F03lifLGkMuyn/JDuhu0J5i1LbFsL1RYdf4sjrTOmLXbOT6+Q==} - peerDependencies: - storybook: ^8.6.12 + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] - '@storybook/addon-outline@8.6.12': - resolution: {integrity: sha512-1ylwm+n1s40S91No0v9T4tCjZORu3GbnjINlyjYTDLLhQHyBQd3nWR1Y1eewU4xH4cW9SnSLcMQFS/82xHqU6A==} - peerDependencies: - storybook: ^8.6.12 + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] - '@storybook/addon-toolbars@8.6.12': - resolution: {integrity: sha512-HEcSzo1DyFtIu5/ikVOmh5h85C1IvK9iFKSzBR6ice33zBOaehVJK+Z5f487MOXxPsZ63uvWUytwPyViGInj+g==} - peerDependencies: - storybook: ^8.6.12 + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] - '@storybook/addon-viewport@8.6.12': - resolution: {integrity: sha512-EXK2LArAnABsPP0leJKy78L/lbMWow+EIJfytEP5fHaW4EhMR6h7Hzaqzre6U0IMMr/jVFa1ci+m0PJ0eQc2bw==} - peerDependencies: - storybook: ^8.6.12 + '@tailwindcss/oxide@4.3.3': + resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} + engines: {node: '>= 20'} - '@storybook/blocks@8.6.12': - resolution: {integrity: sha512-DohlTq6HM1jDbHYiXL4ZvZ00VkhpUp5uftzj/CZDLY1fYHRjqtaTwWm2/OpceivMA8zDitLcq5atEZN+f+siTg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^8.6.12 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@tailwindcss/postcss@4.3.3': + resolution: {integrity: sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==} - '@storybook/builder-webpack5@8.6.12': - resolution: {integrity: sha512-Z7RsQ/1+HbxdbM69JrEFcTL+pnVKUTMmeURMn5/eOvYTGjBtM18vbQTj0LjCUDIjC+v9U+uX8ZJEUVxFbGcxBw==} + '@tailwindcss/typography@0.5.20': + resolution: {integrity: sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==} peerDependencies: - storybook: ^8.6.12 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + tailwindcss: '>=3.0.0 || >=4.0.0 || insiders' - '@storybook/components@8.6.12': - resolution: {integrity: sha512-FiaE8xvCdvKC2arYusgtlDNZ77b8ysr8njAYQZwwaIHjy27TbR2tEpLDCmUwSbANNmivtc/xGEiDDwcNppMWlQ==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@takumi-rs/core-darwin-arm64@2.5.4': + resolution: {integrity: sha512-gbIY8SBxWK2fg13OtXj6V4ONLN683tTR08Llhr/UNqGdMn5yLw26/inn9j4sQV52QCWzczUYMwSX7aE2CaTbcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] - '@storybook/core-webpack@8.6.12': - resolution: {integrity: sha512-TiE+KOm0hxb/p0JxeGHKxqTNX+xnTOFsBh6uloCSuvodutJ5pR/XpxKVxwo1gtSc0Uq3qpgbMhW6qYlYQetnKA==} - peerDependencies: - storybook: ^8.6.12 + '@takumi-rs/core-darwin-x64@2.5.4': + resolution: {integrity: sha512-yQzah3bIo4SxFeQa+O/CBpMNc/FgbaDqMlzXA5/axRhypIXmdTaK9lrPqipROgPXRkPddeMevV1WoEHslaMCfg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] - '@storybook/core@8.6.17': - resolution: {integrity: sha512-lndZDYIvUddWk54HmgYwE4h2B0JtWt8ztIRAzHRt6ReZZ9QQbmM5b85Qpa+ng4dyQEKc2JAtYD3Du7RRFcpHlw==} - peerDependencies: - prettier: ^2 || ^3 - peerDependenciesMeta: - prettier: - optional: true + '@takumi-rs/core-linux-arm64-gnu@2.5.4': + resolution: {integrity: sha512-eFtuebrAm+6W7BTn/revOgIJCp14n+Fomg5DgAvyiTa1fz9Cz4R/0Nlm9OBP/bXP+S2TTqTBVsqvivGjrLJCZg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + libc: [glibc] - '@storybook/csf-plugin@8.6.12': - resolution: {integrity: sha512-6s8CnP1aoKPb3XtC0jRLUp8M5vTA8RhGAwQDKUsFpCC7g89JR9CaKs9FY2ZSzsNbjR15uASi7b3K8BzeYumYQg==} - peerDependencies: - storybook: ^8.6.12 + '@takumi-rs/core-linux-arm64-musl@2.5.4': + resolution: {integrity: sha512-9JQEtQWOGkUYX7xPev6+TVZVNHpZlr0JOxyCCsaOKvwhyI2KLugWM8C+3CITRtqa0WfJOqJsM43UP3cFofFbvA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + libc: [musl] - '@storybook/csf@0.1.13': - resolution: {integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==} + '@takumi-rs/core-linux-x64-gnu@2.5.4': + resolution: {integrity: sha512-KJp3tkS7BkwQ3WiKWse0uFjx/fKtsNayq9/sLo/8PurxZqjZAmIDMg4M9UUkWQ428uCTi+UERPNPlZQ/0XLrZQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + libc: [glibc] - '@storybook/global@5.0.0': - resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + '@takumi-rs/core-linux-x64-musl@2.5.4': + resolution: {integrity: sha512-WRQSnGu91GqGlA64aCHi5MepROm5pnADo6x8o3AakNxLXu0R6Hb1Tj1qJLp4nSylImzZueyR7PUNhNr3xdEBpg==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + libc: [musl] - '@storybook/icons@1.3.0': - resolution: {integrity: sha512-Nz/UzeYQdUZUhacrPyfkiiysSjydyjgg/p0P9HxB4p/WaJUUjMAcaoaLgy3EXx61zZJ3iD36WPuDkZs5QYrA0A==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + '@takumi-rs/core-win32-arm64-msvc@2.5.4': + resolution: {integrity: sha512-BxtY3t4bk98mG4uS3Tao1p6U7zbKayH+KGgN7gYLkGTn3cKQtDxP/rwaebdOnnRycIDo310mzhJ5640JhDJBGQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] - '@storybook/instrumenter@8.6.12': - resolution: {integrity: sha512-VK5fYAF8jMwWP/u3YsmSwKGh+FeSY8WZn78flzRUwirp2Eg1WWjsqPRubAk7yTpcqcC/km9YMF3KbqfzRv2s/A==} - peerDependencies: - storybook: ^8.6.12 + '@takumi-rs/core-win32-x64-msvc@2.5.4': + resolution: {integrity: sha512-n3yNothzsg6+3CBOB53AKKWn9pa/z1X1TrFOM7tdBSvnnEjXdoeowx6IsNVBv/OunwWjw+ah2f9ldkry+8Q2hg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] - '@storybook/manager-api@8.6.12': - resolution: {integrity: sha512-O0SpISeJLNTQvhSBOsWzzkCgs8vCjOq1578rwqHlC6jWWm4QmtfdyXqnv7rR1Hk08kQ+Dzqh0uhwHx0nfwy4nQ==} + '@takumi-rs/core@2.5.4': + resolution: {integrity: sha512-RfYVPihlYaa951bW2g7/lkK8uTQ3wxq1/yvY41K2CY98UZ8xChAcriJsF1Qxg1nAagmbLKuExJs1DSLR/+g9ow==} + engines: {node: '>=18'} peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + csstype: '*' + peerDependenciesMeta: + csstype: + optional: true - '@storybook/nextjs@8.6.12': - resolution: {integrity: sha512-I9y5xpOOSCo91IK4jf8nT/V9R0sPiJblKc0gJg0sOSSNgsswGxJq9anah6PEbYhlZtbptmhGOL6IeUR+pI6Qzw==} - engines: {node: '>=18.0.0'} + '@takumi-rs/helpers@2.5.4': + resolution: {integrity: sha512-/bNTK2nRSmaugF4m2TDb1SLiEAN7PcORwqqa1RIfahMAqxZoNzMw2krCuNexeDRPGBNJKNCmlOB6F1heBXqHTw==} + engines: {node: '>=18'} peerDependencies: - next: ^13.5.0 || ^14.0.0 || ^15.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.12 - typescript: '*' - webpack: ^5.0.0 + preact: ^10.0.0 + react: ^19.2.7 peerDependenciesMeta: - typescript: + preact: optional: true - webpack: + react: optional: true - '@storybook/preset-react-webpack@8.6.12': - resolution: {integrity: sha512-aCCHjR/jsVPVThRH7nK70wS0Od44M6hqkkakg3xr7LETZZGj99heen6t4VHvz8gcQYT9l6R/oZwCl7f/PQ3ZBQ==} - engines: {node: '>=18.0.0'} + '@takumi-rs/wasm@2.5.4': + resolution: {integrity: sha512-Uae6J+SglHS2sl0hqXLGuw5nUEy/scyYOJzbGFfN79EGm+Oy5f5SkizlNKo+6H0HzWoXCNdWCvXq/Yl8stRylA==} + engines: {node: '>=18'} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.12 - typescript: '*' + csstype: '*' peerDependenciesMeta: - typescript: + csstype: optional: true - '@storybook/preview-api@8.6.12': - resolution: {integrity: sha512-84FE3Hrs0AYKHqpDZOwx1S/ffOfxBdL65lhCoeI8GoWwCkzwa9zEP3kvXBo/BnEDO7nAfxvMhjASTZXbKRJh5Q==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0': - resolution: {integrity: sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==} - peerDependencies: - typescript: '>= 4.x' - webpack: '>= 4' + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@storybook/react-dom-shim@8.6.12': - resolution: {integrity: sha512-51QvoimkBzYs8s3rCYnY5h0cFqLz/Mh0vRcughwYaXckWzDBV8l67WBO5Xf5nBsukCbWyqBVPpEQLww8s7mrLA==} + '@testing-library/jest-dom@7.0.1': + resolution: {integrity: sha512-oMDTC3oA+6CXSO2JZnvOI7CA6oVub6kij5ggk9ohwye5slmkwxYDXcPOVxgMw/RQlticjtO0C1RZkR97HgrWMw==} + engines: {node: '>=22', npm: '>=6', yarn: '>=1'} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.12 + '@testing-library/dom': '>=10 <11' + vitest: '>= 0.32' + peerDependenciesMeta: + vitest: + optional: true - '@storybook/react@8.6.12': - resolution: {integrity: sha512-NzxlHLA5DkDgZM/dMwTYinuzRs6rsUPmlqP+NIv6YaciQ4NGnTYyOC7R/SqI6HHFm8ZZ5eMYvpfiFmhZ9rU+rQ==} - engines: {node: '>=18.0.0'} + '@testing-library/react@16.3.2': + resolution: {integrity: sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==} + engines: {node: '>=18'} peerDependencies: - '@storybook/test': 8.6.12 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.12 - typescript: '>= 4.2.x' + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 + react: ^19.2.7 + react-dom: ^19.2.7 peerDependenciesMeta: - '@storybook/test': + '@types/react': optional: true - typescript: + '@types/react-dom': optional: true - '@storybook/test@8.6.12': - resolution: {integrity: sha512-0BK1Eg+VD0lNMB1BtxqHE3tP9FdkUmohtvWG7cq6lWvMrbCmAmh3VWai3RMCCDOukPFpjabOr8BBRLVvhNpv2w==} - peerDependencies: - storybook: ^8.6.12 - - '@storybook/theming@8.6.12': - resolution: {integrity: sha512-6VjZg8HJ2Op7+KV7ihJpYrDnFtd9D1jrQnUS8LckcpuBXrIEbaut5+34ObY8ssQnSqkk2GwIZBBBQYQBCVvkOw==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - - '@storybook/theming@8.6.17': - resolution: {integrity: sha512-IttFvRqozpuzN5MlQEWGOzUA2rZg86688Dyv1d+bjpYcFHtY1X4XyTCGwv1BPTaTsB959oM8R2yoNYWQkABbBA==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - - '@tailwindcss/typography@0.5.16': - resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - - '@testing-library/dom@10.4.0': - resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} - engines: {node: '>=18'} - - '@testing-library/jest-dom@6.5.0': - resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - - '@testing-library/user-event@14.5.2': - resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + '@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' + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} + engines: {node: '>=18'} + '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -2956,509 +4442,231 @@ packages: '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.7': - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} '@types/busboy@1.5.4': resolution: {integrity: sha512-kG7WrUuAKK0NoyxfQHsVE6j1m01s6kMma64E+OZenQABMQyTJop1DumUWcLwAQ2JzpefU7PDYoRDKl8uZosFjw==} - '@types/caseless@0.12.5': - resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/cors@2.8.19': + resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-shape@3.1.8': + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} '@types/doctrine@0.0.9': resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + '@types/dom-mediacapture-transform@0.1.12': + resolution: {integrity: sha512-d7/QsLRwF864A5mgIM/YrfiglHoYn7zgCcAoJgW404r+2DwnNr7EBbLnCWpmOMgH8y0te73L1AV6H1bmauaWFw==} - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/dom-webcodecs@0.1.13': + resolution: {integrity: sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ==} + + '@types/dom-webcodecs@0.1.18': + resolution: {integrity: sha512-vAvE8C9DGWR+tkb19xyjk1TSUlJ7RUzzp4a9Anu7mwBT+fpyePWK1UxmH14tMO5zHmrnrRIMg5NutnnDztLxgg==} '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - - '@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/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} '@types/html-minifier-terser@6.1.0': resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - '@types/jsdom@21.1.7': - resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==} + '@types/hyphen@1.14.0': + resolution: {integrity: sha512-Fc/WIwPD0evpA4cFqdek0nqJpJCMeSqKJwwqYGyVI6snpGmf6eISdD2RnQ7+KhEeo5D05CQtAVfV16/FZ+TzLg==} + + '@types/jsdom@30.0.0': + resolution: {integrity: sha512-uAHGxujGE0cDaKGdK28zgDotFtNA7MKq5DXl8LrfdxdCI8VHcg15oJz+amHTChPNI5JpgEPQWc2xFdrw3em/nQ==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/lodash-es@4.17.12': resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} - '@types/lodash@4.17.16': - resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==} - '@types/lodash@4.17.24': resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - '@types/mdx@2.0.13': - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@22.15.3': - resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==} - - '@types/nodemailer-sendgrid@1.0.3': - resolution: {integrity: sha512-UpLLUyrXjcs8PIwhfY0/CqXAoJ5CcDNUs6hia9QT9+kcotCFK6siVC5dHUGpTAsodwteX2JoiQ3Na7ZbDkijgw==} - - '@types/nodemailer@6.4.17': - resolution: {integrity: sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww==} - - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - - '@types/pg@8.10.2': - resolution: {integrity: sha512-MKFs9P6nJ+LAeHLU3V0cODEOgyThJ3OAnmOlsZsxux6sfQs3HRXR5bBn7xG5DjckEFhTAxsXi7k7cd0pCMxpJw==} - - '@types/react-dom@19.1.3': - resolution: {integrity: sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg==} - peerDependencies: - '@types/react': ^19.0.0 - - '@types/react-transition-group@4.4.12': - resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} - peerDependencies: - '@types/react': '*' - - '@types/react@19.1.2': - resolution: {integrity: sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==} - - '@types/request@2.48.12': - resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} - - '@types/resolve@1.20.6': - resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} - - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/uuid@10.0.0': - resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} - - '@types/uuid@9.0.8': - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - - '@typescript-eslint/eslint-plugin@8.26.1': - resolution: {integrity: sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/eslint-plugin@8.31.1': - resolution: {integrity: sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/parser@8.26.1': - resolution: {integrity: sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/parser@8.31.1': - resolution: {integrity: sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/project-service@8.57.2': - resolution: {integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@8.26.1': - resolution: {integrity: sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.31.1': - resolution: {integrity: sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.57.2': - resolution: {integrity: sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.57.2': - resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.26.1': - resolution: {integrity: sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/type-utils@8.31.1': - resolution: {integrity: sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/types@8.26.1': - resolution: {integrity: sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.31.1': - resolution: {integrity: sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.57.2': - resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.26.1': - resolution: {integrity: sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/typescript-estree@8.31.1': - resolution: {integrity: sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/typescript-estree@8.57.2': - resolution: {integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.26.1': - resolution: {integrity: sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.31.1': - resolution: {integrity: sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.57.2': - resolution: {integrity: sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==} - 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.0.0' - - '@typescript-eslint/visitor-keys@8.26.1': - resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.31.1': - resolution: {integrity: sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.57.2': - resolution: {integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} - cpu: [arm] - os: [android] - - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} - cpu: [arm64] - os: [android] - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} - cpu: [arm64] - os: [darwin] - - '@unrs/resolver-binding-darwin-arm64@1.7.2': - resolution: {integrity: sha512-vxtBno4xvowwNmO/ASL0Y45TpHqmNkAaDtz4Jqb+clmcVSSl8XCG/PNFFkGsXXXS6AMjP+ja/TtNCFFa1QwLRg==} - cpu: [arm64] - os: [darwin] - - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} - cpu: [x64] - os: [darwin] - - '@unrs/resolver-binding-darwin-x64@1.7.2': - resolution: {integrity: sha512-qhVa8ozu92C23Hsmv0BF4+5Dyyd5STT1FolV4whNgbY6mj3kA0qsrGPe35zNR3wAN7eFict3s4Rc2dDTPBTuFQ==} - cpu: [x64] - os: [darwin] - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} - cpu: [x64] - os: [freebsd] - - '@unrs/resolver-binding-freebsd-x64@1.7.2': - resolution: {integrity: sha512-zKKdm2uMXqLFX6Ac7K5ElnnG5VIXbDlFWzg4WJ8CGUedJryM5A3cTgHuGMw1+P5ziV8CRhnSEgOnurTI4vpHpg==} - cpu: [x64] - os: [freebsd] - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} - cpu: [arm] - os: [linux] + '@types/mysql@2.15.26': + resolution: {integrity: sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==} - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.2': - resolution: {integrity: sha512-8N1z1TbPnHH+iDS/42GJ0bMPLiGK+cUqOhNbMKtWJ4oFGzqSJk/zoXFzcQkgtI63qMcUI7wW1tq2usZQSb2jxw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.2': - resolution: {integrity: sha512-tjYzI9LcAXR9MYd9rO45m1s0B/6bJNuZ6jeOxo1pq1K6OBuRMMmfyvJYval3s9FPPGmrldYA3mi4gWDlWuTFGA==} - cpu: [arm] - os: [linux] + '@types/node@26.1.2': + resolution: {integrity: sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==} - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.7.2': - resolution: {integrity: sha512-jon9M7DKRLGZ9VYSkFMflvNqu9hDtOCEnO2QAryFWgT6o6AXU8du56V7YqnaLKr6rAbZBWYsYpikF226v423QA==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} - cpu: [arm64] - os: [linux] + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@unrs/resolver-binding-linux-arm64-musl@1.7.2': - resolution: {integrity: sha512-c8Cg4/h+kQ63pL43wBNaVMmOjXI/X62wQmru51qjfTvI7kmCy5uHTJvK/9LrF0G8Jdx8r34d019P1DVJmhXQpA==} - cpu: [arm64] - os: [linux] + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} - cpu: [ppc64] - os: [linux] + '@types/pg-pool@2.0.6': + resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.2': - resolution: {integrity: sha512-A+lcwRFyrjeJmv3JJvhz5NbcCkLQL6Mk16kHTNm6/aGNc4FwPHPE4DR9DwuCvCnVHvF5IAd9U4VIs/VvVir5lg==} - cpu: [ppc64] - os: [linux] + '@types/pg@8.6.1': + resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} - cpu: [riscv64] - os: [linux] + '@types/react-dom@19.2.4': + resolution: {integrity: sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==} + peerDependencies: + '@types/react': ^19.2.0 - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.2': - resolution: {integrity: sha512-hQQ4TJQrSQW8JlPm7tRpXN8OCNP9ez7PajJNjRD1ZTHQAy685OYqPrKjfaMw/8LiHCt8AZ74rfUVHP9vn0N69Q==} - cpu: [riscv64] - os: [linux] + '@types/react-transition-group@4.4.12': + resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} + peerDependencies: + '@types/react': '*' - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} - cpu: [riscv64] - os: [linux] + '@types/react@19.2.18': + resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==} - '@unrs/resolver-binding-linux-riscv64-musl@1.7.2': - resolution: {integrity: sha512-NoAGbiqrxtY8kVooZ24i70CjLDlUFI7nDj3I9y54U94p+3kPxwd2L692YsdLa+cqQ0VoqMWoehDFp21PKRUoIQ==} - cpu: [riscv64] - os: [linux] + '@types/resolve@1.20.6': + resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} - cpu: [s390x] - os: [linux] + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} - '@unrs/resolver-binding-linux-s390x-gnu@1.7.2': - resolution: {integrity: sha512-KaZByo8xuQZbUhhreBTW+yUnOIHUsv04P8lKjQ5otiGoSJ17ISGYArc+4vKdLEpGaLbemGzr4ZeUbYQQsLWFjA==} - cpu: [s390x] - os: [linux] + '@types/shimmer@1.2.0': + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} - cpu: [x64] - os: [linux] + '@types/tedious@4.0.14': + resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} - '@unrs/resolver-binding-linux-x64-gnu@1.7.2': - resolution: {integrity: sha512-dEidzJDubxxhUCBJ/SHSMJD/9q7JkyfBMT77Px1npl4xpg9t0POLvnWywSk66BgZS/b2Hy9Y1yFaoMTFJUe9yg==} - cpu: [x64] - os: [linux] + '@types/timestring@7.0.0': + resolution: {integrity: sha512-ZFdmx8cDafCuTsVdP0xEOj8MEHKFo0P7x4lJPMZRKryoURfaO3MtJp4Ih0l35r8tM/+hnTGSAEL9PYf1N/3tbg==} - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} - cpu: [x64] - os: [linux] + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - '@unrs/resolver-binding-linux-x64-musl@1.7.2': - resolution: {integrity: sha512-RvP+Ux3wDjmnZDT4XWFfNBRVG0fMsc+yVzNFUqOflnDfZ9OYujv6nkh+GOr+watwrW4wdp6ASfG/e7bkDradsw==} - cpu: [x64] - os: [linux] + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - '@unrs/resolver-binding-wasm32-wasi@1.7.2': - resolution: {integrity: sha512-y797JBmO9IsvXVRCKDXOxjyAE4+CcZpla2GSoBQ33TVb3ILXuFnMrbR/QQZoauBYeOFuu4w3ifWLw52sdHGz6g==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} - cpu: [arm64] - os: [win32] + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - '@unrs/resolver-binding-win32-arm64-msvc@1.7.2': - resolution: {integrity: sha512-gtYTh4/VREVSLA+gHrfbWxaMO/00y+34htY7XpioBTy56YN2eBjkPrY1ML1Zys89X3RJDKVaogzwxlM1qU7egg==} - cpu: [arm64] - os: [win32] + '@types/webidl-conversions@7.0.3': + resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} - cpu: [ia32] - os: [win32] + '@types/whatwg-mimetype@3.0.2': + resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} - '@unrs/resolver-binding-win32-ia32-msvc@1.7.2': - resolution: {integrity: sha512-Ywv20XHvHTDRQs12jd3MY8X5C8KLjDbg/jyaal/QLKx3fAShhJyD4blEANInsjxW3P7isHx1Blt56iUDDJO3jg==} - cpu: [ia32] - os: [win32] + '@types/whatwg-url@11.0.5': + resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} - cpu: [x64] - os: [win32] + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@unrs/resolver-binding-win32-x64-msvc@1.7.2': - resolution: {integrity: sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA==} - cpu: [x64] - os: [win32] + '@ungap/structured-clone@1.3.3': + resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} + + '@vercel/oidc@3.2.0': + resolution: {integrity: sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==} + engines: {node: '>= 20'} - '@vercel/analytics@1.5.0': - resolution: {integrity: sha512-MYsBzfPki4gthY5HnYN7jgInhAZ7Ac1cYDoRWFomwGHWEX7odTEzbtg9kf/QSo7XEsEAqlQugA6gJ2WS2DEa3g==} + '@vitest/coverage-v8@4.1.10': + resolution: {integrity: sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==} peerDependencies: - '@remix-run/react': ^2 - '@sveltejs/kit': ^1 || ^2 - next: '>= 13' - react: ^18 || ^19 || ^19.0.0-rc - svelte: '>= 4' - vue: ^3 - vue-router: ^4 + '@vitest/browser': 4.1.10 + vitest: 4.1.10 peerDependenciesMeta: - '@remix-run/react': - optional: true - '@sveltejs/kit': - optional: true - next: - optional: true - react: - optional: true - svelte: - optional: true - vue: - optional: true - vue-router: + '@vitest/browser': optional: true - '@vercel/blob@0.22.3': - resolution: {integrity: sha512-l0t2KhbOO/I8ZNOl9zypYf1NE0837aO4/CPQNGR/RAxtj8FpdYKjhyUADUXj2gERLQmnhun+teaVs/G7vZJ/TQ==} - engines: {node: '>=16.14'} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vercel/blob@1.0.1': - resolution: {integrity: sha512-iGF4nF13cwMs5AxOxdKggm6f2mt5Av3RwUARqtj8BZfhBRD2z5vnmRioI0ShCOb38bDQIBBiyI7hvElGD12jjw==} - engines: {node: '>=16.14'} + '@vitest/expect@4.1.10': + resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} - '@vercel/speed-insights@1.2.0': - resolution: {integrity: sha512-y9GVzrUJ2xmgtQlzFP2KhVRoCglwfRQgjyfY607aU0hh0Un6d0OUyrJkjuAlsV18qR4zfoFPs/BiIj9YDS6Wzw==} + '@vitest/mocker@4.1.10': + resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} peerDependencies: - '@sveltejs/kit': ^1 || ^2 - next: '>= 13' - react: ^18 || ^19 || ^19.0.0-rc - svelte: '>= 4' - vue: ^3 - vue-router: ^4 + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: - '@sveltejs/kit': - optional: true - next: - optional: true - react: + msw: optional: true - svelte: - optional: true - vue: - optional: true - vue-router: + vite: optional: true - '@vitest/expect@2.0.5': - resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/pretty-format@4.1.10': + resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} + + '@vitest/runner@4.1.10': + resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} - '@vitest/pretty-format@2.0.5': - resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} + '@vitest/snapshot@4.1.10': + resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} - '@vitest/pretty-format@2.1.9': - resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/spy@2.0.5': - resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + '@vitest/spy@4.1.10': + resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} - '@vitest/utils@2.0.5': - resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vitest/utils@2.1.9': - resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} + '@vitest/utils@4.1.10': + resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -3505,6 +4713,12 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@webcontainer/env@1.1.1': + resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} + + '@workflow/serde@4.1.0': + resolution: {integrity: sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ==} + '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -3515,33 +4729,25 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} + abs-svg-path@0.1.1: + resolution: {integrity: sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==} - acorn-import-phases@1.0.4: - resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} - engines: {node: '>=10.13.0'} - peerDependencies: - acorn: ^8.14.0 + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true + acorn: ^8 - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} engines: {node: '>=0.4.0'} hasBin: true @@ -3549,9 +4755,26 @@ packages: resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} engines: {node: '>=8.9'} - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} + aes-js@3.1.2: + resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@9.0.0: + resolution: {integrity: sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==} + engines: {node: '>= 20'} + + aggregate-error@5.0.0: + resolution: {integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==} + engines: {node: '>=18'} + + ai@7.0.47: + resolution: {integrity: sha512-e0MpNtufu6JmcmwMUTgM1smCRkP5z014iPaKgnCm7kmMsTSIZbOJN2vglhPq0WIj/6x7ewVi6W0FyIR0pjaE3Q==} + engines: {node: '>=22'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} @@ -3579,15 +4802,19 @@ packages: peerDependencies: ajv: ^8.8.2 - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} @@ -3602,8 +4829,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@3.2.1: @@ -3618,8 +4845,8 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} any-promise@1.3.0: @@ -3629,12 +4856,16 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + argue-cli@3.1.0: + resolution: {integrity: sha512-DhBpBfXL4SS2uC0N922MMajKR3CdrTG0u2or1PNYgXMsrSzViJrbtvT0nCLlLGUI0plam/ZZCs7aAauHtW9thw==} + engines: {node: '>=22'} + + argv-formatter@1.0.0: + resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} + aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} @@ -3642,47 +4873,15 @@ packages: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.6: - resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} asn1.js@4.10.1: resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} - asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} + asn1js@3.0.10: + resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} + engines: {node: '>=12.0.0'} assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} @@ -3691,25 +4890,26 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - ast-types@0.16.1: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + ast-v8-to-istanbul@1.0.5: + resolution: {integrity: sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} - autoprefixer@10.4.21: - resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + atomically@2.1.1: + resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==} + + autoprefixer@10.5.4: + resolution: {integrity: sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -3719,23 +4919,10 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - - aws4@1.13.2: - resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - - axe-core@4.10.3: - resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} + axe-core@4.12.1: + resolution: {integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==} engines: {node: '>=4'} - axios@1.13.6: - resolution: {integrity: sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==} - - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - babel-loader@9.2.1: resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} engines: {node: '>= 14.15.0'} @@ -3747,18 +4934,23 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} - babel-plugin-polyfill-corejs2@0.4.12: - resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + babel-plugin-polyfill-corejs2@0.4.17: + resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.13.0: + resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.10.6: - resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + babel-plugin-polyfill-corejs3@0.14.2: + resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.3: - resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + babel-plugin-polyfill-regenerator@0.6.8: + resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -3769,20 +4961,27 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} + base64-js@0.0.8: + resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} + engines: {node: '>= 0.4'} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.8: - resolution: {integrity: sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==} + base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + + baseline-browser-mapping@2.11.7: + resolution: {integrity: sha512-APw5YuIQAg6L9w4sHDI6j26DGFJI6RpYOhnkMPdC9lWbkKvsyPHzDsve1yd73lk21yz7Y09Kci8B2Pp9FonzWA==} engines: {node: '>=6.0.0'} hasBin: true - bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + before-after-hook@4.0.0: + resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} - better-opn@3.0.2: - resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} - engines: {node: '>=12.0.0'} + bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} @@ -3791,21 +4990,20 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - birecord@0.1.1: - resolution: {integrity: sha512-VUpsf/qykW0heRlC8LooCq28Kxn3mAqKohhDG/49rrsQ1dT1CXyj/pgXS+5BSRzFTR/3DyIBOqQOrGyZOh71Aw==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - blurhash@2.0.5: - resolution: {integrity: sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==} + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} - bn.js@4.12.3: - resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==} + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - bn.js@5.2.3: - resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} + bn.js@4.12.5: + resolution: {integrity: sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==} - body-parser@2.2.2: - resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} - engines: {node: '>=18'} + bn.js@5.2.5: + resolution: {integrity: sha512-Vq886eXykuP5E6HcKSSStP3bJgrE6In5WKxVUvJ8XGpWWYs2xZHWqUwzCtGgEtBcxyd57KBFDPFoUfNzdaHCNg==} body-scroll-lock@4.0.0-beta.0: resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} @@ -3813,15 +5011,21 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.13: - resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} + bottleneck@2.19.5: + resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} - brace-expansion@2.0.3: - resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} + bowser@2.14.1: + resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} - engines: {node: 18 || 20 || >=22} + brace-expansion@1.1.17: + resolution: {integrity: sha512-w+aeW/mkgM4PyRMOJCgi3fOrTm5Q8QY1OSfn2TO2iuDj3ezIHqejmuxbjfPrqUkgqRew1iqkyAn0tr0ZwHD9+w==} + + brace-expansion@2.1.4: + resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==} + + brace-expansion@5.0.9: + resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + engines: {node: 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -3830,8 +5034,8 @@ packages: brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - browser-assert@1.2.1: - resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} + brotli@1.3.3: + resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} @@ -3846,59 +5050,62 @@ packages: resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==} engines: {node: '>= 0.10'} - browserify-sign@4.2.3: - resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} - engines: {node: '>= 0.12'} + browserify-sign@4.2.6: + resolution: {integrity: sha512-sd+Q65fjlWCYWtZKXiKfrUc8d+4jtp/8f0W2NkwzLtoW4bI6UDnWusLWIurHnmurW0XShIRxpwiOX4EoPtXUAg==} + engines: {node: '>= 0.10'} browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + browserslist@4.28.7: + resolution: {integrity: sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true bson-objectid@2.0.4: resolution: {integrity: sha512-vgnKAUzcDoa+AeyYwXCoHyF2q6u/8H46dxu5JN+4/TZeq/Dlinn0K6GvxsCLb3LHUJl0m/TLiEK31kUwtgocMQ==} - buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + bson@6.10.4: + resolution: {integrity: sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==} + engines: {node: '>=16.20.1'} + + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer-writer@2.0.0: - resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==} - engines: {node: '>=4'} + buffer-image-size@0.6.4: + resolution: {integrity: sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ==} + engines: {node: '>=4.0'} buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + buffer@5.6.0: + resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} + buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} engines: {node: '>= 0.4'} call-bound@1.0.4: @@ -3912,32 +5119,30 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + caniuse-api@4.0.0: + resolution: {integrity: sha512-B0hQ1OLyJuHTQSOWXvwibWqM6DCoqJdvBA6X1S/53bd4XU7LJ1yurIPlrsouol3mw1jh9pGI4ivubSpmJeIqCA==} - caniuse-lite@1.0.30001716: - resolution: {integrity: sha512-49/c1+x3Kwz7ZIWt+4DvK3aMJy9oYXXG6/97JKsnjdCk/6n9vVyWL8NAwVt95Lwt9eigI10Hl782kDfZUUlRXw==} + caniuse-lite@1.0.30001806: + resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} - caniuse-lite@1.0.30001780: - resolution: {integrity: sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==} + canvas@3.2.3: + resolution: {integrity: sha512-PzE5nJZPz72YUAfo8oTp0u3fqqY7IzlTubneAihqDYAUcBk7ryeCmBbdJBEdaH0bptSOe2VT2Zwcb3UaFyaSWw==} + engines: {node: ^18.12.0 || >= 20.9.0} case-sensitive-paths-webpack-plugin@2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} engines: {node: '>=4'} - caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.1.2: - resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} - engines: {node: '>=12'} + 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'} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -3951,6 +5156,14 @@ 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} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -3966,8 +5179,8 @@ packages: charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} chokidar@3.6.0: @@ -3978,6 +5191,9 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -3986,27 +5202,62 @@ packages: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} - cipher-base@1.0.6: - resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} + cipher-base@1.0.7: + resolution: {integrity: sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==} engines: {node: '>= 0.10'} + citty@0.2.2: + resolution: {integrity: sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==} + cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + cjs-module-lexer@2.2.0: + resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} clean-css@5.3.3: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} + clean-stack@5.3.0: + resolution: {integrity: sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==} + engines: {node: '>=14.16'} + + cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + cluster-key-slot@1.1.1: + resolution: {integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==} + engines: {node: '>=0.10.0'} + + cluster-key-slot@1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -4020,58 +5271,54 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + color-name@2.1.1: + resolution: {integrity: sha512-p2FdgwVx1a9yWBHP2wI0VgShkDpgN4kZISkxdNipGBJWpa5G6b04OINlVWCyJj0JmfvcPrgqt95E9k8yvaOJFg==} + engines: {node: '>=12.20'} - colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + color-string@2.1.4: + resolution: {integrity: sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==} + engines: {node: '>=18'} 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'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - comment-parser@1.4.1: - resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} - engines: {node: '>= 12.0.0'} - - comment-parser@1.4.6: - resolution: {integrity: sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==} - engines: {node: '>= 12.0.0'} - common-path-prefix@3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - compare-versions@6.1.1: - resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + conf@15.1.0: + resolution: {integrity: sha512-Uy5YN9KEu0WWDaZAVJ5FAmZoaJt9rdK6kH+utItPyGsCqCgaTKkrmZx3zoE0/3q6S3bcp3Ihkk+ZqPxWxFK5og==} + engines: {node: '>=20'} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + console-browserify@1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} @@ -4081,13 +5328,44 @@ packages: constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} - content-disposition@1.0.1: - resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} + content-type@2.1.0: + resolution: {integrity: sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==} engines: {node: '>=18'} - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} + conventional-changelog-angular@8.3.1: + resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} + engines: {node: '>=18'} + + conventional-changelog-angular@9.2.1: + resolution: {integrity: sha512-oWSL6ZhnXbYraOFTK3PgRAQJ8fADDAEv5K6AdeyQPLvjFmhG8+ejL0jZZp/R7vTmGJaBvZEE+sE7dB4bCv7sAw==} + engines: {node: '>=22'} + + conventional-changelog-conventionalcommits@10.2.1: + resolution: {integrity: sha512-n4Kr1HFMTf3iMbES0TMxKIcYtUUv4rKqyQQp2JwfOEfFCOfGT3Tq4mCyJ8S9/YPyWhydjfKrrvnyl+gCjA+mJQ==} + engines: {node: '>=22'} + + conventional-changelog-writer@8.4.0: + resolution: {integrity: sha512-HHBFkk1EECxxmCi4CTu091iuDpQv5/OavuCUAuZmrkWpmYfyD816nom1CvtfXJ/uYfAAjavgHvXHX291tSLK8g==} + engines: {node: '>=18'} + hasBin: true + + conventional-commits-filter@5.0.0: + resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} + engines: {node: '>=18'} + + conventional-commits-parser@6.4.0: + resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==} + engines: {node: '>=18'} + hasBin: true + + conventional-commits-parser@7.1.2: + resolution: {integrity: sha512-O+x4N2yH+ijvqWlIyTHsXTAP+algNWgGbjY2duCe8w2vUMvUB95cLRslCPfTMQyLAKlet3bhZTdu6ozn4M+QJQ==} + engines: {node: '>=22'} + hasBin: true + + convert-hrtime@5.0.0: + resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} + engines: {node: '>=12'} convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -4095,36 +5373,50 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - core-js-compat@3.40.0: - resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} - core-js-pure@3.40.0: - resolution: {integrity: sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==} + core-js-compat@3.49.0: + resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + core-js-pure@3.49.0: + resolution: {integrity: sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} + cosmiconfig-typescript-loader@6.3.0: + resolution: {integrity: sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cosmiconfig@9.0.2: + resolution: {integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -4141,8 +5433,8 @@ packages: create-hmac@1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} - croner@9.1.0: - resolution: {integrity: sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==} + croner@10.0.1: + resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==} engines: {node: '>=18.0'} cross-spawn@7.0.6: @@ -4156,11 +5448,9 @@ packages: resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} engines: {node: '>= 0.10'} - css-declaration-sorter@7.2.0: - resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.0.9 + crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} css-loader@6.11.0: resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} @@ -4174,6 +5464,18 @@ packages: webpack: optional: true + css-loader@7.1.4: + resolution: {integrity: sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || ^1.0.0 || ^2.0.0-0 + webpack: ^5.27.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} @@ -4184,8 +5486,8 @@ packages: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} css-what@6.2.2: @@ -4203,57 +5505,87 @@ packages: cssfilter@0.0.10: resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} - cssnano-preset-default@7.0.6: - resolution: {integrity: sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + cssnano-preset-default@8.0.2: + resolution: {integrity: sha512-+jQAqIKCqMmBjZs7741XkilU93ITZ/EW8gjAkMmujdCzfDkfjrDBv2VqkSu29Fzeig/0rZ3S9IAwfPLlmXEUfQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - cssnano-utils@5.0.0: - resolution: {integrity: sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + cssnano-utils@6.0.1: + resolution: {integrity: sha512-zk65GIxA8tCjqVk7nTm1mE+ZKxtnxAvU5JSUaBLXbAr3ZF7IOvz3fbPOnEDvZKhnS7GOIitXTS5BgehLzNoc8Q==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - cssnano@7.0.6: - resolution: {integrity: sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + cssnano@8.0.2: + resolution: {integrity: sha512-K+a76gA1v0/CsYgcsE95HGGyIuPKxpQSetwSwz4nHEM8fFXqSkzq2JzEXFL8v5+CCjxzVVVhPcTK3Oo8SaF/xA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - cssstyle@4.2.1: - resolution: {integrity: sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==} - engines: {node: '>=18'} - csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} - engines: {node: '>=0.10'} + csv-parse@5.6.0: + resolution: {integrity: sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q==} + + csv-stringify@6.5.2: + resolution: {integrity: sha512-RFPahj0sXcmUyjrObAK+DOWtMvMIFV328n4qZJhgX3x2RqkQgOTU2mCUmiFR0CzM6AzChlRSUErjiJeEt8BaQA==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} - data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} + data-urls@7.0.0: + resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} dataloader@2.2.3: resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} @@ -4264,16 +5596,19 @@ packages: date-fns@4.1.0: resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + date-fns@4.4.0: + resolution: {integrity: sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==} + dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debounce-fn@6.0.0: + resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} + engines: {node: '>=18'} + + debounce@2.2.0: + resolution: {integrity: sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==} + engines: {node: '>=18'} debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} @@ -4293,45 +5628,65 @@ packages: supports-color: optional: true - decimal.js@10.5.0: - resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} + decimal.js-light@2.5.1: + resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} - decode-named-character-reference@1.1.0: - resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dedent@1.7.2: + resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + 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==} + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} deepmerge@4.3.1: 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-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} @@ -4344,14 +5699,10 @@ packages: resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} engines: {node: '>=0.10.0'} - detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + detect-indent@7.0.2: + resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} engines: {node: '>=12.20'} - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} - engines: {node: '>=8'} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -4363,18 +5714,19 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dfa@1.2.0: + resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==} diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} @@ -4413,9 +5765,11 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.3.2: - resolution: {integrity: sha512-6obghkliLdmKa56xdbLOpUZ43pAR6xFy1uOrxBaIDjT+yaRuuybLjGS9eVBoSR/UPU5fq3OXClEHLJNGvbxKpQ==} - engines: {node: '>=20'} + dompurify@3.4.13: + resolution: {integrity: sha512-2vmYIoqjze2d+kakP8S/nS5shfsl587kzwEjcGlTdiksUVgFHnFCsLYDVj/JNqJVOQZGSYBTmuycv0PodwmnMQ==} + + dompurify@3.4.8: + resolution: {integrity: sha512-yb1cEmaOum7wFvOCSQxyfgVlv5D47Rc30iZWoMpbDIWTnJ6grDDQyu2KFJzB2k7u0pMuJcQ1zphH//fFnw2tjQ==} domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} @@ -4426,126 +5780,31 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - drizzle-kit@0.28.0: - resolution: {integrity: sha512-KqI+CS2Ga9GYIrXpxpCDUJJrH/AT/k4UY0Pb4oRgQEGkgN1EdCnqp664cXgwPWjDr5RBtTsjZipw8+8C//K63A==} - hasBin: true + dot-prop@10.2.0: + resolution: {integrity: sha512-BTJ9aZYL3vCfZlZOBLy9v8TUqWGQ0pzFnygKwFZt5udj6viBoFIBviKPUoZLDCPn1FoXffv6McQFDenrm5Krfw==} + engines: {node: '>=20'} - drizzle-orm@0.36.1: - resolution: {integrity: sha512-F4hbimnMEhyWzDowQB4xEuVJJWXLHZYD7FYwvo8RImY+N7pStGqsbfmT95jDbec1s4qKmQbiuxEDZY90LRrfIw==} - peerDependencies: - '@aws-sdk/client-rds-data': '>=3' - '@cloudflare/workers-types': '>=3' - '@electric-sql/pglite': '>=0.2.0' - '@libsql/client': '>=0.10.0' - '@libsql/client-wasm': '>=0.10.0' - '@neondatabase/serverless': '>=0.1' - '@op-engineering/op-sqlite': '>=2' - '@opentelemetry/api': ^1.4.1 - '@planetscale/database': '>=1' - '@prisma/client': '*' - '@tidbcloud/serverless': '*' - '@types/better-sqlite3': '*' - '@types/pg': '*' - '@types/react': '>=18' - '@types/sql.js': '*' - '@vercel/postgres': '>=0.8.0' - '@xata.io/client': '*' - better-sqlite3: '>=7' - bun-types: '*' - expo-sqlite: '>=13.2.0' - knex: '*' - kysely: '*' - mysql2: '>=2' - pg: '>=8' - postgres: '>=3' - prisma: '*' - react: '>=18' - sql.js: '>=1' - sqlite3: '>=5' - peerDependenciesMeta: - '@aws-sdk/client-rds-data': - optional: true - '@cloudflare/workers-types': - optional: true - '@electric-sql/pglite': - optional: true - '@libsql/client': - optional: true - '@libsql/client-wasm': - optional: true - '@neondatabase/serverless': - optional: true - '@op-engineering/op-sqlite': - optional: true - '@opentelemetry/api': - optional: true - '@planetscale/database': - optional: true - '@prisma/client': - optional: true - '@tidbcloud/serverless': - optional: true - '@types/better-sqlite3': - optional: true - '@types/pg': - optional: true - '@types/react': - optional: true - '@types/sql.js': - optional: true - '@vercel/postgres': - optional: true - '@xata.io/client': - optional: true - better-sqlite3: - optional: true - bun-types: - optional: true - expo-sqlite: - optional: true - knex: - optional: true - kysely: - optional: true - mysql2: - optional: true - pg: - optional: true - postgres: - optional: true - prisma: - optional: true - react: - optional: true - sql.js: - optional: true - sqlite3: - optional: true + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} + engines: {node: '>=12'} dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - duration-fns@3.0.2: - resolution: {integrity: sha512-w82IXh/6aWNHFA0qlQazJYJrZTWieTItuuGTE7YX4cxPaZTWhmVImbsBBiMK1/OhGDgiinuCpJoSFILYLDSKDg==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - - ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - electron-to-chromium@1.5.313: - resolution: {integrity: sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==} + duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - electron-to-chromium@1.5.79: - resolution: {integrity: sha512-nYOxJNxQ9Om4EC88BE4pPoNI8xwSFf8pU/BAeOl4Hh/b/i6V4biTAzwV7pXi3ARKeoYO5JZKMIXTryXSVer5RA==} + electron-to-chromium@1.5.398: + resolution: {integrity: sha512-AsvhAxopJGh6museTDMIjn6JpDYOfgu4RLlygomt87MUwBUqTfd/1EiPtx10/LZE8xpTvkP2E9Gafq7lkLtodQ==} elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -4555,10 +5814,15 @@ packages: peerDependencies: embla-carousel: 8.6.0 + embla-carousel-fade@8.6.0: + resolution: {integrity: sha512-qaYsx5mwCz72ZrjlsXgs1nKejSrW+UhkbOMwLgfRT7w2LtdEB03nPRI06GHuHv5ac2USvbEiX2/nAHctcDwvpg==} + peerDependencies: + embla-carousel: 8.6.0 + embla-carousel-react@8.6.0: resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} peerDependencies: - react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react: ^19.2.7 embla-carousel-reactive-utils@8.6.0: resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} @@ -4568,32 +5832,38 @@ packages: embla-carousel@8.6.0: resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + emojilib@2.4.0: + resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} endent@2.1.0: resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==} - enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} - engines: {node: '>=10.13.0'} + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + + engine.io@6.6.9: + resolution: {integrity: sha512-clKkw4C7nJ22mGgoVcCg6V/W/TxdNyIOTr89k2ONZu81qqkddPFDF0LXcbAwhzPD8DjkiRCjzuiO6Y+fkpD4vg==} + engines: {node: '>=10.2.0'} - enhanced-resolve@5.20.1: - resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + enhanced-resolve@5.24.4: + resolution: {integrity: sha512-GVoi+ICHocoOIU7qVVM48wOJziRsqrsyqlI0Ce0LdowRn6v3bcH2zUa9kp85ncx0nwIb9/HOCOLS3fdThDG/XQ==} engines: {node: '>=10.13.0'} entities@2.2.0: @@ -4603,20 +5873,39 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + entities@8.0.0: + resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} + engines: {node: '>=20.19.0'} + + env-ci@11.2.0: + resolution: {integrity: sha512-D5kWfzkmaOQDioPmiviWAVtKmpPT4/iJmMVQxWxMPJTFyTkdc5JQUfc5iXEeWxcOdsYTKSAiA/Age4NUOqKsRA==} + engines: {node: ^18.17 || >=20.6.1} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + error-stack-parser-es@1.0.5: + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -4625,54 +5914,21 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - - es-module-lexer@2.0.0: - resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} + es-module-lexer@2.3.1: + resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} - esbuild-register@3.6.0: - resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} - peerDependencies: - esbuild: '>=0.12 <1' - - esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} - engines: {node: '>=18'} - hasBin: true + es-toolkit@1.50.0: + resolution: {integrity: sha512-OyZKhUVvEep9ITEiwHn8GKnMRQIVqoSIX7WnRbkWgJkllCujilqP2rD0u979tkl8wqyc8ICwlc1UBVv/Sl1G6w==} - esbuild@0.27.4: - resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true @@ -4680,6 +5936,10 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -4691,272 +5951,21 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@15.3.1: - resolution: {integrity: sha512-GnmyVd9TE/Ihe3RrvcafFhXErErtr2jS0JDeCSp3vWvy86AXwHsRBt0E3MqP/m8ACS1ivcsi5uaqjbhsG18qKw==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - - eslint-config-prettier@10.1.1: - resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@3.10.1: - resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - - eslint-module-utils@2.12.0: - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-import-x@4.11.0: - resolution: {integrity: sha512-NAaYY49342gj09QGvwnFFl5KcD5aLzjAz97Lo+upnN8MzjEGSIlmL5sxCYGqtIeMjw8fSRDFZIp2xjRLT+yl4Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - - eslint-plugin-import-x@4.6.1: - resolution: {integrity: sha512-wluSUifMIb7UfwWXqx7Yx0lE/SGCcGXECLx/9bCmbY2nneLwvAZ4vkd1IXDjPKFvdcdUgr1BaRnaRpx3k2+Pfw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - - eslint-plugin-import@2.31.0: - resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jest-dom@5.5.0: - resolution: {integrity: sha512-CRlXfchTr7EgC3tDI7MGHY6QjdJU5Vv2RPaeeGtkXUHnKZf04kgzMPIJUXt4qKCvYWVVIEo9ut9Oq1vgXAykEA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6', yarn: '>=1'} - peerDependencies: - '@testing-library/dom': ^8.0.0 || ^9.0.0 || ^10.0.0 - eslint: ^6.8.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - peerDependenciesMeta: - '@testing-library/dom': - optional: true - - eslint-plugin-jest@28.11.0: - resolution: {integrity: sha512-QAfipLcNCWLVocVbZW8GimKn5p5iiMcgGbRzz8z/P5q7xw+cNEpYqyzFMtIF/ZgF2HLOyy+dYBut+DoYolvqig==} - engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0 - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - - eslint-plugin-jsx-a11y@6.10.2: - resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - - eslint-plugin-perfectionist@3.9.1: - resolution: {integrity: sha512-9WRzf6XaAxF4Oi5t/3TqKP5zUjERhasHmLFHin2Yw6ZAp/EP/EVA2dr3BhQrrHWCm5SzTMZf0FcjDnBkO2xFkA==} - engines: {node: ^18.0.0 || >=20.0.0} - peerDependencies: - astro-eslint-parser: ^1.0.2 - eslint: '>=8.0.0' - svelte: '>=3.0.0' - svelte-eslint-parser: ^0.41.1 - vue-eslint-parser: '>=9.0.0' - peerDependenciesMeta: - astro-eslint-parser: - optional: true - svelte: - optional: true - svelte-eslint-parser: - optional: true - vue-eslint-parser: - optional: true - - eslint-plugin-react-debug@1.31.0: - resolution: {integrity: sha512-G0RUjnfGEq9hgdlmU8Tr9gTaO48zBdUN6273/fBYoMOzLYO1kF1mJ0KLzzi7iIsk0nyRn17kJdbdzfdjS4hgYg==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - typescript: - optional: true - - eslint-plugin-react-dom@1.31.0: - resolution: {integrity: sha512-ZVh59dIoJl2Rjqe49zLy+AHPFVo9RWHH49eAHP7+eTNAdmec6/7xHlsj8TWTpoSkBbU/VgxLjNKl5Tn2umd+qQ==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - typescript: - optional: true - - eslint-plugin-react-hooks-extra@1.31.0: - resolution: {integrity: sha512-IEjtfbFpWX3ewkTlaBZfY9rXMGXPqOfVXj2w9CI/wXQVgKQ3OqC7gZsPI2PwsImcA3+fYK6nNz7J+PgW/sjvbA==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - typescript: - optional: true - - eslint-plugin-react-hooks@0.0.0-experimental-d331ba04-20250307: - resolution: {integrity: sha512-nCE8wVid8kurFLS0tfQCJ6JP+60+Ezv0ZbzG/uYe+/AX5A6m2CIan1iZ2sGK86ppcuy8YvnSwWrWLLJ1OtGqsQ==} - engines: {node: '>=18'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react-naming-convention@1.31.0: - resolution: {integrity: sha512-jvpmny6hlv1zEGMGjwX9d/SrlXzYSyF1S5tObwJ1yBBtdnUOjgLvAAg2gf+Zkn4MLZShBssRO+qMVsSe1JHTBQ==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - typescript: - optional: true - - eslint-plugin-react-web-api@1.31.0: - resolution: {integrity: sha512-7+KSrd8P3EiR78uqo2bqrVhgdVEkslKNDGJZNaPv2pSBb1YyaaduJtcWpoF0Kz2/x3y6+ngPTj5dO3KpKcAiYQ==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - typescript: - optional: true - - eslint-plugin-react-x@1.31.0: - resolution: {integrity: sha512-Et3f++0KSaPprNO4sJMambTkSwbx1Vc9G5he5yP781RqLXCpL/Kt+PuW/FgJz8M0dK8Aol8NoXvRYgXB2NL0Ew==} - engines: {bun: '>=1.0.15', node: '>=18.18.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - ts-api-utils: ^2.0.1 - typescript: ^4.9.5 || ^5.3.3 - peerDependenciesMeta: - ts-api-utils: - optional: true - typescript: - optional: true - - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-plugin-regexp@2.7.0: - resolution: {integrity: sha512-U8oZI77SBtH8U3ulZ05iu0qEzIizyEDXd+BWHvyVxTOjGwcDcvy/kEpgFG4DYca2ByRLiVPFZ2GeH7j1pdvZTA==} - engines: {node: ^18 || >=20} - peerDependencies: - eslint: '>=8.44.0' - - eslint-plugin-storybook@0.12.0: - resolution: {integrity: sha512-Lg5I0+npTgiYgZ4KSvGWGDFZi3eOCNJPaWX0c9rTEEXC5wvooOClsP9ZtbI4hhFKyKgYR877KiJxbRTSJq9gWA==} - engines: {node: '>= 18'} - peerDependencies: - eslint: '>=8' + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@5.0.1: - resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - - eslint@9.22.0: - resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - eslint@9.26.0: - resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -4977,6 +5986,9 @@ packages: estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -4984,49 +5996,47 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - eventsource-parser@3.0.6: - resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} - engines: {node: '>=18.0.0'} - - eventsource@3.0.6: - resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==} + eventsource-parser@3.1.0: + resolution: {integrity: sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==} engines: {node: '>=18.0.0'} evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - expand-tilde@2.0.2: - resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} - engines: {node: '>=0.10.0'} + execa@10.0.1: + resolution: {integrity: sha512-ge98qjkRK4IB7tL7Ju/6qmm5LHoH1eEMt5FNZrz3f4UIYhF28lggX20z3FaX1sgc67msLEn0N0BscOs29iuwyw==} + engines: {node: '>=22'} - express-rate-limit@8.3.1: - resolution: {integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==} - engines: {node: '>= 16'} - peerDependencies: - express: '>= 4.11' + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + execa@9.6.1: + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} + engines: {node: ^18.19.0 || >=20.5.0} - express@5.2.1: - resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} - engines: {node: '>= 18'} + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} - extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} + engines: {node: '>=12.0.0'} fast-copy@3.0.2: resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} @@ -5034,39 +6044,17 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - fast-json-parse@1.0.3: resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==} fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - - fastq@1.18.0: - resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} - - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true + fast-uri@3.1.5: + resolution: {integrity: sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==} fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -5077,20 +6065,21 @@ packages: picomatch: optional: true - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} + fflate@0.8.3: + resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} - file-loader@6.2.0: - resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 + figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} - file-type@19.3.0: - resolution: {integrity: sha512-mROwiKLZf/Kwa/2Rol+OOZQn1eyTkPB3ZTwC0ExY6OLFCbgxHYZvBm7xI77NvfZFMKBsmuXfmLJnD4eEftEhrA==} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} + file-type@21.3.4: + resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} + engines: {node: '>=20'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -5099,10 +6088,6 @@ packages: resolution: {integrity: sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==} engines: {node: '>=8'} - finalhandler@2.1.1: - resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} - engines: {node: '>= 18.0.0'} - find-cache-dir@3.3.2: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} @@ -5117,6 +6102,14 @@ packages: find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -5129,6 +6122,10 @@ packages: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + find-versions@6.0.0: + resolution: {integrity: sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==} + engines: {node: '>=18'} + findup-sync@4.0.0: resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} engines: {node: '>= 8'} @@ -5137,76 +6134,54 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.4.2: - resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + flatted@3.4.3: + resolution: {integrity: sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==} focus-trap@7.5.4: resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true + fontkit@2.0.4: + resolution: {integrity: sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==} for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} - - forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - - fork-ts-checker-webpack-plugin@8.0.0: - resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} - engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + fork-ts-checker-webpack-plugin@9.1.0: + resolution: {integrity: sha512-mpafl89VFPJmhnJ1ssH+8wmM2b50n+Rew5x42NeI2U78aRWgtkEtGmctp7iT16UjquJTjorEmIfESj3DxdW84Q==} + engines: {node: '>=14.21.3'} peerDependencies: typescript: '>3.6.0' webpack: ^5.11.0 - form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} + forwarded-parse@2.1.2: + resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} - form-data@2.5.5: - resolution: {integrity: sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==} - engines: {node: '>= 0.12'} + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} - engines: {node: '>= 6'} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} - fs-monkey@1.0.6: - resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + fs-extra@11.3.1: + resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} + engines: {node: '>=14.14'} + + fs-monkey@1.1.0: + resolution: {integrity: sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==} fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + 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} @@ -5215,21 +6190,33 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} + function-timeout@1.0.2: + resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} + engines: {node: '>=18'} - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} + generic-pool@3.9.0: + resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} + engines: {node: '>= 4'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -5238,45 +6225,51 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} - get-tsconfig@4.13.6: - resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} - get-tsconfig@4.13.7: - resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} get-tsconfig@4.8.1: resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} - getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + git-hooks-list@4.2.1: + resolution: {integrity: sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==} + + git-log-parser@1.2.1: + resolution: {integrity: sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==} - git-hooks-list@4.1.1: - resolution: {integrity: sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==} + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + + global-directory@5.0.0: + resolution: {integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==} + engines: {node: '>=20'} + global-modules@1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} @@ -5285,32 +6278,16 @@ packages: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@16.0.0: - resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} - engines: {node: '>=18'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - graphql-http@1.22.4: resolution: {integrity: sha512-OC3ucK988teMf+Ak/O+ZJ0N2ukcgrEurypp8ePyJFWq83VzwRAmHxxr+XxrMpxO/FIwI4a7m/Fzv3tWGJv0wPA==} engines: {node: '>=12'} @@ -5326,22 +6303,18 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql@16.11.0: - resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + graphql@16.14.2: + resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - har-schema@2.0.0: - resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} - engines: {node: '>=4'} - - har-validator@5.1.5: - resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} - engines: {node: '>=6'} - deprecated: this library is no longer supported + handlebars@4.7.9: + resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==} + engines: {node: '>=0.4.7'} + hasBin: true - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} + happy-dom@20.11.1: + resolution: {integrity: sha512-XSt8tMzbW9ymE7687xztkO1ckR7qJNQ3LywY9vlYGhGi3zXrGBHuUo2Cl1ztZaICW+1eAGdkLbj6iwVqDT33kg==} + engines: {node: '>=20.0.0'} has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -5354,10 +6327,6 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -5374,13 +6343,22 @@ packages: resolution: {integrity: sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==} engines: {node: '>= 0.8'} + hash-wasm@4.12.0: + resolution: {integrity: sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==} + hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -5388,6 +6366,9 @@ packages: help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} @@ -5398,27 +6379,51 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} - hono@4.12.8: - resolution: {integrity: sha512-VJCEvtrezO1IAR+kqEYnxUOoStaQPGrCmX3j4wDTNOcD1uRPFpGlwQUIW8niPuvHXaTUxeOUl5MMDGrl+tmO9A==} - engines: {node: '>=16.9.0'} + hook-std@4.0.0: + resolution: {integrity: sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==} + engines: {node: '>=20'} - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + + hosted-git-info@9.0.3: + resolution: {integrity: sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==} + engines: {node: ^20.17.0 || >=22.9.0} + + hsl-to-hex@1.0.0: + resolution: {integrity: sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==} + + hsl-to-rgb-for-reals@1.1.1: + resolution: {integrity: sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==} + + html-encoding-sniffer@6.0.0: + resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} html-entities@2.6.0: resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-minifier-terser@6.1.0: resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} engines: {node: '>=12'} hasBin: true - html-webpack-plugin@5.6.3: - resolution: {integrity: sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==} + html-to-text@9.0.5: + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} + engines: {node: '>=14'} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + html-webpack-plugin@5.6.8: + resolution: {integrity: sha512-MZmKQcTnhEh1SPSyMiEytIeDZDUoBZVorNHivQGXMASHf/BSGGOrKa2xQ5bGx3TCe1n109ecCt+cpww7wwWhKA==} engines: {node: '>=10.13.0'} peerDependencies: - '@rspack/core': 0.x || 1.x + '@rspack/core': 0.x || 1.x || 2.x webpack: ^5.20.0 peerDependenciesMeta: '@rspack/core': @@ -5426,24 +6431,18 @@ packages: webpack: optional: true + html5parser@3.0.0: + resolution: {integrity: sha512-iNpSopa+4YHX50UOk825tBy7MghmXHo/ZpLskBYN0kAr1xhH8GlIMk5bLRXcZlfP3AnLUcSuFMu8C4MdOUxA8A==} + htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - - http-errors@2.0.1: - resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} - engines: {node: '>= 0.8'} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} - http-signature@1.2.0: - resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} - engines: {node: '>=0.8', npm: '>=1.3.7'} + http-proxy-agent@9.1.0: + resolution: {integrity: sha512-2NxoveTT58mjYT4n3RPTEfCZGLMbidoO8XEieXfpSYxu+PQJ1qpx4ypwH6N+uF9twBPIvRRgvkvW5HUTYWENig==} + engines: {node: '>= 20'} http-status@2.1.0: resolution: {integrity: sha512-O5kPr7AW7wYd/BBiOezTwnVAnmSNFY+J7hlZD2X5IOxVBetjcHAiTXhzj0gMrnojQlwy+UT1/Y3H3vJ3UlmvLA==} @@ -5452,17 +6451,29 @@ packages: https-browserify@1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + https-proxy-agent@9.1.0: + resolution: {integrity: sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==} + engines: {node: '>= 20'} - iconv-lite@0.7.2: - resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} - engines: {node: '>=0.10.0'} + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + + hyphen@1.14.1: + resolution: {integrity: sha512-kvL8xYl5QMTh+LwohVN72ciOxC0OEV79IPdJSTwEXok9y9QHebXGdFgrED4sWfiax/ODx++CAMk3hMy4XPJPOw==} icss-utils@5.1.0: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} @@ -5473,13 +6484,9 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - image-size@1.2.1: - resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} - engines: {node: '>=16.x'} + image-dimensions@2.5.1: + resolution: {integrity: sha512-It7CkTNp7IYA8jhvGgz8K18OAbHF3/Juk8RNEyTyMFfolJOIU1Y2wGDnzDQPbGCjyxVF/++pwIZE0BKJUEOb1g==} + engines: {node: '>=18'} hasBin: true image-size@2.0.2: @@ -5487,24 +6494,42 @@ packages: engines: {node: '>=16.x'} hasBin: true - immutable@4.3.8: - resolution: {integrity: sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==} + immer@11.1.15: + resolution: {integrity: sha512-VrNANlmnWQnh5COXIIOQXM9oOJw7naGKlBT74ZOOR6lpVXc3gFEu9FJLDFcpCJ2j+NWr8TIwtWD//T6ZX6TKiQ==} - immutable@5.1.5: - resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} + immutable@4.3.9: + resolution: {integrity: sha512-ObHy4YN7ycwZOUCLI1/6svfyAFu7vL8RhAvVu/bh/RZW9EPlOyDaQ9jDQWCtdqzaXUjgXZCW1migtHE7YI7UGQ==} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + import-from-esm@2.0.0: + resolution: {integrity: sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g==} + engines: {node: '>=18.20'} + + import-in-the-middle@1.15.0: + resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} + + import-in-the-middle@3.3.2: + resolution: {integrity: sha512-jTd2FfOgOWOdgjkHuk/1Ms8VKFXkPs15ymYBETw1sAOrO/dY3XeGVRWir9qBbw7pXr0T2eTFwfCZ+N02HmiNGA==} + engines: {node: '>=18'} + + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} + engines: {node: '>=18'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -5515,17 +6540,26 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} - ip-address@10.1.0: - resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} - engines: {node: '>= 12'} + int64-buffer@1.1.0: + resolution: {integrity: sha512-94smTCQOvigN4d/2R/YDjz8YVG0Sufvv2aAh8P5m42gwhCsDAJqnbNOrxJsrADuAFAA69Q/ptGzxvNcNuIJcvw==} - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} + int64-buffer@1.1.1: + resolution: {integrity: sha512-xp/v0/im2q7n7ISFJXcYsr/aVsUdZKPUZS1uYtoM9I9Cfmm5YuAi7SQts2TrEXwAKIE0wyn3KxJbo35goJgvwQ==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + ioredis@5.11.1: + resolution: {integrity: sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==} + engines: {node: '>=12.22.0'} + + ip@2.0.1: + resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} ipaddr.js@2.2.0: resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} @@ -5541,74 +6575,36 @@ packages: resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} engines: {node: '>= 0.4'} - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - - is-async-function@2.1.0: - resolution: {integrity: sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.2.1: - resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} - engines: {node: '>= 0.4'} - is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - - is-bun-module@2.0.0: - resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} - is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} + 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-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -5624,81 +6620,70 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true is-nan@1.3.2: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} engines: {node: '>= 0.4'} - is-node-process@1.2.0: - resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + + is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} - is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.0: - resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} - engines: {node: '>= 0.4'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -5709,73 +6694,81 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + isomorphic-dompurify@3.22.0: + resolution: {integrity: sha512-cz/BkSODnQir4IV2quqbuEHhAGz4MAYGvhoemsxuwMpY/oZbRHlNjPLPyIQ0fdULiwDPUE+OHPwWb6XTEiNk1A==} + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} + isomorphic.js@0.2.5: resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} - isstream@0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + issue-parser@7.0.2: + resolution: {integrity: sha512-7atWPjhGEIX3JEtMrOYd8TKzboYlq+5sNbdl9POiLYOI14G5HZiQbZP0Xj5EZdrufQVXfJlpTV0hys0CuxwxZw==} + engines: {node: ^18.17 || >=20.6.1} - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + + java-properties@1.0.2: + resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} + engines: {node: '>= 0.6.0'} + + jay-peg@1.1.1: + resolution: {integrity: sha512-D62KEuBxz/ip2gQKOEhk/mx14o7eiFRaU+VNNSP4MOiIkwb/D6B3G1Mfas7C/Fit8EsSV2/IWjZElx/Gs6A4ww==} jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true - jose@5.9.6: - resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} - - jose@6.2.1: - resolution: {integrity: sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==} + jose@5.10.0: + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + js-md5@0.8.3: + resolution: {integrity: sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==} + + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + js-yaml@4.3.1: + resolution: {integrity: sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==} hasBin: true - jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - - jsdoc-type-pratt-parser@4.1.0: - resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} - engines: {node: '>=12.0.0'} - - jsdoc-type-pratt-parser@4.8.0: - resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} - engines: {node: '>=12.0.0'} - - jsdom@26.1.0: - resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} - engines: {node: '>=18'} + jsdom@30.0.1: + resolution: {integrity: sha512-52v7mUVUfNQVYYqE1lcdaymWL0njO7lTLUog6ZvW2U5KsbiLk/GnZlVJ+qx0xfNJZ6Gn+KSpPNE52vurbxZwrA==} + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} peerDependencies: - canvas: ^3.0.0 + canvas: ^3.2.3 peerDependenciesMeta: canvas: optional: true - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -5784,6 +6777,9 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -5798,91 +6794,225 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-schema-typed@8.0.2: - resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + json-schema-typed@8.0.2: + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-with-bigint@3.5.11: + resolution: {integrity: sha512-WvkM9Hfb9kqzCcbsvpwfWDvdfGZDhYuCoaCwHRe5q3LtULKkbrI/L6JYcN8owflgA3di5dP2yVAV2NVCXkgtkA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + + jsox@1.2.121: + resolution: {integrity: sha512-9Ag50tKhpTwS6r5wh3MJSAvpSof0UBr39Pto8OnzFT32Z/pAbxAsKHzyvsyMEHVslELvHyO/4/jaQELHk8wDcw==} + hasBin: true + + kareem@2.6.3: + resolution: {integrity: sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==} + engines: {node: '>=12.0.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + leac@0.6.0: + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + + lexical@0.41.0: + resolution: {integrity: sha512-pNIm5+n+hVnJHB9gYPDYsIO5Y59dNaDU9rJmPPsfqQhP2ojKFnUoPbcRnrI9FJLXB14sSumcY8LUw7Sq70TZqA==} + + lib0@0.2.117: + resolution: {integrity: sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==} + engines: {node: '>=16'} + hasBin: true + + libphonenumber-js@1.13.10: + resolution: {integrity: sha512-xJxrdqvbl2rtn2MaUJrUejz8J7/uZNC0V77oks2LxYrO/+ZtVpRmz+fEQMuu6VusnEB1fmpByiLS1WXecOnAnw==} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] - jsox@1.2.121: - resolution: {integrity: sha512-9Ag50tKhpTwS6r5wh3MJSAvpSof0UBr39Pto8OnzFT32Z/pAbxAsKHzyvsyMEHVslELvHyO/4/jaQELHk8wDcw==} - hasBin: true + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] - jsprim@1.4.2: - resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} - engines: {node: '>=0.6.0'} + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] - jwa@1.4.2: - resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] - jws@3.2.3: - resolution: {integrity: sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==} + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] - language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] - lexical@0.27.1: - resolution: {integrity: sha512-EXlRE/NQO9quKFuz4Z2pu5f48oF8LZOAw0YpN0RmGQx2CbqmEi7SIgO+d+NUKVx9Qs1vX0DL5S7GJpvpZBOE3w==} + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] - lexical@0.28.0: - resolution: {integrity: sha512-dLE3O1PZg0TlZxRQo9YDpjCjDUj8zluGyBO9MHdjo21qZmMUNrxQPeCRt8fn2s5l4HKYFQ1YNgl7k1pOJB/vZQ==} + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} - lib0@0.2.117: - resolution: {integrity: sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==} - engines: {node: '>=16'} - hasBin: true + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} + linebreak@1.1.0: + resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - loader-runner@4.3.1: - resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} - engines: {node: '>=6.11.5'} + lint-staged@17.3.0: + resolution: {integrity: sha512-woZS3vNe3UKqBaLPvbLOtKRY4tLANpWQhom12MGWqC8Mh1lCOO+WgSwmX2amjJAqTY9BkXYW87fCUH5H9Ph6xw==} + engines: {node: '>=22.22.1'} + hasBin: true + + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} @@ -5892,6 +7022,10 @@ packages: resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -5904,26 +7038,17 @@ packages: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lodash-es@4.17.23: - resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} - lodash.castarray@4.4.0: - resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + lodash.capitalize@4.2.1: + resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - - lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - - lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - - lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + lodash.escaperegexp@4.1.2: + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} @@ -5931,20 +7056,15 @@ packages: lodash.isstring@4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.uniqby@4.7.0: + resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} - lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -5953,8 +7073,8 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -5962,27 +7082,54 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.5.2: + resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lucide-react@0.479.0: - resolution: {integrity: sha512-aBhNnveRhorBOK7uA4gDjgaf+YlHMdMhQ/3cupk6exM10hWlEU+2QtWYOfhXhjAsmdb6LeKR+NZnow4UxRRiTQ==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} + + make-asynchronous@1.1.0: + resolution: {integrity: sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==} + engines: {node: '>=18'} make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} - map-or-similar@1.5.0: - resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + marked-terminal@7.3.0: + resolution: {integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==} + engines: {node: '>=16.0.0'} + peerDependencies: + marked: '>=1 <16' + + marked@14.0.0: + resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==} + engines: {node: '>= 18'} + hasBin: true + + marked@15.0.12: + resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} + engines: {node: '>= 18'} + hasBin: true math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} @@ -5997,12 +7144,18 @@ packages: mdast-util-from-markdown@2.0.2: resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + mdast-util-mdx-jsx@3.1.3: resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + mdast-util-to-markdown@2.1.2: resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} @@ -6012,12 +7165,14 @@ packages: mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} + media-engine@1.0.3: + resolution: {integrity: sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg==} + + mediabunny@1.52.2: + resolution: {integrity: sha512-HIgqL2BAWsWJtaqZRrqcrv7cEajQtCT9noR0dO8cGLKZKML9mmL4BjZOtm6j5I9qAp0v/hr/NmRZhuR6HZyQ7Q==} memfs@3.5.3: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} @@ -6026,23 +7181,23 @@ packages: memoize-one@6.0.0: resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} - memoizerific@1.11.3: - resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + memory-pager@1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} 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'} - merge@2.1.1: resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} + meriyah@6.1.4: + resolution: {integrity: sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==} + engines: {node: '>=18.0.0'} + micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -6139,23 +7294,48 @@ packages: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} + mime@4.1.0: + resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==} + engines: {node: '>=16'} + hasBin: true + + 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'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + miniflare@5.20260730.0-alpha: + resolution: {integrity: sha512-8/dspSXDshP6nSkCpjKO7BYc2qZoYSXm7iM+QxY7qJyJpAB3onnQSaiu0cvKJlfuMGwULl55hG69FJCcCMXU1Q==} + engines: {node: '>=22.0.0'} + minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} engines: {node: 18 || 20 || >=22} minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minimatch@8.0.7: + resolution: {integrity: sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg==} + engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.9: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} @@ -6163,57 +7343,199 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minimizer-webpack-plugin@5.6.1: + resolution: {integrity: sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@minify-html/node': '*' + '@swc/core': '*' + '@swc/css': '*' + '@swc/html': '*' + clean-css: '*' + cssnano: '*' + csso: '*' + esbuild: '*' + html-minifier-terser: '*' + lightningcss: '*' + postcss: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@minify-html/node': + optional: true + '@swc/core': + optional: true + '@swc/css': + optional: true + '@swc/html': + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true + esbuild: + optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true + uglify-js: + optional: true + + minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - monaco-editor@0.52.2: - resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==} + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + + monaco-editor@0.56.0: + resolution: {integrity: sha512-sXboRm3BeBeLm938eaiyLMe0OxzfXIlZvbv4ir/jVgQy1zDhWjgmny0WoN45fuDKhCCQsYMbBJrv/A6jd8aCUg==} + + mongodb-connection-string-url@3.0.2: + resolution: {integrity: sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==} + + mongodb@6.20.0: + resolution: {integrity: sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ==} + engines: {node: '>=16.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.1.0 || ^2.0.0 + gcp-metadata: ^5.2.0 + kerberos: ^2.0.1 + mongodb-client-encryption: '>=6.0.0 <7' + snappy: ^7.3.2 + socks: ^2.7.1 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + + mongoose-lean-virtuals@1.1.1: + resolution: {integrity: sha512-8chOqpVE3bcoWT2pIgcJeIZlXaOfQCavZgQZF4qytUtjRBqsNMyzUoR16qdw9XL2kC478N8iA8z0AA+NSS0d1A==} + engines: {node: '>=16.20.1'} + peerDependencies: + mongoose: '>=5.11.10' + + mongoose-paginate-v2@1.9.4: + resolution: {integrity: sha512-0LOsVEQmjrbJKVDi/IvFEhIezmuRjUE4loGgslv57j9nK/NMC+mbKT0QnaPSPpib4lByKVBcy3VbDa1TvlHZjA==} + engines: {node: '>=4.0.0'} + + mongoose@8.22.1: + resolution: {integrity: sha512-c0bzt7ElI1CwWiyFSgg9bfhlFcblAoPwr+gmDcLCryClyKaeixWhP9KDGnr13kRPE8KPAuUN3ZZ3jSDxSPvoTg==} + engines: {node: '>=16.20.1'} + + mp4box@0.5.4: + resolution: {integrity: sha512-GcCH0fySxBurJtvr0dfhz0IxHZjc1RP+F+I8xw+LIwkU1a+7HJx8NCDiww1I5u4Hz6g4eR1JlGADEGJ9r4lSfA==} + + mpath@0.8.4: + resolution: {integrity: sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==} + engines: {node: '>=4.0.0'} + + mpath@0.9.0: + resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} + engines: {node: '>=4.0.0'} + + mquery@5.0.0: + resolution: {integrity: sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==} + engines: {node: '>=14.0.0'} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-postinstall@0.2.3: - resolution: {integrity: sha512-Mi7JISo/4Ij2tDZ2xBE2WH+/KvVlkhA6juEjpEeRAVPNCpN3nxJo/5FhDNKgBcdmcmhaH6JjgST4xY/23ZYK0w==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + nanoid@6.0.0: + resolution: {integrity: sha512-mkUH+rPkwU2qPadJ0oJZOjeZ5Mxn8Q1UhevwkTRWNuUZzyia3h4rhzK39hxaHTk0o2OxB8W2SQ6A8k23ZDi1pQ==} + engines: {node: ^22 || ^24 || >=26} hasBin: true - napi-postinstall@0.3.4: - resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - hasBin: true - - natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - next@15.5.10: - resolution: {integrity: sha512-r0X65PNwyDDyOrWNKpQoZvOatw7BcsTPRKdwEqtc9cj3wv7mbBIk9tKed4klRaFXJdX0rugpuMTHslDrAU1bBg==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + neotraverse@1.0.1: + resolution: {integrity: sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==} + engines: {node: '>= 10'} + + nerf-dart@1.0.0: + resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==} + + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 + + next@16.2.12: + resolution: {integrity: sha512-iD59eYQWmbFcEbX7v/acG5DRym9iw1DdaPoD0WTA920naWsE25wShzJW4+UvAs8MK9EC2kBfIH6vtto1H1PHGw==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^19.2.7 + react-dom: ^19.2.7 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + next@16.3.0: + resolution: {integrity: sha512-NEdGOzH+08eTXMUp9UYkA99Nhi5N6Thrhc1jgFOQgfgnGK/dA2hRwBpXep+exdFQrnwlRf/3Wixyp8lLBUpE2A==} + engines: {node: '>=20.9.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.51.1 babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react: ^19.2.7 + react-dom: ^19.2.7 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': @@ -6228,62 +7550,157 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-abi@3.94.0: + resolution: {integrity: sha512-W5ZNO5KRPB5TkYmGVD9F6YqhsglXJzE6etpbmT+f6EQElhiX/UTG551cnsRGvLG3fyZEg9HwaDmNmj5nwJ4z9g==} + engines: {node: '>=10'} + node-abort-controller@3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-av@6.1.1: + resolution: {integrity: sha512-nuj2cpAelVZQ8hWJB26i9wYIPI/l+GzIAw8zbZuepFpq52khjYQ8s5S+Qi2cG1D+zjb7TYx7QqKpiZH32tqo2A==} + + node-emoji@2.2.0: + resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} + engines: {node: '>=18'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + node-polyfill-webpack-plugin@2.0.1: resolution: {integrity: sha512-ZUMiCnZkP1LF0Th2caY6J/eKKoA0TefpoVa68m/LQU1I/mE8rGt4fNYGgNuCcK+aG8P8P43nbeJ2RqJMOL/Y1A==} engines: {node: '>=12'} peerDependencies: webpack: '>=5' - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - - node-releases@2.0.36: - resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} - - nodemailer-sendgrid@1.0.3: - resolution: {integrity: sha512-To/veO2M4evjtv1XrY7BUgE+LDypgs/FBx4wOHb2UNTpvZhiARtvMaBI0685Yxkho0lIPJc4jS0cUE7v+XGNgg==} + node-releases@2.0.51: + resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} + engines: {node: '>=18'} - nodemailer@6.9.16: - resolution: {integrity: sha512-psAuZdTIRN08HKVd/E8ObdV6NO7NTBY3KsC30F7M4H1OnmLCUNaS56FpYxyb26zWLSyYF9Ozch9KYHhHegsiOQ==} - engines: {node: '>=6.0.0'} + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} - nodemailer@8.0.4: - resolution: {integrity: sha512-k+jf6N8PfQJ0Fe8ZhJlgqU5qJU44Lpvp2yvidH3vp1lPnVQMgi4yEEMPXg5eJS1gFIJTVq1NHBk7Ia9ARdSBdQ==} - engines: {node: '>=6.0.0'} + normalize-package-data@8.0.0: + resolution: {integrity: sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==} + engines: {node: ^20.17.0 || >=22.9.0} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} + normalize-svg-path@1.1.0: + resolution: {integrity: sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==} + + normalize-url@9.0.1: + resolution: {integrity: sha512-ARftfC5HdUNu9jJeL8pHj8debUIHA2b91FizCoMzY4lG6dDX13jdvTK0TBe24IBDRf2HvJSzzwEPvmbkQWHRSg==} + engines: {node: '>=20'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + npm@11.19.0: + resolution: {integrity: sha512-SDd/hHg3KqHE5Ht2NHWxNYNtqCQ2pXAPLl6OtQhPyED5PHsRfrOtO199MZTIG2cQoQ1ZRI9t28shrD+2cr3AAw==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + bundledDependencies: + - '@isaacs/string-locale-compare' + - '@npmcli/arborist' + - '@npmcli/config' + - '@npmcli/fs' + - '@npmcli/map-workspaces' + - '@npmcli/metavuln-calculator' + - '@npmcli/package-json' + - '@npmcli/promise-spawn' + - '@npmcli/redact' + - '@npmcli/run-script' + - '@sigstore/tuf' + - abbrev + - archy + - cacache + - chalk + - ci-info + - fastest-levenshtein + - fs-minipass + - glob + - graceful-fs + - hosted-git-info + - ini + - init-package-json + - is-cidr + - json-parse-even-better-errors + - libnpmaccess + - libnpmdiff + - libnpmexec + - libnpmfund + - libnpmorg + - libnpmpack + - libnpmpublish + - libnpmsearch + - libnpmteam + - libnpmversion + - make-fetch-happen + - minimatch + - minipass + - minipass-pipeline + - ms + - node-gyp + - nopt + - npm-audit-report + - npm-install-checks + - npm-package-arg + - npm-pick-manifest + - npm-profile + - npm-registry-fetch + - npm-user-validate + - p-map + - pacote + - parse-conflict-json + - proc-log + - qrcode-terminal + - read + - semver + - spdx-expression-parse + - ssri + - supports-color + - tar + - text-table + - tiny-relative-date + - treeverse + - validate-npm-package-name + - which nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nwsapi@2.2.18: - resolution: {integrity: sha512-p1TRH/edngVEHVbwqWnxUViEmq5znDvyB+Sik5cmuLpGOIfDf/39zLiq3swPF8Vakqn+gvNiOQAZu8djYlQILA==} - - oauth-sign@0.9.0: - resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + nypm@0.6.6: + resolution: {integrity: sha512-vRyr0r4cbBapw07Xw8xrj9Teq3o7MUD35rSaTcanDbW+aK2XHDgJFiU6ZTj2GBw7Q12ysdsyFss+Vdz4hQ0Y6Q==} + engines: {node: '>=18'} + hasBin: true object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} object-is@1.1.6: @@ -6297,57 +7714,70 @@ packages: object-to-formdata@4.5.1: resolution: {integrity: sha512-QiM9D0NiU5jV6J6tjE1g7b4Z2tcUnKs1OPUi4iMb2zH+7jwlcUrASghgkFk9GtzqNNq8rTQJtT8AzjBAvLoNMw==} - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} objectorarray@1.0.5: resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + obug@2.1.4: + resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} + engines: {node: '>=12.20.0'} + + ogl@1.0.11: + resolution: {integrity: sha512-kUpC154AFfxi16pmZUK4jk3J+8zxwTWGPo03EoYA8QPbzikHoaC82n6pNTbd+oEaJonaE8aPWBlX7ad9zrqLsA==} on-exit-leak-free@2.1.2: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} + oxc-parser@0.127.0: + resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-resolver@11.24.2: + resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-each-series@3.0.0: + resolution: {integrity: sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==} + engines: {node: '>=12'} + + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} + + p-filter@4.1.0: + resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} + engines: {node: '>=18'} + + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} @@ -6361,6 +7791,10 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -6373,15 +7807,28 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-map@7.0.6: + resolution: {integrity: sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==} + engines: {node: '>=18'} + + p-reduce@3.0.0: + resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==} + engines: {node: '>=12'} + + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - packet-reader@1.0.0: - resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} + pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -6393,27 +7840,50 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse-asn1@5.1.7: - resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} + parse-asn1@5.1.9: + resolution: {integrity: sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==} engines: {node: '>= 0.10'} parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} - parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + parse-svg-path@0.1.2: + resolution: {integrity: sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==} - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + parse5@8.0.1: + resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} + + parseley@0.12.1: + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} @@ -6421,6 +7891,10 @@ packages: path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -6437,6 +7911,10 @@ 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-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -6444,80 +7922,58 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + 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==} - path-to-regexp@8.3.0: - resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + 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'} - payload@3.75.0: - resolution: {integrity: sha512-JYJ545zu6URTMlhst1SBXW8WOAMeSfaIXffKluPUgzNfwWB/NcyzXjea+H7AGnL4nZiWJQhfbaRxvGherByXew==} + payload@3.87.0: + resolution: {integrity: sha512-LL77hRkO6HitKQPKs9Y7UpMIU/Lxr4GlV6J5mQRNTPn872vVRKgHIgCXgE8L8OUGONXvRVCeiCRMlS4KktlkQA==} engines: {node: ^18.20.2 || >=20.9.0} hasBin: true peerDependencies: graphql: ^16.8.1 - pbkdf2@3.1.5: - resolution: {integrity: sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==} + pbkdf2@3.1.6: + resolution: {integrity: sha512-BT6eelPB1EyGHo8pC0o9Bl6k6SYVhKO1jEbd3lcTrtr7XHdjP8BW1YpfCV3G9Kwkxgattk+S5q2/RvuttCsS1g==} engines: {node: '>= 0.10'} - peek-readable@5.4.2: - resolution: {integrity: sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==} - engines: {node: '>=14.16'} - - performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + pdf-parse@2.4.5: + resolution: {integrity: sha512-mHU89HGh7v+4u2ubfnevJ03lmPgQ5WU4CxAVmTSh/sxVTEDYd1er/dKS/A6vg77NX47KTEoihq8jZBLr8Cxuwg==} + engines: {node: '>=20.16.0 <21 || >=22.3.0'} + hasBin: true - pg-cloudflare@1.2.5: - resolution: {integrity: sha512-OOX22Vt0vOSRrdoUPKJ8Wi2OpE/o/h9T8X1s4qSkCedbNah9ei2W2765be8iMVxQUsvgT7zIAT2eIa9fs5+vtg==} + pdfjs-dist@5.4.296: + resolution: {integrity: sha512-DlOzet0HO7OEnmUmB6wWGJrrdvbyJKftI1bhMitK7O2N8W2gc757yyYBbINy9IDafXAV9wmKr9t7xsTaNKRG5Q==} + engines: {node: '>=20.16.0 || >=22.3.0'} - pg-connection-string@2.8.5: - resolution: {integrity: sha512-Ni8FuZ8yAF+sWZzojvtLE2b03cqjO5jNULcHFfM9ZZ0/JXrgom5pBREbtnAw7oxsxJqHw9Nz/XWORUEL3/IFow==} + peberminta@0.9.0: + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} - pg-numeric@1.0.2: - resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} - engines: {node: '>=4'} - - pg-pool@3.9.6: - resolution: {integrity: sha512-rFen0G7adh1YmgvrmE5IPIqbb+IgEzENUm+tzm6MLLDSlPRoZVhzU1WdML9PV2W5GOdRA9qBKURlbt1OsXOsPw==} - peerDependencies: - pg: '>=8.0' - - pg-protocol@1.9.5: - resolution: {integrity: sha512-DYTWtWpfd5FOro3UnAfwvhD8jh59r2ig8bPtc9H8Ds7MscE/9NYruUQWFAOuraRl29jwcT2kyMFQ3MxeaVjUhg==} + pg-protocol@1.15.0: + resolution: {integrity: sha512-cq9sECI5s0+uPUXjbz8ioyPJni6RzsRib0US67i5IoTZKw8fNeYlVE7u8F4dG7vEJJtc5wdD1K189lCCUwqWTQ==} pg-types@2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} - pg-types@4.0.2: - resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} - engines: {node: '>=10'} - - pg@8.11.3: - resolution: {integrity: sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==} - engines: {node: '>= 8.0.0'} - peerDependencies: - pg-native: '>=3.0.1' - peerDependenciesMeta: - pg-native: - optional: true - - pgpass@1.0.5: - resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -6525,13 +7981,17 @@ packages: resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} + picospinner@3.1.2: + resolution: {integrity: sha512-0Z++uU8mvB0EvCPAEUq9BGiPcSravzJ+RPdXfjYlzXffqsogisiKRQqI6ctrSSJ6n985vxrgKtQ5n4sRINcJZg==} + engines: {node: '>=18.0.0'} + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} pino-abstract-transport@2.0.0: resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} @@ -6547,13 +8007,9 @@ packages: resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==} hasBin: true - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - pkce-challenge@5.0.0: - resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} - engines: {node: '>=16.20.0'} + pkg-conf@2.1.0: + resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} + engines: {node: '>=4'} pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} @@ -6563,97 +8019,74 @@ packages: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} + playwright-core@1.62.1: + resolution: {integrity: sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==} + engines: {node: '>=20'} + hasBin: true + + playwright@1.62.1: + resolution: {integrity: sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==} + engines: {node: '>=20'} + hasBin: true + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - pnp-webpack-plugin@1.7.0: - resolution: {integrity: sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==} - engines: {node: '>=6'} - - polished@4.3.1: - resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} - engines: {node: '>=10'} - - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} + png-js@2.0.0: + resolution: {integrity: sha512-GdzJuUMc6ZSpxFJWVxtOH1bzYHym+TOnveqUjb+VJIbZWbZzyiRGFiKhbiielfpYbgMlhHVhsJ0FTazfuRFkMA==} possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss-calc@10.1.0: - resolution: {integrity: sha512-uQ/LDGsf3mgsSUEXmAt3VsCSHR3aKqtEIkmB+4PhzYwRYOW5MZs/GhCCFpsOtJJkP6EC6uGipbrnaTjqaJZcJw==} + postcss-calc@10.1.1: + resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==} engines: {node: ^18.12 || ^20.9 || >=22.0} peerDependencies: postcss: ^8.4.38 - postcss-colormin@7.0.2: - resolution: {integrity: sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-convert-values@7.0.4: - resolution: {integrity: sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-comments@7.0.3: - resolution: {integrity: sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-duplicates@7.0.1: - resolution: {integrity: sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-colormin@8.0.1: + resolution: {integrity: sha512-qBY4ABQ6d8/mk5RRZHwMllrZMxeMey3azVY2dZUEk+RgiUC4ARdPR3/AITzNqqKTbvW/3y/MJKinDrzwqn8RDQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-discard-empty@7.0.0: - resolution: {integrity: sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-convert-values@8.0.1: + resolution: {integrity: sha512-IdOSIX3BzfMvCc1TAHIha2gfy17xnb5vfML8e2BIKARnFOghksESfaSAB/3CXgyLfMozZAbTRPVQF5dbuKOidw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-discard-overridden@7.0.0: - resolution: {integrity: sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-discard-comments@8.0.1: + resolution: {integrity: sha512-FDvzm3tXlEsQBO2XQgnta5ugsAqwBrgWH+j5QgXpegEIDYA0VPnZg2aP7LtmWtC49POskeIhXesFiU/k3NyFHA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} + postcss-discard-duplicates@8.0.1: + resolution: {integrity: sha512-stTDXkI8YkCUfADurQhp03oq5ynsgSx6Qrw5B1swds6oTHtAeOZ9I0SHGK8cY/VpWUsIYFDWMs3IWf9jIEfFvA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.0.0 + postcss: ^8.5.15 - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} + postcss-discard-empty@8.0.1: + resolution: {integrity: sha512-Zv4fM1Yfhk71tbt6gfiptbL6jDHi+7apSnaMeaO9n1uET+1embrXQw5m93Zp5x28UyQSuv+AVkFY193jdwZ33w==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.21 + postcss: ^8.5.15 - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} + postcss-discard-overridden@8.0.1: + resolution: {integrity: sha512-ykt4fvrC7yYGzbxKyqBVjDCbsjF/11JgWK8enrdkobRyqqEtb/uDUCbKOGdvrK8X7BrShW8Lv5cCRNbdkNHGkQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + postcss: ^8.5.15 - postcss-loader@8.1.1: - resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} + postcss-loader@8.2.1: + resolution: {integrity: sha512-k98jtRzthjj3f76MYTs9JTpRqV1RaaMhEU0Lpw9OTmQZQdppg4B30VZ74BojuBHt3F4KyubHJoXCMUeM8Bqeow==} engines: {node: '>= 18.12.0'} peerDependencies: - '@rspack/core': 0.x || 1.x + '@rspack/core': 0.x || ^1.0.0 || ^2.0.0-0 postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 peerDependenciesMeta: @@ -6662,41 +8095,41 @@ packages: webpack: optional: true - postcss-merge-longhand@7.0.4: - resolution: {integrity: sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-merge-longhand@8.0.1: + resolution: {integrity: sha512-huTfSYgQ13O81SFvAuOi7GWnO48vvybjj3xF+X3qUoPjzvvaLpJH5DcUqqXcwOEulZUcvaV4s0V9WtWs+IAQPA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-merge-rules@7.0.4: - resolution: {integrity: sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-merge-rules@8.0.1: + resolution: {integrity: sha512-o3rk4UpnPNg469tklYwbR/NtvKc/f/wJiVDTnNQ/EFPw/LeiPOHUCvV1GIBQIZHGrBAYdPjToK6a+ojYprsrxQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-minify-font-values@7.0.0: - resolution: {integrity: sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-minify-font-values@8.0.1: + resolution: {integrity: sha512-L8Nzs/PRlBSPrLdY/7rAiU5ZN5800+2J/4LRbfyG8SJnPljmgMaXVmQiCklvRS+yObfVRNtvmk/Ean/eoYcSeg==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-minify-gradients@7.0.0: - resolution: {integrity: sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-minify-gradients@8.0.1: + resolution: {integrity: sha512-qf+4s/hZMqTwpWN2teqf6+1yvR/SZK5HgHqXYuACeJXV7ABe7AXtBEomgxagUzcN4bSnmqBh5vnIml0dYqykYg==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-minify-params@7.0.2: - resolution: {integrity: sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-minify-params@8.0.1: + resolution: {integrity: sha512-L0h3H59deFfFg0wQN1NVaS/8E/LfGvaMuZKGO7siwlG995zo3OshtQyRkqKdVqcBwAORBvZ1nDZrKPLRapYkQw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-minify-selectors@7.0.4: - resolution: {integrity: sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-minify-selectors@8.0.2: + resolution: {integrity: sha512-3icdxc/zght5UAizdwqZBDE2KOWHf1jMQCxET6iLACeNlRxfTPyXS0/COpGk8CQ2cECyaEKTRUd/i/k8Gxmz4g==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 postcss-modules-extract-imports@3.1.0: resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} @@ -6722,107 +8155,97 @@ packages: peerDependencies: postcss: ^8.1.0 - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-normalize-charset@7.0.0: - resolution: {integrity: sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-charset@8.0.1: + resolution: {integrity: sha512-xzqr36F8UeIZOvOHsf3aul+RVJCADvSwuwpMLgizqKjisHZpBfztgW0XFLBfJvz9pJgaStaOXAtGb0zLqT6B0w==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-normalize-display-values@7.0.0: - resolution: {integrity: sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-display-values@8.0.1: + resolution: {integrity: sha512-ZDWOijOK1FFMlpgiQCUO9fCNKd7HJ9L7z9HWEq4iyubnUFWzdTSwm/LcrMbNW6iZ1oAtqeLYA0WA3xHszOI08g==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-normalize-positions@7.0.0: - resolution: {integrity: sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-positions@8.0.1: + resolution: {integrity: sha512-uuivan2poSqbE48ST4do20dGaFUeXey9/H8rhHzoyVHB2I6BmkoVLZ/C9+BRjUlpaAFYVOoDY7epkiidzaYbvA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-normalize-repeat-style@7.0.0: - resolution: {integrity: sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-repeat-style@8.0.1: + resolution: {integrity: sha512-q2hq5fmKxk29K6DjKA3nZ17Q2dtjhLYFNmFweKALmooUqx6UWAHF1bBoWTu/EqlJ88josb82A/J0Atj9LJUmpQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-normalize-string@7.0.0: - resolution: {integrity: sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-string@8.0.1: + resolution: {integrity: sha512-+Wf+kQJhm1WgSGEAuUaswE9rdpR9QbrKRVemcVHs6rhOoOTVIdAbgaicftfYA6vLM346P8onRzkEVbFN29ktKQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-normalize-timing-functions@7.0.0: - resolution: {integrity: sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-timing-functions@8.0.1: + resolution: {integrity: sha512-W8/tvwRlm3T+yjGkg0IRTF4bvHj0vILYr/LOogCrJKHz2ey2HFRwfsAA8Bk9N4BGR7z7WmmDu/KzzwhJ6FoGPQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-normalize-unicode@7.0.2: - resolution: {integrity: sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-unicode@8.0.1: + resolution: {integrity: sha512-Ad0YHNRBp4WHEOYUM/4wL/8MoL2fimEF8se/0q+Rt/owMzYpbxsypC1P8fN/oluwoRmRKdNVX7X2oycEobPWcQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-normalize-url@7.0.0: - resolution: {integrity: sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-url@8.0.1: + resolution: {integrity: sha512-tkYcip6pCDY806xuxpJYqMW2M3/623jzGFJmz3m5Us47q8P28+gbRZxaea3Rr/CmwwLUiVlh+BTGYwQ6gvaP8A==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-normalize-whitespace@7.0.0: - resolution: {integrity: sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-whitespace@8.0.1: + resolution: {integrity: sha512-XzORadNfSrKWDZZpgAEHPKINKx8r9r9RIfE9c70g/HThdpbmPHhDYCodHSVESDxmKeySAYw1p4liuBCf7j6LyA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-ordered-values@7.0.1: - resolution: {integrity: sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-ordered-values@8.0.1: + resolution: {integrity: sha512-OLXq5lR1yk3KWQ1FPK6aWjFFdktHE9f9kb8cnt4LmIw7w30DnzgD9+sOVYJc5HenkWCX8i1MJhhFwmqc/GYqLg==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-reduce-initial@7.0.2: - resolution: {integrity: sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-reduce-initial@8.0.1: + resolution: {integrity: sha512-+aQsR6+61KRoIfcFNLP3v9RM7+0iYOTtPnjl1wr6JqMW1zx6S+t2ktHRefXwacFdHIDj5+ETG0KY7K3+SGQ4Nw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-reduce-transforms@7.0.0: - resolution: {integrity: sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-reduce-transforms@8.0.1: + resolution: {integrity: sha512-x71slHVykiFi5RuKEXM0wgYpY2PngC78x6R8TnZhHF3lhqt+u/w3MGwYLX+2t5O87ssRiMfEAhQH+3J4QwVzCw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 postcss-selector-parser@6.0.10: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} engines: {node: '>=4'} - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + postcss-selector-parser@7.1.4: + resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} - postcss-selector-parser@7.0.0: - resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} - engines: {node: '>=4'} - - postcss-svgo@7.0.1: - resolution: {integrity: sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==} - engines: {node: ^18.12.0 || ^20.9.0 || >= 18} + postcss-svgo@8.0.1: + resolution: {integrity: sha512-HpnvWii7W0/FPrsejJa6ZTi0kNtTJP/Iba7CUMPX0xPV6QpnndOp+SDP74tFtgjA2cYKYNWJPOlmLXMsvi/9yA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 - postcss-unique-selectors@7.0.3: - resolution: {integrity: sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-unique-selectors@8.0.1: + resolution: {integrity: sha512-+xvKI5+/Cl8yYQwxDV39Uhuc4WV951xngFvPPjiPj2NIbIfm6vbbRTXblyw0FioLkIoGlw+7qUcY1h2YhaZYgw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -6831,51 +8254,38 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + postcss@8.5.23: + resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.25: + resolution: {integrity: sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==} engines: {node: ^10 || ^12 || >=14} postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} - postgres-array@3.0.4: - resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} - engines: {node: '>=12'} - - postgres-bytea@1.0.0: - resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + postgres-bytea@1.0.1: + resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} engines: {node: '>=0.10.0'} - postgres-bytea@3.0.0: - resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} - engines: {node: '>= 6'} - postgres-date@1.0.7: resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} engines: {node: '>=0.10.0'} - postgres-date@2.1.0: - resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} - engines: {node: '>=12'} - postgres-interval@1.2.0: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} - postgres-interval@3.0.0: - resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} - engines: {node: '>=12'} - - postgres-range@1.1.4: - resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} + engines: {node: '>=10'} + deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. + hasBin: true - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + prettier@3.9.6: + resolution: {integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==} engines: {node: '>=14'} hasBin: true @@ -6886,6 +8296,10 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + prismjs@1.30.0: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} @@ -6893,13 +8307,17 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - process-warning@5.0.0: - resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + process-warning@5.1.0: + resolution: {integrity: sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==} process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -6907,16 +8325,24 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + proxy-agent-negotiate@1.1.0: + resolution: {integrity: sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==} + engines: {node: '>= 20'} + peerDependencies: + kerberos: ^2.0.0 + peerDependenciesMeta: + kerberos: + optional: true proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - psl@1.15.0: - resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} - public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} @@ -6930,29 +8356,29 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qs-esm@7.0.2: - resolution: {integrity: sha512-D8NAthKSD7SGn748v+GLaaO6k08Mvpoqroa35PqIQC4gtUa8/Pb/k+r0m0NnGBVbHDP1gKZ2nVywqfMisRhV5A==} - engines: {node: '>=18'} + pupa@3.3.0: + resolution: {integrity: sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==} + engines: {node: '>=12.20'} - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} - qs@6.15.0: - resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} - engines: {node: '>=0.6'} + pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + + qs-esm@8.0.1: + resolution: {integrity: sha512-eZ7l+0ZVy3He9c85pEM9KEBR9DFA4jrmWvIjm9wpcHvScwc/vgZDl2TNOF0pm0JsWKw24XBUZOY0Wxn7/nvJnw==} + engines: {node: '>=18'} - qs@6.5.5: - resolution: {integrity: sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==} + qs@6.15.3: + resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==} engines: {node: '>=0.6'} querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - queue@6.0.2: resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} @@ -6969,60 +8395,56 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} - - raw-body@3.0.2: - resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} - engines: {node: '>= 0.10'} + range-parser@1.3.0: + resolution: {integrity: sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==} + engines: {node: '>= 0.6'} - react-blurhash@0.3.0: - resolution: {integrity: sha512-XlKr4Ns1iYFRnk6DkAblNbAwN/bTJvxTVoxMvmTcURdc5oLoXZwqAF9N3LZUh/HT+QFlq5n6IS6VsDGsviYAiQ==} - peerDependencies: - blurhash: ^2.0.3 - react: '>=15' + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true react-datepicker@7.6.0: resolution: {integrity: sha512-9cQH6Z/qa4LrGhzdc3XoHbhrxNcMi9MKjZmYgF/1MNNaJwvdSjv3Xd+jjvrEEbKEf71ZgCA3n7fQbdwd70qCRw==} peerDependencies: - react: ^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc + react: ^19.2.7 + react-dom: ^19.2.7 - react-docgen-typescript@2.2.2: - resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} + react-docgen-typescript@2.4.0: + resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} peerDependencies: typescript: '>= 4.3.x' - react-docgen@7.1.1: - resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==} - engines: {node: '>=16.14.0'} + react-docgen@8.0.3: + resolution: {integrity: sha512-aEZ9qP+/M+58x2qgfSFEWH1BxLyHe5+qkLNJOZQb5iGS017jpbRnoKhNRrXPeA6RfBrZO5wZrT9DMC1UqE1f1w==} + engines: {node: ^20.9.0 || >=22} - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + react-dom@19.2.8: + resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} peerDependencies: - react: ^19.1.0 + react: ^19.2.7 - react-error-boundary@3.1.4: - resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} - engines: {node: '>=10', npm: '>=6'} + react-email@6.9.2: + resolution: {integrity: sha512-A6SiRdH1U7qJcfgpaJ1BYGud8GbnPwDw61l3PP3JR1qMAmBgTlL02UuCPwPOClwc1x+saUU9OxJfPQHMNaTBMA==} + engines: {node: '>=20.0.0'} + hasBin: true peerDependencies: - react: '>=16.13.1' + react: ^19.2.7 + react-dom: ^19.2.7 react-error-boundary@4.1.2: resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==} peerDependencies: - react: '>=16.13.1' + react: ^19.2.7 - react-icons@5.5.0: - resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} + react-error-boundary@6.1.2: + resolution: {integrity: sha512-3DpCr5HVdZ0caUjYE/kIHBEJN0mNP3ZCgf16c48uJ5TbWjorKVp+YG8W3XqlJ7vJAVNw6wNIImyPXmFydwmyng==} peerDependencies: - react: '*' + react: ^19.2.7 react-image-crop@10.1.8: resolution: {integrity: sha512-4rb8XtXNx7ZaOZarKKnckgz4xLMvds/YrU6mpJfGhGAsy2Mg4mIw1x+DCCGngVGq2soTBVVOxx2s/C6mTX9+pA==} peerDependencies: - react: '>=16.13.1' + react: ^19.2.7 react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -7030,34 +8452,59 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-redux@9.3.0: + resolution: {integrity: sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==} + peerDependencies: + '@types/react': ^18.2.25 || ^19 + react: ^19.2.7 + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + redux: + optional: true + react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-select@5.9.0: - resolution: {integrity: sha512-nwRKGanVHGjdccsnzhFte/PULziueZxGD8LL2WojON78Mvnq7LdAMEtu2frrwld1fr3geixg3iiMBIc/LLAZpw==} + react-select@5.10.2: + resolution: {integrity: sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==} 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 + react: ^19.2.7 + react-dom: ^19.2.7 - react-toastify@11.0.5: - resolution: {integrity: sha512-EpqHBGvnSTtHYhCPLxML05NLY2ZX0JURbAdNYa6BUkk+amz4wbKBQvoKQAB0ardvSarUBuY4Q4s1sluAzZwkmA==} + react-select@5.9.0: + resolution: {integrity: sha512-nwRKGanVHGjdccsnzhFte/PULziueZxGD8LL2WojON78Mvnq7LdAMEtu2frrwld1fr3geixg3iiMBIc/LLAZpw==} peerDependencies: - react: ^18 || ^19 - react-dom: ^18 || ^19 + react: ^19.2.7 + react-dom: ^19.2.7 react-transition-group@4.4.5: resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' + react: ^19.2.7 + react-dom: ^19.2.7 - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.2.8: + resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} engines: {node: '>=0.10.0'} - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-package-up@11.0.0: + resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} + engines: {node: '>=18'} + + read-package-up@12.0.0: + resolution: {integrity: sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==} + engines: {node: '>=20'} + + read-pkg@10.1.0: + resolution: {integrity: sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==} + engines: {node: '>=20'} + + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -7082,52 +8529,76 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} - recast@0.23.11: - resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + recast@0.23.12: + resolution: {integrity: sha512-dEWRjcINDu/F4l2dYx57ugBtD7HV9KXESyxhzw/MqWLeglJrsjJKqACPyUPg+6AF8mIgm+Zi0dZ3ACoIg+QtpA==} engines: {node: '>= 4'} + recharts@3.10.1: + resolution: {integrity: sha512-QXFrvt6IVcw7eeZCoyXTwkIJAX3Dv1nyVhMicXJ47GsGDDpcN8z6o644DibE9XjpBTThtsomLKnTV6lc+cVFUA==} + engines: {node: '>=18'} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 + react-is: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} - refa@0.12.1: - resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + redis-errors@1.2.0: + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} + engines: {node: '>=4'} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} + redis-parser@3.0.0: + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} + engines: {node: '>=4'} + + redis@4.7.0: + resolution: {integrity: sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ==} + + redux-thunk@3.1.0: + resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} + peerDependencies: + redux: ^5.0.0 - regenerate-unicode-properties@10.2.0: - resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} engines: {node: '>=4'} regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + regex-parser@2.3.1: + resolution: {integrity: sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==} - regex-parser@2.3.0: - resolution: {integrity: sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} - regexp-ast-analysis@0.7.1: - resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} - regexpu-core@6.2.0: - resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + regexpu-core@6.4.0: + resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} engines: {node: '>=4'} + registry-auth-token@5.1.1: + resolution: {integrity: sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==} + engines: {node: '>=14'} + regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - regjsparser@0.12.0: - resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + regjsparser@0.13.2: + resolution: {integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==} hasBin: true relateurl@0.2.7: @@ -7137,18 +8608,24 @@ packages: renderkid@3.0.0: resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} - request@2.88.2: - resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} - engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - requireindex@1.2.0: - resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} - engines: {node: '>=0.10.5'} + require-in-the-middle@7.5.2: + resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} + engines: {node: '>=8.6.0'} + + require-in-the-middle@8.0.1: + resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} + engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} + + reselect@5.2.0: + resolution: {integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==} resolve-dir@1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} @@ -7158,6 +8635,10 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -7165,48 +8646,43 @@ packages: resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} engines: {node: '>=12'} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + restructure@3.0.2: + resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - ripemd160@2.0.3: resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==} engines: {node: '>= 0.8'} - router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} + rolldown@1.2.1: + resolution: {integrity: sha512-4FKJhg8d3OiyQOA6Q1Q0hoFFpW9/OoX+VsHzpECsdsIZoOArrAK90gl59YK/Z+gnDel45bgJZK03ozH/9bCqEw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true - rrweb-cssom@0.8.0: - resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + rollup@4.62.3: + resolution: {integrity: sha512-Gu0c0iH9FzgX1L1t7ByIbbS3Vmdz+6KHm/EsqmmC71gUQ82yvZRkTK6XzrFObSka91WUVdynqp6nsfilzr5k6Q==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} + rx.mini@1.4.0: + resolution: {integrity: sha512-8w5cSc1mwNja7fl465DXOkVvIOkpvh2GW4jo31nAIvX4WTXCsRnKJGUfiDBzWtYRInEcHAUYIZfzusjIrea8gA==} safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -7214,10 +8690,6 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - safe-regex-test@1.1.0: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} @@ -7226,17 +8698,14 @@ packages: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sanitize-filename@1.6.3: resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} - sass-loader@14.2.1: - resolution: {integrity: sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==} + sass-loader@16.0.8: + resolution: {integrity: sha512-hcov4ZwZJIGbEuyNr9EmiTmZueyrxSToE6GOzoZnq5JM7ecRO7ttyvilPn+VmRsqiP16+VYZzVnGZj/hzZgKBA==} engines: {node: '>= 18.12.0'} peerDependencies: - '@rspack/core': 0.x || 1.x + '@rspack/core': 0.x || ^1.0.0 || ^2.0.0-0 node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 sass: ^1.3.0 sass-embedded: '*' @@ -7258,13 +8727,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - sass@1.87.0: - resolution: {integrity: sha512-d0NoFH4v6SjEK7BoX810Jsrhj7IQSYHAHLi/iSpgqKc7LaIDshFRlSg5LOymf9FqQhxEHs2W5ZQXlvy0KD45Uw==} - engines: {node: '>=14.0.0'} - hasBin: true - - sax@1.6.0: - resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + sax@1.6.1: + resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} engines: {node: '>=11.0.0'} saxes@6.0.0: @@ -7274,87 +8738,76 @@ packages: scheduler@0.25.0: resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + scheduler@0.25.0-rc-603e6108-20241029: + resolution: {integrity: sha512-pFwF6H1XrSdYYNLfOcGlM28/j8CGLu8IvdrxqhjWULe2bPcKiKW4CV+OWqR/9fT52mywx65l7ysNkjLKBda7eA==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + schema-dts-lib@1.0.0: + resolution: {integrity: sha512-9MEO5vpQH9JdBioUupqluzxSYxPLjhmqRUudk15adUl/ypnRsM2/M1kN3AmVJQeG7nZqcL68H8JlGqQQT6vy9A==} + engines: {node: '>=14.0.0'} + peerDependencies: + typescript: '>=4.9.5' + + schema-dts@2.0.0: + resolution: {integrity: sha512-t7NoCy3Rn5GHGx6p7s1qIYK/AeIb8ZxJNR9WUNFkwMv2CiiGZBmqqYWc2FlZVm5ZbiHMY4OvBWhj7QtyrFO2Jw==} schema-utils@3.3.0: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} - schema-utils@4.3.0: - resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} - engines: {node: '>= 10.13.0'} - schema-utils@4.3.3: resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} - scslre@0.3.0: - resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} - engines: {node: ^14.0.0 || >=16.0.0} - secure-json-parse@4.1.0: resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true + selderee@0.11.0: + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} + semantic-release@25.0.9: + resolution: {integrity: sha512-bxve7csK0/Txr++CkfrmV+X1r4jqiSOw2WsSad9E2S68R+ZfLBwDn8IceM8WfiOmKQIHgsQc1cNA8Dzg7U75pg==} + engines: {node: ^22.14.0 || >= 24.10.0} hasBin: true - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} - engines: {node: '>=10'} - hasBin: true + semifies@1.0.0: + resolution: {integrity: sha512-xXR3KGeoxTNWPD4aBvL5NUpMTT7WMANr3EWnaS190QVkY52lqqcVRD7Q05UVbBhiWDGWMlJEUam9m7uFFGVScw==} - send@1.2.1: - resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} - engines: {node: '>= 18'} + semver-regex@4.0.5: + resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} + engines: {node: '>=12'} - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true - serve-static@2.2.1: - resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} - engines: {node: '>= 18'} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sha.js@2.4.12: resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} engines: {node: '>= 0.10'} hasBin: true - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - sharp@0.34.1: - resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.35.3: + resolution: {integrity: sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -7364,8 +8817,15 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + shiki@4.4.3: + resolution: {integrity: sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==} + engines: {node: '>=20'} + + shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} side-channel-map@1.0.1: @@ -7376,16 +8836,29 @@ packages: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} engines: {node: '>= 0.4'} + sift@17.1.3: + resolution: {integrity: sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + signale@1.4.0: + resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} + engines: {node: '>=6'} + + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} simple-wcswidth@1.1.2: resolution: {integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==} @@ -7393,20 +8866,36 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + skin-tone@2.0.0: + resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} + engines: {node: '>=8'} + + socket.io-adapter@2.5.8: + resolution: {integrity: sha512-6Oy52pbg+kvdCVvjcN+FnY7BvxZ7cIHNScbvztT/It5d0vbwoJoVZmF2gjJmnV0/4WlXRfG15zc45ySk9Ah8bw==} + + socket.io-parser@4.2.7: + resolution: {integrity: sha512-IH/iSeO9T6gz1KkFleGDWkG9N3dl4jXVYUtMhIqH10Md0ttMer8nUNWiP1DKuNrybD2xBrixLJdCC9J6ECoYkg==} + engines: {node: '>=10.0.0'} + + socket.io@4.8.3: + resolution: {integrity: sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A==} + engines: {node: '>=10.2.0'} + sonic-boom@4.2.1: resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} sonner@1.7.4: resolution: {integrity: sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==} peerDependencies: - react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react: ^19.2.7 + react-dom: ^19.2.7 - sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + sort-object-keys@2.1.0: + resolution: {integrity: sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==} - sort-package-json@3.2.0: - resolution: {integrity: sha512-jadbj4vvIlevL578X5+1qVX/Nn9Jk7/U+cLVjR1IqfDFo3ISY0eoyksd3ylyTwGunlEMUgbTRYowLr0CkSxcQw==} + sort-package-json@4.0.0: + resolution: {integrity: sha512-6aYOlYI9AWioZ+rzu+4zKLmoFqJP0/fHDxrd7X04yqEibikY+5YVF0EYlyGn4v6X2PJY7yAUWV7oeP+i5rOm/g==} + engines: {node: '>=22'} hasBin: true source-map-js@1.2.1: @@ -7424,51 +8913,78 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + sparse-bitfield@3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + + spawn-error-forwarder@1.0.0: + resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} + + split2@1.0.0: + resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} - sshpk@1.18.0: - resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} - engines: {node: '>=0.10.0'} - hasBin: true - - stable-hash@0.0.4: - resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} - - stable-hash@0.0.5: - resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + stacktrace-parser@0.1.11: + resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==} + engines: {node: '>=6'} + + standard-as-callback@2.1.0: + resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + state-local@1.0.7: resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} + std-env@4.2.0: + resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} - storybook@8.6.17: - resolution: {integrity: sha512-krR/l680A6qVnkGiK9p8jY0ucX3+kFCs2f4zw+S3w2Cdq8EiM/tFebPcX2V4S3z2UsO0v0dwAJOJNpzbFPdmVg==} + storybook@10.5.5: + resolution: {integrity: sha512-UscBIBJDloUeqntukHOhP1a5W/vouePDJbzPSxj466WK801FZtzQiMffMtkjzJiWSuj20wfaYlB2QQKh9aOYAg==} hasBin: true peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 prettier: ^2 || ^3 + vite-plus: ^0.1.15 || ^0.2.0 peerDependenciesMeta: + '@types/react': + optional: true prettier: optional: true + vite-plus: + optional: true stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + stream-combiner2@1.1.1: + resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} + stream-http@3.2.0: resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} @@ -7476,39 +8992,21 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} - string-ts@2.2.1: - resolution: {integrity: sha512-Q2u0gko67PLLhbte5HmPfdOjNvUKbKQM+mCNQae6jE91DmoFHY6HH9GcdqCeNx87DZ2KKjiFxmA0R/42OneGWw==} + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string.prototype.includes@2.0.1: - resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} - engines: {node: '>= 0.4'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + string-width@8.2.2: + resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==} + engines: {node: '>=20'} string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -7523,33 +9021,47 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} - strip-indent@4.0.0: - resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + strip-indent@4.1.1: + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} engines: {node: '>=12'} - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} strip-json-comments@5.0.3: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} - strtok3@8.1.0: - resolution: {integrity: sha512-ExzDvHYPj6F6QkSNe/JxSlBxTh3OrI6wrAIz53ulxo1c4hBJ1bT9C/JrAthEKHWG9riVH3Xzg7B03Oxty6S2Lw==} - engines: {node: '>=16'} + strtok3@10.3.5: + resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} + engines: {node: '>=18'} + + stubborn-fs@2.0.0: + resolution: {integrity: sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==} + + stubborn-utils@1.0.2: + resolution: {integrity: sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==} style-loader@3.3.4: resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} @@ -7557,32 +9069,54 @@ packages: peerDependencies: webpack: ^5.0.0 + style-loader@4.0.0: + resolution: {integrity: sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.27.0 + styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} peerDependencies: '@babel/core': '*' babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + react: ^19.2.7 + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + styled-jsx@5.1.7: + resolution: {integrity: sha512-HPLmEIYprxCeWDMLYiaaAhsV3yGfIlCqzuVOybE6fjF3SUJmH67nCoMDO+nAvHNHo46OfvpCNu4Rcue82dMNFg==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: ^19.2.7 peerDependenciesMeta: '@babel/core': optional: true babel-plugin-macros: optional: true - stylehacks@7.0.4: - resolution: {integrity: sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + stylehacks@8.0.1: + resolution: {integrity: sha512-Gv095oTD0N+BdJALNFDsxZpETHZLTxbOl5RyIO7y6VAE6sR3z0MnV3Nix7N0IATNldNTrkvSASp2KR1Yt526HA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.31 + postcss: ^8.5.15 stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + super-regex@1.1.0: + resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==} + engines: {node: '>=18'} + + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -7596,81 +9130,169 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svgo@3.3.3: - resolution: {integrity: sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==} - engines: {node: '>=14.0.0'} + svg-arc-to-cubic-bezier@3.2.0: + resolution: {integrity: sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==} + + svgo@4.0.2: + resolution: {integrity: sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==} + engines: {node: '>=16'} hasBin: true + swc-loader@0.2.7: + resolution: {integrity: sha512-nwYWw3Fh9ame3Rtm7StS9SBLpHRRnYcK7bnpF3UKZmesAK0gw2/ADvlURFAINmPvKtDLzp+GBiP9yLoEjg6S9w==} + peerDependencies: + '@swc/core': ^1.2.147 + webpack: '>=2' + symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + syncpack-darwin-arm64@15.3.2: + resolution: {integrity: sha512-rQwZOvWJbvUzhBySbKnvs+F5khmdkH2W/kTZo+zz6UfH651K9z2fiOYlcpDPX0L97m566gRxVmOr930ygB97ZQ==} + cpu: [arm64] + os: [darwin] - tailwind-merge@2.6.0: - resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + syncpack-darwin-x64@15.3.2: + resolution: {integrity: sha512-91CWe9Pamfmlm2nY8bCL5z8GYOafGJUm/nQqtvaQDZ9SS25c6Gn8LDfRu6JSKV0dcI1zOH3EiRCM0K/kn9Mpiw==} + cpu: [x64] + os: [darwin] - tailwindcss-animate@1.0.7: - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' + syncpack-linux-arm64-musl@15.3.2: + resolution: {integrity: sha512-IzI4Sr1rFDuF7FFbZ+ti+qA2/0Rp/aGNgzoUzNH28wYJkJMv9KBBr3Nygc1jsoO1+XE1JkYsXkJHuSFrwiwtgA==} + cpu: [arm64] + os: [linux] - tailwindcss@3.4.17: - resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} - engines: {node: '>=14.0.0'} + syncpack-linux-arm64@15.3.2: + resolution: {integrity: sha512-eApeUFLb8yFHAFnCyHicDieTBW0eR3HsaKSWPMmz+VOQOpZYl0cmqbRLtunsYN6OykRi9Sl1faYjKmyETow7Gg==} + cpu: [arm64] + os: [linux] + + syncpack-linux-x64-musl@15.3.2: + resolution: {integrity: sha512-dohyuYgUVHdSFz1KYW/XngyYSiSV3tarroYRsloYsT8bcSStkh2vJVBht0eMl1OFTh3Hb6lNEC12Pgtw4gWTcg==} + cpu: [x64] + os: [linux] + + syncpack-linux-x64@15.3.2: + resolution: {integrity: sha512-xrzBZx3DjKoece2h3Olv/Y/U7b1eNorWTMiF407m0tO5KJp5u926TMeHlldaA5GRCkVJBe5VaI33WYTJF753oQ==} + cpu: [x64] + os: [linux] + + syncpack-windows-arm64@15.3.2: + resolution: {integrity: sha512-ZGjVpyS8PW6Y69HyXOb8RYVWRQ+hlRklqdgOp+x+eqrCRidGho8z2nN5tleMGzcaMC7hg+qSPFh5u6Fy/BXr4w==} + cpu: [arm64] + os: [win32] + + syncpack-windows-x64@15.3.2: + resolution: {integrity: sha512-9zKWNXGhd3rryQjcpBjs02pKgvIzuz3PUS+vKL4vWnDu5VoHad4e6TzL4pvn+VfAm4wXzcuS9fZkxLBEMPLerw==} + cpu: [x64] + os: [win32] + + syncpack@15.3.2: + resolution: {integrity: sha512-RKYfXFQlrIWosTheNbyJg3xHNjTDrW2mOvwxAz3XGghrUDN4hDjhKPCTAQrUtGZw9hNeIr37qRO3/+EP927Vtg==} + engines: {node: '>=14.17.0'} hasBin: true - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} + tabbable@6.5.0: + resolution: {integrity: sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} - engines: {node: '>=6'} + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} - terser-webpack-plugin@5.3.14: - resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} - engines: {node: '>= 10.13.0'} + tailwind-merge@3.6.0: + resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==} + + tailwind-variants@3.3.1: + resolution: {integrity: sha512-4pAvwUtM4HKBiRZftncAbpn6V9Hhwoa5Fl7O2u5zbp7Z5Cvu+/o/6+176WY3WCEES209543quG8zFIcXCsc5Jw==} + engines: {node: '>=16.9.x', pnpm: '>=7.x'} peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 + tailwind-merge: '>=3.0.0' + tailwindcss: '*' peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: + tailwind-merge: optional: true - uglify-js: + tailwindcss: optional: true - terser-webpack-plugin@5.4.0: - resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==} + tailwindcss@4.3.3: + resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} + + takumi-js@2.5.4: + resolution: {integrity: sha512-GdzRCezKVelmjfh/J5vsEtYUeEgoKMRtwe57f7Qd4XrPdMCkYvWl8ThuHZ67J76bMqGpHUEDZATkgu8RYbTwSg==} + engines: {node: '>=18'} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + + tar-fs@2.1.5: + resolution: {integrity: sha512-OboTd8mmMhZDNPV+UjQcK9yKAatXu2aJ+r1w4im1Otd4M4fl2hwvdoXUxIYHFTHWK/3y3FarBP70v3vwmGlOxw==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + temp-dir@3.0.0: + resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} + engines: {node: '>=14.16'} + + tempy@3.2.0: + resolution: {integrity: sha512-d79HhZya5Djd7am0q+W4RTsSU+D/aJzM+4Y4AGJGuGlgM2L6sx5ZvOYTmZjqPhrDrV6xJTtRSm1JCLj6V6LHLQ==} + engines: {node: '>=14.16'} + + terser-webpack-plugin@5.6.1: + resolution: {integrity: sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==} engines: {node: '>= 10.13.0'} peerDependencies: + '@minify-html/node': '*' '@swc/core': '*' + '@swc/css': '*' + '@swc/html': '*' + clean-css: '*' + cssnano: '*' + csso: '*' esbuild: '*' + html-minifier-terser: '*' + lightningcss: '*' + postcss: '*' uglify-js: '*' webpack: ^5.1.0 peerDependenciesMeta: + '@minify-html/node': + optional: true '@swc/core': optional: true + '@swc/css': + optional: true + '@swc/html': + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true esbuild: optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true uglify-js: optional: true - terser@5.39.0: - resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} - engines: {node: '>=10'} - hasBin: true - - terser@5.46.1: - resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} + terser@5.49.0: + resolution: {integrity: sha512-SNiDnXyHSrxVcIOtVbULzcTmniUiwcV7Nwdyj1twVubeTmbjoa8p69KKDpfkdoOavuM4/GRm1+ykI8qqnavHoA==} engines: {node: '>=10'} hasBin: true @@ -7681,97 +9303,102 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - thread-stream@3.1.0: - resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + thread-stream@3.2.0: + resolution: {integrity: sha512-zLBvqpwr4Esa0kRjcrzGU6zL25lePWaCLMx0RQFrmteozIfeNdaMLpG5U7PeHzvlFkAWaRKA9/KVW4F60iB+qw==} - throttleit@2.1.0: - resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} - engines: {node: '>=18'} + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + + time-span@5.1.0: + resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} + engines: {node: '>=12'} timers-browserify@2.0.12: resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} engines: {node: '>=0.6.0'} + timestring@7.0.0: + resolution: {integrity: sha512-U7ttxEdKWqHYJ96OGoJJR5gU8Nwkl3tlY0n7Jr4vcpLD2RkVZLE1Ph9k8ZRrZ7LYX9QCtd3M9OUaR9P8Z37QNg==} + engines: {node: '>=12'} + + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} - engines: {node: '>=12.0.0'} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} - tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyrainbow@3.1.1: + resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} - tldts-core@6.1.83: - resolution: {integrity: sha512-I2wb9OJc6rXyh9d4aInhSNWChNI+ra6qDnFEGEwe9OoA68lE4Temw29bOkf1Uvwt8VZS079t1BFZdXVBmmB4dw==} + tldts-core@7.4.9: + resolution: {integrity: sha512-DxKfPBI52p2msTEu7MPhdpdDTBhhVQg1a/8PjQckeyAvO13eMYElX545grIp6nnTGIMZlRvFZPvFhvI/WIz2Vg==} - tldts@6.1.83: - resolution: {integrity: sha512-FHxxNJJ0WNsEBPHyC1oesQb3rRoxpuho/z2g3zIIAhw1WHJeQsUzK1jYK8TI1/iClaa4fS3Z2TCA9mtxXsENSg==} + tldts@7.4.9: + resolution: {integrity: sha512-3kZ8wQQ/k5DrChD4X4FVvr2D7E5uoRgAqkPyLpSCGUvqOvqu+JEdr3mwMUaVWb+vMHZaKhF5fp2PBigKsui7hA==} hasBin: true to-buffer@1.2.2: resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} engines: {node: '>= 0.4'} - to-no-case@1.0.2: - resolution: {integrity: sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg==} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - to-snake-case@1.0.0: - resolution: {integrity: sha512-joRpzBAk1Bhi2eGEYBjukEWHOe/IvclOkiJl3DtA91jV6NwQ3MwXA4FHYeqk8BNp/D8bmi9tcNbRu/SozP0jbQ==} - - to-space-case@1.0.0: - resolution: {integrity: sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA==} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - token-types@6.1.2: resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} engines: {node: '>=14.16'} - tough-cookie@2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} - engines: {node: '>=0.8'} - - tough-cookie@5.1.2: - resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + tough-cookie@6.0.2: + resolution: {integrity: sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==} engines: {node: '>=16'} - tr46@5.0.0: - resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} - truncate-utf8-bytes@1.0.2: - resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + tr46@6.0.0: + resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} + engines: {node: '>=20'} - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' + traverse@0.6.8: + resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} + engines: {node: '>= 0.4'} - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + ts-dedent@2.3.0: + resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} engines: {node: '>=6.10'} ts-essentials@10.0.3: @@ -7782,178 +9409,184 @@ packages: typescript: optional: true - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - ts-pattern@5.7.0: - resolution: {integrity: sha512-0/FvIG4g3kNkYgbNwBBW5pZBkfpeYQnH+2AA3xmjkCAit/DSDPKmgwC3fKof4oYUq6gupClVOJlFl+939VRBMg==} - - ts-pnp@1.2.0: - resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} - engines: {node: '>=6'} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - tsconfig-paths-webpack-plugin@4.2.0: resolution: {integrity: sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==} engines: {node: '>=10.13.0'} - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tsconfig-paths@4.2.0: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + tsx@4.22.4: + resolution: {integrity: sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==} engines: {node: '>=18.0.0'} hasBin: true + tsyringe@4.10.0: + resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} + engines: {node: '>= 6.0.0'} + tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + tunnel@0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + + turbores@1.2.2: + resolution: {integrity: sha512-dTSKeZ6/BgBKz9T5goMS5ZMcqOiNYO1MbvresYGfWXEF5ZWK+yIZDxNjh86bRj1mnEzhtdsMOJ5GBi8b3Azcpg==} - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.40.1: - resolution: {integrity: sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA==} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} + type-fest@5.8.0: + resolution: {integrity: sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==} + engines: {node: '>=20'} typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typescript-eslint@8.26.1: - resolution: {integrity: sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - typescript-eslint@8.31.1: - resolution: {integrity: sha512-j6DsEotD/fH39qKzXTQRwYYWlt7D+0HmfpOK+DVhwJOFLcdmn92hq3mBb7HlKJHbjjI/gTOqEcc9d6JfpFf/VA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} - engines: {node: '>=14.17'} + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} hasBin: true uint8array-extras@1.5.0: resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} + undici-types@8.10.0: + resolution: {integrity: sha512-ibvdovq3nCFs8Msrd95BW+zUOq+aOVbT+wpHUoPWhztbHEoPc6oof51iFDB6Es8lTKvNvVW9jNSAB8dwrKTMGg==} + + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@6.28.0: + resolution: {integrity: sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==} + engines: {node: '>=18.17'} - undici@5.29.0: - resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} - engines: {node: '>=14.0'} + undici@7.28.0: + resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==} + engines: {node: '>=20.18.1'} - undici@7.18.2: - resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==} + undici@7.29.0: + resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==} engines: {node: '>=20.18.1'} + undici@8.9.0: + resolution: {integrity: sha512-aWZpUj7XoGonMClx4gdDRfgBjqeA+F473aDmROQQbM9n6PRfK/u1q/a0X4wMTgcHfT8H6fpbt98PFuDUwFg2YA==} + engines: {node: '>=22.19.0'} + + unenv@2.0.0-rc.24: + resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} + unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} + unicode-emoji-modifier-base@1.0.0: + resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} + engines: {node: '>=4'} + unicode-match-property-ecmascript@2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} engines: {node: '>=4'} - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + unicode-properties@1.4.1: + resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} + + unicode-property-aliases-ecmascript@2.2.0: + resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} engines: {node: '>=4'} - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + unicode-trie@2.0.0: + resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unicorn-magic@0.4.0: + resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} + engines: {node: '>=20'} + + unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} unist-util-position-from-estree@2.0.0: resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + universal-user-agent@7.0.3: + resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - unplugin@1.16.1: - resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} - engines: {node: '>=14.0.0'} - - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + unplugin@1.0.1: + resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} - unrs-resolver@1.7.2: - resolution: {integrity: sha512-BBKpaylOW8KbHsu378Zky/dGh4ckT/4NW/0SHRABdqRLcQJ2dAOjDo9g97p04sWflm0kqPqpUatxReNV/dqI5A==} + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} + engines: {node: '>=18.12.0'} - update-browserslist-db@1.1.2: - resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + unzipper@0.12.5: + resolution: {integrity: sha512-tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A==} update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} @@ -7964,6 +9597,10 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-join@5.0.0: + resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + url@0.11.4: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} @@ -7971,18 +9608,29 @@ packages: use-context-selector@2.0.0: resolution: {integrity: sha512-owfuSmUNd3eNp3J9CdDl0kMgfidV+MkDvHPpvthN5ThqM+ibMccNE0k+Iq7TWC6JPFvGZqanqiGCuQx6DyV24g==} peerDependencies: - react: '>=18.0.0' + react: ^19.2.7 scheduler: '>=0.19.0' - use-isomorphic-layout-effect@1.2.0: - resolution: {integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==} + use-isomorphic-layout-effect@1.2.1: + resolution: {integrity: sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==} peerDependencies: '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^19.2.7 peerDependenciesMeta: '@types/react': optional: true + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^19.2.7 + + usehooks-ts@3.1.1: + resolution: {integrity: sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==} + engines: {node: '>=16.15.0'} + peerDependencies: + react: ^19.2.7 + utf8-byte-length@1.0.5: resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} @@ -7995,33 +9643,118 @@ packages: utila@0.4.0: resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} - uuid@10.0.0: - resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} - hasBin: true - - uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - - uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + uuid@13.0.2: + resolution: {integrity: sha512-vzi9uRZ926x4XV73S/4qQaTwPXM2JBj6/6lI/byHH1jOpCzb0zDbfytgA9LcN/hzb2l7WQSQnxITOVx5un/wGw==} hasBin: true uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + victory-vendor@37.3.6: + resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} + + vite-compatible-readable-stream@3.6.1: + resolution: {integrity: sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==} + engines: {node: '>= 6'} + + vite@8.2.0: + resolution: {integrity: sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.4.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vitest@4.1.10: + resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} + 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.10 + '@vitest/browser-preview': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 + '@vitest/coverage-v8': 4.1.10 + '@vitest/ui': 4.1.10 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} @@ -8030,14 +9763,24 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} - watchpack@2.5.1: - resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} + watchpack@2.5.2: + resolution: {integrity: sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==} engines: {node: '>=10.13.0'} + web-worker@1.5.0: + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} + webidl-conversions@8.0.1: + resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} + engines: {node: '>=20'} + webpack-dev-middleware@6.1.3: resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==} engines: {node: '>= 14.15.0'} @@ -8050,15 +9793,18 @@ packages: webpack-hot-middleware@2.26.1: resolution: {integrity: sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==} - webpack-sources@3.3.4: - resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==} + webpack-sources@3.5.1: + resolution: {integrity: sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==} engines: {node: '>=10.13.0'} + webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - webpack@5.105.4: - resolution: {integrity: sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==} + webpack@5.109.2: + resolution: {integrity: sha512-U9/cvLzxObKNEZ9+TtdqrHM5/9z3lgl2c+c4BzbqGxFQvQvBAq87yql5A8pQ+rrMbS496MZJeF5enVBndIy2hw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -8067,33 +9813,62 @@ packages: webpack-cli: optional: true - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + werift-common@0.0.3: + resolution: {integrity: sha512-ma3E4BqKTyZVLhrdfTVs2T1tg9seeUtKMRn5e64LwgrogWa62+3LAUoLBUSl1yPWhgSkXId7GmcHuWDen9IJeQ==} + engines: {node: '>=16'} - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} + werift-dtls@0.5.8: + resolution: {integrity: sha512-oH39cdCpVLqKcPZRMGQLcN+tIBixvMGqjCB9qCrH39Tu9Mmu8u2+zTzyl0Fod87EK6PNPgoNqMJt64xlSMfLnw==} + engines: {node: '>=16'} + + werift-ice@0.2.2: + resolution: {integrity: sha512-td52pHp+JmFnUn5jfDr/SSNO0dMCbknhuPdN1tFp9cfRj5jaktN63qnAdUuZC20QCC3ETWdsOthcm+RalHpFCQ==} + + werift-rtp@0.8.9: + resolution: {integrity: sha512-uLFOawIXw8FblIp1akfIVYFuRNtNo7csRxYypLz0t++sUNCN7sPeghVqET/c3Mq7Tg2QA3oAb15fXIIuJEp2AA==} + engines: {node: '>=10'} + + werift-sctp@0.0.11: + resolution: {integrity: sha512-7109yuI5U7NTEHjqjn0A8VeynytkgVaxM6lRr1Ziv0D8bPcaB8A7U/P88M7WaCpWDoELHoXiRUjQycMWStIgjQ==} + engines: {node: '>=10'} + + werift@0.23.0: + resolution: {integrity: sha512-/WcIN5DHFG9Ri4anGOmIkp8gxBGFMWSIB/m4sfZ5CWlLfD3iMhiaAUuTBuc+KV3SY9NDmvmLtiN2uaM7k3lVzw==} + engines: {node: '>=16'} + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + whatwg-mimetype@5.0.0: + resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} + engines: {node: '>=20'} - whatwg-url@14.1.1: - resolution: {integrity: sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==} + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} + whatwg-url@16.0.1: + resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} + whatwg-url@17.1.0: + resolution: {integrity: sha512-3GeworPmc2ZfEEHP7lEbUfBX/L75wdEsi0rLNhXcXxnoN5jyq0SL5gCy06SGW2cyTIZdTvWIDQNQoza++vKeaw==} + engines: {node: ^22.14.0 || >=24.0.0} - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-typed-array@1.1.20: - resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} + when-exit@2.1.5: + resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==} + + which-command@0.1.0: + resolution: {integrity: sha512-XZyoF5/5hZtXitIwzrU4NKK+Wtbb9aB9CezUEw2Q0wlYK8NUYQxC1rRXgNueYLtBAJwXIb+/tFVk4dozciNJMA==} + engines: {node: '>=22'} + hasBin: true + + which-typed-array@1.1.22: + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} engines: {node: '>= 0.4'} which@1.3.1: @@ -8105,23 +9880,42 @@ packages: engines: {node: '>= 8'} hasBin: true - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + workerd@1.20260730.1: + resolution: {integrity: sha512-zmfNIjwYSWFY5chGBOjWtH3xAE7p97FTC6vR4Ep98290ho6AeAR/NVcBD274YCLEUYzqm8yxdtZlxMybU8a3jA==} + engines: {node: '>=16'} + hasBin: true + + wrangler@4.118.0: + resolution: {integrity: sha512-9pkBw/b8zWqGx2S+oLhgHMR1M/4VOE8SynUFABnGWiSFGlcOQ4xiI/B71Xf66RYP2xzngU37IQFPtUruij3lYw==} + engines: {node: '>=22.0.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^5.20260730.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.18.2: - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -8132,8 +9926,8 @@ packages: utf-8-validate: optional: true - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + ws@8.21.1: + resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -8144,6 +9938,10 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -8160,935 +9958,1417 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yaml@1.10.3: 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 - yjs@13.6.26: - resolution: {integrity: sha512-wiARO3wixu7mtoRP5f7LqpUtsURP9SmNgXUt3RlnZg4qDuF7dUjthwIvwxIDmK55dPw4Wl4QdW5A3ag0atwu7g==} + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yargs@16.2.2: + resolution: {integrity: sha512-Nt9ZJjXTv5R8MHbqby/wXQ6Gi0Bb3TcYZkR1bzuL4yB2OxWPkXknz513gEF0GoA6tn00UpbPvERW8rzCuWCA6w==} + engines: {node: '>=10'} + + yargs@18.1.0: + resolution: {integrity: sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yjs@13.6.31: + resolution: {integrity: sha512-Eq+5BRfbeGyqGVrTJL3bEcr8gKkxPuyuoHmAwpk52fDb8kOVMrfVSTRPd6yiGgX5Fskb96qCRjzjbRjrL4YEnw==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.1.1: - resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} - zod-to-json-schema@3.25.1: - resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} - peerDependencies: - zod: ^3.25 || ^4 + yoctocolors@2.2.0: + resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==} + engines: {node: '>=18'} + + yoga-layout@3.2.1: + resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} - zod@3.24.4: - resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + youch-core@0.3.3: + resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} + + youch@4.1.0-beta.10: + resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@adobe/css-tools@4.4.1': {} + '@actions/core@3.0.1': + dependencies: + '@actions/exec': 3.0.0 + '@actions/http-client': 4.0.1 - '@alloc/quick-lru@5.2.0': {} + '@actions/exec@3.0.0': + dependencies: + '@actions/io': 3.0.2 + + '@actions/http-client@4.0.1': + dependencies: + tunnel: 0.0.6 + undici: 6.28.0 + + '@actions/io@3.0.2': {} + + '@adobe/css-tools@4.5.0': {} + + '@ai-sdk/anthropic@4.0.27(zod@4.4.3)': + dependencies: + '@ai-sdk/provider': 4.0.4 + '@ai-sdk/provider-utils': 5.0.18(zod@4.4.3) + zod: 4.4.3 + + '@ai-sdk/gateway@4.0.36(zod@4.4.3)': + dependencies: + '@ai-sdk/provider': 4.0.4 + '@ai-sdk/provider-utils': 5.0.18(zod@4.4.3) + '@vercel/oidc': 3.2.0 + zod: 4.4.3 + + '@ai-sdk/provider-utils@5.0.18(zod@4.4.3)': + dependencies: + '@ai-sdk/provider': 4.0.4 + '@standard-schema/spec': 1.1.0 + '@workflow/serde': 4.1.0 + eventsource-parser: 3.1.0 + undici: 7.29.0 + zod: 4.4.3 - '@ampproject/remapping@2.3.0': + '@ai-sdk/provider@4.0.4': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + json-schema: 0.4.0 + + '@alloc/quick-lru@5.2.0': {} '@apidevtools/json-schema-ref-parser@11.9.3': dependencies: '@jsdevtools/ono': 7.1.3 '@types/json-schema': 7.0.15 - js-yaml: 4.1.1 + js-yaml: 4.3.1 - '@asamuzakjp/css-color@2.8.3': + '@apm-js-collab/code-transformer-bundler-plugins@0.7.3': dependencies: - '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - '@csstools/css-color-parser': 3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) - '@csstools/css-tokenizer': 3.0.3 - lru-cache: 10.4.3 + '@apm-js-collab/code-transformer': 0.18.1 + es-module-lexer: 2.3.1 + magic-string: 0.30.21 + module-details-from-path: 1.0.4 - '@babel/code-frame@7.27.1': + '@apm-js-collab/code-transformer@0.18.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 + '@types/estree': 1.0.9 + astring: 1.9.0 + esquery: 1.7.0 + meriyah: 6.1.4 + semifies: 1.0.0 + source-map: 0.6.1 + + '@apm-js-collab/tracing-hooks@0.13.0(supports-color@10.2.2)': + dependencies: + '@apm-js-collab/code-transformer': 0.18.1 + debug: 4.4.3(supports-color@10.2.2) + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + + '@asamuzakjp/css-color@6.0.5': + dependencies: + '@csstools/css-calc': 3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.10(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + lru-cache: 11.5.2 + + '@asamuzakjp/dom-selector@8.3.0': + dependencies: + bidi-js: 1.0.3 + css-tree: 3.2.1 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.5.2 + + '@aws-sdk/checksums@3.1000.24': + dependencies: + '@aws-sdk/core': 3.977.4 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/client-s3@3.1100.0': + dependencies: + '@aws-sdk/checksums': 3.1000.24 + '@aws-sdk/core': 3.977.4 + '@aws-sdk/credential-provider-node': 3.972.76 + '@aws-sdk/middleware-sdk-s3': 3.972.70 + '@aws-sdk/signature-v4-multi-region': 3.996.43 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/fetch-http-handler': 5.6.13 + '@smithy/node-http-handler': 4.9.13 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/core@3.977.4': + dependencies: + '@aws-sdk/types': 3.974.2 + '@aws-sdk/xml-builder': 3.972.37 + '@aws/lambda-invoke-store': 0.3.0 + '@smithy/core': 3.31.1 + '@smithy/signature-v4': 5.6.12 + '@smithy/types': 4.16.1 + bowser: 2.14.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.972.65': + dependencies: + '@aws-sdk/core': 3.977.4 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.972.67': + dependencies: + '@aws-sdk/core': 3.977.4 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/fetch-http-handler': 5.6.13 + '@smithy/node-http-handler': 4.9.13 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.973.10': + dependencies: + '@aws-sdk/core': 3.977.4 + '@aws-sdk/credential-provider-env': 3.972.65 + '@aws-sdk/credential-provider-http': 3.972.67 + '@aws-sdk/credential-provider-login': 3.972.72 + '@aws-sdk/credential-provider-process': 3.972.65 + '@aws-sdk/credential-provider-sso': 3.973.9 + '@aws-sdk/credential-provider-web-identity': 3.972.71 + '@aws-sdk/nested-clients': 3.997.39 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/credential-provider-imds': 4.4.16 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-login@3.972.72': + dependencies: + '@aws-sdk/core': 3.977.4 + '@aws-sdk/nested-clients': 3.997.39 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-node@3.972.76': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.65 + '@aws-sdk/credential-provider-http': 3.972.67 + '@aws-sdk/credential-provider-ini': 3.973.10 + '@aws-sdk/credential-provider-process': 3.972.65 + '@aws-sdk/credential-provider-sso': 3.973.9 + '@aws-sdk/credential-provider-web-identity': 3.972.71 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/credential-provider-imds': 4.4.16 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-process@3.972.65': + dependencies: + '@aws-sdk/core': 3.977.4 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.973.9': + dependencies: + '@aws-sdk/core': 3.977.4 + '@aws-sdk/nested-clients': 3.997.39 + '@aws-sdk/token-providers': 3.1100.0 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-web-identity@3.972.71': + dependencies: + '@aws-sdk/core': 3.977.4 + '@aws-sdk/nested-clients': 3.997.39 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/lib-storage@3.1100.0(@aws-sdk/client-s3@3.1100.0)': + dependencies: + '@aws-sdk/client-s3': 3.1100.0 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + buffer: 5.6.0 + events: 3.3.0 + stream-browserify: 3.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-sdk-s3@3.972.70': + dependencies: + '@aws-sdk/core': 3.977.4 + '@aws-sdk/signature-v4-multi-region': 3.996.43 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.997.39': + dependencies: + '@aws-sdk/core': 3.977.4 + '@aws-sdk/signature-v4-multi-region': 3.996.43 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/fetch-http-handler': 5.6.13 + '@smithy/node-http-handler': 4.9.13 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/s3-request-presigner@3.1100.0': + dependencies: + '@aws-sdk/core': 3.977.4 + '@aws-sdk/signature-v4-multi-region': 3.996.43 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/signature-v4-multi-region@3.996.43': + dependencies: + '@aws-sdk/types': 3.974.2 + '@smithy/signature-v4': 5.6.12 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.1100.0': + dependencies: + '@aws-sdk/core': 3.977.4 + '@aws-sdk/nested-clients': 3.997.39 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/types@3.974.2': + dependencies: + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/code-frame@7.29.0': + '@aws-sdk/xml-builder@3.972.37': dependencies: - '@babel/helper-validator-identifier': 7.28.5 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws/lambda-invoke-store@0.3.0': {} + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.3': {} + '@babel/compat-data@7.29.7': {} - '@babel/core@7.26.0': + '@babel/core@7.29.7(supports-color@10.2.2)': dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.1 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helpers': 7.29.2 - '@babel/parser': 7.27.1 - '@babel/template': 7.27.1 - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.0 + debug: 4.4.3(supports-color@10.2.2) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.27.1': + '@babel/generator@7.29.7': dependencies: - '@babel/parser': 7.27.1 - '@babel/types': 7.27.1 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.25.9': + '@babel/helper-annotate-as-pure@7.29.7': dependencies: - '@babel/types': 7.27.1 + '@babel/types': 7.29.7 - '@babel/helper-compilation-targets@7.25.9': + '@babel/helper-compilation-targets@7.29.7': dependencies: - '@babel/compat-data': 7.26.3 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.7 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.27.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2) + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.0)': + '@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - regexpu-core: 6.2.0 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0)': + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - debug: 4.4.3 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + debug: 4.4.3(supports-color@10.2.2) lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.12 transitivePeerDependencies: - supports-color - '@babel/helper-member-expression-to-functions@7.25.9': + '@babel/helper-globals@7.29.7': {} + + '@babel/helper-member-expression-to-functions@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.27.1 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.27.1': + '@babel/helper-module-imports@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.25.9': + '@babel/helper-optimise-call-expression@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 - '@babel/helper-plugin-utils@7.25.9': {} + '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': + '@babel/helper-remap-async-to-generator@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.27.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-wrap-function': 7.29.7(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.27.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2) + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + '@babel/helper-skip-transparent-expression-wrappers@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.27.1 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-validator-option@7.29.7': {} - '@babel/helper-wrap-function@7.25.9': + '@babel/helper-wrap-function@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/template': 7.28.6 - '@babel/traverse': 7.27.1 - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helpers@7.29.2': + '@babel/helpers@7.29.7': dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 - '@babel/parser@7.27.1': + '@babel/parser@7.29.2': dependencies: - '@babel/types': 7.27.1 + '@babel/types': 7.29.7 - '@babel/parser@7.29.2': + '@babel/parser@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.27.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.27.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.29.7(supports-color@10.2.2) - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.0)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-syntax-import-assertions@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-arrow-functions@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-async-generator-functions@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.27.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-async-to-generator@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-block-scoped-functions@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-block-scoping@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-class-properties@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-transform-class-static-block@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-classes@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.27.1 - globals: 11.12.0 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-computed-properties@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/template': 7.29.7 + + '@babel/plugin-transform-destructuring@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/template': 7.27.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-dotall-regex@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-duplicate-keys@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-dynamic-import@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-explicit-resource-management@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.0)': + '@babel/plugin-transform-exponentiation-operator@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-export-namespace-from@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-for-of@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-function-name@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.27.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-json-strings@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-literals@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-logical-assignment-operators@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-member-expression-literals@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-modules-amd@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.0)': + '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-modules-systemjs@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-modules-umd@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-new-target@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-nullish-coalescing-operator@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-numeric-separator@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-object-rest-spread@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/traverse': 7.29.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-object-super@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-optional-catch-binding@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-optional-chaining@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-parameters@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-private-methods@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-private-property-in-object@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-property-literals@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-react-display-name@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx-development@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-pure-annotations@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-regenerator@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-regexp-modifiers@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-reserved-words@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.27.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-runtime@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-shorthand-properties@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-spread@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-sticky-regex@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - regenerator-transform: 0.15.2 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-transform-template-literals@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-typeof-symbol@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.25.9 - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-unicode-property-regex@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-unicode-regex@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-unicode-sets-regex@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-import-assertions': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-block-scoped-functions': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-class-static-block': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-computed-properties': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-dotall-regex': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-duplicate-keys': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-dynamic-import': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-explicit-resource-management': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-exponentiation-operator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-export-namespace-from': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-function-name': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-json-strings': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-literals': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-member-expression-literals': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-modules-amd': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-modules-systemjs': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-modules-umd': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-new-target': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-numeric-separator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-object-super': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-property-literals': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-regexp-modifiers': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-reserved-words': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-spread': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-sticky-regex': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-typeof-symbol': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-unicode-escapes': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-unicode-property-regex': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-unicode-sets-regex': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.7(supports-color@10.2.2)) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + core-js-compat: 3.49.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.7(supports-color@10.2.2))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/types': 7.29.7 + esutils: 2.0.3 + + '@babel/preset-react@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-transform-react-display-name': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-react-jsx-development': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-react-pure-annotations': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.29.7': {} + + '@babel/template@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + + '@babel/traverse@7.29.0(supports-color@10.2.2)': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.29.7(supports-color@10.2.2)': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@bcoe/v8-coverage@1.0.2': {} + + '@biomejs/biome@2.5.6': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.5.6 + '@biomejs/cli-darwin-x64': 2.5.6 + '@biomejs/cli-linux-arm64': 2.5.6 + '@biomejs/cli-linux-arm64-musl': 2.5.6 + '@biomejs/cli-linux-x64': 2.5.6 + '@biomejs/cli-linux-x64-musl': 2.5.6 + '@biomejs/cli-win32-arm64': 2.5.6 + '@biomejs/cli-win32-x64': 2.5.6 + + '@biomejs/cli-darwin-arm64@2.5.6': + optional: true + + '@biomejs/cli-darwin-x64@2.5.6': + optional: true + + '@biomejs/cli-linux-arm64-musl@2.5.6': + optional: true + + '@biomejs/cli-linux-arm64@2.5.6': + optional: true + + '@biomejs/cli-linux-x64-musl@2.5.6': + optional: true + + '@biomejs/cli-linux-x64@2.5.6': + optional: true + + '@biomejs/cli-win32-arm64@2.5.6': + optional: true + + '@biomejs/cli-win32-x64@2.5.6': + optional: true + + '@borewit/text-codec@0.2.2': {} + + '@bramus/specificity@2.4.2': + dependencies: + css-tree: 3.2.1 + + '@cloudflare/kv-asset-handler@0.5.0': {} + + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260730.1)': + dependencies: + unenv: 2.0.0-rc.24 + optionalDependencies: + workerd: 1.20260730.1 + + '@cloudflare/workerd-darwin-64@1.20260730.1': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20260730.1': + optional: true + + '@cloudflare/workerd-linux-64@1.20260730.1': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20260730.1': + optional: true + + '@cloudflare/workerd-windows-64@1.20260730.1': + optional: true + + '@colordx/core@5.5.0': {} + + '@colors/colors@1.5.0': + optional: true + + '@commitlint/cli@21.2.1(@types/node@26.1.2)(conventional-commits-parser@7.1.2)(typescript@6.0.3)': + dependencies: + '@commitlint/config-conventional': 21.2.0 + '@commitlint/format': 21.2.0 + '@commitlint/lint': 21.2.0 + '@commitlint/load': 21.2.0(@types/node@26.1.2)(typescript@6.0.3) + '@commitlint/read': 21.2.1(conventional-commits-parser@7.1.2) + '@commitlint/types': 21.2.0 + tinyexec: 1.2.4 + yargs: 18.1.0 + transitivePeerDependencies: + - '@types/node' + - conventional-commits-filter + - conventional-commits-parser + - typescript + + '@commitlint/config-conventional@21.2.0': + dependencies: + '@commitlint/types': 21.2.0 + conventional-changelog-conventionalcommits: 10.2.1 + + '@commitlint/config-validator@21.2.0': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@commitlint/types': 21.2.0 + ajv: 8.20.0 - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': + '@commitlint/ensure@21.2.0': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color + '@commitlint/types': 21.2.0 + es-toolkit: 1.50.0 - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': + '@commitlint/execute-rule@21.0.1': {} + + '@commitlint/format@21.2.0': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@commitlint/types': 21.2.0 + picocolors: 1.1.1 - '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': + '@commitlint/is-ignored@21.2.0': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@commitlint/types': 21.2.0 + semver: 7.8.5 - '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': + '@commitlint/lint@21.2.0': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@commitlint/is-ignored': 21.2.0 + '@commitlint/parse': 21.2.0 + '@commitlint/rules': 21.2.0 + '@commitlint/types': 21.2.0 - '@babel/plugin-transform-typescript@7.26.3(@babel/core@7.26.0)': + '@commitlint/load@21.2.0(@types/node@26.1.2)(typescript@6.0.3)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + '@commitlint/config-validator': 21.2.0 + '@commitlint/execute-rule': 21.0.1 + '@commitlint/resolve-extends': 21.2.0 + '@commitlint/types': 21.2.0 + cosmiconfig: 9.0.2(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.3.0(@types/node@26.1.2)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3) + es-toolkit: 1.50.0 + is-plain-obj: 4.1.0 + picocolors: 1.1.1 transitivePeerDependencies: - - supports-color + - '@types/node' + - typescript - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/preset-env@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/compat-data': 7.26.3 - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) - core-js-compat: 3.40.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + '@commitlint/message@21.2.0': {} - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': + '@commitlint/parse@21.2.0': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/types': 7.27.1 - esutils: 2.0.3 + '@commitlint/types': 21.2.0 + conventional-changelog-angular: 9.2.1 + conventional-commits-parser: 7.1.2 - '@babel/preset-react@7.26.3(@babel/core@7.26.0)': + '@commitlint/read@21.2.1(conventional-commits-parser@7.1.2)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.0) + '@commitlint/top-level': 21.2.0 + '@commitlint/types': 21.2.0 + '@conventional-changelog/git-client': 3.1.0(conventional-commits-parser@7.1.2) + tinyexec: 1.2.4 transitivePeerDependencies: - - supports-color + - conventional-commits-filter + - conventional-commits-parser - '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)': + '@commitlint/resolve-extends@21.2.0': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0) - transitivePeerDependencies: - - supports-color - - '@babel/runtime@7.27.1': {} + '@commitlint/config-validator': 21.2.0 + '@commitlint/types': 21.2.0 + es-toolkit: 1.50.0 + global-directory: 5.0.0 + resolve-from: 5.0.0 - '@babel/template@7.27.1': + '@commitlint/rules@21.2.0': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.27.1 - '@babel/types': 7.27.1 + '@commitlint/ensure': 21.2.0 + '@commitlint/message': 21.2.0 + '@commitlint/to-lines': 21.0.1 + '@commitlint/types': 21.2.0 - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@commitlint/to-lines@21.0.1': {} - '@babel/traverse@7.27.1': + '@commitlint/top-level@21.2.0': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.1 - '@babel/parser': 7.27.1 - '@babel/template': 7.27.1 - '@babel/types': 7.27.1 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + escalade: 3.2.0 - '@babel/types@7.27.1': + '@commitlint/types@21.2.0': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + conventional-commits-parser: 7.1.2 + picocolors: 1.1.1 - '@babel/types@7.29.0': + '@conventional-changelog/git-client@3.1.0(conventional-commits-parser@7.1.2)': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@borewit/text-codec@0.2.2': {} + '@simple-libs/child-process-utils': 2.0.0 + '@simple-libs/stream-utils': 2.0.0 + semver: 7.8.5 + optionalDependencies: + conventional-commits-parser: 7.1.2 - '@csstools/color-helpers@5.0.2': {} + '@conventional-changelog/template@1.2.1': {} - '@csstools/css-calc@2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + '@cspotcode/source-map-support@0.8.1': dependencies: - '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) - '@csstools/css-tokenizer': 3.0.3 + '@jridgewell/trace-mapping': 0.3.9 + + '@csstools/color-helpers@6.1.0': {} - '@csstools/css-color-parser@3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + '@csstools/css-calc@3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/color-helpers': 5.0.2 - '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) - '@csstools/css-tokenizer': 3.0.3 + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': + '@csstools/css-color-parser@4.1.10(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/css-tokenizer': 3.0.3 + '@csstools/color-helpers': 6.1.0 + '@csstools/css-calc': 3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-tokenizer@3.0.3': {} + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 - '@date-fns/tz@1.2.0': {} + '@csstools/css-syntax-patches-for-csstree@1.1.7(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 - '@dnd-kit/accessibility@3.1.1(react@19.1.0)': - dependencies: - react: 19.1.0 - tslib: 2.8.1 + '@csstools/css-tokenizer@4.0.0': {} - '@dnd-kit/core@6.0.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@dnd-kit/accessibility': 3.1.1(react@19.1.0) - '@dnd-kit/utilities': 3.2.2(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - tslib: 2.8.1 + '@date-fns/tz@1.2.0': {} - '@dnd-kit/core@6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@dnd-kit/accessibility@3.1.1(react@19.2.8)': dependencies: - '@dnd-kit/accessibility': 3.1.1(react@19.1.0) - '@dnd-kit/utilities': 3.2.2(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.8 tslib: 2.8.1 - '@dnd-kit/modifiers@9.0.0(@dnd-kit/core@6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': + '@dnd-kit/core@6.3.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@dnd-kit/core': 6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@dnd-kit/utilities': 3.2.2(react@19.1.0) - react: 19.1.0 + '@dnd-kit/accessibility': 3.1.1(react@19.2.8) + '@dnd-kit/utilities': 3.2.2(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) tslib: 2.8.1 - '@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': + '@dnd-kit/modifiers@9.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)': dependencies: - '@dnd-kit/core': 6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@dnd-kit/utilities': 3.2.2(react@19.1.0) - react: 19.1.0 + '@dnd-kit/core': 6.3.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@dnd-kit/utilities': 3.2.2(react@19.2.8) + react: 19.2.8 tslib: 2.8.1 - '@dnd-kit/sortable@7.0.2(@dnd-kit/core@6.0.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': + '@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)': dependencies: - '@dnd-kit/core': 6.0.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@dnd-kit/utilities': 3.2.2(react@19.1.0) - react: 19.1.0 + '@dnd-kit/core': 6.3.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@dnd-kit/utilities': 3.2.2(react@19.2.8) + react: 19.2.8 tslib: 2.8.1 - '@dnd-kit/utilities@3.2.2(react@19.1.0)': + '@dnd-kit/utilities@3.2.2(react@19.2.8)': dependencies: - react: 19.1.0 + react: 19.2.8 tslib: 2.8.1 - '@drizzle-team/brocli@0.10.2': {} - - '@emnapi/core@1.4.3': + '@emnapi/core@1.11.2': dependencies: - '@emnapi/wasi-threads': 1.0.2 + '@emnapi/wasi-threads': 1.2.2 tslib: 2.8.1 optional: true - '@emnapi/core@1.9.1': + '@emnapi/core@1.9.2': dependencies: - '@emnapi/wasi-threads': 1.2.0 + '@emnapi/wasi-threads': 1.2.1 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.3': + '@emnapi/core@2.0.0-alpha.3': dependencies: + '@emnapi/wasi-threads': 2.0.1 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.0': + '@emnapi/runtime@2.0.0-alpha.3': dependencies: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.1': + '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.2': + '@emnapi/wasi-threads@1.2.2': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.0': + '@emnapi/wasi-threads@2.0.1': dependencies: tslib: 2.8.1 optional: true - '@emotion/babel-plugin@11.13.5': + '@emotion/babel-plugin@11.13.5(supports-color@10.2.2)': dependencies: - '@babel/helper-module-imports': 7.27.1 - '@babel/runtime': 7.27.1 + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) + '@babel/runtime': 7.29.7 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -9113,19 +11393,19 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0)': + '@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8)(supports-color@10.2.2)': dependencies: - '@babel/runtime': 7.27.1 - '@emotion/babel-plugin': 11.13.5 + '@babel/runtime': 7.29.7 + '@emotion/babel-plugin': 11.13.5(supports-color@10.2.2) '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.8) '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 19.1.0 + react: 19.2.8 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.2.18 transitivePeerDependencies: - supports-color @@ -9135,2008 +11415,2837 @@ snapshots: '@emotion/memoize': 0.9.0 '@emotion/unitless': 0.10.0 '@emotion/utils': 1.4.2 - csstype: 3.1.3 + csstype: 3.2.3 '@emotion/sheet@1.4.0': {} '@emotion/unitless@0.10.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.1.0)': + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.8)': dependencies: - react: 19.1.0 + react: 19.2.8 '@emotion/utils@1.4.2': {} '@emotion/weak-memoize@0.4.0': {} - '@esbuild-kit/core-utils@3.3.2': - dependencies: - esbuild: 0.18.20 - source-map-support: 0.5.21 - - '@esbuild-kit/esm-loader@2.6.5': - dependencies: - '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.13.6 - - '@esbuild/aix-ppc64@0.19.12': + '@esbuild/aix-ppc64@0.28.1': optional: true - '@esbuild/aix-ppc64@0.25.12': + '@esbuild/android-arm64@0.28.1': optional: true - '@esbuild/aix-ppc64@0.27.4': + '@esbuild/android-arm@0.28.1': optional: true - '@esbuild/android-arm64@0.18.20': + '@esbuild/android-x64@0.28.1': optional: true - '@esbuild/android-arm64@0.19.12': + '@esbuild/darwin-arm64@0.28.1': optional: true - '@esbuild/android-arm64@0.25.12': + '@esbuild/darwin-x64@0.28.1': optional: true - '@esbuild/android-arm64@0.27.4': + '@esbuild/freebsd-arm64@0.28.1': optional: true - '@esbuild/android-arm@0.18.20': + '@esbuild/freebsd-x64@0.28.1': optional: true - '@esbuild/android-arm@0.19.12': + '@esbuild/linux-arm64@0.28.1': optional: true - '@esbuild/android-arm@0.25.12': + '@esbuild/linux-arm@0.28.1': optional: true - '@esbuild/android-arm@0.27.4': + '@esbuild/linux-ia32@0.28.1': optional: true - '@esbuild/android-x64@0.18.20': + '@esbuild/linux-loong64@0.28.1': optional: true - '@esbuild/android-x64@0.19.12': + '@esbuild/linux-mips64el@0.28.1': optional: true - '@esbuild/android-x64@0.25.12': + '@esbuild/linux-ppc64@0.28.1': optional: true - '@esbuild/android-x64@0.27.4': + '@esbuild/linux-riscv64@0.28.1': optional: true - '@esbuild/darwin-arm64@0.18.20': + '@esbuild/linux-s390x@0.28.1': optional: true - '@esbuild/darwin-arm64@0.19.12': + '@esbuild/linux-x64@0.28.1': optional: true - '@esbuild/darwin-arm64@0.25.12': + '@esbuild/netbsd-arm64@0.28.1': optional: true - '@esbuild/darwin-arm64@0.27.4': + '@esbuild/netbsd-x64@0.28.1': optional: true - '@esbuild/darwin-x64@0.18.20': + '@esbuild/openbsd-arm64@0.28.1': optional: true - '@esbuild/darwin-x64@0.19.12': + '@esbuild/openbsd-x64@0.28.1': optional: true - '@esbuild/darwin-x64@0.25.12': + '@esbuild/openharmony-arm64@0.28.1': optional: true - '@esbuild/darwin-x64@0.27.4': + '@esbuild/sunos-x64@0.28.1': optional: true - '@esbuild/freebsd-arm64@0.18.20': + '@esbuild/win32-arm64@0.28.1': optional: true - '@esbuild/freebsd-arm64@0.19.12': + '@esbuild/win32-ia32@0.28.1': optional: true - '@esbuild/freebsd-arm64@0.25.12': + '@esbuild/win32-x64@0.28.1': optional: true - '@esbuild/freebsd-arm64@0.27.4': + '@exodus/bytes@1.15.1(@noble/hashes@1.8.0)': + optionalDependencies: + '@noble/hashes': 1.8.0 + + '@faceless-ui/modal@3.0.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + body-scroll-lock: 4.0.0-beta.0 + focus-trap: 7.5.4 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + react-transition-group: 4.4.5(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + + '@faceless-ui/scroll-info@2.0.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@faceless-ui/window-info@3.0.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@fidm/asn1@1.0.4': optional: true - '@esbuild/freebsd-x64@0.18.20': + '@fidm/x509@1.2.1': + dependencies: + '@fidm/asn1': 1.0.4 + tweetnacl: 1.0.3 optional: true - '@esbuild/freebsd-x64@0.19.12': + '@floating-ui/core@1.8.0': + dependencies: + '@floating-ui/utils': 0.2.12 + + '@floating-ui/dom@1.8.0': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + + '@floating-ui/react-dom@2.1.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@floating-ui/dom': 1.8.0 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@floating-ui/react@0.27.20(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@floating-ui/utils': 0.2.12 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + tabbable: 6.5.0 + + '@floating-ui/utils@0.2.12': {} + + '@iconify/react@6.0.2(react@19.2.8)': + dependencies: + '@iconify/types': 2.0.0 + react: 19.2.8 + + '@iconify/types@2.0.0': {} + + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.3.2 optional: true - '@esbuild/freebsd-x64@0.25.12': + '@img/sharp-darwin-x64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.3.2 optional: true - '@esbuild/freebsd-x64@0.27.4': + '@img/sharp-freebsd-wasm32@0.35.3': + dependencies: + '@img/sharp-wasm32': 0.35.3 optional: true - '@esbuild/linux-arm64@0.18.20': + '@img/sharp-libvips-darwin-arm64@1.3.2': optional: true - '@esbuild/linux-arm64@0.19.12': + '@img/sharp-libvips-darwin-x64@1.3.2': optional: true - '@esbuild/linux-arm64@0.25.12': + '@img/sharp-libvips-linux-arm64@1.3.2': optional: true - '@esbuild/linux-arm64@0.27.4': + '@img/sharp-libvips-linux-arm@1.3.2': optional: true - '@esbuild/linux-arm@0.18.20': + '@img/sharp-libvips-linux-ppc64@1.3.2': optional: true - '@esbuild/linux-arm@0.19.12': + '@img/sharp-libvips-linux-riscv64@1.3.2': optional: true - '@esbuild/linux-arm@0.25.12': + '@img/sharp-libvips-linux-s390x@1.3.2': optional: true - '@esbuild/linux-arm@0.27.4': + '@img/sharp-libvips-linux-x64@1.3.2': optional: true - '@esbuild/linux-ia32@0.18.20': + '@img/sharp-libvips-linuxmusl-arm64@1.3.2': optional: true - '@esbuild/linux-ia32@0.19.12': + '@img/sharp-libvips-linuxmusl-x64@1.3.2': optional: true - '@esbuild/linux-ia32@0.25.12': + '@img/sharp-linux-arm64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.3.2 optional: true - '@esbuild/linux-ia32@0.27.4': + '@img/sharp-linux-arm@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.3.2 optional: true - '@esbuild/linux-loong64@0.18.20': + '@img/sharp-linux-ppc64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.3.2 optional: true - '@esbuild/linux-loong64@0.19.12': + '@img/sharp-linux-riscv64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.3.2 optional: true - '@esbuild/linux-loong64@0.25.12': + '@img/sharp-linux-s390x@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.3.2 optional: true - '@esbuild/linux-loong64@0.27.4': + '@img/sharp-linux-x64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.3.2 optional: true - '@esbuild/linux-mips64el@0.18.20': + '@img/sharp-linuxmusl-arm64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.3.2 optional: true - '@esbuild/linux-mips64el@0.19.12': + '@img/sharp-linuxmusl-x64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.3.2 optional: true - '@esbuild/linux-mips64el@0.25.12': + '@img/sharp-wasm32@0.35.3': + dependencies: + '@emnapi/runtime': 2.0.0-alpha.3 optional: true - '@esbuild/linux-mips64el@0.27.4': + '@img/sharp-webcontainers-wasm32@0.35.3': + dependencies: + '@img/sharp-wasm32': 0.35.3 optional: true - '@esbuild/linux-ppc64@0.18.20': + '@img/sharp-win32-arm64@0.35.3': optional: true - '@esbuild/linux-ppc64@0.19.12': + '@img/sharp-win32-ia32@0.35.3': optional: true - '@esbuild/linux-ppc64@0.25.12': + '@img/sharp-win32-x64@0.35.3': optional: true - '@esbuild/linux-ppc64@0.27.4': + '@ioredis/commands@1.10.0': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jsdevtools/ono@7.1.3': {} + + '@leichtgewicht/ip-codec@2.0.5': optional: true - '@esbuild/linux-riscv64@0.18.20': + '@lexical/clipboard@0.41.0': + dependencies: + '@lexical/html': 0.41.0 + '@lexical/list': 0.41.0 + '@lexical/selection': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/code@0.41.0': + dependencies: + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + prismjs: 1.30.0 + + '@lexical/devtools-core@0.41.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@lexical/html': 0.41.0 + '@lexical/link': 0.41.0 + '@lexical/mark': 0.41.0 + '@lexical/table': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@lexical/dragon@0.41.0': + dependencies: + '@lexical/extension': 0.41.0 + lexical: 0.41.0 + + '@lexical/extension@0.41.0': + dependencies: + '@lexical/utils': 0.41.0 + '@preact/signals-core': 1.14.4 + lexical: 0.41.0 + + '@lexical/hashtag@0.41.0': + dependencies: + '@lexical/text': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/headless@0.41.0': + dependencies: + happy-dom: 20.11.1 + lexical: 0.41.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@lexical/history@0.41.0': + dependencies: + '@lexical/extension': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/html@0.41.0': + dependencies: + '@lexical/selection': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/link@0.41.0': + dependencies: + '@lexical/extension': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/list@0.41.0': + dependencies: + '@lexical/extension': 0.41.0 + '@lexical/selection': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/mark@0.41.0': + dependencies: + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/markdown@0.41.0': + dependencies: + '@lexical/code': 0.41.0 + '@lexical/link': 0.41.0 + '@lexical/list': 0.41.0 + '@lexical/rich-text': 0.41.0 + '@lexical/text': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/offset@0.41.0': + dependencies: + lexical: 0.41.0 + + '@lexical/overflow@0.41.0': + dependencies: + lexical: 0.41.0 + + '@lexical/plain-text@0.41.0': + dependencies: + '@lexical/clipboard': 0.41.0 + '@lexical/dragon': 0.41.0 + '@lexical/selection': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/react@0.41.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(yjs@13.6.31)': + dependencies: + '@floating-ui/react': 0.27.20(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@lexical/devtools-core': 0.41.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@lexical/dragon': 0.41.0 + '@lexical/extension': 0.41.0 + '@lexical/hashtag': 0.41.0 + '@lexical/history': 0.41.0 + '@lexical/link': 0.41.0 + '@lexical/list': 0.41.0 + '@lexical/mark': 0.41.0 + '@lexical/markdown': 0.41.0 + '@lexical/overflow': 0.41.0 + '@lexical/plain-text': 0.41.0 + '@lexical/rich-text': 0.41.0 + '@lexical/table': 0.41.0 + '@lexical/text': 0.41.0 + '@lexical/utils': 0.41.0 + '@lexical/yjs': 0.41.0(yjs@13.6.31) + lexical: 0.41.0 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + react-error-boundary: 6.1.2(react@19.2.8) + transitivePeerDependencies: + - yjs + + '@lexical/rich-text@0.41.0': + dependencies: + '@lexical/clipboard': 0.41.0 + '@lexical/dragon': 0.41.0 + '@lexical/selection': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/selection@0.41.0': + dependencies: + lexical: 0.41.0 + + '@lexical/table@0.41.0': + dependencies: + '@lexical/clipboard': 0.41.0 + '@lexical/extension': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/text@0.41.0': + dependencies: + lexical: 0.41.0 + + '@lexical/utils@0.41.0': + dependencies: + '@lexical/selection': 0.41.0 + lexical: 0.41.0 + + '@lexical/yjs@0.41.0(yjs@13.6.31)': + dependencies: + '@lexical/offset': 0.41.0 + '@lexical/selection': 0.41.0 + lexical: 0.41.0 + yjs: 13.6.31 + + '@mdx-js/react@3.1.1(@types/react@19.2.18)(react@19.2.8)': + dependencies: + '@types/mdx': 2.0.14 + '@types/react': 19.2.18 + react: 19.2.8 + + '@mediabunny/prores@1.52.2(mediabunny@1.52.2)': + dependencies: + mediabunny: 1.52.2 + turbores: 1.2.2 + + '@mediabunny/server@1.52.2(mediabunny@1.52.2)(supports-color@10.2.2)': + dependencies: + '@mediabunny/prores': 1.52.2(mediabunny@1.52.2) + mediabunny: 1.52.2 + node-av: 6.1.1(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@minhducsun2002/leb128@1.0.0': optional: true - '@esbuild/linux-riscv64@0.19.12': + '@monaco-editor/loader@1.7.0': + dependencies: + state-local: 1.0.7 + + '@monaco-editor/react@4.7.0(monaco-editor@0.56.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@monaco-editor/loader': 1.7.0 + monaco-editor: 0.56.0 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@mongodb-js/saslprep@1.4.13': + dependencies: + sparse-bitfield: 3.0.3 + + '@napi-rs/canvas-android-arm64@0.1.80': optional: true - '@esbuild/linux-riscv64@0.25.12': + '@napi-rs/canvas-android-arm64@1.0.3': optional: true - '@esbuild/linux-riscv64@0.27.4': + '@napi-rs/canvas-darwin-arm64@0.1.80': optional: true - '@esbuild/linux-s390x@0.18.20': + '@napi-rs/canvas-darwin-arm64@1.0.3': optional: true - '@esbuild/linux-s390x@0.19.12': + '@napi-rs/canvas-darwin-x64@0.1.80': optional: true - '@esbuild/linux-s390x@0.25.12': + '@napi-rs/canvas-darwin-x64@1.0.3': optional: true - '@esbuild/linux-s390x@0.27.4': + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.80': optional: true - '@esbuild/linux-x64@0.18.20': + '@napi-rs/canvas-linux-arm-gnueabihf@1.0.3': optional: true - '@esbuild/linux-x64@0.19.12': + '@napi-rs/canvas-linux-arm64-gnu@0.1.80': optional: true - '@esbuild/linux-x64@0.25.12': + '@napi-rs/canvas-linux-arm64-gnu@1.0.3': optional: true - '@esbuild/linux-x64@0.27.4': + '@napi-rs/canvas-linux-arm64-musl@0.1.80': optional: true - '@esbuild/netbsd-arm64@0.25.12': + '@napi-rs/canvas-linux-arm64-musl@1.0.3': optional: true - '@esbuild/netbsd-arm64@0.27.4': + '@napi-rs/canvas-linux-riscv64-gnu@0.1.80': optional: true - '@esbuild/netbsd-x64@0.18.20': + '@napi-rs/canvas-linux-riscv64-gnu@1.0.3': optional: true - '@esbuild/netbsd-x64@0.19.12': + '@napi-rs/canvas-linux-x64-gnu@0.1.80': optional: true - '@esbuild/netbsd-x64@0.25.12': + '@napi-rs/canvas-linux-x64-gnu@1.0.3': optional: true - '@esbuild/netbsd-x64@0.27.4': + '@napi-rs/canvas-linux-x64-musl@0.1.80': optional: true - '@esbuild/openbsd-arm64@0.25.12': + '@napi-rs/canvas-linux-x64-musl@1.0.3': optional: true - '@esbuild/openbsd-arm64@0.27.4': + '@napi-rs/canvas-win32-arm64-msvc@1.0.3': optional: true - '@esbuild/openbsd-x64@0.18.20': + '@napi-rs/canvas-win32-x64-msvc@0.1.80': optional: true - '@esbuild/openbsd-x64@0.19.12': + '@napi-rs/canvas-win32-x64-msvc@1.0.3': optional: true - '@esbuild/openbsd-x64@0.25.12': + '@napi-rs/canvas@0.1.80': + optionalDependencies: + '@napi-rs/canvas-android-arm64': 0.1.80 + '@napi-rs/canvas-darwin-arm64': 0.1.80 + '@napi-rs/canvas-darwin-x64': 0.1.80 + '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.80 + '@napi-rs/canvas-linux-arm64-gnu': 0.1.80 + '@napi-rs/canvas-linux-arm64-musl': 0.1.80 + '@napi-rs/canvas-linux-riscv64-gnu': 0.1.80 + '@napi-rs/canvas-linux-x64-gnu': 0.1.80 + '@napi-rs/canvas-linux-x64-musl': 0.1.80 + '@napi-rs/canvas-win32-x64-msvc': 0.1.80 + + '@napi-rs/canvas@1.0.3': + optionalDependencies: + '@napi-rs/canvas-android-arm64': 1.0.3 + '@napi-rs/canvas-darwin-arm64': 1.0.3 + '@napi-rs/canvas-darwin-x64': 1.0.3 + '@napi-rs/canvas-linux-arm-gnueabihf': 1.0.3 + '@napi-rs/canvas-linux-arm64-gnu': 1.0.3 + '@napi-rs/canvas-linux-arm64-musl': 1.0.3 + '@napi-rs/canvas-linux-riscv64-gnu': 1.0.3 + '@napi-rs/canvas-linux-x64-gnu': 1.0.3 + '@napi-rs/canvas-linux-x64-musl': 1.0.3 + '@napi-rs/canvas-win32-arm64-msvc': 1.0.3 + '@napi-rs/canvas-win32-x64-msvc': 1.0.3 + + '@napi-rs/wasm-runtime@1.2.0(@emnapi/core@1.11.2)(@emnapi/runtime@2.0.0-alpha.3)': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 2.0.0-alpha.3 + '@tybys/wasm-util': 0.10.3 optional: true - '@esbuild/openbsd-x64@0.27.4': + '@napi-rs/wasm-runtime@1.2.0(@emnapi/core@1.9.2)(@emnapi/runtime@2.0.0-alpha.3)': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 2.0.0-alpha.3 + '@tybys/wasm-util': 0.10.3 optional: true - '@esbuild/openharmony-arm64@0.25.12': + '@napi-rs/wasm-runtime@1.2.0(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)': + dependencies: + '@emnapi/core': 2.0.0-alpha.3 + '@emnapi/runtime': 2.0.0-alpha.3 + '@tybys/wasm-util': 0.10.3 optional: true - '@esbuild/openharmony-arm64@0.27.4': + '@next/env@15.5.22': {} + + '@next/env@16.2.12': {} + + '@next/env@16.3.0': {} + + '@next/swc-darwin-arm64@16.2.12': optional: true - '@esbuild/sunos-x64@0.18.20': + '@next/swc-darwin-arm64@16.3.0': optional: true - '@esbuild/sunos-x64@0.19.12': + '@next/swc-darwin-x64@16.2.12': optional: true - '@esbuild/sunos-x64@0.25.12': + '@next/swc-darwin-x64@16.3.0': optional: true - '@esbuild/sunos-x64@0.27.4': + '@next/swc-linux-arm64-gnu@16.2.12': optional: true - '@esbuild/win32-arm64@0.18.20': + '@next/swc-linux-arm64-gnu@16.3.0': optional: true - '@esbuild/win32-arm64@0.19.12': + '@next/swc-linux-arm64-musl@16.2.12': optional: true - '@esbuild/win32-arm64@0.25.12': + '@next/swc-linux-arm64-musl@16.3.0': optional: true - '@esbuild/win32-arm64@0.27.4': + '@next/swc-linux-x64-gnu@16.2.12': optional: true - '@esbuild/win32-ia32@0.18.20': + '@next/swc-linux-x64-gnu@16.3.0': optional: true - '@esbuild/win32-ia32@0.19.12': + '@next/swc-linux-x64-musl@16.2.12': optional: true - '@esbuild/win32-ia32@0.25.12': + '@next/swc-linux-x64-musl@16.3.0': optional: true - '@esbuild/win32-ia32@0.27.4': + '@next/swc-win32-arm64-msvc@16.2.12': optional: true - '@esbuild/win32-x64@0.18.20': + '@next/swc-win32-arm64-msvc@16.3.0': optional: true - '@esbuild/win32-x64@0.19.12': + '@next/swc-win32-x64-msvc@16.2.12': optional: true - '@esbuild/win32-x64@0.25.12': + '@next/swc-win32-x64-msvc@16.3.0': optional: true - '@esbuild/win32-x64@0.27.4': + '@noble/ciphers@1.3.0': {} + + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.22.0(jiti@2.4.2))': + '@noble/hashes@1.8.0': {} + + '@octokit/auth-token@6.0.0': {} + + '@octokit/core@7.0.7': dependencies: - eslint: 9.22.0(jiti@2.4.2) - eslint-visitor-keys: 3.4.3 + '@octokit/auth-token': 6.0.0 + '@octokit/graphql': 9.0.4 + '@octokit/request': 10.0.13 + '@octokit/request-error': 7.1.1 + '@octokit/types': 17.0.0 + before-after-hook: 4.0.0 + universal-user-agent: 7.0.3 - '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0(jiti@2.4.2))': + '@octokit/endpoint@11.0.4': dependencies: - eslint: 9.26.0(jiti@2.4.2) - eslint-visitor-keys: 3.4.3 + '@octokit/types': 17.0.0 + universal-user-agent: 7.0.3 - '@eslint-community/eslint-utils@4.9.1(eslint@9.26.0(jiti@2.4.2))': + '@octokit/graphql@9.0.4': dependencies: - eslint: 9.26.0(jiti@2.4.2) - eslint-visitor-keys: 3.4.3 - optional: true + '@octokit/request': 10.0.13 + '@octokit/types': 17.0.0 + universal-user-agent: 7.0.3 + + '@octokit/openapi-types@27.0.0': {} + + '@octokit/openapi-types@28.0.0': {} - '@eslint-community/regexpp@4.12.1': {} + '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.7)': + dependencies: + '@octokit/core': 7.0.7 + '@octokit/types': 16.0.0 + + '@octokit/plugin-retry@8.1.1(@octokit/core@7.0.7)': + dependencies: + '@octokit/core': 7.0.7 + '@octokit/request-error': 7.1.1 + '@octokit/types': 17.0.0 + bottleneck: 2.19.5 + + '@octokit/plugin-throttling@11.0.5(@octokit/core@7.0.7)': + dependencies: + '@octokit/core': 7.0.7 + '@octokit/types': 17.0.0 + bottleneck: 2.19.5 + + '@octokit/request-error@7.1.1': + dependencies: + '@octokit/types': 17.0.0 + + '@octokit/request@10.0.13': + dependencies: + '@octokit/endpoint': 11.0.4 + '@octokit/request-error': 7.1.1 + '@octokit/types': 17.0.0 + content-type: 2.1.0 + json-with-bigint: 3.5.11 + universal-user-agent: 7.0.3 + + '@octokit/types@16.0.0': + dependencies: + '@octokit/openapi-types': 27.0.0 + + '@octokit/types@17.0.0': + dependencies: + '@octokit/openapi-types': 28.0.0 + + '@opentelemetry/api-logs@0.220.0': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api-logs@0.57.2': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api@1.9.1': {} + + '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/instrumentation-amqplib@0.46.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-connect@0.43.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 + '@types/connect': 3.4.38 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-dataloader@0.16.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-express@0.47.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fs@0.19.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-generic-pool@0.43.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-graphql@0.47.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-hapi@0.45.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-http@0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.28.0 + forwarded-parse: 2.1.2 + semver: 7.8.5 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-ioredis@0.47.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.43.0 + transitivePeerDependencies: + - supports-color - '@eslint-react/ast@1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@opentelemetry/instrumentation-kafkajs@0.7.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - '@eslint-react/eff': 1.31.0 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - string-ts: 2.2.1 - ts-pattern: 5.7.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 transitivePeerDependencies: - - eslint - supports-color - - typescript - '@eslint-react/core@1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': - dependencies: - '@eslint-react/ast': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.31.0 - '@eslint-react/jsx': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - birecord: 0.1.1 - ts-pattern: 5.7.0 + '@opentelemetry/instrumentation-knex@0.44.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 transitivePeerDependencies: - - eslint - supports-color - - typescript - '@eslint-react/eff@1.31.0': {} - - '@eslint-react/eslint-plugin@1.31.0(eslint@9.22.0(jiti@2.4.2))(ts-api-utils@2.4.0(typescript@5.8.3))(typescript@5.7.3)': - dependencies: - '@eslint-react/eff': 1.31.0 - '@eslint-react/shared': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - eslint-plugin-react-debug: 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-react-dom: 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-react-hooks-extra: 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-react-naming-convention: 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-react-web-api: 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-react-x: 1.31.0(eslint@9.22.0(jiti@2.4.2))(ts-api-utils@2.4.0(typescript@5.8.3))(typescript@5.7.3) - optionalDependencies: - typescript: 5.7.3 + '@opentelemetry/instrumentation-koa@0.47.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 transitivePeerDependencies: - supports-color - - ts-api-utils - '@eslint-react/jsx@1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@opentelemetry/instrumentation-lru-memoizer@0.44.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - '@eslint-react/ast': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.31.0 - '@eslint-react/var': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - ts-pattern: 5.7.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) transitivePeerDependencies: - - eslint - supports-color - - typescript - '@eslint-react/shared@1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@opentelemetry/instrumentation-mongodb@0.52.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - '@eslint-react/eff': 1.31.0 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - picomatch: 4.0.4 - ts-pattern: 5.7.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 transitivePeerDependencies: - - eslint - supports-color - - typescript - '@eslint-react/var@1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@opentelemetry/instrumentation-mongoose@0.46.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - '@eslint-react/ast': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.31.0 - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - string-ts: 2.2.1 - ts-pattern: 5.7.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 transitivePeerDependencies: - - eslint - supports-color - - typescript - '@eslint/config-array@0.19.2': + '@opentelemetry/instrumentation-mysql2@0.45.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.0 - minimatch: 3.1.5 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.1) transitivePeerDependencies: - supports-color - '@eslint/config-array@0.20.0': + '@opentelemetry/instrumentation-mysql@0.45.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.0 - minimatch: 3.1.5 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 + '@types/mysql': 2.15.26 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.1.0': {} - - '@eslint/config-helpers@0.2.1': {} - - '@eslint/core@0.12.0': + '@opentelemetry/instrumentation-pg@0.51.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - '@types/json-schema': 7.0.15 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.1) + '@types/pg': 8.6.1 + '@types/pg-pool': 2.0.6 + transitivePeerDependencies: + - supports-color - '@eslint/core@0.13.0': + '@opentelemetry/instrumentation-redis-4@0.46.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - '@types/json-schema': 7.0.15 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.43.0 + transitivePeerDependencies: + - supports-color - '@eslint/eslintrc@3.3.1': + '@opentelemetry/instrumentation-tedious@0.18.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - ajv: 6.14.0 - debug: 4.4.0 - espree: 10.3.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.0 - js-yaml: 4.1.1 - minimatch: 3.1.5 - strip-json-comments: 3.1.1 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/semantic-conventions': 1.43.0 + '@types/tedious': 4.0.14 transitivePeerDependencies: - supports-color - '@eslint/js@9.22.0': {} - - '@eslint/js@9.26.0': {} - - '@eslint/object-schema@2.1.6': {} - - '@eslint/plugin-kit@0.2.8': + '@opentelemetry/instrumentation-undici@0.10.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - '@eslint/core': 0.13.0 - levn: 0.4.1 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - '@faceless-ui/modal@3.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - body-scroll-lock: 4.0.0-beta.0 - focus-trap: 7.5.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.220.0 + import-in-the-middle: 3.3.2 + require-in-the-middle: 8.0.1(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - '@faceless-ui/modal@3.0.0-beta.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - body-scroll-lock: 4.0.0-beta.0 - focus-trap: 7.5.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.57.2 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.15.0 + require-in-the-middle: 7.5.2(supports-color@10.2.2) + semver: 7.8.5 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color - '@faceless-ui/scroll-info@2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@opentelemetry/redis-common@0.36.2': {} - '@faceless-ui/window-info@3.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.1)': dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - - '@fastify/busboy@2.1.1': {} + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.28.0 - '@floating-ui/core@1.7.0': + '@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@floating-ui/utils': 0.2.9 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 - '@floating-ui/dom@1.7.0': + '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.1)': dependencies: - '@floating-ui/core': 1.7.0 - '@floating-ui/utils': 0.2.9 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.28.0 - '@floating-ui/react-dom@2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@floating-ui/dom': 1.7.0 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 - '@floating-ui/react@0.27.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@opentelemetry/sdk-trace@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@floating-ui/utils': 0.2.9 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - tabbable: 6.2.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 - '@floating-ui/utils@0.2.9': {} - - '@hono/node-server@1.19.11(hono@4.12.8)': - dependencies: - hono: 4.12.8 + '@opentelemetry/semantic-conventions@1.28.0': {} - '@humanfs/core@0.19.1': {} + '@opentelemetry/semantic-conventions@1.43.0': {} - '@humanfs/node@0.16.6': + '@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.9.1)': dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.2': {} - - '@img/colour@1.1.0': + '@oxc-parser/binding-android-arm-eabi@0.127.0': optional: true - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@oxc-parser/binding-android-arm64@0.127.0': optional: true - '@img/sharp-darwin-arm64@0.34.1': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.1.0 + '@oxc-parser/binding-darwin-arm64@0.127.0': optional: true - '@img/sharp-darwin-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@oxc-parser/binding-darwin-x64@0.127.0': optional: true - '@img/sharp-darwin-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 + '@oxc-parser/binding-freebsd-x64@0.127.0': optional: true - '@img/sharp-darwin-x64@0.34.1': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.1.0 + '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': optional: true - '@img/sharp-darwin-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 + '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': optional: true - '@img/sharp-libvips-darwin-arm64@1.0.4': + '@oxc-parser/binding-linux-arm64-gnu@0.127.0': optional: true - '@img/sharp-libvips-darwin-arm64@1.1.0': + '@oxc-parser/binding-linux-arm64-musl@0.127.0': optional: true - '@img/sharp-libvips-darwin-arm64@1.2.4': + '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': + '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': optional: true - '@img/sharp-libvips-darwin-x64@1.1.0': + '@oxc-parser/binding-linux-riscv64-musl@0.127.0': optional: true - '@img/sharp-libvips-darwin-x64@1.2.4': + '@oxc-parser/binding-linux-s390x-gnu@0.127.0': optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': + '@oxc-parser/binding-linux-x64-gnu@0.127.0': optional: true - '@img/sharp-libvips-linux-arm64@1.1.0': + '@oxc-parser/binding-linux-x64-musl@0.127.0': optional: true - '@img/sharp-libvips-linux-arm64@1.2.4': + '@oxc-parser/binding-openharmony-arm64@0.127.0': optional: true - '@img/sharp-libvips-linux-arm@1.0.5': + '@oxc-parser/binding-wasm32-wasi@0.127.0': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 2.0.0-alpha.3 + '@napi-rs/wasm-runtime': 1.2.0(@emnapi/core@1.9.2)(@emnapi/runtime@2.0.0-alpha.3) optional: true - '@img/sharp-libvips-linux-arm@1.1.0': + '@oxc-parser/binding-win32-arm64-msvc@0.127.0': optional: true - '@img/sharp-libvips-linux-arm@1.2.4': + '@oxc-parser/binding-win32-ia32-msvc@0.127.0': optional: true - '@img/sharp-libvips-linux-ppc64@1.1.0': + '@oxc-parser/binding-win32-x64-msvc@0.127.0': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.4': - optional: true + '@oxc-project/types@0.127.0': {} - '@img/sharp-libvips-linux-riscv64@1.2.4': - optional: true + '@oxc-project/types@0.142.0': {} - '@img/sharp-libvips-linux-s390x@1.0.4': + '@oxc-resolver/binding-android-arm-eabi@11.24.2': optional: true - '@img/sharp-libvips-linux-s390x@1.1.0': + '@oxc-resolver/binding-android-arm64@11.24.2': optional: true - '@img/sharp-libvips-linux-s390x@1.2.4': + '@oxc-resolver/binding-darwin-arm64@11.24.2': optional: true - '@img/sharp-libvips-linux-x64@1.0.4': + '@oxc-resolver/binding-darwin-x64@11.24.2': optional: true - '@img/sharp-libvips-linux-x64@1.1.0': + '@oxc-resolver/binding-freebsd-x64@11.24.2': optional: true - '@img/sharp-libvips-linux-x64@1.2.4': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.1.0': + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.4': + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': optional: true - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': optional: true - '@img/sharp-linux-arm64@0.34.1': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.1.0 + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': optional: true - '@img/sharp-linux-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 + '@oxc-resolver/binding-linux-x64-musl@11.24.2': optional: true - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 + '@oxc-resolver/binding-openharmony-arm64@11.24.2': optional: true - '@img/sharp-linux-arm@0.34.1': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.1.0 + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 2.0.0-alpha.3 + '@napi-rs/wasm-runtime': 1.2.0(@emnapi/core@1.11.2)(@emnapi/runtime@2.0.0-alpha.3) optional: true - '@img/sharp-linux-arm@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': optional: true - '@img/sharp-linux-ppc64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': optional: true - '@img/sharp-linux-riscv64@0.34.5': + '@paper-design/shaders-react@0.0.80(@types/react@19.2.18)(react@19.2.8)': + dependencies: + '@paper-design/shaders': 0.0.80 + react: 19.2.8 optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 - optional: true + '@types/react': 19.2.18 - '@img/sharp-linux-s390x@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 - optional: true + '@paper-design/shaders@0.0.80': {} - '@img/sharp-linux-s390x@0.34.1': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.1.0 - optional: true + '@payloadcms/db-mongodb@3.87.0(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)': + dependencies: + mongoose: 8.22.1(supports-color@10.2.2) + mongoose-paginate-v2: 1.9.4(mongoose@8.22.1(supports-color@10.2.2)) + payload: 3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3) + prompts: 2.4.2 + uuid: 13.0.2 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - gcp-metadata + - kerberos + - mongodb-client-encryption + - snappy + - socks + - supports-color - '@img/sharp-linux-s390x@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 - optional: true + '@payloadcms/graphql@3.87.0(graphql@16.14.2)(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(typescript@6.0.3)': + dependencies: + graphql: 16.14.2 + graphql-scalars: 1.22.2(graphql@16.14.2) + payload: 3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3) + pluralize: 8.0.0 + ts-essentials: 10.0.3(typescript@6.0.3) + tsx: 4.22.4 + transitivePeerDependencies: + - typescript - '@img/sharp-linux-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 - optional: true + '@payloadcms/kv-redis@3.87.0(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)': + dependencies: + ioredis: 5.11.1(supports-color@10.2.2) + payload: 3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3) + transitivePeerDependencies: + - supports-color - '@img/sharp-linux-x64@0.34.1': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.1.0 - optional: true + '@payloadcms/live-preview-react@3.87.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@payloadcms/live-preview': 3.87.0 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) - '@img/sharp-linux-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 - optional: true + '@payloadcms/live-preview@3.87.0': {} - '@img/sharp-linuxmusl-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - optional: true + '@payloadcms/next@3.87.0(@types/react@19.2.18)(graphql@16.14.2)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@dnd-kit/core': 6.3.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@dnd-kit/modifiers': 9.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8) + '@dnd-kit/sortable': 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8) + '@payloadcms/graphql': 3.87.0(graphql@16.14.2)(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(typescript@6.0.3) + '@payloadcms/translations': 3.87.0 + '@payloadcms/ui': 3.87.0(@types/react@19.2.18)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3) + busboy: 1.6.0 + dequal: 2.0.3 + file-type: 21.3.4(supports-color@10.2.2) + graphql: 16.14.2 + graphql-http: 1.22.4(graphql@16.14.2) + graphql-playground-html: 1.6.30 + http-status: 2.1.0 + next: 16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4) + path-to-regexp: 6.3.0 + payload: 3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3) + qs-esm: 8.0.1 + sass: 1.77.4 + uuid: 13.0.2 + transitivePeerDependencies: + - '@types/react' + - monaco-editor + - react + - react-dom + - supports-color + - typescript - '@img/sharp-linuxmusl-arm64@0.34.1': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 - optional: true + '@payloadcms/plugin-cloud-storage@3.87.0(@types/react@19.2.18)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@payloadcms/ui': 3.87.0(@types/react@19.2.18)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3) + find-node-modules: 2.1.3 + payload: 3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3) + range-parser: 1.3.0 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + transitivePeerDependencies: + - '@types/react' + - monaco-editor + - next + - supports-color + - typescript - '@img/sharp-linuxmusl-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - optional: true + '@payloadcms/plugin-import-export@3.87.0(@payloadcms/ui@3.87.0(@types/react@19.2.18)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@faceless-ui/modal': 3.0.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@payloadcms/translations': 3.87.0 + '@payloadcms/ui': 3.87.0(@types/react@19.2.18)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3) + csv-parse: 5.6.0 + csv-stringify: 6.5.2 + payload: 3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3) + qs-esm: 8.0.1 + transitivePeerDependencies: + - react + - react-dom - '@img/sharp-linuxmusl-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - optional: true + '@payloadcms/plugin-sentry@3.87.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))': + dependencies: + '@sentry/nextjs': 9.47.1(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(react@19.2.8)(supports-color@10.2.2)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + '@sentry/types': 9.47.1 + payload: 3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + transitivePeerDependencies: + - '@opentelemetry/context-async-hooks' + - '@opentelemetry/core' + - '@opentelemetry/sdk-trace-base' + - encoding + - next + - supports-color + - webpack + + '@payloadcms/richtext-lexical@3.87.0(d814e5a826d0728ec24c6450222035ea)': + dependencies: + '@faceless-ui/modal': 3.0.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@faceless-ui/scroll-info': 2.0.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@lexical/clipboard': 0.41.0 + '@lexical/headless': 0.41.0 + '@lexical/html': 0.41.0 + '@lexical/link': 0.41.0 + '@lexical/list': 0.41.0 + '@lexical/mark': 0.41.0 + '@lexical/react': 0.41.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(yjs@13.6.31) + '@lexical/rich-text': 0.41.0 + '@lexical/selection': 0.41.0 + '@lexical/table': 0.41.0 + '@lexical/utils': 0.41.0 + '@payloadcms/next': 3.87.0(@types/react@19.2.18)(graphql@16.14.2)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3) + '@payloadcms/translations': 3.87.0 + '@payloadcms/ui': 3.87.0(@types/react@19.2.18)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3) + acorn: 8.16.0 + bson-objectid: 2.0.4 + csstype: 3.1.3 + dequal: 2.0.3 + escape-html: 1.0.3 + jsox: 1.2.121 + lexical: 0.41.0 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) + mdast-util-mdx-jsx: 3.1.3(supports-color@10.2.2) + micromark-extension-mdx-jsx: 3.0.1 + payload: 3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3) + qs-esm: 8.0.1 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + react-error-boundary: 4.1.2(react@19.2.8) + ts-essentials: 10.0.3(typescript@6.0.3) + uuid: 13.0.2 + transitivePeerDependencies: + - '@types/react' + - bufferutil + - monaco-editor + - next + - supports-color + - typescript + - utf-8-validate + - yjs - '@img/sharp-linuxmusl-x64@0.34.1': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.1.0 - optional: true + '@payloadcms/storage-s3@3.87.0(@types/react@19.2.18)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@aws-sdk/client-s3': 3.1100.0 + '@aws-sdk/lib-storage': 3.1100.0(@aws-sdk/client-s3@3.1100.0) + '@aws-sdk/s3-request-presigner': 3.1100.0 + '@payloadcms/plugin-cloud-storage': 3.87.0(@types/react@19.2.18)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3) + payload: 3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3) + transitivePeerDependencies: + - '@types/react' + - monaco-editor + - next + - react + - react-dom + - supports-color + - typescript - '@img/sharp-linuxmusl-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@payloadcms/translations@3.87.0': + dependencies: + date-fns: 4.1.0 + + '@payloadcms/ui@3.87.0(@types/react@19.2.18)(monaco-editor@0.56.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(typescript@6.0.3)': + dependencies: + '@date-fns/tz': 1.2.0 + '@dnd-kit/core': 6.3.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@dnd-kit/sortable': 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8) + '@dnd-kit/utilities': 3.2.2(react@19.2.8) + '@faceless-ui/modal': 3.0.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@faceless-ui/scroll-info': 2.0.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@faceless-ui/window-info': 3.0.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@monaco-editor/react': 4.7.0(monaco-editor@0.56.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@payloadcms/translations': 3.87.0 + bson-objectid: 2.0.4 + date-fns: 4.1.0 + dequal: 2.0.3 + md5: 2.3.0 + next: 16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4) + object-to-formdata: 4.5.1 + payload: 3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3) + qs-esm: 8.0.1 + react: 19.2.8 + react-datepicker: 7.6.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react-dom: 19.2.8(react@19.2.8) + react-image-crop: 10.1.8(react@19.2.8) + react-select: 5.9.0(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2) + scheduler: 0.25.0 + sonner: 1.7.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + ts-essentials: 10.0.3(typescript@6.0.3) + use-context-selector: 2.0.0(react@19.2.8)(scheduler@0.25.0) + uuid: 13.0.2 + transitivePeerDependencies: + - '@types/react' + - monaco-editor + - supports-color + - typescript + + '@peculiar/asn1-cms@2.8.0': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + '@peculiar/asn1-x509-attr': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 optional: true - '@img/sharp-wasm32@0.33.5': + '@peculiar/asn1-csr@2.8.0': dependencies: - '@emnapi/runtime': 1.4.3 + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 optional: true - '@img/sharp-wasm32@0.34.1': + '@peculiar/asn1-ecc@2.8.0': dependencies: - '@emnapi/runtime': 1.4.3 + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 optional: true - '@img/sharp-wasm32@0.34.5': + '@peculiar/asn1-pfx@2.8.0': dependencies: - '@emnapi/runtime': 1.9.0 + '@peculiar/asn1-cms': 2.8.0 + '@peculiar/asn1-pkcs8': 2.8.0 + '@peculiar/asn1-rsa': 2.8.0 + '@peculiar/asn1-schema': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 optional: true - '@img/sharp-win32-arm64@0.34.5': + '@peculiar/asn1-pkcs8@2.8.0': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 optional: true - '@img/sharp-win32-ia32@0.33.5': + '@peculiar/asn1-pkcs9@2.8.0': + dependencies: + '@peculiar/asn1-cms': 2.8.0 + '@peculiar/asn1-pfx': 2.8.0 + '@peculiar/asn1-pkcs8': 2.8.0 + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + '@peculiar/asn1-x509-attr': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 optional: true - '@img/sharp-win32-ia32@0.34.1': + '@peculiar/asn1-rsa@2.8.0': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 optional: true - '@img/sharp-win32-ia32@0.34.5': + '@peculiar/asn1-schema@2.8.0': + dependencies: + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 optional: true - '@img/sharp-win32-x64@0.33.5': + '@peculiar/asn1-x509-attr@2.8.0': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + asn1js: 3.0.10 + tslib: 2.8.1 optional: true - '@img/sharp-win32-x64@0.34.1': + '@peculiar/asn1-x509@2.8.0': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 optional: true - '@img/sharp-win32-x64@0.34.5': + '@peculiar/utils@2.0.3': + dependencies: + tslib: 2.8.1 optional: true - '@isaacs/cliui@8.0.2': + '@peculiar/x509@1.14.3': dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 + '@peculiar/asn1-cms': 2.8.0 + '@peculiar/asn1-csr': 2.8.0 + '@peculiar/asn1-ecc': 2.8.0 + '@peculiar/asn1-pkcs9': 2.8.0 + '@peculiar/asn1-rsa': 2.8.0 + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-x509': 2.8.0 + pvtsutils: 1.3.6 + reflect-metadata: 0.2.2 + tslib: 2.8.1 + tsyringe: 4.10.0 + optional: true - '@jridgewell/gen-mapping@0.3.13': + '@pinojs/redact@0.4.0': {} + + '@playwright/test@1.62.1': dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 + playwright: 1.62.1 - '@jridgewell/gen-mapping@0.3.8': + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.14.2)(type-fest@5.8.0)(webpack-hot-middleware@2.26.1)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + ansi-html: 0.0.9 + core-js-pure: 3.49.0 + error-stack-parser: 2.1.4 + html-entities: 2.6.0 + loader-utils: 2.0.4 + react-refresh: 0.14.2 + schema-utils: 4.3.3 + source-map: 0.7.6 + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) + optionalDependencies: + type-fest: 5.8.0 + webpack-hot-middleware: 2.26.1 - '@jridgewell/resolve-uri@3.1.2': {} + '@pnpm/config.env-replace@1.1.0': {} - '@jridgewell/set-array@1.2.1': {} + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 - '@jridgewell/source-map@0.3.11': + '@pnpm/npm-conf@3.0.3': dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 - '@jridgewell/source-map@0.3.6': + '@poppinss/colors@4.1.6': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + kleur: 4.1.5 - '@jridgewell/sourcemap-codec@1.5.0': {} + '@poppinss/dumper@0.6.5': + dependencies: + '@poppinss/colors': 4.1.6 + '@sindresorhus/is': 7.2.0 + supports-color: 10.2.2 - '@jridgewell/sourcemap-codec@1.5.5': {} + '@poppinss/exception@1.2.3': {} - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@preact/signals-core@1.14.4': {} - '@jridgewell/trace-mapping@0.3.31': + '@prisma/instrumentation@6.11.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - '@jsdevtools/ono@7.1.3': {} + '@radix-ui/primitive@1.1.7': {} + + '@radix-ui/react-arrow@1.1.15(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) + + '@radix-ui/react-collapsible@1.1.20(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-id': 1.1.4(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-presence': 1.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.18)(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@lexical/clipboard@0.27.1': + '@radix-ui/react-compose-refs@1.1.5(@types/react@19.2.18)(react@19.2.8)': dependencies: - '@lexical/html': 0.27.1 - '@lexical/list': 0.27.1 - '@lexical/selection': 0.27.1 - '@lexical/utils': 0.27.1 - lexical: 0.27.1 + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 - '@lexical/clipboard@0.28.0': + '@radix-ui/react-context@1.2.2(@types/react@19.2.18)(react@19.2.8)': dependencies: - '@lexical/html': 0.28.0 - '@lexical/list': 0.28.0 - '@lexical/selection': 0.28.0 - '@lexical/utils': 0.28.0 - lexical: 0.28.0 + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 - '@lexical/code@0.27.1': + '@radix-ui/react-dismissable-layer@1.1.19(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@lexical/utils': 0.27.1 - lexical: 0.27.1 - prismjs: 1.30.0 + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-use-effect-event': 0.0.5(@types/react@19.2.18)(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@lexical/code@0.28.0': + '@radix-ui/react-id@1.1.4(@types/react@19.2.18)(react@19.2.8)': dependencies: - '@lexical/utils': 0.28.0 - lexical: 0.28.0 - prismjs: 1.30.0 + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.18)(react@19.2.8) + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 + + '@radix-ui/react-popper@1.3.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-arrow': 1.1.15(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-use-rect': 1.1.4(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-use-size': 1.1.4(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/rect': 1.1.3 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@lexical/devtools-core@0.27.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-portal@1.1.17(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@lexical/html': 0.27.1 - '@lexical/link': 0.27.1 - '@lexical/mark': 0.27.1 - '@lexical/table': 0.27.1 - '@lexical/utils': 0.27.1 - lexical: 0.27.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.18)(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@lexical/devtools-core@0.28.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-presence@1.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@lexical/html': 0.28.0 - '@lexical/link': 0.28.0 - '@lexical/mark': 0.28.0 - '@lexical/table': 0.28.0 - '@lexical/utils': 0.28.0 - lexical: 0.28.0 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.18)(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@lexical/dragon@0.27.1': + '@radix-ui/react-primitive@2.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - lexical: 0.27.1 + '@radix-ui/react-slot': 1.3.3(@types/react@19.2.18)(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@lexical/dragon@0.28.0': + '@radix-ui/react-separator@1.1.15(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - lexical: 0.28.0 + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@lexical/hashtag@0.27.1': + '@radix-ui/react-slot@1.3.3(@types/react@19.2.18)(react@19.2.8)': dependencies: - '@lexical/utils': 0.27.1 - lexical: 0.27.1 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.18)(react@19.2.8) + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 + + '@radix-ui/react-switch@1.3.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-use-size': 1.1.4(@types/react@19.2.18)(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) + + '@radix-ui/react-tooltip@1.2.16(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-dismissable-layer': 1.1.19(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-id': 1.1.4(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-popper': 1.3.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-portal': 1.1.17(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-presence': 1.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-slot': 1.3.3(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-visually-hidden': 1.2.11(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@lexical/hashtag@0.28.0': + '@radix-ui/react-use-callback-ref@1.1.4(@types/react@19.2.18)(react@19.2.8)': dependencies: - '@lexical/utils': 0.28.0 - lexical: 0.28.0 + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 - '@lexical/headless@0.27.1': + '@radix-ui/react-use-controllable-state@1.2.6(@types/react@19.2.18)(react@19.2.8)': dependencies: - lexical: 0.27.1 + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-use-effect-event': 0.0.5(@types/react@19.2.18)(react@19.2.8) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.18)(react@19.2.8) + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 - '@lexical/headless@0.28.0': + '@radix-ui/react-use-effect-event@0.0.5(@types/react@19.2.18)(react@19.2.8)': dependencies: - lexical: 0.28.0 + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.18)(react@19.2.8) + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 - '@lexical/history@0.27.1': + '@radix-ui/react-use-layout-effect@1.1.4(@types/react@19.2.18)(react@19.2.8)': dependencies: - '@lexical/utils': 0.27.1 - lexical: 0.27.1 + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 - '@lexical/history@0.28.0': + '@radix-ui/react-use-rect@1.1.4(@types/react@19.2.18)(react@19.2.8)': dependencies: - '@lexical/utils': 0.28.0 - lexical: 0.28.0 + '@radix-ui/rect': 1.1.3 + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 - '@lexical/html@0.27.1': + '@radix-ui/react-use-size@1.1.4(@types/react@19.2.18)(react@19.2.8)': dependencies: - '@lexical/selection': 0.27.1 - '@lexical/utils': 0.27.1 - lexical: 0.27.1 + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.18)(react@19.2.8) + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 - '@lexical/html@0.28.0': + '@radix-ui/react-visually-hidden@1.2.11(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@lexical/selection': 0.28.0 - '@lexical/utils': 0.28.0 - lexical: 0.28.0 + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@lexical/link@0.27.1': + '@radix-ui/rect@1.1.3': {} + + '@react-email/render@2.1.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@lexical/utils': 0.27.1 - lexical: 0.27.1 + entities: 4.5.0 + html-to-text: 9.0.5 + html5parser: 3.0.0 + prettier: 3.9.6 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) - '@lexical/link@0.28.0': + '@react-email/ui@6.9.2(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4)': dependencies: - '@lexical/utils': 0.28.0 - lexical: 0.28.0 + esbuild: 0.28.1 + next: 16.3.0(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4) + transitivePeerDependencies: + - '@babel/core' + - '@opentelemetry/api' + - '@playwright/test' + - '@types/node' + - babel-plugin-macros + - babel-plugin-react-compiler + - react + - react-dom + - sass + + '@react-pdf/fns@3.1.3': {} - '@lexical/list@0.27.1': + '@react-pdf/font@4.0.8': dependencies: - '@lexical/utils': 0.27.1 - lexical: 0.27.1 + '@react-pdf/pdfkit': 5.1.1 + '@react-pdf/types': 2.11.1 + fontkit: 2.0.4 + is-url: 1.2.4 - '@lexical/list@0.28.0': + '@react-pdf/image@3.1.0': dependencies: - '@lexical/selection': 0.28.0 - '@lexical/utils': 0.28.0 - lexical: 0.28.0 + '@react-pdf/svg': 1.1.0 + jay-peg: 1.1.1 + png-js: 2.0.0 - '@lexical/mark@0.27.1': + '@react-pdf/layout@4.6.1': dependencies: - '@lexical/utils': 0.27.1 - lexical: 0.27.1 + '@react-pdf/fns': 3.1.3 + '@react-pdf/image': 3.1.0 + '@react-pdf/primitives': 4.3.0 + '@react-pdf/stylesheet': 6.2.1 + '@react-pdf/textkit': 6.3.0 + '@react-pdf/types': 2.11.1 + emoji-regex-xs: 1.0.0 + queue: 6.0.2 + yoga-layout: 3.2.1 - '@lexical/mark@0.28.0': + '@react-pdf/pdfkit@5.1.1': dependencies: - '@lexical/utils': 0.28.0 - lexical: 0.28.0 + '@babel/runtime': 7.29.7 + '@noble/ciphers': 1.3.0 + '@noble/hashes': 1.8.0 + browserify-zlib: 0.2.0 + fontkit: 2.0.4 + jay-peg: 1.1.1 + js-md5: 0.8.3 + linebreak: 1.1.0 + png-js: 2.0.0 + vite-compatible-readable-stream: 3.6.1 - '@lexical/markdown@0.27.1': + '@react-pdf/primitives@4.3.0': {} + + '@react-pdf/reconciler@2.0.0(react@19.2.8)': dependencies: - '@lexical/code': 0.27.1 - '@lexical/link': 0.27.1 - '@lexical/list': 0.27.1 - '@lexical/rich-text': 0.27.1 - '@lexical/text': 0.27.1 - '@lexical/utils': 0.27.1 - lexical: 0.27.1 + object-assign: 4.1.1 + react: 19.2.8 + scheduler: 0.25.0-rc-603e6108-20241029 + + '@react-pdf/render@4.5.1': + dependencies: + '@babel/runtime': 7.29.7 + '@react-pdf/fns': 3.1.3 + '@react-pdf/primitives': 4.3.0 + '@react-pdf/textkit': 6.3.0 + '@react-pdf/types': 2.11.1 + abs-svg-path: 0.1.1 + color-string: 2.1.4 + normalize-svg-path: 1.1.0 + parse-svg-path: 0.1.2 + svg-arc-to-cubic-bezier: 3.2.0 + + '@react-pdf/renderer@4.5.1(react@19.2.8)': + dependencies: + '@babel/runtime': 7.29.7 + '@react-pdf/fns': 3.1.3 + '@react-pdf/font': 4.0.8 + '@react-pdf/layout': 4.6.1 + '@react-pdf/pdfkit': 5.1.1 + '@react-pdf/primitives': 4.3.0 + '@react-pdf/reconciler': 2.0.0(react@19.2.8) + '@react-pdf/render': 4.5.1 + '@react-pdf/types': 2.11.1 + events: 3.3.0 + object-assign: 4.1.1 + prop-types: 15.8.1 + queue: 6.0.2 + react: 19.2.8 - '@lexical/markdown@0.28.0': + '@react-pdf/stylesheet@6.2.1': dependencies: - '@lexical/code': 0.28.0 - '@lexical/link': 0.28.0 - '@lexical/list': 0.28.0 - '@lexical/rich-text': 0.28.0 - '@lexical/text': 0.28.0 - '@lexical/utils': 0.28.0 - lexical: 0.28.0 + '@react-pdf/fns': 3.1.3 + '@react-pdf/types': 2.11.1 + color-string: 2.1.4 + hsl-to-hex: 1.0.0 + media-engine: 1.0.3 + postcss-value-parser: 4.2.0 - '@lexical/offset@0.27.1': + '@react-pdf/svg@1.1.0': dependencies: - lexical: 0.27.1 + '@react-pdf/primitives': 4.3.0 - '@lexical/offset@0.28.0': + '@react-pdf/textkit@6.3.0': dependencies: - lexical: 0.28.0 + '@react-pdf/fns': 3.1.3 + bidi-js: 1.0.3 + hyphen: 1.14.1 + unicode-properties: 1.4.1 - '@lexical/overflow@0.27.1': + '@react-pdf/types@2.11.1': dependencies: - lexical: 0.27.1 + '@react-pdf/font': 4.0.8 + '@react-pdf/primitives': 4.3.0 + '@react-pdf/stylesheet': 6.2.1 - '@lexical/overflow@0.28.0': + '@redis/bloom@1.2.0(@redis/client@1.6.0)': dependencies: - lexical: 0.28.0 + '@redis/client': 1.6.0 - '@lexical/plain-text@0.27.1': + '@redis/client@1.6.0': dependencies: - '@lexical/clipboard': 0.27.1 - '@lexical/selection': 0.27.1 - '@lexical/utils': 0.27.1 - lexical: 0.27.1 + cluster-key-slot: 1.1.2 + generic-pool: 3.9.0 + yallist: 4.0.0 - '@lexical/plain-text@0.28.0': + '@redis/graph@1.1.1(@redis/client@1.6.0)': dependencies: - '@lexical/clipboard': 0.28.0 - '@lexical/selection': 0.28.0 - '@lexical/utils': 0.28.0 - lexical: 0.28.0 + '@redis/client': 1.6.0 - '@lexical/react@0.27.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(yjs@13.6.26)': + '@redis/json@1.0.7(@redis/client@1.6.0)': dependencies: - '@lexical/clipboard': 0.27.1 - '@lexical/code': 0.27.1 - '@lexical/devtools-core': 0.27.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@lexical/dragon': 0.27.1 - '@lexical/hashtag': 0.27.1 - '@lexical/history': 0.27.1 - '@lexical/link': 0.27.1 - '@lexical/list': 0.27.1 - '@lexical/mark': 0.27.1 - '@lexical/markdown': 0.27.1 - '@lexical/overflow': 0.27.1 - '@lexical/plain-text': 0.27.1 - '@lexical/rich-text': 0.27.1 - '@lexical/selection': 0.27.1 - '@lexical/table': 0.27.1 - '@lexical/text': 0.27.1 - '@lexical/utils': 0.27.1 - '@lexical/yjs': 0.27.1(yjs@13.6.26) - lexical: 0.27.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-error-boundary: 3.1.4(react@19.1.0) - transitivePeerDependencies: - - yjs - - '@lexical/react@0.28.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(yjs@13.6.26)': - dependencies: - '@lexical/devtools-core': 0.28.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@lexical/dragon': 0.28.0 - '@lexical/hashtag': 0.28.0 - '@lexical/history': 0.28.0 - '@lexical/link': 0.28.0 - '@lexical/list': 0.28.0 - '@lexical/mark': 0.28.0 - '@lexical/markdown': 0.28.0 - '@lexical/overflow': 0.28.0 - '@lexical/plain-text': 0.28.0 - '@lexical/rich-text': 0.28.0 - '@lexical/table': 0.28.0 - '@lexical/text': 0.28.0 - '@lexical/utils': 0.28.0 - '@lexical/yjs': 0.28.0(yjs@13.6.26) - lexical: 0.28.0 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-error-boundary: 3.1.4(react@19.1.0) - transitivePeerDependencies: - - yjs + '@redis/client': 1.6.0 - '@lexical/rich-text@0.27.1': + '@redis/search@1.2.0(@redis/client@1.6.0)': dependencies: - '@lexical/clipboard': 0.27.1 - '@lexical/selection': 0.27.1 - '@lexical/utils': 0.27.1 - lexical: 0.27.1 + '@redis/client': 1.6.0 - '@lexical/rich-text@0.28.0': + '@redis/time-series@1.1.0(@redis/client@1.6.0)': dependencies: - '@lexical/clipboard': 0.28.0 - '@lexical/selection': 0.28.0 - '@lexical/utils': 0.28.0 - lexical: 0.28.0 + '@redis/client': 1.6.0 - '@lexical/selection@0.27.1': + '@reduxjs/toolkit@2.12.0(react-redux@9.3.0(@types/react@19.2.18)(react@19.2.8)(redux@5.0.1))(react@19.2.8)': dependencies: - lexical: 0.27.1 + '@standard-schema/spec': 1.1.0 + '@standard-schema/utils': 0.3.0 + immer: 11.1.15 + redux: 5.0.1 + redux-thunk: 3.1.0(redux@5.0.1) + reselect: 5.2.0 + optionalDependencies: + react: 19.2.8 + react-redux: 9.3.0(@types/react@19.2.18)(react@19.2.8)(redux@5.0.1) - '@lexical/selection@0.28.0': - dependencies: - lexical: 0.28.0 + '@rolldown/binding-android-arm64@1.2.1': + optional: true - '@lexical/table@0.27.1': - dependencies: - '@lexical/clipboard': 0.27.1 - '@lexical/utils': 0.27.1 - lexical: 0.27.1 + '@rolldown/binding-darwin-arm64@1.2.1': + optional: true - '@lexical/table@0.28.0': - dependencies: - '@lexical/clipboard': 0.28.0 - '@lexical/utils': 0.28.0 - lexical: 0.28.0 + '@rolldown/binding-darwin-x64@1.2.1': + optional: true - '@lexical/text@0.27.1': - dependencies: - lexical: 0.27.1 + '@rolldown/binding-freebsd-x64@1.2.1': + optional: true - '@lexical/text@0.28.0': - dependencies: - lexical: 0.28.0 + '@rolldown/binding-linux-arm-gnueabihf@1.2.1': + optional: true - '@lexical/utils@0.27.1': - dependencies: - '@lexical/list': 0.27.1 - '@lexical/selection': 0.27.1 - '@lexical/table': 0.27.1 - lexical: 0.27.1 + '@rolldown/binding-linux-arm64-gnu@1.2.1': + optional: true - '@lexical/utils@0.28.0': - dependencies: - '@lexical/list': 0.28.0 - '@lexical/selection': 0.28.0 - '@lexical/table': 0.28.0 - lexical: 0.28.0 + '@rolldown/binding-linux-arm64-musl@1.2.1': + optional: true - '@lexical/yjs@0.27.1(yjs@13.6.26)': - dependencies: - '@lexical/offset': 0.27.1 - '@lexical/selection': 0.27.1 - lexical: 0.27.1 - yjs: 13.6.26 + '@rolldown/binding-linux-ppc64-gnu@1.2.1': + optional: true - '@lexical/yjs@0.28.0(yjs@13.6.26)': - dependencies: - '@lexical/offset': 0.28.0 - '@lexical/selection': 0.28.0 - lexical: 0.28.0 - yjs: 13.6.26 + '@rolldown/binding-linux-s390x-gnu@1.2.1': + optional: true - '@mdx-js/react@3.1.0(@types/react@19.1.2)(react@19.1.0)': - dependencies: - '@types/mdx': 2.0.13 - '@types/react': 19.1.2 - react: 19.1.0 + '@rolldown/binding-linux-x64-gnu@1.2.1': + optional: true - '@modelcontextprotocol/sdk@1.27.1(zod@3.24.4)': - dependencies: - '@hono/node-server': 1.19.11(hono@4.12.8) - ajv: 8.18.0 - ajv-formats: 3.0.1(ajv@8.18.0) - content-type: 1.0.5 - cors: 2.8.5 - cross-spawn: 7.0.6 - eventsource: 3.0.6 - eventsource-parser: 3.0.6 - express: 5.2.1 - express-rate-limit: 8.3.1(express@5.2.1) - hono: 4.12.8 - jose: 6.2.1 - json-schema-typed: 8.0.2 - pkce-challenge: 5.0.0 - raw-body: 3.0.0 - zod: 3.24.4 - zod-to-json-schema: 3.25.1(zod@3.24.4) - transitivePeerDependencies: - - supports-color + '@rolldown/binding-linux-x64-musl@1.2.1': + optional: true - '@monaco-editor/loader@1.5.0': - dependencies: - state-local: 1.0.7 + '@rolldown/binding-openharmony-arm64@1.2.1': + optional: true - '@monaco-editor/react@4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@rolldown/binding-wasm32-wasi@1.2.1': dependencies: - '@monaco-editor/loader': 1.5.0 - monaco-editor: 0.52.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@emnapi/core': 2.0.0-alpha.3 + '@emnapi/runtime': 2.0.0-alpha.3 + '@napi-rs/wasm-runtime': 1.2.0(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) + optional: true - '@napi-rs/wasm-runtime@0.2.12': - dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 - '@tybys/wasm-util': 0.10.1 + '@rolldown/binding-win32-arm64-msvc@1.2.1': optional: true - '@napi-rs/wasm-runtime@0.2.9': - dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.9.0 - '@tybys/wasm-util': 0.9.0 + '@rolldown/binding-win32-x64-msvc@1.2.1': optional: true - '@next/env@15.5.10': {} + '@rolldown/pluginutils@1.0.1': {} - '@next/env@15.5.13': {} + '@rollup/plugin-commonjs@28.0.1(rollup@4.62.3)': + dependencies: + '@rollup/pluginutils': 5.4.0(rollup@4.62.3) + commondir: 1.0.1 + estree-walker: 2.0.2 + fdir: 6.5.0(picomatch@4.0.5) + is-reference: 1.2.1 + magic-string: 0.30.21 + picomatch: 4.0.5 + optionalDependencies: + rollup: 4.62.3 - '@next/eslint-plugin-next@15.3.1': + '@rollup/pluginutils@5.4.0(rollup@4.62.3)': dependencies: - fast-glob: 3.3.1 + '@types/estree': 1.0.9 + estree-walker: 2.0.2 + picomatch: 4.0.5 + optionalDependencies: + rollup: 4.62.3 - '@next/swc-darwin-arm64@15.5.7': + '@rollup/rollup-android-arm-eabi@4.62.3': optional: true - '@next/swc-darwin-x64@15.5.7': + '@rollup/rollup-android-arm64@4.62.3': optional: true - '@next/swc-linux-arm64-gnu@15.5.7': + '@rollup/rollup-darwin-arm64@4.62.3': optional: true - '@next/swc-linux-arm64-musl@15.5.7': + '@rollup/rollup-darwin-x64@4.62.3': optional: true - '@next/swc-linux-x64-gnu@15.5.7': + '@rollup/rollup-freebsd-arm64@4.62.3': optional: true - '@next/swc-linux-x64-musl@15.5.7': + '@rollup/rollup-freebsd-x64@4.62.3': optional: true - '@next/swc-win32-arm64-msvc@15.5.7': + '@rollup/rollup-linux-arm-gnueabihf@4.62.3': optional: true - '@next/swc-win32-x64-msvc@15.5.7': + '@rollup/rollup-linux-arm-musleabihf@4.62.3': optional: true - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@rollup/rollup-linux-arm64-gnu@4.62.3': + optional: true - '@nodelib/fs.stat@2.0.5': {} + '@rollup/rollup-linux-arm64-musl@4.62.3': + optional: true - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.18.0 + '@rollup/rollup-linux-loong64-gnu@4.62.3': + optional: true - '@nolyfill/is-core-module@1.0.39': {} + '@rollup/rollup-linux-loong64-musl@4.62.3': + optional: true - '@opentelemetry/api@1.9.0': + '@rollup/rollup-linux-ppc64-gnu@4.62.3': optional: true - '@parcel/watcher-android-arm64@2.5.6': + '@rollup/rollup-linux-ppc64-musl@4.62.3': optional: true - '@parcel/watcher-darwin-arm64@2.5.6': + '@rollup/rollup-linux-riscv64-gnu@4.62.3': optional: true - '@parcel/watcher-darwin-x64@2.5.6': + '@rollup/rollup-linux-riscv64-musl@4.62.3': optional: true - '@parcel/watcher-freebsd-x64@2.5.6': + '@rollup/rollup-linux-s390x-gnu@4.62.3': optional: true - '@parcel/watcher-linux-arm-glibc@2.5.6': + '@rollup/rollup-linux-x64-gnu@4.62.1': optional: true - '@parcel/watcher-linux-arm-musl@2.5.6': + '@rollup/rollup-linux-x64-gnu@4.62.3': optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.6': + '@rollup/rollup-linux-x64-musl@4.62.3': optional: true - '@parcel/watcher-linux-arm64-musl@2.5.6': + '@rollup/rollup-openbsd-x64@4.62.3': optional: true - '@parcel/watcher-linux-x64-glibc@2.5.6': + '@rollup/rollup-openharmony-arm64@4.62.3': optional: true - '@parcel/watcher-linux-x64-musl@2.5.6': + '@rollup/rollup-win32-arm64-msvc@4.62.3': optional: true - '@parcel/watcher-win32-arm64@2.5.6': + '@rollup/rollup-win32-ia32-msvc@4.62.3': optional: true - '@parcel/watcher-win32-ia32@2.5.6': + '@rollup/rollup-win32-x64-gnu@4.62.3': optional: true - '@parcel/watcher-win32-x64@2.5.6': + '@rollup/rollup-win32-x64-msvc@4.62.3': optional: true - '@parcel/watcher@2.5.6': + '@sec-ant/readable-stream@0.4.1': {} + + '@selderee/plugin-htmlparser2@0.11.0': dependencies: - detect-libc: 2.1.2 - is-glob: 4.0.3 - node-addon-api: 7.1.1 - picomatch: 4.0.4 - optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.6 - '@parcel/watcher-darwin-arm64': 2.5.6 - '@parcel/watcher-darwin-x64': 2.5.6 - '@parcel/watcher-freebsd-x64': 2.5.6 - '@parcel/watcher-linux-arm-glibc': 2.5.6 - '@parcel/watcher-linux-arm-musl': 2.5.6 - '@parcel/watcher-linux-arm64-glibc': 2.5.6 - '@parcel/watcher-linux-arm64-musl': 2.5.6 - '@parcel/watcher-linux-x64-glibc': 2.5.6 - '@parcel/watcher-linux-x64-musl': 2.5.6 - '@parcel/watcher-win32-arm64': 2.5.6 - '@parcel/watcher-win32-ia32': 2.5.6 - '@parcel/watcher-win32-x64': 2.5.6 - optional: true - - '@payloadcms/db-postgres@3.36.1(@opentelemetry/api@1.9.0)(@types/react@19.1.2)(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react@19.1.0)': - dependencies: - '@payloadcms/drizzle': 3.36.1(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@types/react@19.1.2)(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(pg@8.11.3)(react@19.1.0) - '@types/pg': 8.10.2 - console-table-printer: 2.12.1 - drizzle-kit: 0.28.0 - drizzle-orm: 0.36.1(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@types/react@19.1.2)(pg@8.11.3)(react@19.1.0) - payload: 3.75.0(graphql@16.11.0)(typescript@5.8.3) - pg: 8.11.3 - prompts: 2.4.2 - to-snake-case: 1.0.0 - uuid: 10.0.0 + domhandler: 5.0.3 + selderee: 0.11.0 + + '@semantic-release/changelog@7.0.0(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))': + dependencies: + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + lodash-es: 4.18.1 + semantic-release: 25.0.9(supports-color@10.2.2)(typescript@6.0.3) + + '@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)': + dependencies: + conventional-changelog-angular: 8.3.1 + conventional-changelog-writer: 8.4.0 + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.4.0 + debug: 4.4.3(supports-color@10.2.2) + import-from-esm: 2.0.0(supports-color@10.2.2) + lodash-es: 4.18.1 + micromatch: 4.0.8 + semantic-release: 25.0.9(supports-color@10.2.2)(typescript@6.0.3) transitivePeerDependencies: - - '@aws-sdk/client-rds-data' - - '@cloudflare/workers-types' - - '@electric-sql/pglite' - - '@libsql/client' - - '@libsql/client-wasm' - - '@neondatabase/serverless' - - '@op-engineering/op-sqlite' - - '@opentelemetry/api' - - '@planetscale/database' - - '@prisma/client' - - '@tidbcloud/serverless' - - '@types/better-sqlite3' - - '@types/react' - - '@types/sql.js' - - '@vercel/postgres' - - '@xata.io/client' - - better-sqlite3 - - bun-types - - expo-sqlite - - knex - - kysely - - mysql2 - - pg-native - - postgres - - prisma - - react - - sql.js - - sqlite3 - supports-color - '@payloadcms/drizzle@3.36.1(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@types/react@19.1.2)(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(pg@8.11.3)(react@19.1.0)': + '@semantic-release/error@4.0.0': {} + + '@semantic-release/git@11.0.1(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)': dependencies: - console-table-printer: 2.12.1 - drizzle-orm: 0.36.1(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@types/react@19.1.2)(pg@8.11.3)(react@19.1.0) - payload: 3.75.0(graphql@16.11.0)(typescript@5.8.3) - prompts: 2.4.2 - to-snake-case: 1.0.0 - uuid: 9.0.0 + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + debug: 4.4.3(supports-color@10.2.2) + dir-glob: 3.0.1 + execa: 10.0.1 + lodash-es: 4.18.1 + micromatch: 4.0.8 + p-reduce: 3.0.0 + semantic-release: 25.0.9(supports-color@10.2.2)(typescript@6.0.3) transitivePeerDependencies: - - '@aws-sdk/client-rds-data' - - '@cloudflare/workers-types' - - '@electric-sql/pglite' - - '@libsql/client' - - '@libsql/client-wasm' - - '@neondatabase/serverless' - - '@op-engineering/op-sqlite' - - '@opentelemetry/api' - - '@planetscale/database' - - '@prisma/client' - - '@tidbcloud/serverless' - - '@types/better-sqlite3' - - '@types/pg' - - '@types/react' - - '@types/sql.js' - - '@vercel/postgres' - - '@xata.io/client' - - better-sqlite3 - - bun-types - - expo-sqlite - - knex - - kysely - - mysql2 - - pg - - postgres - - prisma - - react - - sql.js - - sqlite3 - - '@payloadcms/email-nodemailer@3.36.1(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))': - dependencies: - nodemailer: 6.9.16 - payload: 3.75.0(graphql@16.11.0)(typescript@5.8.3) - - '@payloadcms/eslint-config@3.28.0(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(jiti@2.4.2)(ts-api-utils@2.4.0(typescript@5.8.3))': - dependencies: - '@eslint-react/eslint-plugin': 1.31.0(eslint@9.22.0(jiti@2.4.2))(ts-api-utils@2.4.0(typescript@5.8.3))(typescript@5.7.3) - '@eslint/js': 9.22.0 - '@payloadcms/eslint-plugin': 3.28.0(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(jiti@2.4.2)(ts-api-utils@2.4.0(typescript@5.8.3)) - '@types/eslint': 9.6.1 - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - eslint-config-prettier: 10.1.1(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.6.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-jest: 28.11.0(@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-jest-dom: 5.5.0(@testing-library/dom@10.4.0)(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-perfectionist: 3.9.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-react-hooks: 0.0.0-experimental-d331ba04-20250307(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-regexp: 2.7.0(eslint@9.22.0(jiti@2.4.2)) - globals: 16.0.0 - typescript: 5.7.3 - typescript-eslint: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + - supports-color + + '@semantic-release/github@12.0.9(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)': + dependencies: + '@octokit/core': 7.0.7 + '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.7) + '@octokit/plugin-retry': 8.1.1(@octokit/core@7.0.7) + '@octokit/plugin-throttling': 11.0.5(@octokit/core@7.0.7) + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + debug: 4.4.3(supports-color@10.2.2) + dir-glob: 3.0.1 + http-proxy-agent: 9.1.0(supports-color@10.2.2) + https-proxy-agent: 9.1.0(supports-color@10.2.2) + issue-parser: 7.0.2 + lodash-es: 4.18.1 + mime: 4.1.0 + p-filter: 4.1.0 + semantic-release: 25.0.9(supports-color@10.2.2)(typescript@6.0.3) + tinyglobby: 0.2.17 + undici: 7.29.0 + url-join: 5.0.0 transitivePeerDependencies: - - '@testing-library/dom' - - '@typescript-eslint/eslint-plugin' - - astro-eslint-parser - - jest - - jiti + - kerberos - supports-color - - svelte - - svelte-eslint-parser - - ts-api-utils - - vue-eslint-parser - - '@payloadcms/eslint-plugin@3.28.0(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(jiti@2.4.2)(ts-api-utils@2.4.0(typescript@5.8.3))': - dependencies: - '@eslint-react/eslint-plugin': 1.31.0(eslint@9.22.0(jiti@2.4.2))(ts-api-utils@2.4.0(typescript@5.8.3))(typescript@5.7.3) - '@eslint/js': 9.22.0 - '@types/eslint': 9.6.1 - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - eslint-config-prettier: 10.1.1(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.6.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-jest: 28.11.0(@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-jest-dom: 5.5.0(@testing-library/dom@10.4.0)(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-perfectionist: 3.9.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-react-hooks: 0.0.0-experimental-d331ba04-20250307(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-regexp: 2.7.0(eslint@9.22.0(jiti@2.4.2)) - globals: 16.0.0 - typescript: 5.7.3 - typescript-eslint: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + + '@semantic-release/npm@13.1.5(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))': + dependencies: + '@actions/core': 3.0.1 + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + env-ci: 11.2.0 + execa: 9.6.1 + fs-extra: 11.3.1 + lodash-es: 4.18.1 + nerf-dart: 1.0.0 + normalize-url: 9.0.1 + npm: 11.19.0 + rc: 1.2.8 + read-pkg: 10.1.0 + registry-auth-token: 5.1.1 + semantic-release: 25.0.9(supports-color@10.2.2)(typescript@6.0.3) + semver: 7.8.5 + tempy: 3.2.0 + + '@semantic-release/release-notes-generator@14.1.1(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)': + dependencies: + conventional-changelog-angular: 8.3.1 + conventional-changelog-writer: 8.4.0 + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.4.0 + debug: 4.4.3(supports-color@10.2.2) + import-from-esm: 2.0.0(supports-color@10.2.2) + lodash-es: 4.18.1 + read-package-up: 11.0.0 + semantic-release: 25.0.9(supports-color@10.2.2)(typescript@6.0.3) transitivePeerDependencies: - - '@testing-library/dom' - - '@typescript-eslint/eslint-plugin' - - astro-eslint-parser - - jest - - jiti - supports-color - - svelte - - svelte-eslint-parser - - ts-api-utils - - vue-eslint-parser - '@payloadcms/graphql@3.79.1(graphql@16.11.0)(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(typescript@5.8.3)': + '@sentry-internal/browser-utils@9.47.1': dependencies: - graphql: 16.11.0 - graphql-scalars: 1.22.2(graphql@16.11.0) - payload: 3.75.0(graphql@16.11.0)(typescript@5.8.3) - pluralize: 8.0.0 - ts-essentials: 10.0.3(typescript@5.8.3) - tsx: 4.21.0 - transitivePeerDependencies: - - typescript + '@sentry/core': 9.47.1 - '@payloadcms/live-preview-react@3.36.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@sentry-internal/feedback@9.47.1': dependencies: - '@payloadcms/live-preview': 3.36.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@sentry/core': 9.47.1 - '@payloadcms/live-preview@3.36.1': {} + '@sentry-internal/replay-canvas@9.47.1': + dependencies: + '@sentry-internal/replay': 9.47.1 + '@sentry/core': 9.47.1 - '@payloadcms/next@3.79.1(@types/react@19.1.2)(graphql@16.11.0)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@sentry-internal/replay@9.47.1': dependencies: - '@dnd-kit/core': 6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@dnd-kit/modifiers': 9.0.0(@dnd-kit/core@6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) - '@dnd-kit/sortable': 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) - '@payloadcms/graphql': 3.79.1(graphql@16.11.0)(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(typescript@5.8.3) - '@payloadcms/translations': 3.79.1 - '@payloadcms/ui': 3.79.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - busboy: 1.6.0 - dequal: 2.0.3 - file-type: 19.3.0 - graphql: 16.11.0 - graphql-http: 1.22.4(graphql@16.11.0) - graphql-playground-html: 1.6.30 - http-status: 2.1.0 - next: 15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0) - path-to-regexp: 6.3.0 - payload: 3.75.0(graphql@16.11.0)(typescript@5.8.3) - qs-esm: 7.0.2 - sass: 1.77.4 - uuid: 10.0.0 - transitivePeerDependencies: - - '@types/react' - - monaco-editor - - react - - react-dom - - supports-color - - typescript + '@sentry-internal/browser-utils': 9.47.1 + '@sentry/core': 9.47.1 + + '@sentry/babel-plugin-component-annotate@3.6.1': {} - '@payloadcms/plugin-cloud-storage@3.36.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@sentry/babel-plugin-component-annotate@5.3.0': {} + + '@sentry/browser-utils@10.69.0': dependencies: - '@payloadcms/ui': 3.36.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - find-node-modules: 2.1.3 - payload: 3.75.0(graphql@16.11.0)(typescript@5.8.3) - range-parser: 1.2.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - transitivePeerDependencies: - - '@types/react' - - monaco-editor - - next - - supports-color - - typescript + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.69.0 + + '@sentry/browser@10.69.0': + dependencies: + '@sentry/browser-utils': 10.69.0 + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.69.0 + '@sentry/feedback': 10.69.0 + '@sentry/replay': 10.69.0 + '@sentry/replay-canvas': 10.69.0 - '@payloadcms/plugin-redirects@3.36.1(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))': + '@sentry/browser@9.47.1': dependencies: - payload: 3.75.0(graphql@16.11.0)(typescript@5.8.3) + '@sentry-internal/browser-utils': 9.47.1 + '@sentry-internal/feedback': 9.47.1 + '@sentry-internal/replay': 9.47.1 + '@sentry-internal/replay-canvas': 9.47.1 + '@sentry/core': 9.47.1 - '@payloadcms/plugin-seo@3.36.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@sentry/bundler-plugin-core@3.6.1(supports-color@10.2.2)': dependencies: - '@payloadcms/translations': 3.36.1 - '@payloadcms/ui': 3.36.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - payload: 3.75.0(graphql@16.11.0)(typescript@5.8.3) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@babel/core': 7.29.7(supports-color@10.2.2) + '@sentry/babel-plugin-component-annotate': 3.6.1 + '@sentry/cli': 2.58.6(supports-color@10.2.2) + dotenv: 16.6.1 + find-up: 5.0.0 + glob: 9.3.5 + magic-string: 0.30.8 + unplugin: 1.0.1 transitivePeerDependencies: - - '@types/react' - - monaco-editor - - next + - encoding - supports-color - - typescript - '@payloadcms/richtext-lexical@3.36.1(@faceless-ui/modal@3.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@faceless-ui/scroll-info@2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@payloadcms/next@3.79.1(@types/react@19.1.2)(graphql@16.11.0)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3))(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(yjs@13.6.26)': - dependencies: - '@faceless-ui/modal': 3.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@faceless-ui/scroll-info': 2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@lexical/headless': 0.28.0 - '@lexical/html': 0.28.0 - '@lexical/link': 0.28.0 - '@lexical/list': 0.28.0 - '@lexical/mark': 0.28.0 - '@lexical/react': 0.28.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(yjs@13.6.26) - '@lexical/rich-text': 0.28.0 - '@lexical/selection': 0.28.0 - '@lexical/table': 0.28.0 - '@lexical/utils': 0.28.0 - '@payloadcms/next': 3.79.1(@types/react@19.1.2)(graphql@16.11.0)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - '@payloadcms/translations': 3.36.1 - '@payloadcms/ui': 3.36.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - '@types/uuid': 10.0.0 - acorn: 8.12.1 - bson-objectid: 2.0.4 - dequal: 2.0.3 - escape-html: 1.0.3 - jsox: 1.2.121 - lexical: 0.28.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-mdx-jsx: 3.1.3 - micromark-extension-mdx-jsx: 3.0.1 - payload: 3.75.0(graphql@16.11.0)(typescript@5.8.3) - qs-esm: 7.0.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-error-boundary: 4.1.2(react@19.1.0) - ts-essentials: 10.0.3(typescript@5.8.3) - uuid: 10.0.0 + '@sentry/bundler-plugin-core@5.3.0(supports-color@10.2.2)': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@sentry/babel-plugin-component-annotate': 5.3.0 + '@sentry/cli': 2.58.6(supports-color@10.2.2) + dotenv: 16.6.1 + find-up: 5.0.0 + glob: 13.0.6 + magic-string: 0.30.21 transitivePeerDependencies: - - '@types/react' - - monaco-editor - - next + - encoding - supports-color - - typescript - - yjs - '@payloadcms/storage-vercel-blob@3.36.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@sentry/bundler-plugins@10.69.0(rollup@4.62.3)(supports-color@10.2.2)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))': dependencies: - '@payloadcms/plugin-cloud-storage': 3.36.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - '@vercel/blob': 0.22.3 - payload: 3.75.0(graphql@16.11.0)(typescript@5.8.3) + '@babel/core': 7.29.7(supports-color@10.2.2) + '@sentry/cli': 2.58.6(supports-color@10.2.2) + '@sentry/core': 10.69.0 + dotenv: 17.4.2 + find-up: 5.0.0 + glob: 13.0.6 + magic-string: 0.30.21 + optionalDependencies: + rollup: 4.62.3 + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) transitivePeerDependencies: - - '@types/react' - - monaco-editor - - next - - react - - react-dom + - encoding - supports-color - - typescript - '@payloadcms/translations@3.36.1': + '@sentry/cli-darwin@2.58.6': + optional: true + + '@sentry/cli-linux-arm64@2.58.6': + optional: true + + '@sentry/cli-linux-arm@2.58.6': + optional: true + + '@sentry/cli-linux-i686@2.58.6': + optional: true + + '@sentry/cli-linux-x64@2.58.6': + optional: true + + '@sentry/cli-win32-arm64@2.58.6': + optional: true + + '@sentry/cli-win32-i686@2.58.6': + optional: true + + '@sentry/cli-win32-x64@2.58.6': + optional: true + + '@sentry/cli@2.58.6(supports-color@10.2.2)': dependencies: - date-fns: 4.1.0 + https-proxy-agent: 5.0.1(supports-color@10.2.2) + node-fetch: 2.7.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + which: 2.0.2 + optionalDependencies: + '@sentry/cli-darwin': 2.58.6 + '@sentry/cli-linux-arm': 2.58.6 + '@sentry/cli-linux-arm64': 2.58.6 + '@sentry/cli-linux-i686': 2.58.6 + '@sentry/cli-linux-x64': 2.58.6 + '@sentry/cli-win32-arm64': 2.58.6 + '@sentry/cli-win32-i686': 2.58.6 + '@sentry/cli-win32-x64': 2.58.6 + transitivePeerDependencies: + - encoding + - supports-color - '@payloadcms/translations@3.75.0': + '@sentry/conventions@0.16.0': {} + + '@sentry/core@10.69.0': dependencies: - date-fns: 4.1.0 + '@sentry/conventions': 0.16.0 - '@payloadcms/translations@3.79.1': + '@sentry/core@9.47.1': {} + + '@sentry/feedback@10.69.0': dependencies: - date-fns: 4.1.0 + '@sentry/core': 10.69.0 - '@payloadcms/ui@3.36.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@sentry/nextjs@10.69.0(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(react@19.2.8)(supports-color@10.2.2)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))': dependencies: - '@date-fns/tz': 1.2.0 - '@dnd-kit/core': 6.0.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.0.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) - '@faceless-ui/modal': 3.0.0-beta.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@faceless-ui/scroll-info': 2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@faceless-ui/window-info': 3.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@monaco-editor/react': 4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@payloadcms/translations': 3.36.1 - bson-objectid: 2.0.4 - date-fns: 4.1.0 - dequal: 2.0.3 - md5: 2.3.0 - next: 15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0) - object-to-formdata: 4.5.1 - payload: 3.75.0(graphql@16.11.0)(typescript@5.8.3) - qs-esm: 7.0.2 - react: 19.1.0 - react-datepicker: 7.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-dom: 19.1.0(react@19.1.0) - react-image-crop: 10.1.8(react@19.1.0) - react-select: 5.9.0(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - scheduler: 0.25.0 - sonner: 1.7.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - ts-essentials: 10.0.3(typescript@5.8.3) - use-context-selector: 2.0.0(react@19.1.0)(scheduler@0.25.0) - uuid: 10.0.0 + '@opentelemetry/api': 1.9.1 + '@rollup/plugin-commonjs': 28.0.1(rollup@4.62.3) + '@sentry/browser-utils': 10.69.0 + '@sentry/bundler-plugin-core': 5.3.0(supports-color@10.2.2) + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.69.0 + '@sentry/node': 10.69.0(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(supports-color@10.2.2) + '@sentry/opentelemetry': 10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) + '@sentry/react': 10.69.0(react@19.2.8) + '@sentry/server-utils': 10.69.0(supports-color@10.2.2) + '@sentry/vercel-edge': 10.69.0 + '@sentry/webpack-plugin': 5.4.0(rollup@4.62.3)(supports-color@10.2.2)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + next: 16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4) + rollup: 4.62.3 + stacktrace-parser: 0.1.11 transitivePeerDependencies: - - '@types/react' - - monaco-editor + - '@opentelemetry/core' + - '@opentelemetry/exporter-trace-otlp-http' + - '@opentelemetry/sdk-trace-base' + - encoding + - react - supports-color - - typescript + - webpack + + '@sentry/nextjs@9.47.1(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(react@19.2.8)(supports-color@10.2.2)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.43.0 + '@rollup/plugin-commonjs': 28.0.1(rollup@4.62.3) + '@sentry-internal/browser-utils': 9.47.1 + '@sentry/core': 9.47.1 + '@sentry/node': 9.47.1(supports-color@10.2.2) + '@sentry/opentelemetry': 9.47.1(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.43.0) + '@sentry/react': 9.47.1(react@19.2.8) + '@sentry/vercel-edge': 9.47.1(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) + '@sentry/webpack-plugin': 3.6.1(supports-color@10.2.2)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + chalk: 3.0.0 + next: 16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4) + resolve: 1.22.8 + rollup: 4.62.3 + stacktrace-parser: 0.1.11 + transitivePeerDependencies: + - '@opentelemetry/context-async-hooks' + - '@opentelemetry/core' + - '@opentelemetry/sdk-trace-base' + - encoding + - react + - supports-color + - webpack - '@payloadcms/ui@3.79.1(@types/react@19.1.2)(monaco-editor@0.52.2)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(payload@3.75.0(graphql@16.11.0)(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@sentry/node-core@10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))': dependencies: - '@date-fns/tz': 1.2.0 - '@dnd-kit/core': 6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@dnd-kit/sortable': 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) - '@dnd-kit/utilities': 3.2.2(react@19.1.0) - '@faceless-ui/modal': 3.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@faceless-ui/scroll-info': 2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@faceless-ui/window-info': 3.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@monaco-editor/react': 4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@payloadcms/translations': 3.79.1 - bson-objectid: 2.0.4 - date-fns: 4.1.0 - dequal: 2.0.3 - md5: 2.3.0 - next: 15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0) - object-to-formdata: 4.5.1 - payload: 3.75.0(graphql@16.11.0)(typescript@5.8.3) - qs-esm: 7.0.2 - react: 19.1.0 - react-datepicker: 7.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-dom: 19.1.0(react@19.1.0) - react-image-crop: 10.1.8(react@19.1.0) - react-select: 5.9.0(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - scheduler: 0.25.0 - sonner: 1.7.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - ts-essentials: 10.0.3(typescript@5.8.3) - use-context-selector: 2.0.0(react@19.1.0)(scheduler@0.25.0) - uuid: 10.0.0 + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.69.0 + '@sentry/opentelemetry': 10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) + import-in-the-middle: 3.3.2 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.220.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + + '@sentry/node-core@9.47.1(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.43.0)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + '@sentry/core': 9.47.1 + '@sentry/opentelemetry': 9.47.1(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.43.0) + import-in-the-middle: 1.15.0 + + '@sentry/node@10.69.0(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.220.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.69.0 + '@sentry/node-core': 10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) + '@sentry/opentelemetry': 10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) + '@sentry/server-utils': 10.69.0(supports-color@10.2.2) + import-in-the-middle: 3.3.2 transitivePeerDependencies: - - '@types/react' - - monaco-editor + - '@opentelemetry/core' + - '@opentelemetry/exporter-trace-otlp-http' - supports-color - - typescript - '@pinojs/redact@0.4.0': {} + '@sentry/node@9.47.1(supports-color@10.2.2)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-amqplib': 0.46.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-connect': 0.43.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-dataloader': 0.16.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-express': 0.47.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-fs': 0.19.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-generic-pool': 0.43.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-graphql': 0.47.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-hapi': 0.45.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-http': 0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-ioredis': 0.47.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-kafkajs': 0.7.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-knex': 0.44.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-koa': 0.47.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-lru-memoizer': 0.44.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-mongodb': 0.52.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-mongoose': 0.46.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-mysql': 0.45.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-mysql2': 0.45.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-pg': 0.51.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-redis-4': 0.46.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-tedious': 0.18.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/instrumentation-undici': 0.10.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + '@prisma/instrumentation': 6.11.1(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@sentry/core': 9.47.1 + '@sentry/node-core': 9.47.1(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.1)(supports-color@10.2.2))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.43.0) + '@sentry/opentelemetry': 9.47.1(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.43.0) + import-in-the-middle: 1.15.0 + minimatch: 9.0.9 + transitivePeerDependencies: + - supports-color - '@pkgjs/parseargs@0.11.0': - optional: true + '@sentry/opentelemetry@10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.69.0 - '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.40.1)(webpack-hot-middleware@2.26.1)(webpack@5.105.4(esbuild@0.19.12))': + '@sentry/opentelemetry@9.47.1(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.43.0)': dependencies: - ansi-html: 0.0.9 - core-js-pure: 3.40.0 - error-stack-parser: 2.1.4 - html-entities: 2.6.0 - loader-utils: 2.0.4 - react-refresh: 0.14.2 - schema-utils: 4.3.0 - source-map: 0.7.4 - webpack: 5.105.4(esbuild@0.19.12) - optionalDependencies: - type-fest: 4.40.1 - webpack-hot-middleware: 2.26.1 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + '@sentry/core': 9.47.1 - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.2)(react@19.1.0)': + '@sentry/opentelemetry@9.47.1(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.43.0)': dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.2 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + '@sentry/core': 9.47.1 - '@radix-ui/react-slot@1.2.0(@types/react@19.1.2)(react@19.1.0)': + '@sentry/react@10.69.0(react@19.2.8)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.2 + '@sentry/browser': 10.69.0 + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.69.0 + react: 19.2.8 - '@rtsao/scc@1.1.0': {} + '@sentry/react@9.47.1(react@19.2.8)': + dependencies: + '@sentry/browser': 9.47.1 + '@sentry/core': 9.47.1 + hoist-non-react-statics: 3.3.2 + react: 19.2.8 - '@rushstack/eslint-patch@1.11.0': {} + '@sentry/replay-canvas@10.69.0': + dependencies: + '@sentry/core': 10.69.0 + '@sentry/replay': 10.69.0 - '@sendgrid/client@6.5.5': + '@sentry/replay@10.69.0': dependencies: - '@sendgrid/helpers': 6.5.5 - '@types/request': 2.48.12 - request: 2.88.2 + '@sentry/browser-utils': 10.69.0 + '@sentry/core': 10.69.0 - '@sendgrid/client@8.1.5': + '@sentry/server-utils@10.69.0(supports-color@10.2.2)': dependencies: - '@sendgrid/helpers': 8.0.0 - axios: 1.13.6 + '@apm-js-collab/code-transformer-bundler-plugins': 0.7.3 + '@apm-js-collab/tracing-hooks': 0.13.0(supports-color@10.2.2) + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.69.0 + meriyah: 6.1.4 transitivePeerDependencies: - - debug + - supports-color - '@sendgrid/helpers@6.5.5': + '@sentry/types@9.47.1': dependencies: - chalk: 2.4.2 - deepmerge: 4.3.1 + '@sentry/core': 9.47.1 - '@sendgrid/helpers@8.0.0': + '@sentry/vercel-edge@10.69.0': dependencies: - deepmerge: 4.3.1 + '@opentelemetry/api': 1.9.1 + '@sentry/core': 10.69.0 - '@sendgrid/mail@6.5.5': + '@sentry/vercel-edge@9.47.1(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))': dependencies: - '@sendgrid/client': 6.5.5 - '@sendgrid/helpers': 6.5.5 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + '@sentry/core': 9.47.1 + '@sentry/opentelemetry': 9.47.1(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.43.0) + transitivePeerDependencies: + - '@opentelemetry/context-async-hooks' + - '@opentelemetry/core' + - '@opentelemetry/sdk-trace-base' - '@sendgrid/mail@8.1.5': + '@sentry/webpack-plugin@3.6.1(supports-color@10.2.2)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))': dependencies: - '@sendgrid/client': 8.1.5 - '@sendgrid/helpers': 8.0.0 + '@sentry/bundler-plugin-core': 3.6.1(supports-color@10.2.2) + unplugin: 1.0.1 + uuid: 9.0.1 + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) transitivePeerDependencies: - - debug + - encoding + - supports-color - '@storybook/addon-actions@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@sentry/webpack-plugin@5.4.0(rollup@4.62.3)(supports-color@10.2.2)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))': dependencies: - '@storybook/global': 5.0.0 - '@types/uuid': 9.0.8 - dequal: 2.0.3 - polished: 4.3.1 - storybook: 8.6.17(prettier@3.5.3) - uuid: 9.0.1 + '@sentry/bundler-plugins': 10.69.0(rollup@4.62.3)(supports-color@10.2.2)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + '@seydx/node-av-darwin-arm64@6.1.1': + optional: true + + '@seydx/node-av-darwin-x64@6.1.1': + optional: true + + '@seydx/node-av-linux-arm64@6.1.1': + optional: true + + '@seydx/node-av-linux-x64@6.1.1': + optional: true + + '@seydx/node-av-win32-arm64-mingw@6.1.1': + optional: true - '@storybook/addon-backgrounds@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@seydx/node-av-win32-arm64-msvc@6.1.1': + optional: true + + '@seydx/node-av-win32-x64-mingw@6.1.1': + optional: true + + '@seydx/node-av-win32-x64-msvc@6.1.1': + optional: true + + '@shikijs/core@4.4.3': dependencies: - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - storybook: 8.6.17(prettier@3.5.3) - ts-dedent: 2.2.0 + '@shikijs/primitive': 4.4.3 + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + + '@shikijs/engine-oniguruma@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + + '@shikijs/primitive@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/themes@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + + '@shikijs/types@4.4.3': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@shinyoshiaki/binary-data@0.6.1': + dependencies: + generate-function: 2.3.1 + is-plain-object: 2.0.4 + optional: true + + '@shinyoshiaki/jspack@0.0.6': + optional: true + + '@simple-libs/child-process-utils@2.0.0': + dependencies: + '@simple-libs/stream-utils': 2.0.0 + + '@simple-libs/stream-utils@1.2.0': {} + + '@simple-libs/stream-utils@2.0.0': {} + + '@sindresorhus/is@4.6.0': {} + + '@sindresorhus/is@7.2.0': {} + + '@sindresorhus/merge-streams@4.0.0': {} - '@storybook/addon-controls@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@sindresorhus/slugify@3.0.0': dependencies: - '@storybook/global': 5.0.0 - dequal: 2.0.3 - storybook: 8.6.17(prettier@3.5.3) - ts-dedent: 2.2.0 - - '@storybook/addon-docs@8.6.12(@types/react@19.1.2)(storybook@8.6.17(prettier@3.5.3))': - dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.1.2)(react@19.1.0) - '@storybook/blocks': 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.17(prettier@3.5.3)) - '@storybook/csf-plugin': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/react-dom-shim': 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.17(prettier@3.5.3)) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - storybook: 8.6.17(prettier@3.5.3) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' + '@sindresorhus/transliterate': 2.3.1 + escape-string-regexp: 5.0.0 - '@storybook/addon-essentials@8.6.12(@types/react@19.1.2)(storybook@8.6.17(prettier@3.5.3))': - dependencies: - '@storybook/addon-actions': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/addon-backgrounds': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/addon-controls': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/addon-docs': 8.6.12(@types/react@19.1.2)(storybook@8.6.17(prettier@3.5.3)) - '@storybook/addon-highlight': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/addon-measure': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/addon-outline': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/addon-toolbars': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/addon-viewport': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - storybook: 8.6.17(prettier@3.5.3) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' + '@sindresorhus/transliterate@2.3.1': {} - '@storybook/addon-highlight@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@smithy/core@3.31.1': dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.17(prettier@3.5.3) + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@storybook/addon-interactions@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@smithy/credential-provider-imds@4.4.16': dependencies: - '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/test': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - polished: 4.3.1 - storybook: 8.6.17(prettier@3.5.3) - ts-dedent: 2.2.0 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@storybook/addon-links@8.6.12(react@19.1.0)(storybook@8.6.17(prettier@3.5.3))': + '@smithy/fetch-http-handler@5.6.13': dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.17(prettier@3.5.3) - ts-dedent: 2.2.0 - optionalDependencies: - react: 19.1.0 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@storybook/addon-measure@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@smithy/node-http-handler@4.9.13': dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.17(prettier@3.5.3) - tiny-invariant: 1.3.3 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@storybook/addon-onboarding@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@smithy/signature-v4@5.6.12': dependencies: - storybook: 8.6.17(prettier@3.5.3) + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@smithy/types@4.16.1': + dependencies: + tslib: 2.8.1 + + '@socket.io/component-emitter@3.1.2': {} + + '@speed-highlight/core@1.2.17': {} + + '@standard-schema/spec@1.1.0': {} + + '@standard-schema/utils@0.3.0': {} - '@storybook/addon-outline@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@storybook/addon-a11y@10.5.5(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.6.17(prettier@3.5.3) - ts-dedent: 2.2.0 + axe-core: 4.12.1 + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) + + '@storybook/addon-docs@10.5.5(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(esbuild@0.28.1)(rollup@4.62.3)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0))(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))': + dependencies: + '@mdx-js/react': 3.1.1(@types/react@19.2.18)(react@19.2.8) + '@storybook/csf-plugin': 10.5.5(esbuild@0.28.1)(rollup@4.62.3)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0))(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + '@storybook/icons': 2.1.0(react@19.2.8) + '@storybook/react-dom-shim': 10.5.5(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8)) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) + ts-dedent: 2.3.0 + optionalDependencies: + '@types/react': 19.2.18 + transitivePeerDependencies: + - '@types/react-dom' + - esbuild + - rollup + - vite + - webpack - '@storybook/addon-toolbars@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@storybook/addon-onboarding@10.5.5(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))': dependencies: - storybook: 8.6.17(prettier@3.5.3) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) - '@storybook/addon-viewport@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@storybook/addon-themes@10.5.5(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))': dependencies: - memoizerific: 1.11.3 - storybook: 8.6.17(prettier@3.5.3) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) + ts-dedent: 2.3.0 - '@storybook/blocks@8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.17(prettier@3.5.3))': + '@storybook/addon-webpack5-compiler-swc@4.0.3(@swc/helpers@0.5.23)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))': dependencies: - '@storybook/icons': 1.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - storybook: 8.6.17(prettier@3.5.3) - ts-dedent: 2.2.0 - optionalDependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@swc/core': 1.15.47(@swc/helpers@0.5.23) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) + swc-loader: 0.2.7(@swc/core@1.15.47(@swc/helpers@0.5.23))(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + transitivePeerDependencies: + - '@swc/helpers' + - webpack - '@storybook/builder-webpack5@8.6.12(esbuild@0.19.12)(storybook@8.6.17(prettier@3.5.3))(typescript@5.8.3)': + '@storybook/builder-webpack5@10.5.5(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(typescript@6.0.3)(uglify-js@3.19.3)': dependencies: - '@storybook/core-webpack': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@types/semver': 7.5.8 - browser-assert: 1.2.1 + '@storybook/core-webpack': 10.5.5(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8)) case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 - constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.105.4(esbuild@0.19.12)) - es-module-lexer: 1.6.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.105.4(esbuild@0.19.12)) - html-webpack-plugin: 5.6.3(webpack@5.105.4(esbuild@0.19.12)) - magic-string: 0.30.17 - path-browserify: 1.0.1 - process: 0.11.10 - semver: 7.7.1 - storybook: 8.6.17(prettier@3.5.3) - style-loader: 3.3.4(webpack@5.105.4(esbuild@0.19.12)) - terser-webpack-plugin: 5.3.14(esbuild@0.19.12)(webpack@5.105.4(esbuild@0.19.12)) - ts-dedent: 2.2.0 - url: 0.11.4 - util: 0.12.5 - util-deprecate: 1.0.2 - webpack: 5.105.4(esbuild@0.19.12) - webpack-dev-middleware: 6.1.3(webpack@5.105.4(esbuild@0.19.12)) + css-loader: 7.1.4(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + es-module-lexer: 1.7.0 + fork-ts-checker-webpack-plugin: 9.1.0(typescript@6.0.3)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + html-webpack-plugin: 5.6.8(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + magic-string: 0.30.21 + semver: 7.8.5 + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) + style-loader: 4.0.0(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + terser-webpack-plugin: 5.6.1(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + ts-dedent: 2.3.0 + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) + webpack-dev-middleware: 6.1.3(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: - typescript: 5.8.3 + typescript: 6.0.3 transitivePeerDependencies: + - '@minify-html/node' - '@rspack/core' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js - webpack-cli - '@storybook/components@8.6.12(storybook@8.6.17(prettier@3.5.3))': - dependencies: - storybook: 8.6.17(prettier@3.5.3) - - '@storybook/core-webpack@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@storybook/core-webpack@10.5.5(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))': dependencies: - storybook: 8.6.17(prettier@3.5.3) - ts-dedent: 2.2.0 + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) + ts-dedent: 2.3.0 - '@storybook/core@8.6.17(prettier@3.5.3)(storybook@8.6.17(prettier@3.5.3))': + '@storybook/csf-plugin@10.5.5(esbuild@0.28.1)(rollup@4.62.3)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0))(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))': dependencies: - '@storybook/theming': 8.6.17(storybook@8.6.17(prettier@3.5.3)) - better-opn: 3.0.2 - browser-assert: 1.2.1 - esbuild: 0.25.12 - esbuild-register: 3.6.0(esbuild@0.25.12) - jsdoc-type-pratt-parser: 4.8.0 - process: 0.11.10 - recast: 0.23.11 - semver: 7.7.4 - util: 0.12.5 - ws: 8.19.0 + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) + unplugin: 2.3.11 optionalDependencies: - prettier: 3.5.3 - transitivePeerDependencies: - - bufferutil - - storybook - - supports-color - - utf-8-validate - - '@storybook/csf-plugin@8.6.12(storybook@8.6.17(prettier@3.5.3))': - dependencies: - storybook: 8.6.17(prettier@3.5.3) - unplugin: 1.16.1 - - '@storybook/csf@0.1.13': - dependencies: - type-fest: 2.19.0 + esbuild: 0.28.1 + rollup: 4.62.3 + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0) + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) '@storybook/global@5.0.0': {} - '@storybook/icons@1.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - - '@storybook/instrumenter@8.6.12(storybook@8.6.17(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - '@vitest/utils': 2.1.9 - storybook: 8.6.17(prettier@3.5.3) - - '@storybook/manager-api@8.6.12(storybook@8.6.17(prettier@3.5.3))': - dependencies: - storybook: 8.6.17(prettier@3.5.3) - - '@storybook/nextjs@8.6.12(esbuild@0.19.12)(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0)(storybook@8.6.17(prettier@3.5.3))(type-fest@4.40.1)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.105.4(esbuild@0.19.12))': - dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.0) - '@babel/preset-env': 7.26.0(@babel/core@7.26.0) - '@babel/preset-react': 7.26.3(@babel/core@7.26.0) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) - '@babel/runtime': 7.27.1 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@4.40.1)(webpack-hot-middleware@2.26.1)(webpack@5.105.4(esbuild@0.19.12)) - '@storybook/builder-webpack5': 8.6.12(esbuild@0.19.12)(storybook@8.6.17(prettier@3.5.3))(typescript@5.8.3) - '@storybook/preset-react-webpack': 8.6.12(@storybook/test@8.6.12(storybook@8.6.17(prettier@3.5.3)))(esbuild@0.19.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.17(prettier@3.5.3))(typescript@5.8.3) - '@storybook/react': 8.6.12(@storybook/test@8.6.12(storybook@8.6.17(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.17(prettier@3.5.3))(typescript@5.8.3) - '@storybook/test': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@types/semver': 7.5.8 - babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.105.4(esbuild@0.19.12)) - css-loader: 6.11.0(webpack@5.105.4(esbuild@0.19.12)) - find-up: 5.0.0 - image-size: 1.2.1 + '@storybook/icons@2.1.0(react@19.2.8)': + dependencies: + react: 19.2.8 + + '@storybook/nextjs@10.5.5(@swc/core@1.15.47(@swc/helpers@0.5.23))(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(babel-plugin-macros@3.1.0)(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(supports-color@10.2.2)(type-fest@5.8.0)(typescript@6.0.3)(uglify-js@3.19.3)(webpack-hot-middleware@2.26.1)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-syntax-import-assertions': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-export-namespace-from': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-numeric-separator': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/preset-env': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/preset-react': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/runtime': 7.29.7 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(react-refresh@0.14.2)(type-fest@5.8.0)(webpack-hot-middleware@2.26.1)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + '@storybook/builder-webpack5': 10.5.5(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(typescript@6.0.3)(uglify-js@3.19.3) + '@storybook/preset-react-webpack': 10.5.5(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(supports-color@10.2.2)(typescript@6.0.3)(uglify-js@3.19.3) + '@storybook/react': 10.5.5(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(supports-color@10.2.2)(typescript@6.0.3) + '@types/semver': 7.7.1 + babel-loader: 9.2.1(@babel/core@7.29.7(supports-color@10.2.2))(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + css-loader: 6.11.0(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + image-size: 2.0.2 loader-utils: 3.3.1 - next: 15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0) - node-polyfill-webpack-plugin: 2.0.1(webpack@5.105.4(esbuild@0.19.12)) - pnp-webpack-plugin: 1.7.0(typescript@5.8.3) - postcss: 8.5.3 - postcss-loader: 8.1.1(postcss@8.5.3)(typescript@5.8.3)(webpack@5.105.4(esbuild@0.19.12)) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + next: 16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4) + node-polyfill-webpack-plugin: 2.0.1(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + postcss: 8.5.25 + postcss-loader: 8.2.1(postcss@8.5.25)(typescript@6.0.3)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 - sass-loader: 14.2.1(sass@1.87.0)(webpack@5.105.4(esbuild@0.19.12)) - semver: 7.7.1 - storybook: 8.6.17(prettier@3.5.3) - style-loader: 3.3.4(webpack@5.105.4(esbuild@0.19.12)) - styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.1.0) - ts-dedent: 2.2.0 + sass-loader: 16.0.8(sass@1.77.4)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + semver: 7.8.5 + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) + style-loader: 3.3.4(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + styled-jsx: 5.1.7(@babel/core@7.29.7(supports-color@10.2.2))(babel-plugin-macros@3.1.0)(react@19.2.8) tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.2.0 optionalDependencies: - sharp: 0.33.5 - typescript: 5.8.3 - webpack: 5.105.4(esbuild@0.19.12) + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) + typescript: 6.0.3 + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) transitivePeerDependencies: + - '@minify-html/node' - '@rspack/core' - '@swc/core' + - '@swc/css' + - '@swc/html' - '@types/webpack' - babel-plugin-macros + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss - node-sass - sass - sass-embedded @@ -11149,700 +14258,604 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.6.12(@storybook/test@8.6.12(storybook@8.6.17(prettier@3.5.3)))(esbuild@0.19.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.17(prettier@3.5.3))(typescript@5.8.3)': - dependencies: - '@storybook/core-webpack': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/react': 8.6.12(@storybook/test@8.6.12(storybook@8.6.17(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.17(prettier@3.5.3))(typescript@5.8.3) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.105.4(esbuild@0.19.12)) - '@types/semver': 7.5.8 - find-up: 5.0.0 - magic-string: 0.30.17 - react: 19.1.0 - react-docgen: 7.1.1 - react-dom: 19.1.0(react@19.1.0) - resolve: 1.22.10 - semver: 7.7.1 - storybook: 8.6.17(prettier@3.5.3) + '@storybook/preset-react-webpack@10.5.5(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(supports-color@10.2.2)(typescript@6.0.3)(uglify-js@3.19.3)': + dependencies: + '@storybook/core-webpack': 10.5.5(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(supports-color@10.2.2)(typescript@6.0.3)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) + '@types/semver': 7.7.1 + magic-string: 0.30.21 + react: 19.2.8 + react-docgen: 8.0.3(supports-color@10.2.2) + react-dom: 19.2.8(react@19.2.8) + resolve: 1.22.12 + semver: 7.8.5 + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) tsconfig-paths: 4.2.0 - webpack: 5.105.4(esbuild@0.19.12) + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) optionalDependencies: - typescript: 5.8.3 + typescript: 6.0.3 transitivePeerDependencies: - - '@storybook/test' + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - supports-color - uglify-js - webpack-cli - '@storybook/preview-api@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(supports-color@10.2.2)(typescript@6.0.3)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))': dependencies: - storybook: 8.6.17(prettier@3.5.3) - - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.105.4(esbuild@0.19.12))': - dependencies: - debug: 4.4.0 + debug: 4.4.3(supports-color@10.2.2) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.8 - react-docgen-typescript: 2.2.2(typescript@5.8.3) + react-docgen-typescript: 2.4.0(typescript@6.0.3) tslib: 2.8.1 - typescript: 5.8.3 - webpack: 5.105.4(esbuild@0.19.12) + typescript: 6.0.3 + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.17(prettier@3.5.3))': - dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - storybook: 8.6.17(prettier@3.5.3) - - '@storybook/react@8.6.12(@storybook/test@8.6.12(storybook@8.6.17(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.17(prettier@3.5.3))(typescript@5.8.3)': + '@storybook/react-dom-shim@10.5.5(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))': dependencies: - '@storybook/components': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/preview-api': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@storybook/react-dom-shim': 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.17(prettier@3.5.3)) - '@storybook/theming': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - storybook: 8.6.17(prettier@3.5.3) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) optionalDependencies: - '@storybook/test': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - typescript: 5.8.3 + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@storybook/test@8.6.12(storybook@8.6.17(prettier@3.5.3))': + '@storybook/react@10.5.5(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.12(storybook@8.6.17(prettier@3.5.3)) - '@testing-library/dom': 10.4.0 - '@testing-library/jest-dom': 6.5.0 - '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) - '@vitest/expect': 2.0.5 - '@vitest/spy': 2.0.5 - storybook: 8.6.17(prettier@3.5.3) - - '@storybook/theming@8.6.12(storybook@8.6.17(prettier@3.5.3))': - dependencies: - storybook: 8.6.17(prettier@3.5.3) - - '@storybook/theming@8.6.17(storybook@8.6.17(prettier@3.5.3))': - dependencies: - storybook: 8.6.17(prettier@3.5.3) - - '@swc/helpers@0.5.15': - dependencies: - tslib: 2.8.1 - - '@tailwindcss/typography@0.5.16(tailwindcss@3.4.17)': - dependencies: - lodash.castarray: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.17 - - '@testing-library/dom@10.4.0': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.27.1 - '@types/aria-query': 5.0.4 - aria-query: 5.3.0 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - - '@testing-library/jest-dom@6.5.0': - dependencies: - '@adobe/css-tools': 4.4.1 - aria-query: 5.3.2 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.6.3 - lodash: 4.17.23 - redent: 3.0.0 - - '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': - dependencies: - '@testing-library/dom': 10.4.0 - - '@tokenizer/token@0.3.0': {} + '@storybook/react-dom-shim': 10.5.5(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8)) + react: 19.2.8 + react-docgen: 8.0.3(supports-color@10.2.2) + react-docgen-typescript: 2.4.0(typescript@6.0.3) + react-dom: 19.2.8(react@19.2.8) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 + '@swc/core-darwin-arm64@1.15.47': optional: true - '@tybys/wasm-util@0.9.0': - dependencies: - tslib: 2.8.1 + '@swc/core-darwin-x64@1.15.47': optional: true - '@types/acorn@4.0.6': - dependencies: - '@types/estree': 1.0.7 - - '@types/aria-query@5.0.4': {} + '@swc/core-linux-arm-gnueabihf@1.15.47': + optional: true - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.27.1 - '@babel/types': 7.27.1 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.7 + '@swc/core-linux-arm64-gnu@1.15.47': + optional: true - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.27.1 + '@swc/core-linux-arm64-musl@1.15.47': + optional: true - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.27.1 - '@babel/types': 7.27.1 + '@swc/core-linux-ppc64-gnu@1.15.47': + optional: true - '@types/babel__traverse@7.20.7': - dependencies: - '@babel/types': 7.27.1 + '@swc/core-linux-s390x-gnu@1.15.47': + optional: true - '@types/busboy@1.5.4': - dependencies: - '@types/node': 22.15.3 + '@swc/core-linux-x64-gnu@1.15.47': + optional: true - '@types/caseless@0.12.5': {} + '@swc/core-linux-x64-musl@1.15.47': + optional: true - '@types/debug@4.1.12': - dependencies: - '@types/ms': 2.1.0 + '@swc/core-win32-arm64-msvc@1.15.47': + optional: true - '@types/doctrine@0.0.9': {} + '@swc/core-win32-ia32-msvc@1.15.47': + optional: true - '@types/eslint-scope@3.7.7': - dependencies: - '@types/eslint': 9.6.1 - '@types/estree': 1.0.8 + '@swc/core-win32-x64-msvc@1.15.47': + optional: true - '@types/eslint@9.6.1': + '@swc/core@1.15.47(@swc/helpers@0.5.23)': dependencies: - '@types/estree': 1.0.7 - '@types/json-schema': 7.0.15 + '@swc/counter': 0.1.3 + '@swc/types': 0.1.27 + optionalDependencies: + '@swc/core-darwin-arm64': 1.15.47 + '@swc/core-darwin-x64': 1.15.47 + '@swc/core-linux-arm-gnueabihf': 1.15.47 + '@swc/core-linux-arm64-gnu': 1.15.47 + '@swc/core-linux-arm64-musl': 1.15.47 + '@swc/core-linux-ppc64-gnu': 1.15.47 + '@swc/core-linux-s390x-gnu': 1.15.47 + '@swc/core-linux-x64-gnu': 1.15.47 + '@swc/core-linux-x64-musl': 1.15.47 + '@swc/core-win32-arm64-msvc': 1.15.47 + '@swc/core-win32-ia32-msvc': 1.15.47 + '@swc/core-win32-x64-msvc': 1.15.47 + '@swc/helpers': 0.5.23 + + '@swc/counter@0.1.3': {} - '@types/estree-jsx@1.0.5': + '@swc/helpers@0.5.15': dependencies: - '@types/estree': 1.0.7 - - '@types/estree@1.0.7': {} - - '@types/estree@1.0.8': {} + tslib: 2.8.1 - '@types/hast@3.0.4': + '@swc/helpers@0.5.23': dependencies: - '@types/unist': 3.0.3 - - '@types/html-minifier-terser@6.1.0': {} + tslib: 2.8.1 - '@types/jsdom@21.1.7': + '@swc/types@0.1.27': dependencies: - '@types/node': 22.15.3 - '@types/tough-cookie': 4.0.5 - parse5: 7.2.1 + '@swc/counter': 0.1.3 - '@types/json-schema@7.0.15': {} - - '@types/json5@0.0.29': {} - - '@types/lodash-es@4.17.12': + '@tailwindcss/node@4.3.3': dependencies: - '@types/lodash': 4.17.16 + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.24.4 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.3 - '@types/lodash@4.17.16': {} + '@tailwindcss/oxide-android-arm64@4.3.3': + optional: true - '@types/lodash@4.17.24': {} + '@tailwindcss/oxide-darwin-arm64@4.3.3': + optional: true - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 + '@tailwindcss/oxide-darwin-x64@4.3.3': + optional: true - '@types/mdx@2.0.13': {} + '@tailwindcss/oxide-freebsd-x64@4.3.3': + optional: true - '@types/ms@2.1.0': {} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + optional: true - '@types/node@22.15.3': - dependencies: - undici-types: 6.21.0 + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + optional: true - '@types/nodemailer-sendgrid@1.0.3': - dependencies: - '@types/nodemailer': 6.4.17 + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + optional: true - '@types/nodemailer@6.4.17': - dependencies: - '@types/node': 22.15.3 + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + optional: true - '@types/parse-json@4.0.2': {} + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + optional: true - '@types/pg@8.10.2': - dependencies: - '@types/node': 22.15.3 - pg-protocol: 1.9.5 - pg-types: 4.0.2 + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + optional: true - '@types/react-dom@19.1.3(@types/react@19.1.2)': - dependencies: - '@types/react': 19.1.2 + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + optional: true - '@types/react-transition-group@4.4.12(@types/react@19.1.2)': - dependencies: - '@types/react': 19.1.2 + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + optional: true - '@types/react@19.1.2': + '@tailwindcss/oxide@4.3.3': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-x64': 4.3.3 + '@tailwindcss/oxide-freebsd-x64': 4.3.3 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.3 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-x64-musl': 4.3.3 + '@tailwindcss/oxide-wasm32-wasi': 4.3.3 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 + + '@tailwindcss/postcss@4.3.3': dependencies: - csstype: 3.1.3 + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 + postcss: 8.5.25 + tailwindcss: 4.3.3 - '@types/request@2.48.12': + '@tailwindcss/typography@0.5.20(tailwindcss@4.3.3)': dependencies: - '@types/caseless': 0.12.5 - '@types/node': 22.15.3 - '@types/tough-cookie': 4.0.5 - form-data: 2.5.5 + postcss-selector-parser: 6.0.10 + tailwindcss: 4.3.3 - '@types/resolve@1.20.6': {} + '@takumi-rs/core-darwin-arm64@2.5.4': + optional: true - '@types/semver@7.5.8': {} + '@takumi-rs/core-darwin-x64@2.5.4': + optional: true - '@types/tough-cookie@4.0.5': {} + '@takumi-rs/core-linux-arm64-gnu@2.5.4': + optional: true - '@types/trusted-types@2.0.7': + '@takumi-rs/core-linux-arm64-musl@2.5.4': optional: true - '@types/unist@2.0.11': {} + '@takumi-rs/core-linux-x64-gnu@2.5.4': + optional: true - '@types/unist@3.0.3': {} + '@takumi-rs/core-linux-x64-musl@2.5.4': + optional: true - '@types/uuid@10.0.0': {} + '@takumi-rs/core-win32-arm64-msvc@2.5.4': + optional: true - '@types/uuid@9.0.8': {} + '@takumi-rs/core-win32-x64-msvc@2.5.4': + optional: true - '@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@takumi-rs/core@2.5.4(csstype@3.2.3)(react@19.2.8)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.26.1 - eslint: 9.22.0(jiti@2.4.2) - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.31.1 - eslint: 9.26.0(jiti@2.4.2) - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + '@takumi-rs/helpers': 2.5.4(react@19.2.8) + optionalDependencies: + '@takumi-rs/core-darwin-arm64': 2.5.4 + '@takumi-rs/core-darwin-x64': 2.5.4 + '@takumi-rs/core-linux-arm64-gnu': 2.5.4 + '@takumi-rs/core-linux-arm64-musl': 2.5.4 + '@takumi-rs/core-linux-x64-gnu': 2.5.4 + '@takumi-rs/core-linux-x64-musl': 2.5.4 + '@takumi-rs/core-win32-arm64-msvc': 2.5.4 + '@takumi-rs/core-win32-x64-msvc': 2.5.4 + csstype: 3.2.3 transitivePeerDependencies: - - supports-color + - preact + - react - '@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.26.1 - debug: 4.4.0 - eslint: 9.22.0(jiti@2.4.2) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + '@takumi-rs/helpers@2.5.4(react@19.2.8)': + optionalDependencies: + react: 19.2.8 - '@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@takumi-rs/wasm@2.5.4(csstype@3.2.3)(react@19.2.8)': dependencies: - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.31.1 - debug: 4.4.0 - eslint: 9.26.0(jiti@2.4.2) - typescript: 5.8.3 + '@takumi-rs/helpers': 2.5.4(react@19.2.8) + optionalDependencies: + csstype: 3.2.3 transitivePeerDependencies: - - supports-color + - preact + - react - '@typescript-eslint/project-service@8.57.2(typescript@5.8.3)': + '@testing-library/dom@10.4.1': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.8.3) - '@typescript-eslint/types': 8.57.2 - debug: 4.4.3 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - optional: true + '@babel/code-frame': 7.29.7 + '@babel/runtime': 7.29.7 + '@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 - '@typescript-eslint/scope-manager@8.26.1': + '@testing-library/jest-dom@6.9.1': dependencies: - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/visitor-keys': 8.26.1 + '@adobe/css-tools': 4.5.0 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 - '@typescript-eslint/scope-manager@8.31.1': + '@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10)': dependencies: - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/visitor-keys': 8.31.1 + '@adobe/css-tools': 4.5.0 + '@testing-library/dom': 10.4.1 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + optionalDependencies: + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.1)(jsdom@30.0.1(@noble/hashes@1.8.0)(canvas@3.2.3))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0)) - '@typescript-eslint/scope-manager@8.57.2': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/visitor-keys': 8.57.2 - optional: true + '@babel/runtime': 7.29.7 + '@testing-library/dom': 10.4.1 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.8.3)': + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: - typescript: 5.8.3 - optional: true + '@testing-library/dom': 10.4.1 - '@typescript-eslint/type-utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@tokenizer/inflate@0.4.1(supports-color@10.2.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - debug: 4.4.3 - eslint: 9.22.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 + debug: 4.4.3(supports-color@10.2.2) + token-types: 6.1.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - debug: 4.4.0 - eslint: 9.22.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + '@tokenizer/token@0.3.0': {} - '@typescript-eslint/type-utils@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@tybys/wasm-util@0.10.3': dependencies: - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.0 - eslint: 9.26.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.26.1': {} - - '@typescript-eslint/types@8.31.1': {} - - '@typescript-eslint/types@8.57.2': + tslib: 2.8.1 optional: true - '@typescript-eslint/typescript-estree@8.26.1(typescript@5.7.3)': + '@types/acorn@4.0.6': dependencies: - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/visitor-keys': 8.26.1 - debug: 4.4.0 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.9 - semver: 7.7.4 - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + '@types/estree': 1.0.9 + + '@types/aria-query@5.0.4': {} - '@typescript-eslint/typescript-estree@8.31.1(typescript@5.7.3)': + '@types/babel__core@7.20.5': dependencies: - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/visitor-keys': 8.31.1 - debug: 4.4.0 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.9 - semver: 7.7.4 - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 - '@typescript-eslint/typescript-estree@8.31.1(typescript@5.8.3)': + '@types/babel__generator@7.27.0': dependencies: - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/visitor-keys': 8.31.1 - debug: 4.4.0 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.9 - semver: 7.7.4 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color + '@babel/types': 7.29.7 - '@typescript-eslint/typescript-estree@8.57.2(typescript@5.8.3)': - dependencies: - '@typescript-eslint/project-service': 8.57.2(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.8.3) - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/visitor-keys': 8.57.2 - debug: 4.4.3 - minimatch: 10.2.4 - semver: 7.7.4 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - optional: true + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 - '@typescript-eslint/utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@types/babel__traverse@7.28.0': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.22.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + '@babel/types': 7.29.7 - '@typescript-eslint/utils@8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@types/busboy@1.5.4': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.22.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + '@types/node': 26.1.2 - '@typescript-eslint/utils@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@types/chai@5.2.3': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 - '@typescript-eslint/utils@8.57.2(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@types/connect@3.4.38': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.26.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - optional: true + '@types/node': 26.1.2 - '@typescript-eslint/visitor-keys@8.26.1': + '@types/cors@2.8.19': dependencies: - '@typescript-eslint/types': 8.26.1 - eslint-visitor-keys: 4.2.0 + '@types/node': 26.1.2 - '@typescript-eslint/visitor-keys@8.31.1': + '@types/d3-array@3.2.2': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-interpolate@3.0.4': dependencies: - '@typescript-eslint/types': 8.31.1 - eslint-visitor-keys: 4.2.0 + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.1': {} - '@typescript-eslint/visitor-keys@8.57.2': + '@types/d3-scale@4.0.9': dependencies: - '@typescript-eslint/types': 8.57.2 - eslint-visitor-keys: 5.0.1 - optional: true + '@types/d3-time': 3.0.4 - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - optional: true + '@types/d3-shape@3.1.8': + dependencies: + '@types/d3-path': 3.1.1 - '@unrs/resolver-binding-android-arm64@1.11.1': - optional: true + '@types/d3-time@3.0.4': {} - '@unrs/resolver-binding-darwin-arm64@1.11.1': - optional: true + '@types/d3-timer@3.0.2': {} - '@unrs/resolver-binding-darwin-arm64@1.7.2': - optional: true + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 - '@unrs/resolver-binding-darwin-x64@1.11.1': - optional: true + '@types/deep-eql@4.0.2': {} - '@unrs/resolver-binding-darwin-x64@1.7.2': - optional: true + '@types/doctrine@0.0.9': {} - '@unrs/resolver-binding-freebsd-x64@1.11.1': - optional: true + '@types/dom-mediacapture-transform@0.1.12': + dependencies: + '@types/dom-webcodecs': 0.1.18 - '@unrs/resolver-binding-freebsd-x64@1.7.2': - optional: true + '@types/dom-webcodecs@0.1.13': {} - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - optional: true + '@types/dom-webcodecs@0.1.18': {} - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.2': - optional: true + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.9 - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - optional: true + '@types/estree@1.0.9': {} - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.2': - optional: true + '@types/hast@3.0.5': + dependencies: + '@types/unist': 3.0.3 - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - optional: true + '@types/html-minifier-terser@6.1.0': {} - '@unrs/resolver-binding-linux-arm64-gnu@1.7.2': - optional: true + '@types/hyphen@1.14.0': {} - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - optional: true + '@types/jsdom@30.0.0': + dependencies: + '@types/node': 26.1.2 + '@types/tough-cookie': 4.0.5 + parse5: 8.0.1 + undici-types: 8.10.0 - '@unrs/resolver-binding-linux-arm64-musl@1.7.2': - optional: true + '@types/json-schema@7.0.15': {} - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - optional: true + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.24 - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.2': - optional: true + '@types/lodash@4.17.24': {} - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - optional: true + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.2': - optional: true + '@types/mdx@2.0.14': {} - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - optional: true + '@types/ms@2.1.0': {} - '@unrs/resolver-binding-linux-riscv64-musl@1.7.2': - optional: true + '@types/mysql@2.15.26': + dependencies: + '@types/node': 26.1.2 - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - optional: true + '@types/node@26.1.2': + dependencies: + undici-types: 8.3.0 - '@unrs/resolver-binding-linux-s390x-gnu@1.7.2': - optional: true + '@types/normalize-package-data@2.4.4': {} - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - optional: true + '@types/parse-json@4.0.2': {} - '@unrs/resolver-binding-linux-x64-gnu@1.7.2': - optional: true + '@types/pg-pool@2.0.6': + dependencies: + '@types/pg': 8.6.1 - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - optional: true + '@types/pg@8.6.1': + dependencies: + '@types/node': 26.1.2 + pg-protocol: 1.15.0 + pg-types: 2.2.0 - '@unrs/resolver-binding-linux-x64-musl@1.7.2': - optional: true + '@types/react-dom@19.2.4(@types/react@19.2.18)': + dependencies: + '@types/react': 19.2.18 - '@unrs/resolver-binding-wasm32-wasi@1.11.1': + '@types/react-transition-group@4.4.12(@types/react@19.2.18)': dependencies: - '@napi-rs/wasm-runtime': 0.2.12 - optional: true + '@types/react': 19.2.18 - '@unrs/resolver-binding-wasm32-wasi@1.7.2': + '@types/react@19.2.18': dependencies: - '@napi-rs/wasm-runtime': 0.2.9 - optional: true + csstype: 3.2.3 - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - optional: true + '@types/resolve@1.20.6': {} - '@unrs/resolver-binding-win32-arm64-msvc@1.7.2': - optional: true + '@types/semver@7.7.1': {} - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - optional: true + '@types/shimmer@1.2.0': {} - '@unrs/resolver-binding-win32-ia32-msvc@1.7.2': - optional: true + '@types/tedious@4.0.14': + dependencies: + '@types/node': 26.1.2 - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - optional: true + '@types/timestring@7.0.0': {} + + '@types/tough-cookie@4.0.5': {} - '@unrs/resolver-binding-win32-x64-msvc@1.7.2': + '@types/trusted-types@2.0.7': optional: true - '@vercel/analytics@1.5.0(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(react@19.1.0)': - optionalDependencies: - next: 15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0) - react: 19.1.0 + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@types/use-sync-external-store@0.0.6': {} + + '@types/webidl-conversions@7.0.3': {} + + '@types/whatwg-mimetype@3.0.2': {} + + '@types/whatwg-url@11.0.5': + dependencies: + '@types/webidl-conversions': 7.0.3 + + '@types/ws@8.18.1': + dependencies: + '@types/node': 26.1.2 - '@vercel/blob@0.22.3': + '@ungap/structured-clone@1.3.3': {} + + '@vercel/oidc@3.2.0': {} + + '@vitest/coverage-v8@4.1.10(vitest@4.1.10)': + dependencies: + '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.1.10 + ast-v8-to-istanbul: 1.0.5 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.2.0 + magicast: 0.5.3 + obug: 2.1.4 + std-env: 4.2.0 + tinyrainbow: 3.1.1 + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.1)(jsdom@30.0.1(@noble/hashes@1.8.0)(canvas@3.2.3))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0)) + + '@vitest/expect@3.2.4': dependencies: - async-retry: 1.3.3 - bytes: 3.1.2 - is-buffer: 2.0.5 - undici: 5.29.0 + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 - '@vercel/blob@1.0.1': + '@vitest/expect@4.1.10': dependencies: - async-retry: 1.3.3 - is-buffer: 2.0.5 - is-node-process: 1.2.0 - throttleit: 2.1.0 - undici: 5.29.0 + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + chai: 6.2.2 + tinyrainbow: 3.1.1 - '@vercel/speed-insights@1.2.0(next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0))(react@19.1.0)': + '@vitest/mocker@4.1.10(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0))': + dependencies: + '@vitest/spy': 4.1.10 + estree-walker: 3.0.3 + magic-string: 0.30.21 optionalDependencies: - next: 15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0) - react: 19.1.0 + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0) - '@vitest/expect@2.0.5': + '@vitest/pretty-format@3.2.4': dependencies: - '@vitest/spy': 2.0.5 - '@vitest/utils': 2.0.5 - chai: 5.1.2 - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 - '@vitest/pretty-format@2.0.5': + '@vitest/pretty-format@4.1.10': dependencies: - tinyrainbow: 1.2.0 + tinyrainbow: 3.1.1 - '@vitest/pretty-format@2.1.9': + '@vitest/runner@4.1.10': dependencies: - tinyrainbow: 1.2.0 + '@vitest/utils': 4.1.10 + pathe: 2.0.3 - '@vitest/spy@2.0.5': + '@vitest/snapshot@4.1.10': dependencies: - tinyspy: 3.0.2 + '@vitest/pretty-format': 4.1.10 + '@vitest/utils': 4.1.10 + magic-string: 0.30.21 + pathe: 2.0.3 - '@vitest/utils@2.0.5': + '@vitest/spy@3.2.4': dependencies: - '@vitest/pretty-format': 2.0.5 - estree-walker: 3.0.3 - loupe: 3.1.3 - tinyrainbow: 1.2.0 + tinyspy: 4.0.4 + + '@vitest/spy@4.1.10': {} - '@vitest/utils@2.1.9': + '@vitest/utils@3.2.4': dependencies: - '@vitest/pretty-format': 2.1.9 - loupe: 3.1.3 - tinyrainbow: 1.2.0 + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + + '@vitest/utils@4.1.10': + dependencies: + '@vitest/pretty-format': 4.1.10 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.1 '@webassemblyjs/ast@1.14.1': dependencies: @@ -11920,6 +14933,10 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 + '@webcontainer/env@1.1.1': {} + + '@workflow/serde@4.1.0': {} + '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} @@ -11928,77 +14945,98 @@ snapshots: dependencies: event-target-shim: 5.0.1 - accepts@2.0.0: - dependencies: - mime-types: 3.0.2 - negotiator: 1.0.0 + abs-svg-path@0.1.1: {} - acorn-import-phases@1.0.4(acorn@8.16.0): + accepts@1.3.8: dependencies: - acorn: 8.16.0 + mime-types: 2.1.35 + negotiator: 0.6.3 - acorn-jsx@5.3.2(acorn@8.14.1): + acorn-import-attributes@1.9.5(acorn@8.17.0): dependencies: - acorn: 8.14.1 - - acorn@8.12.1: {} - - acorn@8.14.1: {} + acorn: 8.17.0 acorn@8.16.0: {} + acorn@8.17.0: {} + adjust-sourcemap-loader@4.0.0: dependencies: loader-utils: 2.0.4 - regex-parser: 2.3.0 + regex-parser: 2.3.1 + + aes-js@3.1.2: + optional: true + + agent-base@6.0.2(supports-color@10.2.2): + dependencies: + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + agent-base@9.0.0: {} + + aggregate-error@5.0.0: + dependencies: + clean-stack: 5.3.0 + indent-string: 5.0.0 - agent-base@7.1.3: {} + ai@7.0.47(zod@4.4.3): + dependencies: + '@ai-sdk/gateway': 4.0.36(zod@4.4.3) + '@ai-sdk/provider': 4.0.4 + '@ai-sdk/provider-utils': 5.0.18(zod@4.4.3) + zod: 4.4.3 - ajv-formats@2.1.1(ajv@8.18.0): + ajv-formats@2.1.1(ajv@8.20.0): optionalDependencies: - ajv: 8.18.0 + ajv: 8.20.0 - ajv-formats@3.0.1(ajv@8.18.0): + ajv-formats@3.0.1(ajv@8.20.0): optionalDependencies: - ajv: 8.18.0 + ajv: 8.20.0 - ajv-keywords@3.5.2(ajv@6.14.0): + ajv-keywords@3.5.2(ajv@6.15.0): dependencies: - ajv: 6.14.0 + ajv: 6.15.0 - ajv-keywords@5.1.0(ajv@8.18.0): + ajv-keywords@5.1.0(ajv@8.20.0): dependencies: - ajv: 8.18.0 + ajv: 8.20.0 fast-deep-equal: 3.1.3 - ajv@6.14.0: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.17.1: + ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.1.5 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - ajv@8.18.0: + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.1.5 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + ansi-html-community@0.0.8: {} ansi-html@0.0.9: {} ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} ansi-styles@3.2.1: dependencies: @@ -12010,7 +15048,7 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} any-promise@1.3.0: {} @@ -12019,96 +15057,36 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.2 - arg@5.0.2: {} - argparse@2.0.1: {} + argue-cli@3.1.0: {} + + argv-formatter@1.0.0: {} + aria-query@5.3.0: dependencies: dequal: 2.0.3 aria-query@5.3.2: {} - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-includes@3.1.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.findlastindex@1.2.6: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 + array-ify@1.0.0: {} asn1.js@4.10.1: dependencies: - bn.js: 4.12.3 + bn.js: 4.12.5 inherits: 2.0.4 minimalistic-assert: 1.0.1 - asn1@0.2.6: + asn1js@3.0.10: dependencies: - safer-buffer: 2.1.2 - - assert-plus@1.0.0: {} + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + optional: true assert@2.1.0: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 is-nan: 1.3.2 object-is: 1.1.6 object.assign: 4.1.7 @@ -12116,147 +15094,142 @@ snapshots: assertion-error@2.0.1: {} - ast-types-flow@0.0.8: {} - ast-types@0.16.1: dependencies: tslib: 2.8.1 - async-retry@1.3.3: + ast-v8-to-istanbul@1.0.5: dependencies: - retry: 0.13.1 + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 10.0.0 - asynckit@0.4.0: {} + astring@1.9.0: {} atomic-sleep@1.0.0: {} - autoprefixer@10.4.21(postcss@8.5.3): + atomically@2.1.1: dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001716 - fraction.js: 4.3.7 - normalize-range: 0.1.2 + stubborn-fs: 2.0.0 + when-exit: 2.1.5 + + autoprefixer@10.5.4(postcss@8.5.25): + dependencies: + browserslist: 4.28.7 + caniuse-lite: 1.0.30001806 + fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.3 + postcss: 8.5.25 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 - aws-sign2@0.7.0: {} - - aws4@1.13.2: {} - - axe-core@4.10.3: {} + axe-core@4.12.1: {} - axios@1.13.6: + babel-loader@9.2.1(@babel/core@7.29.7(supports-color@10.2.2))(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): dependencies: - follow-redirects: 1.15.11 - form-data: 4.0.5 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - axobject-query@4.1.0: {} - - babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.105.4(esbuild@0.19.12)): - dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.29.7(supports-color@10.2.2) find-cache-dir: 4.0.0 - schema-utils: 4.3.0 - webpack: 5.105.4(esbuild@0.19.12) + schema-utils: 4.3.3 + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.29.7 cosmiconfig: 7.1.0 - resolve: 1.22.10 + resolve: 1.22.12 - babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2): dependencies: - '@babel/compat-data': 7.26.3 - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@babel/compat-data': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2): + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + core-js-compat: 3.49.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2): dependencies: - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) - core-js-compat: 3.40.0 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2): dependencies: - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - supports-color balanced-match@1.0.2: {} - balanced-match@4.0.4: - optional: true + balanced-match@4.0.4: {} + + base64-js@0.0.8: {} base64-js@1.5.1: {} - baseline-browser-mapping@2.10.8: {} + base64id@2.0.0: {} - bcrypt-pbkdf@1.0.2: - dependencies: - tweetnacl: 0.14.5 + baseline-browser-mapping@2.11.7: {} - better-opn@3.0.2: + before-after-hook@4.0.0: {} + + bidi-js@1.0.3: dependencies: - open: 8.4.2 + require-from-string: 2.0.2 big.js@5.2.2: {} binary-extensions@2.3.0: {} - birecord@0.1.1: {} + bl@4.1.0: + dependencies: + buffer: 5.6.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + optional: true - blurhash@2.0.5: {} + blake3-wasm@2.1.5: {} - bn.js@4.12.3: {} + bluebird@3.7.2: {} - bn.js@5.2.3: {} + bn.js@4.12.5: {} - body-parser@2.2.2: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 4.4.3 - http-errors: 2.0.1 - iconv-lite: 0.7.2 - on-finished: 2.4.1 - qs: 6.15.0 - raw-body: 3.0.2 - type-is: 2.0.1 - transitivePeerDependencies: - - supports-color + bn.js@5.2.5: {} body-scroll-lock@4.0.0-beta.0: {} boolbase@1.0.0: {} - brace-expansion@1.1.13: + bottleneck@2.19.5: {} + + bowser@2.14.1: {} + + brace-expansion@1.1.17: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.3: + brace-expansion@2.1.4: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.5: + brace-expansion@5.0.9: dependencies: balanced-match: 4.0.4 - optional: true braces@3.0.3: dependencies: @@ -12264,12 +15237,14 @@ snapshots: brorand@1.1.0: {} - browser-assert@1.2.1: {} + brotli@1.3.3: + dependencies: + base64-js: 1.5.1 browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 - cipher-base: 1.0.6 + cipher-base: 1.0.7 create-hash: 1.2.0 evp_bytestokey: 1.0.3 inherits: 2.0.4 @@ -12283,27 +15258,26 @@ snapshots: browserify-des@1.0.2: dependencies: - cipher-base: 1.0.6 + cipher-base: 1.0.7 des.js: 1.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 browserify-rsa@4.1.1: dependencies: - bn.js: 5.2.3 + bn.js: 5.2.5 randombytes: 2.1.0 safe-buffer: 5.2.1 - browserify-sign@4.2.3: + browserify-sign@4.2.6: dependencies: - bn.js: 5.2.3 + bn.js: 5.2.5 browserify-rsa: 4.1.1 create-hash: 1.2.0 create-hmac: 1.1.7 elliptic: 6.6.1 - hash-base: 3.0.5 inherits: 2.0.4 - parse-asn1: 5.1.7 + parse-asn1: 5.1.9 readable-stream: 2.3.8 safe-buffer: 5.2.1 @@ -12311,31 +15285,34 @@ snapshots: dependencies: pako: 1.0.11 - browserslist@4.24.4: - dependencies: - caniuse-lite: 1.0.30001716 - electron-to-chromium: 1.5.79 - node-releases: 2.0.19 - update-browserslist-db: 1.1.2(browserslist@4.24.4) - - browserslist@4.28.1: + browserslist@4.28.7: dependencies: - baseline-browser-mapping: 2.10.8 - caniuse-lite: 1.0.30001780 - electron-to-chromium: 1.5.313 - node-releases: 2.0.36 - update-browserslist-db: 1.2.3(browserslist@4.28.1) + baseline-browser-mapping: 2.11.7 + caniuse-lite: 1.0.30001806 + electron-to-chromium: 1.5.398 + node-releases: 2.0.51 + update-browserslist-db: 1.2.3(browserslist@4.28.7) bson-objectid@2.0.4: {} - buffer-equal-constant-time@1.0.1: {} + bson@6.10.4: {} + + buffer-crc32@1.0.0: + optional: true buffer-from@1.1.2: {} - buffer-writer@2.0.0: {} + buffer-image-size@0.6.4: + dependencies: + '@types/node': 26.1.2 buffer-xor@1.0.3: {} + buffer@5.6.0: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + buffer@6.0.3: dependencies: base64-js: 1.5.1 @@ -12343,18 +15320,20 @@ snapshots: builtin-status-codes@3.0.0: {} + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + busboy@1.6.0: dependencies: streamsearch: 1.1.0 - bytes@3.1.2: {} - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.8: + call-bind@1.0.9: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 @@ -12373,32 +15352,32 @@ snapshots: pascal-case: 3.1.2 tslib: 2.8.1 - camelcase-css@2.0.1: {} - - caniuse-api@3.0.0: + caniuse-api@4.0.0: dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001780 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 + browserslist: 4.28.7 + caniuse-lite: 1.0.30001806 - caniuse-lite@1.0.30001716: {} + caniuse-lite@1.0.30001806: {} - caniuse-lite@1.0.30001780: {} + canvas@3.2.3: + dependencies: + node-addon-api: 7.1.1 + prebuild-install: 7.1.3 + optional: true case-sensitive-paths-webpack-plugin@2.4.0: {} - caseless@0.12.0: {} - ccount@2.0.1: {} - chai@5.1.2: + chai@5.3.3: dependencies: assertion-error: 2.0.1 - check-error: 2.1.1 + check-error: 2.1.3 deep-eql: 5.0.2 - loupe: 3.1.3 - pathval: 2.0.0 + loupe: 3.2.1 + pathval: 2.0.1 + + chai@6.2.2: {} chalk@2.4.2: dependencies: @@ -12416,6 +15395,10 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.6.2: {} + + char-regex@1.0.2: {} + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -12426,7 +15409,7 @@ snapshots: charenc@0.0.2: {} - check-error@2.1.1: {} + check-error@2.1.3: {} chokidar@3.6.0: dependencies: @@ -12443,31 +15426,71 @@ snapshots: chokidar@4.0.3: dependencies: readdirp: 4.1.2 + + chownr@1.1.4: optional: true chrome-trace-event@1.0.4: {} ci-info@4.4.0: {} - cipher-base@1.0.6: + cipher-base@1.0.7: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + to-buffer: 1.2.2 + + citty@0.2.2: {} cjs-module-lexer@1.4.3: {} - class-variance-authority@0.7.1: - dependencies: - clsx: 2.1.1 + cjs-module-lexer@2.2.0: {} clean-css@5.3.3: dependencies: source-map: 0.6.1 + clean-stack@5.3.0: + dependencies: + escape-string-regexp: 5.0.0 + + cli-highlight@2.1.11: + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.2 + + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + client-only@0.0.1: {} + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + + clone@2.1.2: {} + clsx@2.1.1: {} + cluster-key-slot@1.1.1: {} + + cluster-key-slot@1.1.2: {} + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -12480,45 +15503,52 @@ snapshots: color-name@1.1.4: {} - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - - colord@2.9.3: {} - - colorette@2.0.20: {} + color-name@2.1.1: {} - combined-stream@1.0.8: + color-string@2.1.4: dependencies: - delayed-stream: 1.0.0 + color-name: 2.1.1 - commander@2.20.3: {} + colorette@2.0.20: {} - commander@4.1.1: {} + comma-separated-tokens@2.0.3: {} - commander@7.2.0: {} + commander@11.1.0: {} - commander@8.3.0: {} + commander@13.1.0: {} - comment-parser@1.4.1: {} + commander@2.20.3: {} - comment-parser@1.4.6: - optional: true + commander@8.3.0: {} common-path-prefix@3.0.0: {} commondir@1.0.1: {} - compare-versions@6.1.1: {} + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 concat-map@0.0.1: {} + conf@15.1.0: + dependencies: + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) + atomically: 2.1.1 + debounce-fn: 6.0.0 + dot-prop: 10.2.0 + env-paths: 3.0.0 + json-schema-typed: 8.0.2 + semver: 7.8.5 + uint8array-extras: 1.5.0 + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + console-browserify@1.2.0: {} console-table-printer@2.12.1: @@ -12527,73 +15557,119 @@ snapshots: constants-browserify@1.0.0: {} - content-disposition@1.0.1: {} + content-type@2.1.0: {} + + conventional-changelog-angular@8.3.1: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-angular@9.2.1: + dependencies: + '@conventional-changelog/template': 1.2.1 + + conventional-changelog-conventionalcommits@10.2.1: + dependencies: + '@conventional-changelog/template': 1.2.1 + + conventional-changelog-writer@8.4.0: + dependencies: + '@simple-libs/stream-utils': 1.2.0 + conventional-commits-filter: 5.0.0 + handlebars: 4.7.9 + meow: 13.2.0 + semver: 7.8.5 + + conventional-commits-filter@5.0.0: {} - content-type@1.0.5: {} + conventional-commits-parser@6.4.0: + dependencies: + '@simple-libs/stream-utils': 1.2.0 + meow: 13.2.0 + + conventional-commits-parser@7.1.2: + dependencies: + '@simple-libs/stream-utils': 2.0.0 + argue-cli: 3.1.0 + + convert-hrtime@5.0.0: {} convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} - cookie-signature@1.2.2: {} - cookie@0.7.2: {} - core-js-compat@3.40.0: - dependencies: - browserslist: 4.24.4 + cookie@1.1.1: {} - core-js-pure@3.40.0: {} + core-js-compat@3.49.0: + dependencies: + browserslist: 4.28.7 - core-util-is@1.0.2: {} + core-js-pure@3.49.0: {} core-util-is@1.0.3: {} - cors@2.8.5: + cors@2.8.6: dependencies: object-assign: 4.1.1 vary: 1.1.2 + cosmiconfig-typescript-loader@6.3.0(@types/node@26.1.2)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3): + dependencies: + '@types/node': 26.1.2 + cosmiconfig: 9.0.2(typescript@6.0.3) + jiti: 2.6.1 + typescript: 6.0.3 + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.3 - cosmiconfig@9.0.0(typescript@5.8.3): + cosmiconfig@8.3.6(typescript@6.0.3): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 6.0.3 + + cosmiconfig@9.0.2(typescript@6.0.3): dependencies: env-paths: 2.2.1 - import-fresh: 3.3.0 - js-yaml: 4.1.1 + import-fresh: 3.3.1 + js-yaml: 4.3.1 parse-json: 5.2.0 optionalDependencies: - typescript: 5.8.3 + typescript: 6.0.3 create-ecdh@4.0.4: dependencies: - bn.js: 4.12.3 + bn.js: 4.12.5 elliptic: 6.6.1 create-hash@1.2.0: dependencies: - cipher-base: 1.0.6 + cipher-base: 1.0.7 inherits: 2.0.4 md5.js: 1.3.5 - ripemd160: 2.0.2 + ripemd160: 2.0.3 sha.js: 2.4.12 create-hmac@1.1.7: dependencies: - cipher-base: 1.0.6 + cipher-base: 1.0.7 create-hash: 1.2.0 inherits: 2.0.4 - ripemd160: 2.0.2 + ripemd160: 2.0.3 safe-buffer: 5.2.1 sha.js: 2.4.12 - croner@9.1.0: {} + croner@10.0.1: {} cross-spawn@7.0.6: dependencies: @@ -12606,34 +15682,47 @@ snapshots: crypto-browserify@3.12.1: dependencies: browserify-cipher: 1.0.1 - browserify-sign: 4.2.3 + browserify-sign: 4.2.6 create-ecdh: 4.0.4 create-hash: 1.2.0 create-hmac: 1.1.7 diffie-hellman: 5.0.3 hash-base: 3.0.5 inherits: 2.0.4 - pbkdf2: 3.1.5 + pbkdf2: 3.1.6 public-encrypt: 4.0.3 randombytes: 2.1.0 randomfill: 1.0.4 - css-declaration-sorter@7.2.0(postcss@8.5.3): + crypto-random-string@4.0.0: dependencies: - postcss: 8.5.3 + type-fest: 1.4.0 - css-loader@6.11.0(webpack@5.105.4(esbuild@0.19.12)): + css-loader@6.11.0(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): dependencies: - icss-utils: 5.1.0(postcss@8.5.3) - postcss: 8.5.3 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.3) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.3) - postcss-modules-scope: 3.2.1(postcss@8.5.3) - postcss-modules-values: 4.0.0(postcss@8.5.3) + icss-utils: 5.1.0(postcss@8.5.25) + postcss: 8.5.25 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.25) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.25) + postcss-modules-scope: 3.2.1(postcss@8.5.25) + postcss-modules-values: 4.0.0(postcss@8.5.25) postcss-value-parser: 4.2.0 - semver: 7.7.1 + semver: 7.8.5 optionalDependencies: - webpack: 5.105.4(esbuild@0.19.12) + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) + + css-loader@7.1.4(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): + dependencies: + icss-utils: 5.1.0(postcss@8.5.25) + postcss: 8.5.25 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.25) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.25) + postcss-modules-scope: 3.2.1(postcss@8.5.25) + postcss-modules-values: 4.0.0(postcss@8.5.25) + postcss-value-parser: 4.2.0 + semver: 7.8.5 + optionalDependencies: + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) css-select@4.3.0: dependencies: @@ -12656,9 +15745,9 @@ snapshots: mdn-data: 2.0.28 source-map-js: 1.2.1 - css-tree@2.3.1: + css-tree@3.2.1: dependencies: - mdn-data: 2.0.30 + mdn-data: 2.27.1 source-map-js: 1.2.1 css-what@6.2.2: {} @@ -12669,89 +15758,105 @@ snapshots: cssfilter@0.0.10: {} - cssnano-preset-default@7.0.6(postcss@8.5.3): - dependencies: - browserslist: 4.24.4 - css-declaration-sorter: 7.2.0(postcss@8.5.3) - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 - postcss-calc: 10.1.0(postcss@8.5.3) - postcss-colormin: 7.0.2(postcss@8.5.3) - postcss-convert-values: 7.0.4(postcss@8.5.3) - postcss-discard-comments: 7.0.3(postcss@8.5.3) - postcss-discard-duplicates: 7.0.1(postcss@8.5.3) - postcss-discard-empty: 7.0.0(postcss@8.5.3) - postcss-discard-overridden: 7.0.0(postcss@8.5.3) - postcss-merge-longhand: 7.0.4(postcss@8.5.3) - postcss-merge-rules: 7.0.4(postcss@8.5.3) - postcss-minify-font-values: 7.0.0(postcss@8.5.3) - postcss-minify-gradients: 7.0.0(postcss@8.5.3) - postcss-minify-params: 7.0.2(postcss@8.5.3) - postcss-minify-selectors: 7.0.4(postcss@8.5.3) - postcss-normalize-charset: 7.0.0(postcss@8.5.3) - postcss-normalize-display-values: 7.0.0(postcss@8.5.3) - postcss-normalize-positions: 7.0.0(postcss@8.5.3) - postcss-normalize-repeat-style: 7.0.0(postcss@8.5.3) - postcss-normalize-string: 7.0.0(postcss@8.5.3) - postcss-normalize-timing-functions: 7.0.0(postcss@8.5.3) - postcss-normalize-unicode: 7.0.2(postcss@8.5.3) - postcss-normalize-url: 7.0.0(postcss@8.5.3) - postcss-normalize-whitespace: 7.0.0(postcss@8.5.3) - postcss-ordered-values: 7.0.1(postcss@8.5.3) - postcss-reduce-initial: 7.0.2(postcss@8.5.3) - postcss-reduce-transforms: 7.0.0(postcss@8.5.3) - postcss-svgo: 7.0.1(postcss@8.5.3) - postcss-unique-selectors: 7.0.3(postcss@8.5.3) - - cssnano-utils@5.0.0(postcss@8.5.3): - dependencies: - postcss: 8.5.3 - - cssnano@7.0.6(postcss@8.5.3): - dependencies: - cssnano-preset-default: 7.0.6(postcss@8.5.3) + cssnano-preset-default@8.0.2(postcss@8.5.25): + dependencies: + browserslist: 4.28.7 + cssnano-utils: 6.0.1(postcss@8.5.25) + postcss: 8.5.25 + postcss-calc: 10.1.1(postcss@8.5.25) + postcss-colormin: 8.0.1(postcss@8.5.25) + postcss-convert-values: 8.0.1(postcss@8.5.25) + postcss-discard-comments: 8.0.1(postcss@8.5.25) + postcss-discard-duplicates: 8.0.1(postcss@8.5.25) + postcss-discard-empty: 8.0.1(postcss@8.5.25) + postcss-discard-overridden: 8.0.1(postcss@8.5.25) + postcss-merge-longhand: 8.0.1(postcss@8.5.25) + postcss-merge-rules: 8.0.1(postcss@8.5.25) + postcss-minify-font-values: 8.0.1(postcss@8.5.25) + postcss-minify-gradients: 8.0.1(postcss@8.5.25) + postcss-minify-params: 8.0.1(postcss@8.5.25) + postcss-minify-selectors: 8.0.2(postcss@8.5.25) + postcss-normalize-charset: 8.0.1(postcss@8.5.25) + postcss-normalize-display-values: 8.0.1(postcss@8.5.25) + postcss-normalize-positions: 8.0.1(postcss@8.5.25) + postcss-normalize-repeat-style: 8.0.1(postcss@8.5.25) + postcss-normalize-string: 8.0.1(postcss@8.5.25) + postcss-normalize-timing-functions: 8.0.1(postcss@8.5.25) + postcss-normalize-unicode: 8.0.1(postcss@8.5.25) + postcss-normalize-url: 8.0.1(postcss@8.5.25) + postcss-normalize-whitespace: 8.0.1(postcss@8.5.25) + postcss-ordered-values: 8.0.1(postcss@8.5.25) + postcss-reduce-initial: 8.0.1(postcss@8.5.25) + postcss-reduce-transforms: 8.0.1(postcss@8.5.25) + postcss-svgo: 8.0.1(postcss@8.5.25) + postcss-unique-selectors: 8.0.1(postcss@8.5.25) + + cssnano-utils@6.0.1(postcss@8.5.25): + dependencies: + postcss: 8.5.25 + + cssnano@8.0.2(postcss@8.5.25): + dependencies: + cssnano-preset-default: 8.0.2(postcss@8.5.25) lilconfig: 3.1.3 - postcss: 8.5.3 + postcss: 8.5.25 csso@5.0.5: dependencies: css-tree: 2.2.1 - cssstyle@4.2.1: + csstype@3.1.3: {} + + csstype@3.2.3: {} + + csv-parse@5.6.0: {} + + csv-stringify@6.5.2: {} + + d3-array@3.2.4: dependencies: - '@asamuzakjp/css-color': 2.8.3 - rrweb-cssom: 0.8.0 + internmap: 2.0.3 - csstype@3.1.3: {} + d3-color@3.1.0: {} - damerau-levenshtein@1.0.8: {} + d3-ease@3.0.1: {} - dashdash@1.14.1: + d3-format@3.1.2: {} + + d3-interpolate@3.0.1: dependencies: - assert-plus: 1.0.0 + d3-color: 3.1.0 + + d3-path@3.1.0: {} - data-urls@5.0.0: + d3-scale@4.0.2: dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 14.1.1 + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 - data-view-buffer@1.0.2: + d3-shape@3.2.0: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 + d3-path: 3.1.0 - data-view-byte-length@1.0.2: + d3-time-format@4.1.0: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 + d3-time: 3.1.0 - data-view-byte-offset@1.0.1: + d3-time@3.1.0: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + data-urls@7.0.0(@noble/hashes@1.8.0): + dependencies: + whatwg-mimetype: 5.0.0 + whatwg-url: 16.0.1(@noble/hashes@1.8.0) + transitivePeerDependencies: + - '@noble/hashes' dataloader@2.2.3: {} @@ -12759,41 +15864,68 @@ snapshots: date-fns@4.1.0: {} + date-fns@4.4.0: {} + dateformat@4.6.3: {} - debug@3.2.7: + debounce-fn@6.0.0: dependencies: - ms: 2.1.3 + mimic-function: 5.0.1 - debug@4.4.0: + debounce@2.2.0: {} + + debug@4.4.0(supports-color@10.2.2): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 + optional: true - debug@4.4.3: + debug@4.4.3(supports-color@10.2.2): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 - decimal.js@10.5.0: {} + decimal.js-light@2.5.1: {} - decode-named-character-reference@1.1.0: + decimal.js@10.6.0: {} + + decode-named-character-reference@1.3.0: dependencies: character-entities: 2.0.2 + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + optional: true + dedent@0.7.0: {} + dedent@1.7.2(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 + deep-eql@5.0.2: {} - deep-is@0.1.4: {} + deep-extend@0.6.0: {} 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-data-property@1.1.4: dependencies: es-define-property: 1.0.1 es-errors: 1.3.0 gopd: 1.2.0 - define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} define-properties@1.2.1: dependencies: @@ -12801,9 +15933,7 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - delayed-stream@1.0.0: {} - - depd@2.0.0: {} + denque@2.1.0: {} dequal@2.0.3: {} @@ -12814,12 +15944,9 @@ snapshots: detect-file@1.0.0: {} - detect-indent@7.0.1: {} - - detect-libc@2.0.4: {} + detect-indent@7.0.2: {} - detect-libc@2.1.2: - optional: true + detect-libc@2.1.2: {} detect-newline@4.0.1: {} @@ -12827,19 +15954,22 @@ snapshots: dependencies: dequal: 2.0.3 - didyoumean@1.2.2: {} + dfa@1.2.0: {} diffie-hellman@5.0.3: dependencies: - bn.js: 4.12.3 + bn.js: 4.12.5 miller-rabin: 4.0.1 randombytes: 2.1.0 - dlv@1.1.3: {} + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 - doctrine@2.1.0: + dns-packet@5.6.1: dependencies: - esutils: 2.0.3 + '@leichtgewicht/ip-codec': 2.0.5 + optional: true doctrine@3.0.0: dependencies: @@ -12855,8 +15985,8 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.27.1 - csstype: 3.1.3 + '@babel/runtime': 7.29.7 + csstype: 3.2.3 dom-serializer@1.4.1: dependencies: @@ -12882,7 +16012,11 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.3.2: + dompurify@3.4.13: + optionalDependencies: + '@types/trusted-types': 2.0.7 + + dompurify@3.4.8: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -12903,22 +16037,17 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 - drizzle-kit@0.28.0: + dot-prop@10.2.0: dependencies: - '@drizzle-team/brocli': 0.10.2 - '@esbuild-kit/esm-loader': 2.6.5 - esbuild: 0.19.12 - esbuild-register: 3.6.0(esbuild@0.19.12) - transitivePeerDependencies: - - supports-color + type-fest: 5.8.0 - drizzle-orm@0.36.1(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@types/react@19.1.2)(pg@8.11.3)(react@19.1.0): - optionalDependencies: - '@opentelemetry/api': 1.9.0 - '@types/pg': 8.10.2 - '@types/react': 19.1.2 - pg: 8.11.3 - react: 19.1.0 + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + dotenv@16.6.1: {} + + dotenv@17.4.2: {} dunder-proto@1.0.1: dependencies: @@ -12926,28 +16055,15 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - duration-fns@3.0.2: {} - - eastasianwidth@0.2.0: {} - - ecc-jsbn@0.1.2: + duplexer2@0.1.4: dependencies: - jsbn: 0.1.1 - safer-buffer: 2.1.2 - - ecdsa-sig-formatter@1.0.11: - dependencies: - safe-buffer: 5.2.1 - - ee-first@1.1.1: {} - - electron-to-chromium@1.5.313: {} + readable-stream: 2.3.8 - electron-to-chromium@1.5.79: {} + electron-to-chromium@1.5.398: {} elliptic@6.6.1: dependencies: - bn.js: 4.12.3 + bn.js: 4.12.5 brorand: 1.1.0 hash.js: 1.1.7 hmac-drbg: 1.0.1 @@ -12959,11 +16075,15 @@ snapshots: dependencies: embla-carousel: 8.6.0 - embla-carousel-react@8.6.0(react@19.1.0): + embla-carousel-fade@8.6.0(embla-carousel@8.6.0): + dependencies: + embla-carousel: 8.6.0 + + embla-carousel-react@8.6.0(react@19.2.8): dependencies: embla-carousel: 8.6.0 embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) - react: 19.1.0 + react: 19.2.8 embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): dependencies: @@ -12971,760 +16091,142 @@ snapshots: embla-carousel@8.6.0: {} - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - emojis-list@3.0.0: {} - - encodeurl@2.0.0: {} - - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - - endent@2.1.0: - dependencies: - dedent: 0.7.0 - fast-json-parse: 1.0.3 - objectorarray: 1.0.5 - - enhanced-resolve@5.18.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - enhanced-resolve@5.20.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.0 - - entities@2.2.0: {} - - entities@4.5.0: {} - - env-paths@2.2.1: {} - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - error-stack-parser@2.1.4: - dependencies: - stackframe: 1.3.4 - - es-abstract@1.23.9: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-regex: 1.2.1 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.0 - math-intrinsics: 1.1.0 - object-inspect: 1.13.3 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.20 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-iterator-helpers@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 - - es-module-lexer@1.6.0: {} - - es-module-lexer@2.0.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - esbuild-register@3.6.0(esbuild@0.19.12): - dependencies: - debug: 4.4.3 - esbuild: 0.19.12 - transitivePeerDependencies: - - supports-color - - esbuild-register@3.6.0(esbuild@0.25.12): - dependencies: - debug: 4.4.3 - esbuild: 0.25.12 - transitivePeerDependencies: - - supports-color - - esbuild@0.18.20: - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - - esbuild@0.19.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - - esbuild@0.25.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 - - esbuild@0.27.4: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.4 - '@esbuild/android-arm': 0.27.4 - '@esbuild/android-arm64': 0.27.4 - '@esbuild/android-x64': 0.27.4 - '@esbuild/darwin-arm64': 0.27.4 - '@esbuild/darwin-x64': 0.27.4 - '@esbuild/freebsd-arm64': 0.27.4 - '@esbuild/freebsd-x64': 0.27.4 - '@esbuild/linux-arm': 0.27.4 - '@esbuild/linux-arm64': 0.27.4 - '@esbuild/linux-ia32': 0.27.4 - '@esbuild/linux-loong64': 0.27.4 - '@esbuild/linux-mips64el': 0.27.4 - '@esbuild/linux-ppc64': 0.27.4 - '@esbuild/linux-riscv64': 0.27.4 - '@esbuild/linux-s390x': 0.27.4 - '@esbuild/linux-x64': 0.27.4 - '@esbuild/netbsd-arm64': 0.27.4 - '@esbuild/netbsd-x64': 0.27.4 - '@esbuild/openbsd-arm64': 0.27.4 - '@esbuild/openbsd-x64': 0.27.4 - '@esbuild/openharmony-arm64': 0.27.4 - '@esbuild/sunos-x64': 0.27.4 - '@esbuild/win32-arm64': 0.27.4 - '@esbuild/win32-ia32': 0.27.4 - '@esbuild/win32-x64': 0.27.4 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-next@15.3.1(eslint-plugin-import-x@4.11.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3): - dependencies: - '@next/eslint-plugin-next': 15.3.1 - '@rushstack/eslint-patch': 1.11.0 - '@typescript-eslint/eslint-plugin': 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.11.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.26.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0(jiti@2.4.2)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.26.0(jiti@2.4.2)) - eslint-plugin-react: 7.37.5(eslint@9.26.0(jiti@2.4.2)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.26.0(jiti@2.4.2)) - optionalDependencies: - typescript: 5.8.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - - eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)): - dependencies: - eslint: 9.22.0(jiti@2.4.2) - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.16.1 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.11.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.26.0(jiti@2.4.2)): - dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.0 - eslint: 9.26.0(jiti@2.4.2) - get-tsconfig: 4.13.6 - is-bun-module: 2.0.0 - stable-hash: 0.0.5 - tinyglobby: 0.2.13 - unrs-resolver: 1.7.2 - optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.11.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0(jiti@2.4.2)): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.11.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.26.0(jiti@2.4.2)) - transitivePeerDependencies: - - supports-color - - eslint-plugin-import-x@4.11.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3): - dependencies: - '@typescript-eslint/utils': 8.57.2(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - comment-parser: 1.4.6 - debug: 4.4.3 - eslint: 9.26.0(jiti@2.4.2) - eslint-import-resolver-node: 0.3.9 - get-tsconfig: 4.13.7 - is-glob: 4.0.3 - minimatch: 10.2.4 - semver: 7.7.4 - stable-hash: 0.0.5 - tslib: 2.8.1 - unrs-resolver: 1.11.1 - transitivePeerDependencies: - - supports-color - - typescript - optional: true + emoji-regex-xs@1.0.0: {} - eslint-plugin-import-x@4.6.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): - dependencies: - '@types/doctrine': 0.0.9 - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - debug: 4.4.0 - doctrine: 3.0.0 - enhanced-resolve: 5.18.1 - eslint: 9.22.0(jiti@2.4.2) - eslint-import-resolver-node: 0.3.9 - get-tsconfig: 4.13.6 - is-glob: 4.0.3 - minimatch: 9.0.9 - semver: 7.7.1 - stable-hash: 0.0.4 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0(jiti@2.4.2)): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.26.0(jiti@2.4.2) - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.26.0(jiti@2.4.2)) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.5 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.9 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color + emoji-regex@10.6.0: {} - eslint-plugin-jest-dom@5.5.0(@testing-library/dom@10.4.0)(eslint@9.22.0(jiti@2.4.2)): - dependencies: - '@babel/runtime': 7.27.1 - eslint: 9.22.0(jiti@2.4.2) - requireindex: 1.2.0 - optionalDependencies: - '@testing-library/dom': 10.4.0 + emoji-regex@8.0.0: {} - eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): - dependencies: - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - transitivePeerDependencies: - - supports-color - - typescript + emojilib@2.4.0: {} - eslint-plugin-jsx-a11y@6.10.2(eslint@9.22.0(jiti@2.4.2)): + emojis-list@3.0.0: {} + + end-of-stream@1.4.5: dependencies: - aria-query: 5.3.2 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.3 - ast-types-flow: 0.0.8 - axe-core: 4.10.3 - axobject-query: 4.1.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 9.22.0(jiti@2.4.2) - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.5 - object.fromentries: 2.0.8 - safe-regex-test: 1.1.0 - string.prototype.includes: 2.0.1 + once: 1.4.0 - eslint-plugin-jsx-a11y@6.10.2(eslint@9.26.0(jiti@2.4.2)): + endent@2.1.0: dependencies: - aria-query: 5.3.2 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.3 - ast-types-flow: 0.0.8 - axe-core: 4.10.3 - axobject-query: 4.1.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 9.26.0(jiti@2.4.2) - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.5 - object.fromentries: 2.0.8 - safe-regex-test: 1.1.0 - string.prototype.includes: 2.0.1 + dedent: 0.7.0 + fast-json-parse: 1.0.3 + objectorarray: 1.0.5 - eslint-plugin-perfectionist@3.9.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): + engine.io-parser@5.2.3: {} + + engine.io@6.6.9(supports-color@10.2.2): dependencies: - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - minimatch: 9.0.9 - natural-compare-lite: 1.4.0 + '@types/cors': 2.8.19 + '@types/node': 26.1.2 + '@types/ws': 8.18.1 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.7.2 + cors: 2.8.6 + debug: 4.4.3(supports-color@10.2.2) + engine.io-parser: 5.2.3 + ws: 8.21.1 transitivePeerDependencies: + - bufferutil - supports-color - - typescript + - utf-8-validate - eslint-plugin-react-debug@1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): - dependencies: - '@eslint-react/ast': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/core': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.31.0 - '@eslint-react/jsx': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - string-ts: 2.2.1 - ts-pattern: 5.7.0 - optionalDependencies: - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + enhanced-resolve@5.24.4: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 - eslint-plugin-react-dom@1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): - dependencies: - '@eslint-react/ast': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/core': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.31.0 - '@eslint-react/jsx': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - compare-versions: 6.1.1 - eslint: 9.22.0(jiti@2.4.2) - string-ts: 2.2.1 - ts-pattern: 5.7.0 - optionalDependencies: - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + entities@2.2.0: {} - eslint-plugin-react-hooks-extra@1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): - dependencies: - '@eslint-react/ast': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/core': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.31.0 - '@eslint-react/jsx': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - string-ts: 2.2.1 - ts-pattern: 5.7.0 - optionalDependencies: - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + entities@4.5.0: {} - eslint-plugin-react-hooks@0.0.0-experimental-d331ba04-20250307(eslint@9.22.0(jiti@2.4.2)): - dependencies: - eslint: 9.22.0(jiti@2.4.2) + entities@7.0.1: {} - eslint-plugin-react-hooks@5.2.0(eslint@9.26.0(jiti@2.4.2)): - dependencies: - eslint: 9.26.0(jiti@2.4.2) + entities@8.0.0: {} - eslint-plugin-react-naming-convention@1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): + env-ci@11.2.0: dependencies: - '@eslint-react/ast': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/core': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.31.0 - '@eslint-react/jsx': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - string-ts: 2.2.1 - ts-pattern: 5.7.0 - optionalDependencies: - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + execa: 8.0.1 + java-properties: 1.0.2 - eslint-plugin-react-web-api@1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): - dependencies: - '@eslint-react/ast': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/core': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.31.0 - '@eslint-react/jsx': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - string-ts: 2.2.1 - ts-pattern: 5.7.0 - optionalDependencies: - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + env-paths@2.2.1: {} - eslint-plugin-react-x@1.31.0(eslint@9.22.0(jiti@2.4.2))(ts-api-utils@2.4.0(typescript@5.8.3))(typescript@5.7.3): - dependencies: - '@eslint-react/ast': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/core': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.31.0 - '@eslint-react/jsx': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.31.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/utils': 8.31.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - compare-versions: 6.1.1 - eslint: 9.22.0(jiti@2.4.2) - string-ts: 2.2.1 - ts-pattern: 5.7.0 - optionalDependencies: - ts-api-utils: 2.4.0(typescript@5.8.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + env-paths@3.0.0: {} - eslint-plugin-react@7.37.5(eslint@9.26.0(jiti@2.4.2)): - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 - eslint: 9.26.0(jiti@2.4.2) - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.5 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - - eslint-plugin-regexp@2.7.0(eslint@9.22.0(jiti@2.4.2)): - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.22.0(jiti@2.4.2)) - '@eslint-community/regexpp': 4.12.1 - comment-parser: 1.4.1 - eslint: 9.22.0(jiti@2.4.2) - jsdoc-type-pratt-parser: 4.1.0 - refa: 0.12.1 - regexp-ast-analysis: 0.7.1 - scslre: 0.3.0 - - eslint-plugin-storybook@0.12.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3): - dependencies: - '@storybook/csf': 0.1.13 - '@typescript-eslint/utils': 8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - - typescript + environment@1.1.0: {} - eslint-scope@5.1.1: + error-ex@1.3.4: dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 + is-arrayish: 0.2.1 + + error-stack-parser-es@1.0.5: {} - eslint-scope@8.3.0: + error-stack-parser@2.1.4: dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 + stackframe: 1.3.4 + + es-define-property@1.0.1: {} - eslint-visitor-keys@3.4.3: {} + es-errors@1.3.0: {} - eslint-visitor-keys@4.2.0: {} + es-module-lexer@1.7.0: {} - eslint-visitor-keys@5.0.1: - optional: true + es-module-lexer@2.3.1: {} - eslint@9.22.0(jiti@2.4.2): + es-object-atoms@1.1.2: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.22.0(jiti@2.4.2)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.2 - '@eslint/config-helpers': 0.1.0 - '@eslint/core': 0.12.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.22.0 - '@eslint/plugin-kit': 0.2.8 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.2 - '@types/estree': 1.0.7 - '@types/json-schema': 7.0.15 - ajv: 6.14.0 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.0 - escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.5 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.4.2 - transitivePeerDependencies: - - supports-color + es-errors: 1.3.0 - eslint@9.26.0(jiti@2.4.2): - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.1 - '@eslint/core': 0.13.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.26.0 - '@eslint/plugin-kit': 0.2.8 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.2 - '@modelcontextprotocol/sdk': 1.27.1(zod@3.24.4) - '@types/estree': 1.0.7 - '@types/json-schema': 7.0.15 - ajv: 6.14.0 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.0 - escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.5 - natural-compare: 1.4.0 - optionator: 0.9.4 - zod: 3.24.4 + es-toolkit@1.50.0: {} + + esbuild@0.28.1: optionalDependencies: - jiti: 2.4.2 - transitivePeerDependencies: - - '@cfworker/json-schema' - - supports-color + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 + + escalade@3.2.0: {} + + escape-goat@4.0.0: {} + + escape-html@1.0.3: {} - espree@10.3.0: + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-scope@5.1.1: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 + esrecurse: 4.3.0 + estraverse: 4.3.0 esprima@4.0.1: {} - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -13743,132 +16245,112 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/unist': 3.0.3 + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.9 esutils@2.0.3: {} - etag@1.8.1: {} - event-target-shim@5.0.1: {} - events@3.3.0: {} + eventemitter3@5.0.4: {} - eventsource-parser@3.0.6: {} + events@3.3.0: {} - eventsource@3.0.6: - dependencies: - eventsource-parser: 3.0.6 + eventsource-parser@3.1.0: {} evp_bytestokey@1.0.3: dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 - expand-tilde@2.0.2: + execa@10.0.1: dependencies: - homedir-polyfill: 1.0.3 + '@sindresorhus/merge-streams': 4.0.0 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + which-command: 0.1.0 + yoctocolors: 2.2.0 - express-rate-limit@8.3.1(express@5.2.1): + execa@8.0.1: dependencies: - express: 5.2.1 - ip-address: 10.1.0 + 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 - express@5.2.1: + execa@9.6.1: dependencies: - accepts: 2.0.0 - body-parser: 2.2.2 - content-disposition: 1.0.1 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.0 - depd: 2.0.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 2.1.1 - fresh: 2.0.0 - http-errors: 2.0.1 - merge-descriptors: 2.0.0 - mime-types: 3.0.2 - on-finished: 2.4.1 - once: 1.4.0 - parseurl: 1.3.3 - proxy-addr: 2.0.7 - qs: 6.15.0 - range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.1 - serve-static: 2.2.1 - statuses: 2.0.2 - type-is: 2.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.2.0 + + expand-template@2.0.3: + optional: true - extend@3.0.2: {} + expand-tilde@2.0.2: + dependencies: + homedir-polyfill: 1.0.3 - extsprintf@1.3.0: {} + expect-type@1.4.0: {} fast-copy@3.0.2: {} fast-deep-equal@3.1.3: {} - fast-glob@3.3.1: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - fast-json-parse@1.0.3: {} fast-json-stable-stringify@2.1.0: {} - fast-levenshtein@2.0.6: {} - fast-safe-stringify@2.1.1: {} - fast-uri@3.1.0: {} - - fastq@1.18.0: - dependencies: - reusify: 1.0.4 + fast-uri@3.1.5: {} - fdir@6.4.4(picomatch@4.0.4): + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: - picomatch: 4.0.4 + picomatch: 4.0.5 - fdir@6.5.0(picomatch@4.0.4): - optionalDependencies: - picomatch: 4.0.4 + fflate@0.8.3: {} - file-entry-cache@8.0.0: + figures@2.0.0: dependencies: - flat-cache: 4.0.1 + escape-string-regexp: 1.0.5 - file-loader@6.2.0(webpack@5.105.4(esbuild@0.19.12)): + figures@6.1.0: dependencies: - loader-utils: 2.0.4 - schema-utils: 3.3.0 - webpack: 5.105.4(esbuild@0.19.12) + is-unicode-supported: 2.1.0 - file-type@19.3.0: + file-type@21.3.4(supports-color@10.2.2): dependencies: - strtok3: 8.1.0 + '@tokenizer/inflate': 0.4.1(supports-color@10.2.2) + strtok3: 10.3.5 token-types: 6.1.2 uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color fill-range@7.1.1: dependencies: @@ -13876,17 +16358,6 @@ snapshots: filter-obj@2.0.2: {} - finalhandler@2.1.1: - dependencies: - debug: 4.4.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - find-cache-dir@3.3.2: dependencies: commondir: 1.0.1 @@ -13905,6 +16376,12 @@ snapshots: find-root@1.1.0: {} + find-up-simple@1.0.1: {} + + find-up@2.1.0: + dependencies: + locate-path: 2.0.0 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -13920,6 +16397,11 @@ snapshots: locate-path: 7.2.0 path-exists: 5.0.0 + find-versions@6.0.0: + dependencies: + semver-regex: 4.0.5 + super-regex: 1.1.0 + findup-sync@4.0.0: dependencies: detect-file: 1.0.0 @@ -13929,171 +16411,151 @@ snapshots: flat-cache@3.2.0: dependencies: - flatted: 3.4.2 + flatted: 3.4.3 keyv: 4.5.4 rimraf: 3.0.2 - flat-cache@4.0.1: - dependencies: - flatted: 3.4.2 - keyv: 4.5.4 - - flatted@3.4.2: {} + flatted@3.4.3: {} focus-trap@7.5.4: dependencies: - tabbable: 6.2.0 + tabbable: 6.5.0 - follow-redirects@1.15.11: {} + fontkit@2.0.4: + dependencies: + '@swc/helpers': 0.5.23 + brotli: 1.3.3 + clone: 2.1.2 + dfa: 1.2.0 + fast-deep-equal: 3.1.3 + restructure: 3.0.2 + tiny-inflate: 1.0.3 + unicode-properties: 1.4.1 + unicode-trie: 2.0.0 for-each@0.3.5: dependencies: is-callable: 1.2.7 - foreground-child@3.3.0: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - forever-agent@0.6.1: {} - - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.105.4(esbuild@0.19.12)): + fork-ts-checker-webpack-plugin@9.1.0(typescript@6.0.3)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.7 chalk: 4.1.2 - chokidar: 3.6.0 - cosmiconfig: 7.1.0 + chokidar: 4.0.3 + cosmiconfig: 8.3.6(typescript@6.0.3) deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 minimatch: 3.1.5 node-abort-controller: 3.1.1 schema-utils: 3.3.0 - semver: 7.7.1 - tapable: 2.2.1 - typescript: 5.8.3 - webpack: 5.105.4(esbuild@0.19.12) - - form-data@2.3.3: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - - form-data@2.5.5: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - safe-buffer: 5.2.1 - - form-data@4.0.5: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 + semver: 7.8.5 + tapable: 2.3.3 + typescript: 6.0.3 + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) - forwarded@0.2.0: {} + forwarded-parse@2.1.2: {} - fraction.js@4.3.7: {} + fraction.js@5.3.4: {} - fresh@2.0.0: {} + fs-constants@1.0.0: + optional: true fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.1 + universalify: 2.0.1 + + fs-extra@11.3.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 universalify: 2.0.1 - fs-monkey@1.0.6: {} + fs-monkey@1.1.0: {} fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true function-bind@1.1.2: {} - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 + function-timeout@1.0.2: {} - functions-have-names@1.2.3: {} + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + optional: true generator-function@2.0.1: {} + generic-pool@3.9.0: {} + gensync@1.0.0-beta.2: {} + get-caller-file@2.0.5: {} + + get-east-asian-width@1.6.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.4 math-intrinsics: 1.1.0 get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 + get-stream@6.0.1: {} - get-tsconfig@4.13.6: - dependencies: - resolve-pkg-maps: 1.0.0 + get-stream@8.0.1: {} - get-tsconfig@4.13.7: + get-stream@9.0.1: dependencies: - resolve-pkg-maps: 1.0.0 - optional: true + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 - getpass@0.1.7: + git-hooks-list@4.2.1: {} + + git-log-parser@1.2.1: dependencies: - assert-plus: 1.0.0 + argv-formatter: 1.0.0 + spawn-error-forwarder: 1.0.0 + split2: 1.0.0 + stream-combiner2: 1.1.1 + through2: 2.0.5 + traverse: 0.6.8 - git-hooks-list@4.1.1: {} + github-from-package@0.0.0: + optional: true glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - glob-parent@6.0.2: + glob@13.0.6: dependencies: - is-glob: 4.0.3 - - glob-to-regexp@0.4.1: {} - - glob@10.4.5: - dependencies: - foreground-child: 3.3.0 - jackspeak: 3.4.3 - minimatch: 9.0.9 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 + minimatch: 10.2.6 + minipass: 7.1.3 + path-scurry: 2.0.2 glob@7.2.3: dependencies: @@ -14104,6 +16566,17 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 + glob@9.3.5: + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.7 + minipass: 4.2.8 + path-scurry: 1.11.1 + + global-directory@5.0.0: + dependencies: + ini: 6.0.0 + global-modules@1.0.0: dependencies: global-prefix: 1.0.2 @@ -14118,46 +16591,48 @@ snapshots: is-windows: 1.0.2 which: 1.3.1 - globals@11.12.0: {} - - globals@14.0.0: {} - - globals@16.0.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - gopd@1.2.0: {} - graceful-fs@4.2.11: {} + graceful-fs@4.2.10: {} - graphemer@1.4.0: {} + graceful-fs@4.2.11: {} - graphql-http@1.22.4(graphql@16.11.0): + graphql-http@1.22.4(graphql@16.14.2): dependencies: - graphql: 16.11.0 + graphql: 16.14.2 graphql-playground-html@1.6.30: dependencies: xss: 1.0.15 - graphql-scalars@1.22.2(graphql@16.11.0): + graphql-scalars@1.22.2(graphql@16.14.2): dependencies: - graphql: 16.11.0 + graphql: 16.14.2 tslib: 2.8.1 - graphql@16.11.0: {} - - har-schema@2.0.0: {} + graphql@16.14.2: {} - har-validator@5.1.5: + handlebars@4.7.9: dependencies: - ajv: 6.14.0 - har-schema: 2.0.0 + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 - has-bigints@1.1.0: {} + happy-dom@20.11.1: + dependencies: + '@types/node': 26.1.2 + '@types/whatwg-mimetype': 3.0.2 + '@types/ws': 8.18.1 + buffer-image-size: 0.6.4 + entities: 7.0.1 + whatwg-mimetype: 3.0.0 + ws: 8.21.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate has-flag@3.0.0: {} @@ -14167,10 +16642,6 @@ snapshots: dependencies: es-define-property: 1.0.1 - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -14189,19 +16660,41 @@ snapshots: safe-buffer: 5.2.1 to-buffer: 1.2.2 + hash-wasm@4.12.0: {} + hash.js@1.1.7: dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 - hasown@2.0.2: + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: dependencies: - function-bind: 1.1.2 + '@types/hast': 3.0.5 he@1.2.0: {} help-me@5.0.0: {} + highlight.js@10.7.3: {} + hmac-drbg@1.0.1: dependencies: hash.js: 1.1.7 @@ -14216,14 +16709,32 @@ snapshots: dependencies: parse-passwd: 1.0.0 - hono@4.12.8: {} + hook-std@4.0.0: {} + + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + + hosted-git-info@9.0.3: + dependencies: + lru-cache: 11.5.2 + + hsl-to-hex@1.0.0: + dependencies: + hsl-to-rgb-for-reals: 1.1.1 + + hsl-to-rgb-for-reals@1.1.1: {} - html-encoding-sniffer@4.0.0: + html-encoding-sniffer@6.0.0(@noble/hashes@1.8.0): dependencies: - whatwg-encoding: 3.1.1 + '@exodus/bytes': 1.15.1(@noble/hashes@1.8.0) + transitivePeerDependencies: + - '@noble/hashes' html-entities@2.6.0: {} + html-escaper@2.0.2: {} + html-minifier-terser@6.1.0: dependencies: camel-case: 4.1.2 @@ -14232,17 +16743,29 @@ snapshots: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.39.0 + terser: 5.49.0 + + html-to-text@9.0.5: + dependencies: + '@selderee/plugin-htmlparser2': 0.11.0 + deepmerge: 4.3.1 + dom-serializer: 2.0.0 + htmlparser2: 8.0.2 + selderee: 0.11.0 + + html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.3(webpack@5.105.4(esbuild@0.19.12)): + html-webpack-plugin@5.6.8(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 - lodash: 4.17.23 + lodash: 4.18.1 pretty-error: 4.0.0 - tapable: 2.2.1 + tapable: 2.3.3 optionalDependencies: - webpack: 5.105.4(esbuild@0.19.12) + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) + + html5parser@3.0.0: {} htmlparser2@6.1.0: dependencies: @@ -14251,82 +16774,97 @@ snapshots: domutils: 2.8.0 entities: 2.2.0 - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - - http-errors@2.0.1: + htmlparser2@8.0.2: dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.2 - toidentifier: 1.0.1 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 - http-proxy-agent@7.0.2: + http-proxy-agent@9.1.0(supports-color@10.2.2): dependencies: - agent-base: 7.1.3 - debug: 4.4.0 + agent-base: 9.0.0 + debug: 4.4.3(supports-color@10.2.2) + proxy-agent-negotiate: 1.1.0 transitivePeerDependencies: + - kerberos - supports-color - http-signature@1.2.0: - dependencies: - assert-plus: 1.0.0 - jsprim: 1.4.2 - sshpk: 1.18.0 - http-status@2.1.0: {} https-browserify@1.0.0: {} - https-proxy-agent@7.0.6: + https-proxy-agent@5.0.1(supports-color@10.2.2): dependencies: - agent-base: 7.1.3 - debug: 4.4.0 + agent-base: 6.0.2(supports-color@10.2.2) + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color - iconv-lite@0.6.3: + https-proxy-agent@9.1.0(supports-color@10.2.2): dependencies: - safer-buffer: 2.1.2 + agent-base: 9.0.0 + debug: 4.4.3(supports-color@10.2.2) + proxy-agent-negotiate: 1.1.0 + transitivePeerDependencies: + - kerberos + - supports-color - iconv-lite@0.7.2: - dependencies: - safer-buffer: 2.1.2 + human-signals@5.0.0: {} - icss-utils@5.1.0(postcss@8.5.3): - dependencies: - postcss: 8.5.3 + human-signals@8.0.1: {} - ieee754@1.2.1: {} + husky@9.1.7: {} - ignore@5.3.2: {} + hyphen@1.14.1: {} - image-size@1.2.1: + icss-utils@5.1.0(postcss@8.5.25): dependencies: - queue: 6.0.2 + postcss: 8.5.25 + + ieee754@1.2.1: {} + + image-dimensions@2.5.1: {} image-size@2.0.2: {} - immutable@4.3.8: {} + immer@11.1.15: {} - immutable@5.1.5: - optional: true + immutable@4.3.9: {} - import-fresh@3.3.0: + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - imurmurhash@0.1.4: {} + import-from-esm@2.0.0(supports-color@10.2.2): + dependencies: + debug: 4.4.3(supports-color@10.2.2) + import-meta-resolve: 4.2.0 + transitivePeerDependencies: + - supports-color + + import-in-the-middle@1.15.0: + dependencies: + acorn: 8.17.0 + acorn-import-attributes: 1.9.5(acorn@8.17.0) + cjs-module-lexer: 1.4.3 + module-details-from-path: 1.0.4 + + import-in-the-middle@3.3.2: + dependencies: + cjs-module-lexer: 2.2.0 + es-module-lexer: 2.3.1 + module-details-from-path: 1.0.4 + + import-meta-resolve@4.2.0: {} indent-string@4.0.0: {} + indent-string@5.0.0: {} + + index-to-position@1.2.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -14336,15 +16874,30 @@ snapshots: ini@1.3.8: {} - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 + ini@6.0.0: {} + + int64-buffer@1.1.0: + optional: true - ip-address@10.1.0: {} + int64-buffer@1.1.1: + optional: true + + internmap@2.0.3: {} + + ioredis@5.11.1(supports-color@10.2.2): + dependencies: + '@ioredis/commands': 1.10.0 + cluster-key-slot: 1.1.1 + debug: 4.4.3(supports-color@10.2.2) + denque: 2.1.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + standard-as-callback: 2.1.0 + transitivePeerDependencies: + - supports-color - ipaddr.js@1.9.1: {} + ip@2.0.1: + optional: true ipaddr.js@2.2.0: {} @@ -14360,71 +16913,26 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-arrayish@0.2.1: {} - is-arrayish@0.3.2: {} - - is-async-function@2.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - is-boolean-object@1.2.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-buffer@1.1.6: {} - is-buffer@2.0.5: {} - - is-bun-module@2.0.0: - dependencies: - semver: 7.7.4 - is-callable@1.2.7: {} - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: + is-core-module@2.16.2: dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 + hasown: 2.0.4 is-decimal@2.0.1: {} - is-docker@2.2.1: {} + is-docker@3.0.0: {} is-extglob@2.1.1: {} - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} is-generator-function@1.1.2: @@ -14441,74 +16949,59 @@ snapshots: is-hexadecimal@2.0.1: {} - is-map@2.0.3: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 is-nan@1.3.2: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - is-node-process@1.2.0: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-number@7.0.0: {} + is-obj@2.0.0: {} + is-plain-obj@4.1.0: {} + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + optional: true + is-potential-custom-element-name@1.0.1: {} - is-promise@4.0.0: {} + is-property@1.0.2: + optional: true + + is-reference@1.2.1: + dependencies: + '@types/estree': 1.0.9 is-regex@1.2.1: dependencies: call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 + hasown: 2.0.4 - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 + is-stream@3.0.0: {} - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 + is-stream@4.0.1: {} is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.20 - - is-typedarray@1.0.0: {} + which-typed-array: 1.1.22 - is-weakmap@2.0.2: {} + is-unicode-supported@2.1.0: {} - is-weakref@1.1.0: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 + is-url@1.2.4: {} is-windows@1.0.2: {} - is-wsl@2.2.0: + is-wsl@3.1.1: dependencies: - is-docker: 2.2.1 + is-inside-container: 1.0.0 isarray@1.0.0: {} @@ -14516,87 +17009,104 @@ snapshots: isexe@2.0.0: {} + isobject@3.0.1: + optional: true + + isomorphic-dompurify@3.22.0(@noble/hashes@1.8.0)(canvas@3.2.3): + dependencies: + dompurify: 3.4.13 + jsdom: 30.0.1(@noble/hashes@1.8.0)(canvas@3.2.3) + transitivePeerDependencies: + - '@noble/hashes' + - canvas + isomorphic.js@0.2.5: {} - isstream@0.1.2: {} + issue-parser@7.0.2: + dependencies: + lodash.capitalize: 4.2.1 + lodash.escaperegexp: 4.1.2 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.uniqby: 4.7.0 + + istanbul-lib-coverage@3.2.2: {} - iterator.prototype@1.1.5: + istanbul-lib-report@3.0.1: dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 - jackspeak@3.4.3: + istanbul-reports@3.2.0: dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + java-properties@1.0.2: {} + + jay-peg@1.1.1: + dependencies: + restructure: 3.0.2 jest-worker@27.5.1: dependencies: - '@types/node': 22.15.3 + '@types/node': 26.1.2 merge-stream: 2.0.0 supports-color: 8.1.1 - jiti@1.21.7: {} + jiti@2.6.1: {} - jiti@2.4.2: - optional: true - - jose@5.9.6: {} + jiti@2.7.0: {} - jose@6.2.1: {} + jose@5.10.0: {} joycon@3.1.1: {} + js-md5@0.8.3: {} + + js-tokens@10.0.0: {} + js-tokens@4.0.0: {} - js-yaml@4.1.1: + js-yaml@4.3.1: dependencies: argparse: 2.0.1 - jsbn@0.1.1: {} - - jsdoc-type-pratt-parser@4.1.0: {} - - jsdoc-type-pratt-parser@4.8.0: {} - - jsdom@26.1.0: - dependencies: - cssstyle: 4.2.1 - data-urls: 5.0.0 - decimal.js: 10.5.0 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 + jsdom@30.0.1(@noble/hashes@1.8.0)(canvas@3.2.3): + dependencies: + '@asamuzakjp/css-color': 6.0.5 + '@asamuzakjp/dom-selector': 8.3.0 + '@bramus/specificity': 2.4.2 + '@csstools/css-syntax-patches-for-csstree': 1.1.7(css-tree@3.2.1) + '@exodus/bytes': 1.15.1(@noble/hashes@1.8.0) + css-tree: 3.2.1 + data-urls: 7.0.0(@noble/hashes@1.8.0) + decimal.js: 10.6.0 + html-encoding-sniffer: 6.0.0(@noble/hashes@1.8.0) is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.18 - parse5: 7.2.1 - rrweb-cssom: 0.8.0 + lru-cache: 11.5.2 + parse5: 8.0.1 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 5.1.2 + tough-cookie: 6.0.2 + undici: 8.9.0 w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 14.1.1 - ws: 8.18.2 + webidl-conversions: 8.0.1 + whatwg-mimetype: 5.0.0 + whatwg-url: 17.1.0(@noble/hashes@1.8.0) xml-name-validator: 5.0.0 + optionalDependencies: + canvas: 3.2.3 transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - jsesc@3.0.2: {} + - '@noble/hashes' jsesc@3.1.0: {} json-buffer@3.0.1: {} + json-parse-better-errors@1.0.2: {} + json-parse-even-better-errors@2.3.1: {} json-schema-to-typescript@15.0.3: @@ -14605,11 +17115,11 @@ snapshots: '@types/json-schema': 7.0.15 '@types/lodash': 4.17.24 is-glob: 4.0.3 - js-yaml: 4.1.1 - lodash: 4.17.23 + js-yaml: 4.3.1 + lodash: 4.18.1 minimist: 1.2.8 - prettier: 3.5.3 - tinyglobby: 0.2.15 + prettier: 3.9.6 + tinyglobby: 0.2.17 json-schema-traverse@0.4.1: {} @@ -14619,61 +17129,21 @@ snapshots: json-schema@0.4.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} - - json-stringify-safe@5.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 + json-with-bigint@3.5.11: {} json5@2.2.3: {} - jsonfile@6.1.0: + jsonc-parser@3.3.1: {} + + jsonfile@6.2.1: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - jsonwebtoken@9.0.2: - dependencies: - jws: 3.2.3 - lodash.includes: 4.3.0 - lodash.isboolean: 3.0.3 - lodash.isinteger: 4.0.4 - lodash.isnumber: 3.0.3 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.once: 4.1.1 - ms: 2.1.3 - semver: 7.7.1 - jsox@1.2.121: {} - jsprim@1.4.2: - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - - jwa@1.4.2: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jws@3.2.3: - dependencies: - jwa: 1.4.2 - safe-buffer: 5.2.1 + kareem@2.6.3: {} keyv@4.5.4: dependencies: @@ -14681,30 +17151,139 @@ snapshots: kleur@3.0.3: {} - language-subtag-registry@0.3.23: {} + kleur@4.1.5: {} - language-tags@1.0.9: - dependencies: - language-subtag-registry: 0.3.23 + leac@0.6.0: {} + + lexical@0.41.0: {} - levn@0.4.1: + lib0@0.2.117: dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 + isomorphic.js: 0.2.5 - lexical@0.27.1: {} + libphonenumber-js@1.13.10: {} - lexical@0.28.0: {} + lightningcss-android-arm64@1.32.0: + optional: true - lib0@0.2.117: + lightningcss-android-arm64@1.33.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.33.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.33.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.33.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.32.0: dependencies: - isomorphic.js: 0.2.5 + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 lilconfig@3.1.3: {} + linebreak@1.1.0: + dependencies: + base64-js: 0.0.8 + unicode-trie: 2.0.0 + lines-and-columns@1.2.4: {} - loader-runner@4.3.1: {} + lint-staged@17.3.0: + dependencies: + picomatch: 4.0.5 + string-argv: 0.3.2 + tinyexec: 1.2.4 + optionalDependencies: + yaml: 2.9.0 + + load-json-file@4.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 loader-utils@2.0.4: dependencies: @@ -14714,6 +17293,11 @@ snapshots: loader-utils@3.3.1: {} + locate-path@2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -14726,33 +17310,26 @@ snapshots: dependencies: p-locate: 6.0.0 - lodash-es@4.17.23: {} + lodash-es@4.18.1: {} - lodash.castarray@4.4.0: {} + lodash.capitalize@4.2.1: {} lodash.debounce@4.0.8: {} - lodash.includes@4.3.0: {} - - lodash.isboolean@3.0.3: {} - - lodash.isinteger@4.0.4: {} - - lodash.isnumber@3.0.3: {} + lodash.escaperegexp@4.1.2: {} lodash.isplainobject@4.0.6: {} lodash.isstring@4.0.1: {} - lodash.memoize@4.1.2: {} - - lodash.merge@4.6.2: {} + lodash.uniqby@4.7.0: {} - lodash.once@4.1.1: {} + lodash@4.18.1: {} - lodash.uniq@4.5.0: {} - - lodash@4.17.23: {} + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.2.0 longest-streak@3.1.0: {} @@ -14760,7 +17337,7 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.3: {} + loupe@3.2.1: {} lower-case@2.0.2: dependencies: @@ -14768,31 +17345,62 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@5.1.1: + lru-cache@11.5.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lz-string@1.5.0: {} + + magic-string@0.30.21: dependencies: - yallist: 3.1.1 + '@jridgewell/sourcemap-codec': 1.5.5 - lucide-react@0.479.0(react@19.1.0): + magic-string@0.30.8: dependencies: - react: 19.1.0 + '@jridgewell/sourcemap-codec': 1.5.5 - lz-string@1.5.0: {} + magicast@0.5.3: + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + source-map-js: 1.2.1 - magic-string@0.30.17: + make-asynchronous@1.1.0: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + p-event: 6.0.1 + type-fest: 4.41.0 + web-worker: 1.5.0 make-dir@3.1.0: dependencies: semver: 6.3.1 - map-or-similar@1.5.0: {} + make-dir@4.0.0: + dependencies: + semver: 7.8.5 + + marked-terminal@7.3.0(marked@15.0.12): + dependencies: + ansi-escapes: 7.3.0 + ansi-regex: 6.2.2 + chalk: 5.6.2 + cli-highlight: 2.1.11 + cli-table3: 0.6.5 + marked: 15.0.12 + node-emoji: 2.2.0 + supports-hyperlinks: 3.2.0 + + marked@14.0.0: {} + + marked@15.0.12: {} math-intrinsics@1.1.0: {} md5.js@1.3.5: dependencies: - hash-base: 3.0.5 + hash-base: 3.1.2 inherits: 2.0.4 safe-buffer: 5.2.1 @@ -14802,14 +17410,14 @@ snapshots: crypt: 0.0.2 is-buffer: 1.1.6 - mdast-util-from-markdown@2.0.2: + mdast-util-from-markdown@2.0.2(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.2 + micromark: 4.0.2(supports-color@10.2.2) micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 @@ -14819,27 +17427,56 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.1.3: + mdast-util-from-markdown@2.0.3(supports-color@10.2.2): + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2(supports-color@10.2.2) + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.1.3(supports-color@10.2.2): dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color mdast-util-phrasing@4.1.0: dependencies: '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.3 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 mdast-util-to-markdown@2.1.2: dependencies: @@ -14850,7 +17487,7 @@ snapshots: mdast-util-to-string: 4.0.0 micromark-util-classify-character: 2.0.1 micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 zwitch: 2.0.4 mdast-util-to-string@4.0.0: @@ -14859,31 +17496,34 @@ snapshots: mdn-data@2.0.28: {} - mdn-data@2.0.30: {} + mdn-data@2.27.1: {} - media-typer@1.1.0: {} + media-engine@1.0.3: {} + + mediabunny@1.52.2: + dependencies: + '@types/dom-mediacapture-transform': 0.1.12 + '@types/dom-webcodecs': 0.1.13 memfs@3.5.3: dependencies: - fs-monkey: 1.0.6 + fs-monkey: 1.1.0 memoize-one@6.0.0: {} - memoizerific@1.11.3: - dependencies: - map-or-similar: 1.5.0 + memory-pager@1.5.0: {} - merge-descriptors@2.0.0: {} + meow@13.2.0: {} merge-stream@2.0.0: {} - merge2@1.4.1: {} - merge@2.1.1: {} + meriyah@6.1.4: {} + micromark-core-commonmark@2.0.3: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-factory-destination: 2.0.1 micromark-factory-label: 2.0.1 @@ -14903,7 +17543,7 @@ snapshots: micromark-extension-mdx-jsx@3.0.1: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.7 + '@types/estree': 1.0.9 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 micromark-factory-mdx-expression: 2.0.3 @@ -14912,7 +17552,7 @@ snapshots: micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-factory-destination@2.0.1: dependencies: @@ -14929,7 +17569,7 @@ snapshots: micromark-factory-mdx-expression@2.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.9 devlop: 1.1.0 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 @@ -14937,7 +17577,7 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-factory-space@2.0.1: dependencies: @@ -14984,7 +17624,7 @@ snapshots: micromark-util-decode-string@2.0.1: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.3.0 micromark-util-character: 2.1.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 @@ -14993,13 +17633,13 @@ snapshots: micromark-util-events-to-acorn@2.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.9 '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-util-html-tag-name@2.0.1: {} @@ -15028,11 +17668,11 @@ snapshots: micromark-util-types@2.0.2: {} - micromark@4.0.2: + micromark@4.0.2(supports-color@10.2.2): dependencies: - '@types/debug': 4.1.12 - debug: 4.4.0 - decode-named-character-reference: 1.1.0 + '@types/debug': 4.1.13 + debug: 4.4.3(supports-color@10.2.2) + decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.1 @@ -15057,7 +17697,7 @@ snapshots: miller-rabin@4.0.1: dependencies: - bn.js: 4.12.3 + bn.js: 4.12.5 brorand: 1.1.0 mime-db@1.52.0: {} @@ -15072,77 +17712,226 @@ snapshots: dependencies: mime-db: 1.54.0 + mime@4.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + mimic-response@3.1.0: + optional: true + min-indent@1.0.1: {} + miniflare@5.20260730.0-alpha(@types/node@26.1.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.35.3(@types/node@26.1.2) + undici: 7.28.0 + workerd: 1.20260730.1 + ws: 8.21.0 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - utf-8-validate + minimalistic-assert@1.0.1: {} minimalistic-crypto-utils@1.0.1: {} - minimatch@10.2.4: + minimatch@10.2.6: dependencies: - brace-expansion: 5.0.5 - optional: true + brace-expansion: 5.0.9 minimatch@3.1.5: dependencies: - brace-expansion: 1.1.13 + brace-expansion: 1.1.17 + + minimatch@8.0.7: + dependencies: + brace-expansion: 2.1.4 minimatch@9.0.9: dependencies: - brace-expansion: 2.0.3 + brace-expansion: 2.1.4 minimist@1.2.8: {} - minipass@7.1.2: {} + minimizer-webpack-plugin@5.6.1(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.49.0 + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) + optionalDependencies: + '@swc/core': 1.15.47(@swc/helpers@0.5.23) + clean-css: 5.3.3 + cssnano: 8.0.2(postcss@8.5.25) + csso: 5.0.5 + esbuild: 0.28.1 + html-minifier-terser: 6.1.0 + lightningcss: 1.33.0 + postcss: 8.5.25 + uglify-js: 3.19.3 + + minipass@4.2.8: {} - monaco-editor@0.52.2: {} + minipass@7.1.3: {} + + mkdirp-classic@0.5.3: + optional: true + + module-details-from-path@1.0.4: {} + + monaco-editor@0.56.0: + dependencies: + dompurify: 3.4.8 + marked: 14.0.0 + + mongodb-connection-string-url@3.0.2: + dependencies: + '@types/whatwg-url': 11.0.5 + whatwg-url: 14.2.0 + + mongodb@6.20.0: + dependencies: + '@mongodb-js/saslprep': 1.4.13 + bson: 6.10.4 + mongodb-connection-string-url: 3.0.2 + + mongoose-lean-virtuals@1.1.1(mongoose@8.22.1(supports-color@10.2.2)): + dependencies: + mongoose: 8.22.1(supports-color@10.2.2) + mpath: 0.8.4 + + mongoose-paginate-v2@1.9.4(mongoose@8.22.1(supports-color@10.2.2)): + dependencies: + mongoose-lean-virtuals: 1.1.1(mongoose@8.22.1(supports-color@10.2.2)) + transitivePeerDependencies: + - mongoose + + mongoose@8.22.1(supports-color@10.2.2): + dependencies: + bson: 6.10.4 + kareem: 2.6.3 + mongodb: 6.20.0 + mpath: 0.9.0 + mquery: 5.0.0(supports-color@10.2.2) + ms: 2.1.3 + sift: 17.1.3 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - gcp-metadata + - kerberos + - mongodb-client-encryption + - snappy + - socks + - supports-color + + mp4box@0.5.4: + optional: true + + mpath@0.8.4: {} + + mpath@0.9.0: {} + + mquery@5.0.0(supports-color@10.2.2): + dependencies: + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color ms@2.1.3: {} + multicast-dns@7.2.5: + dependencies: + dns-packet: 5.6.1 + thunky: 1.1.0 + optional: true + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.11: {} + nanoid@3.3.16: {} - napi-postinstall@0.2.3: {} + nanoid@6.0.0: {} - napi-postinstall@0.3.4: + napi-build-utils@2.0.0: optional: true - natural-compare-lite@1.4.0: {} + negotiator@0.6.3: {} - natural-compare@1.4.0: {} + neo-async@2.6.2: {} - negotiator@1.0.0: {} + neotraverse@1.0.1: {} - neo-async@2.6.2: {} + nerf-dart@1.0.0: {} - next@15.5.10(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.87.0): + next-themes@0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: - '@next/env': 15.5.10 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + next@16.2.12(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4): + dependencies: + '@next/env': 16.2.12 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001780 + baseline-browser-mapping: 2.11.7 + caniuse-lite: 1.0.30001806 postcss: 8.4.31 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.1.0) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + styled-jsx: 5.1.6(@babel/core@7.29.7(supports-color@10.2.2))(babel-plugin-macros@3.1.0)(react@19.2.8) + optionalDependencies: + '@next/swc-darwin-arm64': 16.2.12 + '@next/swc-darwin-x64': 16.2.12 + '@next/swc-linux-arm64-gnu': 16.2.12 + '@next/swc-linux-arm64-musl': 16.2.12 + '@next/swc-linux-x64-gnu': 16.2.12 + '@next/swc-linux-x64-musl': 16.2.12 + '@next/swc-win32-arm64-msvc': 16.2.12 + '@next/swc-win32-x64-msvc': 16.2.12 + '@opentelemetry/api': 1.9.1 + '@playwright/test': 1.62.1 + sass: 1.77.4 + sharp: 0.35.3(@types/node@26.1.2) + transitivePeerDependencies: + - '@babel/core' + - '@types/node' + - babel-plugin-macros + + next@16.3.0(@babel/core@7.29.7(supports-color@10.2.2))(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.1.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(sass@1.77.4): + dependencies: + '@next/env': 16.3.0 + '@swc/helpers': 0.5.15 + baseline-browser-mapping: 2.11.7 + caniuse-lite: 1.0.30001806 + postcss: 8.5.23 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + styled-jsx: 5.1.6(@babel/core@7.29.7(supports-color@10.2.2))(babel-plugin-macros@3.1.0)(react@19.2.8) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.7 - '@next/swc-darwin-x64': 15.5.7 - '@next/swc-linux-arm64-gnu': 15.5.7 - '@next/swc-linux-arm64-musl': 15.5.7 - '@next/swc-linux-x64-gnu': 15.5.7 - '@next/swc-linux-x64-musl': 15.5.7 - '@next/swc-win32-arm64-msvc': 15.5.7 - '@next/swc-win32-x64-msvc': 15.5.7 - '@opentelemetry/api': 1.9.0 - sass: 1.87.0 - sharp: 0.34.5 + '@next/swc-darwin-arm64': 16.3.0 + '@next/swc-darwin-x64': 16.3.0 + '@next/swc-linux-arm64-gnu': 16.3.0 + '@next/swc-linux-arm64-musl': 16.3.0 + '@next/swc-linux-x64-gnu': 16.3.0 + '@next/swc-linux-x64-musl': 16.3.0 + '@next/swc-win32-arm64-msvc': 16.3.0 + '@next/swc-win32-x64-msvc': 16.3.0 + '@opentelemetry/api': 1.9.1 + '@playwright/test': 1.62.1 + sass: 1.77.4 + sharp: 0.35.3(@types/node@26.1.2) transitivePeerDependencies: - '@babel/core' + - '@types/node' - babel-plugin-macros no-case@3.0.4: @@ -15150,12 +17939,46 @@ snapshots: lower-case: 2.0.2 tslib: 2.8.1 + node-abi@3.94.0: + dependencies: + semver: 7.8.5 + optional: true + node-abort-controller@3.1.1: {} node-addon-api@7.1.1: optional: true - node-polyfill-webpack-plugin@2.0.1(webpack@5.105.4(esbuild@0.19.12)): + node-av@6.1.1(supports-color@10.2.2): + dependencies: + unzipper: 0.12.5 + optionalDependencies: + '@seydx/node-av-darwin-arm64': 6.1.1 + '@seydx/node-av-darwin-x64': 6.1.1 + '@seydx/node-av-linux-arm64': 6.1.1 + '@seydx/node-av-linux-x64': 6.1.1 + '@seydx/node-av-win32-arm64-mingw': 6.1.1 + '@seydx/node-av-win32-arm64-msvc': 6.1.1 + '@seydx/node-av-win32-x64-mingw': 6.1.1 + '@seydx/node-av-win32-x64-msvc': 6.1.1 + werift: 0.23.0(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + node-emoji@2.2.0: + dependencies: + '@sindresorhus/is': 4.6.0 + char-regex: 1.0.2 + emojilib: 2.4.0 + skin-tone: 2.0.0 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-int64@0.4.0: {} + + node-polyfill-webpack-plugin@2.0.1(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): dependencies: assert: 2.1.0 browserify-zlib: 0.2.0 @@ -15182,41 +18005,58 @@ snapshots: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - webpack: 5.105.4(esbuild@0.19.12) + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) - node-releases@2.0.19: {} + node-releases@2.0.51: {} - node-releases@2.0.36: {} + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.8.5 + validate-npm-package-license: 3.0.4 - nodemailer-sendgrid@1.0.3: + normalize-package-data@8.0.0: dependencies: - '@sendgrid/mail': 6.5.5 + hosted-git-info: 9.0.3 + semver: 7.8.5 + validate-npm-package-license: 3.0.4 - nodemailer@6.9.16: {} + normalize-path@3.0.0: {} - nodemailer@8.0.4: {} + normalize-svg-path@1.1.0: + dependencies: + svg-arc-to-cubic-bezier: 3.2.0 - normalize-path@3.0.0: {} + normalize-url@9.0.1: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 - normalize-range@0.1.2: {} + npm@11.19.0: {} nth-check@2.1.1: dependencies: boolbase: 1.0.0 - nwsapi@2.2.18: {} - - oauth-sign@0.9.0: {} + nypm@0.6.6: + dependencies: + citty: 0.2.2 + pathe: 2.0.3 + tinyexec: 1.2.4 object-assign@4.1.1: {} - object-hash@3.0.0: {} - - object-inspect@1.13.3: {} + object-inspect@1.13.4: {} object-is@1.1.6: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 object-keys@1.1.1: {} @@ -15225,76 +18065,109 @@ snapshots: object.assign@4.1.7: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 has-symbols: 1.1.0 object-keys: 1.1.1 - object.entries@1.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + objectorarray@1.0.5: {} - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 + obug@2.1.4: {} - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 + ogl@1.0.11: {} - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + on-exit-leak-free@2.1.2: {} - objectorarray@1.0.5: {} + once@1.4.0: + dependencies: + wrappy: 1.0.2 - obuf@1.1.2: {} + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 - on-exit-leak-free@2.1.2: {} + oniguruma-parser@0.12.2: {} - on-finished@2.4.1: + oniguruma-to-es@4.3.6: dependencies: - ee-first: 1.1.1 + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 - once@1.4.0: + open@10.2.0: dependencies: - wrappy: 1.0.2 + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + os-browserify@0.3.0: {} - open@8.4.2: + oxc-parser@0.127.0: dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 + '@oxc-project/types': 0.127.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.24.2: + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.24.2 + '@oxc-resolver/binding-android-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-x64': 11.24.2 + '@oxc-resolver/binding-freebsd-x64': 11.24.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.24.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.24.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-musl': 11.24.2 + '@oxc-resolver/binding-openharmony-arm64': 11.24.2 + '@oxc-resolver/binding-wasm32-wasi': 11.24.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 + + p-cancelable@2.1.1: + optional: true + + p-each-series@3.0.0: {} - optionator@0.9.4: + p-event@6.0.1: dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 + p-timeout: 6.1.4 - os-browserify@0.3.0: {} + p-filter@4.1.0: + dependencies: + p-map: 7.0.6 - own-keys@1.0.1: + p-limit@1.3.0: dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 + p-try: 1.0.0 p-limit@2.3.0: dependencies: @@ -15306,7 +18179,11 @@ snapshots: p-limit@4.0.0: dependencies: - yocto-queue: 1.1.1 + yocto-queue: 1.2.2 + + p-locate@2.0.0: + dependencies: + p-limit: 1.3.0 p-locate@4.1.0: dependencies: @@ -15320,11 +18197,17 @@ snapshots: dependencies: p-limit: 4.0.0 - p-try@2.2.0: {} + p-map@7.0.6: {} + + p-reduce@3.0.0: {} + + p-timeout@6.1.4: {} + + p-try@1.0.0: {} - package-json-from-dist@1.0.1: {} + p-try@2.2.0: {} - packet-reader@1.0.0: {} + pako@0.2.9: {} pako@1.0.11: {} @@ -15337,13 +18220,12 @@ snapshots: dependencies: callsites: 3.1.0 - parse-asn1@5.1.7: + parse-asn1@5.1.9: dependencies: asn1.js: 4.10.1 browserify-aes: 1.2.0 evp_bytestokey: 1.0.3 - hash-base: 3.0.5 - pbkdf2: 3.1.5 + pbkdf2: 3.1.6 safe-buffer: 5.2.1 parse-entities@4.0.2: @@ -15351,25 +18233,51 @@ snapshots: '@types/unist': 2.0.11 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.3.0 is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + parse-json@4.0.0: + dependencies: + error-ex: 1.3.4 + json-parse-better-errors: 1.0.2 + parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 + '@babel/code-frame': 7.29.7 + error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.29.7 + index-to-position: 1.2.0 + type-fest: 4.41.0 + + parse-ms@4.0.0: {} + parse-passwd@1.0.0: {} - parse5@7.2.1: + parse-svg-path@0.1.2: {} + + parse5-htmlparser2-tree-adapter@6.0.1: dependencies: - entities: 4.5.0 + parse5: 6.0.1 + + parse5@5.1.1: {} + + parse5@6.0.1: {} + + parse5@8.0.1: + dependencies: + entities: 8.0.0 - parseurl@1.3.3: {} + parseley@0.12.1: + dependencies: + leac: 0.6.0 + peberminta: 0.9.0 pascal-case@3.1.2: dependencies: @@ -15378,6 +18286,8 @@ snapshots: path-browserify@1.0.1: {} + path-exists@3.0.0: {} + path-exists@4.0.0: {} path-exists@5.0.0: {} @@ -15386,61 +18296,69 @@ snapshots: path-key@3.1.1: {} + path-key@4.0.0: {} + path-parse@1.0.7: {} path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 - path-to-regexp@6.3.0: {} + path-scurry@2.0.2: + dependencies: + lru-cache: 11.5.2 + minipass: 7.1.3 - path-to-regexp@8.3.0: {} + path-to-regexp@6.3.0: {} path-type@4.0.0: {} - pathval@2.0.0: {} + pathe@2.0.3: {} + + pathval@2.0.1: {} - payload@3.75.0(graphql@16.11.0)(typescript@5.8.3): + payload@3.87.0(graphql@16.14.2)(supports-color@10.2.2)(typescript@6.0.3): dependencies: - '@next/env': 15.5.13 - '@payloadcms/translations': 3.75.0 + '@next/env': 15.5.22 + '@payloadcms/translations': 3.87.0 '@types/busboy': 1.5.4 - ajv: 8.17.1 + ajv: 8.18.0 bson-objectid: 2.0.4 busboy: 1.6.0 ci-info: 4.4.0 console-table-printer: 2.12.1 - croner: 9.1.0 + croner: 10.0.1 dataloader: 2.2.3 deepmerge: 4.3.1 - file-type: 19.3.0 + file-type: 21.3.4(supports-color@10.2.2) get-tsconfig: 4.8.1 - graphql: 16.11.0 + graphql: 16.14.2 http-status: 2.1.0 - image-size: 2.0.2 + image-dimensions: 2.5.1 ipaddr.js: 2.2.0 - jose: 5.9.6 + jose: 5.10.0 json-schema-to-typescript: 15.0.3 minimist: 1.2.8 path-to-regexp: 6.3.0 pino: 9.14.0 pino-pretty: 13.1.2 pluralize: 8.0.0 - qs-esm: 7.0.2 + qs-esm: 8.0.1 range-parser: 1.2.1 sanitize-filename: 1.6.3 - ts-essentials: 10.0.3(typescript@5.8.3) - tsx: 4.21.0 - undici: 7.18.2 - uuid: 10.0.0 - ws: 8.19.0 + ts-essentials: 10.0.3(typescript@6.0.3) + tsx: 4.22.4 + undici: 7.28.0 + uuid: 13.0.2 + ws: 8.21.1 transitivePeerDependencies: - bufferutil + - supports-color - typescript - utf-8-validate - pbkdf2@3.1.5: + pbkdf2@3.1.6: dependencies: create-hash: 1.2.0 create-hmac: 1.1.7 @@ -15449,66 +18367,38 @@ snapshots: sha.js: 2.4.12 to-buffer: 1.2.2 - peek-readable@5.4.2: {} - - performance-now@2.1.0: {} + pdf-parse@2.4.5: + dependencies: + '@napi-rs/canvas': 0.1.80 + pdfjs-dist: 5.4.296(patch_hash=0c6e5007245f52a72a7bac88eb25aeec5e405661a0a455cbd10d5c13504232e8) - pg-cloudflare@1.2.5: - optional: true + pdfjs-dist@5.4.296(patch_hash=0c6e5007245f52a72a7bac88eb25aeec5e405661a0a455cbd10d5c13504232e8): + optionalDependencies: + '@napi-rs/canvas': 0.1.80 - pg-connection-string@2.8.5: {} + peberminta@0.9.0: {} pg-int8@1.0.1: {} - pg-numeric@1.0.2: {} - - pg-pool@3.9.6(pg@8.11.3): - dependencies: - pg: 8.11.3 - - pg-protocol@1.9.5: {} + pg-protocol@1.15.0: {} pg-types@2.2.0: dependencies: pg-int8: 1.0.1 postgres-array: 2.0.0 - postgres-bytea: 1.0.0 + postgres-bytea: 1.0.1 postgres-date: 1.0.7 postgres-interval: 1.2.0 - pg-types@4.0.2: - dependencies: - pg-int8: 1.0.1 - pg-numeric: 1.0.2 - postgres-array: 3.0.4 - postgres-bytea: 3.0.0 - postgres-date: 2.1.0 - postgres-interval: 3.0.0 - postgres-range: 1.1.4 - - pg@8.11.3: - dependencies: - buffer-writer: 2.0.0 - packet-reader: 1.0.0 - pg-connection-string: 2.8.5 - pg-pool: 3.9.6(pg@8.11.3) - pg-protocol: 1.9.5 - pg-types: 2.2.0 - pgpass: 1.0.5 - optionalDependencies: - pg-cloudflare: 1.2.5 - - pgpass@1.0.5: - dependencies: - split2: 4.2.0 - picocolors@1.1.1: {} picomatch@2.3.2: {} - picomatch@4.0.4: {} + picomatch@4.0.5: {} - pify@2.3.0: {} + picospinner@3.1.2: {} + + pify@3.0.0: {} pino-abstract-transport@2.0.0: dependencies: @@ -15539,16 +18429,17 @@ snapshots: on-exit-leak-free: 2.1.2 pino-abstract-transport: 2.0.0 pino-std-serializers: 7.1.0 - process-warning: 5.0.0 + process-warning: 5.1.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.5.0 sonic-boom: 4.2.1 - thread-stream: 3.1.0 - - pirates@4.0.6: {} + thread-stream: 3.2.0 - pkce-challenge@5.0.0: {} + pkg-conf@2.1.0: + dependencies: + find-up: 2.1.0 + load-json-file: 4.0.0 pkg-dir@4.2.0: dependencies: @@ -15558,214 +18449,192 @@ snapshots: dependencies: find-up: 6.3.0 - pluralize@8.0.0: {} + playwright-core@1.62.1: {} - pnp-webpack-plugin@1.7.0(typescript@5.8.3): + playwright@1.62.1: dependencies: - ts-pnp: 1.2.0(typescript@5.8.3) - transitivePeerDependencies: - - typescript + playwright-core: 1.62.1 + optionalDependencies: + fsevents: 2.3.2 - polished@4.3.1: - dependencies: - '@babel/runtime': 7.27.1 + pluralize@8.0.0: {} - possible-typed-array-names@1.0.0: {} + png-js@2.0.0: + dependencies: + fflate: 0.8.3 possible-typed-array-names@1.1.0: {} - postcss-calc@10.1.0(postcss@8.5.3): + postcss-calc@10.1.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 - postcss-selector-parser: 7.0.0 + postcss: 8.5.25 + postcss-selector-parser: 7.1.4 postcss-value-parser: 4.2.0 - postcss-colormin@7.0.2(postcss@8.5.3): + postcss-colormin@8.0.1(postcss@8.5.25): dependencies: - browserslist: 4.24.4 - caniuse-api: 3.0.0 - colord: 2.9.3 - postcss: 8.5.3 + '@colordx/core': 5.5.0 + browserslist: 4.28.7 + caniuse-api: 4.0.0 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.4(postcss@8.5.3): + postcss-convert-values@8.0.1(postcss@8.5.25): dependencies: - browserslist: 4.24.4 - postcss: 8.5.3 + browserslist: 4.28.7 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-discard-comments@7.0.3(postcss@8.5.3): + postcss-discard-comments@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 - postcss-selector-parser: 6.1.2 + postcss: 8.5.25 + postcss-selector-parser: 7.1.4 - postcss-discard-duplicates@7.0.1(postcss@8.5.3): + postcss-discard-duplicates@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 - postcss-discard-empty@7.0.0(postcss@8.5.3): + postcss-discard-empty@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 - postcss-discard-overridden@7.0.0(postcss@8.5.3): + postcss-discard-overridden@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 - - postcss-import@15.1.0(postcss@8.5.3): - dependencies: - postcss: 8.5.3 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.10 - - postcss-js@4.0.1(postcss@8.5.3): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.5.3 - - postcss-load-config@4.0.2(postcss@8.5.3): - dependencies: - lilconfig: 3.1.3 - yaml: 2.8.3 - optionalDependencies: - postcss: 8.5.3 + postcss: 8.5.25 - postcss-loader@8.1.1(postcss@8.5.3)(typescript@5.8.3)(webpack@5.105.4(esbuild@0.19.12)): + postcss-loader@8.2.1(postcss@8.5.25)(typescript@6.0.3)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): dependencies: - cosmiconfig: 9.0.0(typescript@5.8.3) - jiti: 1.21.7 - postcss: 8.5.3 - semver: 7.7.1 + cosmiconfig: 9.0.2(typescript@6.0.3) + jiti: 2.7.0 + postcss: 8.5.25 + semver: 7.8.5 optionalDependencies: - webpack: 5.105.4(esbuild@0.19.12) + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) transitivePeerDependencies: - typescript - postcss-merge-longhand@7.0.4(postcss@8.5.3): + postcss-merge-longhand@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - stylehacks: 7.0.4(postcss@8.5.3) + stylehacks: 8.0.1(postcss@8.5.25) - postcss-merge-rules@7.0.4(postcss@8.5.3): + postcss-merge-rules@8.0.1(postcss@8.5.25): dependencies: - browserslist: 4.24.4 - caniuse-api: 3.0.0 - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 - postcss-selector-parser: 6.1.2 + browserslist: 4.28.7 + caniuse-api: 4.0.0 + cssnano-utils: 6.0.1(postcss@8.5.25) + postcss: 8.5.25 + postcss-selector-parser: 7.1.4 - postcss-minify-font-values@7.0.0(postcss@8.5.3): + postcss-minify-font-values@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-minify-gradients@7.0.0(postcss@8.5.3): + postcss-minify-gradients@8.0.1(postcss@8.5.25): dependencies: - colord: 2.9.3 - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 + '@colordx/core': 5.5.0 + cssnano-utils: 6.0.1(postcss@8.5.25) + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-minify-params@7.0.2(postcss@8.5.3): + postcss-minify-params@8.0.1(postcss@8.5.25): dependencies: - browserslist: 4.24.4 - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 + browserslist: 4.28.7 + cssnano-utils: 6.0.1(postcss@8.5.25) + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-minify-selectors@7.0.4(postcss@8.5.3): + postcss-minify-selectors@8.0.2(postcss@8.5.25): dependencies: + browserslist: 4.28.7 + caniuse-api: 4.0.0 cssesc: 3.0.0 - postcss: 8.5.3 - postcss-selector-parser: 6.1.2 + postcss: 8.5.25 + postcss-selector-parser: 7.1.4 - postcss-modules-extract-imports@3.1.0(postcss@8.5.3): + postcss-modules-extract-imports@3.1.0(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 - postcss-modules-local-by-default@4.2.0(postcss@8.5.3): + postcss-modules-local-by-default@4.2.0(postcss@8.5.25): dependencies: - icss-utils: 5.1.0(postcss@8.5.3) - postcss: 8.5.3 - postcss-selector-parser: 7.0.0 + icss-utils: 5.1.0(postcss@8.5.25) + postcss: 8.5.25 + postcss-selector-parser: 7.1.4 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.3): - dependencies: - postcss: 8.5.3 - postcss-selector-parser: 7.0.0 - - postcss-modules-values@4.0.0(postcss@8.5.3): + postcss-modules-scope@3.2.1(postcss@8.5.25): dependencies: - icss-utils: 5.1.0(postcss@8.5.3) - postcss: 8.5.3 + postcss: 8.5.25 + postcss-selector-parser: 7.1.4 - postcss-nested@6.2.0(postcss@8.5.3): + postcss-modules-values@4.0.0(postcss@8.5.25): dependencies: - postcss: 8.5.3 - postcss-selector-parser: 6.1.2 + icss-utils: 5.1.0(postcss@8.5.25) + postcss: 8.5.25 - postcss-normalize-charset@7.0.0(postcss@8.5.3): + postcss-normalize-charset@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 - postcss-normalize-display-values@7.0.0(postcss@8.5.3): + postcss-normalize-display-values@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-normalize-positions@7.0.0(postcss@8.5.3): + postcss-normalize-positions@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@7.0.0(postcss@8.5.3): + postcss-normalize-repeat-style@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-normalize-string@7.0.0(postcss@8.5.3): + postcss-normalize-string@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@7.0.0(postcss@8.5.3): + postcss-normalize-timing-functions@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@7.0.2(postcss@8.5.3): + postcss-normalize-unicode@8.0.1(postcss@8.5.25): dependencies: - browserslist: 4.24.4 - postcss: 8.5.3 + browserslist: 4.28.7 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-normalize-url@7.0.0(postcss@8.5.3): + postcss-normalize-url@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@7.0.0(postcss@8.5.3): + postcss-normalize-whitespace@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-ordered-values@7.0.1(postcss@8.5.3): + postcss-ordered-values@8.0.1(postcss@8.5.25): dependencies: - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 6.0.1(postcss@8.5.25) + postcss: 8.5.25 postcss-value-parser: 4.2.0 - postcss-reduce-initial@7.0.2(postcss@8.5.3): + postcss-reduce-initial@8.0.1(postcss@8.5.25): dependencies: - browserslist: 4.24.4 - caniuse-api: 3.0.0 - postcss: 8.5.3 + browserslist: 4.28.7 + caniuse-api: 4.0.0 + postcss: 8.5.25 - postcss-reduce-transforms@7.0.0(postcss@8.5.3): + postcss-reduce-transforms@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 postcss-value-parser: 4.2.0 postcss-selector-parser@6.0.10: @@ -15773,70 +18642,73 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-selector-parser@7.0.0: + postcss-selector-parser@7.1.4: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@7.0.1(postcss@8.5.3): + postcss-svgo@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 + postcss: 8.5.25 postcss-value-parser: 4.2.0 - svgo: 3.3.3 + svgo: 4.0.2 - postcss-unique-selectors@7.0.3(postcss@8.5.3): + postcss-unique-selectors@8.0.1(postcss@8.5.25): dependencies: - postcss: 8.5.3 - postcss-selector-parser: 6.1.2 + postcss: 8.5.25 + postcss-selector-parser: 7.1.4 postcss-value-parser@4.2.0: {} postcss@8.4.31: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.16 picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.3: + postcss@8.5.23: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.16 picocolors: 1.1.1 source-map-js: 1.2.1 - postgres-array@2.0.0: {} - - postgres-array@3.0.4: {} + postcss@8.5.25: + dependencies: + nanoid: 3.3.16 + picocolors: 1.1.1 + source-map-js: 1.2.1 - postgres-bytea@1.0.0: {} + postgres-array@2.0.0: {} - postgres-bytea@3.0.0: - dependencies: - obuf: 1.1.2 + postgres-bytea@1.0.1: {} postgres-date@1.0.7: {} - postgres-date@2.1.0: {} - postgres-interval@1.2.0: dependencies: xtend: 4.0.2 - postgres-interval@3.0.0: {} - - postgres-range@1.1.4: {} - - prelude-ls@1.2.1: {} + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.1.2 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.94.0 + pump: 3.0.4 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.5 + tunnel-agent: 0.6.0 + optional: true - prettier@3.5.3: {} + prettier@3.9.6: {} pretty-error@4.0.0: dependencies: - lodash: 4.17.23 + lodash: 4.18.1 renderkid: 3.0.0 pretty-format@27.5.1: @@ -15845,14 +18717,20 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + prismjs@1.30.0: {} process-nextick-args@2.0.1: {} - process-warning@5.0.0: {} + process-warning@5.1.0: {} process@0.11.10: {} + progress@2.0.3: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -15864,23 +18742,20 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 + property-information@7.2.0: {} - proxy-from-env@1.1.0: {} + proto-list@1.2.4: {} - psl@1.15.0: - dependencies: - punycode: 2.3.1 + proxy-agent-negotiate@1.1.0: {} + + proxy-from-env@1.1.0: {} public-encrypt@4.0.3: dependencies: - bn.js: 4.12.3 + bn.js: 4.12.5 browserify-rsa: 4.1.1 create-hash: 1.2.0 - parse-asn1: 5.1.7 + parse-asn1: 5.1.9 randombytes: 2.1.0 safe-buffer: 5.2.1 @@ -15893,21 +18768,26 @@ snapshots: punycode@2.3.1: {} - qs-esm@7.0.2: {} - - qs@6.14.0: + pupa@3.3.0: dependencies: - side-channel: 1.1.0 + escape-goat: 4.0.0 - qs@6.15.0: + pvtsutils@1.3.6: dependencies: - side-channel: 1.1.0 + tslib: 2.8.1 + optional: true + + pvutils@1.1.5: + optional: true - qs@6.5.5: {} + qs-esm@8.0.1: {} - querystring-es3@0.2.1: {} + qs@6.15.3: + dependencies: + es-define-property: 1.0.1 + side-channel: 1.1.1 - queue-microtask@1.2.3: {} + querystring-es3@0.2.1: {} queue@6.0.2: dependencies: @@ -15926,118 +18806,178 @@ snapshots: range-parser@1.2.1: {} - raw-body@3.0.0: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.6.3 - unpipe: 1.0.0 - - raw-body@3.0.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.1 - iconv-lite: 0.7.2 - unpipe: 1.0.0 + range-parser@1.3.0: {} - react-blurhash@0.3.0(blurhash@2.0.5)(react@19.1.0): + rc@1.2.8: dependencies: - blurhash: 2.0.5 - react: 19.1.0 + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 - react-datepicker@7.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-datepicker@7.6.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: - '@floating-ui/react': 0.27.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@floating-ui/react': 0.27.20(react-dom@19.2.8(react@19.2.8))(react@19.2.8) clsx: 2.1.1 date-fns: 3.6.0 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) - react-docgen-typescript@2.2.2(typescript@5.8.3): + react-docgen-typescript@2.4.0(typescript@6.0.3): dependencies: - typescript: 5.8.3 + typescript: 6.0.3 - react-docgen@7.1.1: + react-docgen@8.0.3(supports-color@10.2.2): dependencies: - '@babel/core': 7.26.0 - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) + '@babel/types': 7.29.7 '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.7 + '@types/babel__traverse': 7.28.0 '@types/doctrine': 0.0.9 '@types/resolve': 1.20.6 doctrine: 3.0.0 - resolve: 1.22.10 - strip-indent: 4.0.0 + resolve: 1.22.12 + strip-indent: 4.1.1 transitivePeerDependencies: - supports-color - react-dom@19.1.0(react@19.1.0): + react-dom@19.2.8(react@19.2.8): dependencies: - react: 19.1.0 - scheduler: 0.26.0 + react: 19.2.8 + scheduler: 0.27.0 - react-error-boundary@3.1.4(react@19.1.0): + react-email@6.9.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2): dependencies: - '@babel/runtime': 7.27.1 - react: 19.1.0 + '@babel/parser': 7.29.2 + '@babel/traverse': 7.29.0(supports-color@10.2.2) + '@react-email/render': 2.1.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + chokidar: 4.0.3 + commander: 13.1.0 + conf: 15.1.0 + css-tree: 3.2.1 + debounce: 2.2.0 + esbuild: 0.28.1 + glob: 13.0.6 + jiti: 2.6.1 + log-symbols: 7.0.1 + marked: 15.0.12 + mime-types: 3.0.2 + normalize-path: 3.0.0 + nypm: 0.6.6 + picospinner: 3.1.2 + prismjs: 1.30.0 + prompts: 2.4.2 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + socket.io: 4.8.3(supports-color@10.2.2) + tailwindcss: 4.3.3 + tsconfig-paths: 4.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - react-error-boundary@4.1.2(react@19.1.0): + react-error-boundary@4.1.2(react@19.2.8): dependencies: - '@babel/runtime': 7.27.1 - react: 19.1.0 + '@babel/runtime': 7.29.7 + react: 19.2.8 - react-icons@5.5.0(react@19.1.0): + react-error-boundary@6.1.2(react@19.2.8): dependencies: - react: 19.1.0 + react: 19.2.8 - react-image-crop@10.1.8(react@19.1.0): + react-image-crop@10.1.8(react@19.2.8): dependencies: - react: 19.1.0 + react: 19.2.8 react-is@16.13.1: {} react-is@17.0.2: {} + react-redux@9.3.0(@types/react@19.2.18)(react@19.2.8)(redux@5.0.1): + dependencies: + '@types/use-sync-external-store': 0.0.6 + react: 19.2.8 + use-sync-external-store: 1.6.0(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + redux: 5.0.1 + react-refresh@0.14.2: {} - react-select@5.9.0(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-select@5.10.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2): dependencies: - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.29.7 '@emotion/cache': 11.14.0 - '@emotion/react': 11.14.0(@types/react@19.1.2)(react@19.1.0) - '@floating-ui/dom': 1.7.0 - '@types/react-transition-group': 4.4.12(@types/react@19.1.2) + '@emotion/react': 11.14.0(@types/react@19.2.18)(react@19.2.8)(supports-color@10.2.2) + '@floating-ui/dom': 1.8.0 + '@types/react-transition-group': 4.4.12(@types/react@19.2.18) memoize-one: 6.0.0 prop-types: 15.8.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - use-isomorphic-layout-effect: 1.2.0(@types/react@19.1.2)(react@19.1.0) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + react-transition-group: 4.4.5(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + use-isomorphic-layout-effect: 1.2.1(@types/react@19.2.18)(react@19.2.8) transitivePeerDependencies: - '@types/react' - supports-color - react-toastify@11.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-select@5.9.0(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2): dependencies: - clsx: 2.1.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@babel/runtime': 7.29.7 + '@emotion/cache': 11.14.0 + '@emotion/react': 11.14.0(@types/react@19.2.18)(react@19.2.8)(supports-color@10.2.2) + '@floating-ui/dom': 1.8.0 + '@types/react-transition-group': 4.4.12(@types/react@19.2.18) + memoize-one: 6.0.0 + prop-types: 15.8.1 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + react-transition-group: 4.4.5(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + use-isomorphic-layout-effect: 1.2.1(@types/react@19.2.18)(react@19.2.8) + transitivePeerDependencies: + - '@types/react' + - supports-color - react-transition-group@4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-transition-group@4.4.5(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.29.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + react@19.2.8: {} + + read-package-up@11.0.0: + dependencies: + find-up-simple: 1.0.1 + read-pkg: 9.0.1 + type-fest: 4.41.0 + + read-package-up@12.0.0: + dependencies: + find-up-simple: 1.0.1 + read-pkg: 10.1.0 + type-fest: 5.8.0 - react@19.1.0: {} + read-pkg@10.1.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 8.0.0 + parse-json: 8.3.0 + type-fest: 5.8.0 + unicorn-magic: 0.4.0 - read-cache@1.0.0: + read-pkg@9.0.1: dependencies: - pify: 2.3.0 + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.3.0 + type-fest: 4.41.0 + unicorn-magic: 0.1.0 readable-stream@2.3.8: dependencies: @@ -16067,12 +19007,11 @@ snapshots: dependencies: picomatch: 2.3.2 - readdirp@4.1.2: - optional: true + readdirp@4.1.2: {} real-require@0.2.0: {} - recast@0.23.11: + recast@0.23.12: dependencies: ast-types: 0.16.1 esprima: 4.0.1 @@ -16080,66 +19019,91 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 + recharts@3.10.1(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react-is@17.0.2)(react@19.2.8)(redux@5.0.1): + dependencies: + '@reduxjs/toolkit': 2.12.0(react-redux@9.3.0(@types/react@19.2.18)(react@19.2.8)(redux@5.0.1))(react@19.2.8) + clsx: 2.1.1 + decimal.js-light: 2.5.1 + es-toolkit: 1.50.0 + eventemitter3: 5.0.4 + immer: 11.1.15 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + react-is: 17.0.2 + react-redux: 9.3.0(@types/react@19.2.18)(react@19.2.8)(redux@5.0.1) + reselect: 5.2.0 + tiny-invariant: 1.3.3 + use-sync-external-store: 1.6.0(react@19.2.8) + victory-vendor: 37.3.6 + transitivePeerDependencies: + - '@types/react' + - redux + redent@3.0.0: dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 - refa@0.12.1: + redis-errors@1.2.0: {} + + redis-parser@3.0.0: dependencies: - '@eslint-community/regexpp': 4.12.1 + redis-errors: 1.2.0 - reflect.getprototypeof@1.0.10: + redis@4.7.0: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 + '@redis/bloom': 1.2.0(@redis/client@1.6.0) + '@redis/client': 1.6.0 + '@redis/graph': 1.1.1(@redis/client@1.6.0) + '@redis/json': 1.0.7(@redis/client@1.6.0) + '@redis/search': 1.2.0(@redis/client@1.6.0) + '@redis/time-series': 1.1.0(@redis/client@1.6.0) - regenerate-unicode-properties@10.2.0: + redux-thunk@3.1.0(redux@5.0.1): dependencies: - regenerate: 1.4.2 + redux: 5.0.1 - regenerate@1.4.2: {} + redux@5.0.1: {} + + reflect-metadata@0.2.2: + optional: true - regenerator-transform@0.15.2: + regenerate-unicode-properties@10.2.2: dependencies: - '@babel/runtime': 7.27.1 + regenerate: 1.4.2 - regex-parser@2.3.0: {} + regenerate@1.4.2: {} + + regex-parser@2.3.1: {} - regexp-ast-analysis@0.7.1: + regex-recursion@6.0.2: dependencies: - '@eslint-community/regexpp': 4.12.1 - refa: 0.12.1 + regex-utilities: 2.3.0 - regexp.prototype.flags@1.5.4: + regex-utilities@2.3.0: {} + + regex@6.1.0: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 + regex-utilities: 2.3.0 - regexpu-core@6.2.0: + regexpu-core@6.4.0: dependencies: regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.0 + regenerate-unicode-properties: 10.2.2 regjsgen: 0.8.0 - regjsparser: 0.12.0 + regjsparser: 0.13.2 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.0 + unicode-match-property-value-ecmascript: 2.2.1 + + registry-auth-token@5.1.1: + dependencies: + '@pnpm/npm-conf': 3.0.3 regjsgen@0.8.0: {} - regjsparser@0.12.0: + regjsparser@0.13.2: dependencies: - jsesc: 3.0.2 + jsesc: 3.1.0 relateurl@0.2.7: {} @@ -16148,35 +19112,29 @@ snapshots: css-select: 4.3.0 dom-converter: 0.2.0 htmlparser2: 6.1.0 - lodash: 4.17.23 + lodash: 4.18.1 strip-ansi: 6.0.1 - request@2.88.2: - dependencies: - aws-sign2: 0.7.0 - aws4: 1.13.2 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 2.3.3 - har-validator: 5.1.5 - http-signature: 1.2.0 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.35 - oauth-sign: 0.9.0 - performance-now: 2.1.0 - qs: 6.5.5 - safe-buffer: 5.2.1 - tough-cookie: 2.5.0 - tunnel-agent: 0.6.0 - uuid: 3.4.0 + require-directory@2.1.1: {} require-from-string@2.0.2: {} - requireindex@1.2.0: {} + require-in-the-middle@7.5.2(supports-color@10.2.2): + dependencies: + debug: 4.4.3(supports-color@10.2.2) + module-details-from-path: 1.0.4 + resolve: 1.22.12 + transitivePeerDependencies: + - supports-color + + require-in-the-middle@8.0.1(supports-color@10.2.2): + dependencies: + debug: 4.4.3(supports-color@10.2.2) + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + + reselect@5.2.0: {} resolve-dir@1.0.1: dependencies: @@ -16185,6 +19143,8 @@ snapshots: resolve-from@4.0.0: {} + resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} resolve-url-loader@5.0.0: @@ -16192,72 +19152,94 @@ snapshots: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.5.3 + postcss: 8.5.25 source-map: 0.6.1 - resolve@1.22.10: + resolve@1.22.12: dependencies: - is-core-module: 2.16.1 + es-errors: 1.3.0 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: + resolve@1.22.8: dependencies: - is-core-module: 2.16.1 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - retry@0.13.1: {} - - reusify@1.0.4: {} + restructure@3.0.2: {} rimraf@3.0.2: dependencies: glob: 7.2.3 - ripemd160@2.0.2: - dependencies: - hash-base: 3.0.5 - inherits: 2.0.4 - ripemd160@2.0.3: dependencies: hash-base: 3.1.2 inherits: 2.0.4 - router@2.2.0: + rolldown@1.2.1: dependencies: - debug: 4.4.0 - depd: 2.0.0 - is-promise: 4.0.0 - parseurl: 1.3.3 - path-to-regexp: 8.3.0 - transitivePeerDependencies: - - supports-color - - rrweb-cssom@0.8.0: {} + '@oxc-project/types': 0.142.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.2.1 + '@rolldown/binding-darwin-arm64': 1.2.1 + '@rolldown/binding-darwin-x64': 1.2.1 + '@rolldown/binding-freebsd-x64': 1.2.1 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.1 + '@rolldown/binding-linux-arm64-gnu': 1.2.1 + '@rolldown/binding-linux-arm64-musl': 1.2.1 + '@rolldown/binding-linux-ppc64-gnu': 1.2.1 + '@rolldown/binding-linux-s390x-gnu': 1.2.1 + '@rolldown/binding-linux-x64-gnu': 1.2.1 + '@rolldown/binding-linux-x64-musl': 1.2.1 + '@rolldown/binding-openharmony-arm64': 1.2.1 + '@rolldown/binding-wasm32-wasi': 1.2.1 + '@rolldown/binding-win32-arm64-msvc': 1.2.1 + '@rolldown/binding-win32-x64-msvc': 1.2.1 + + rollup@4.62.3: + dependencies: + '@types/estree': 1.0.9 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.62.3 + '@rollup/rollup-android-arm64': 4.62.3 + '@rollup/rollup-darwin-arm64': 4.62.3 + '@rollup/rollup-darwin-x64': 4.62.3 + '@rollup/rollup-freebsd-arm64': 4.62.3 + '@rollup/rollup-freebsd-x64': 4.62.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.3 + '@rollup/rollup-linux-arm-musleabihf': 4.62.3 + '@rollup/rollup-linux-arm64-gnu': 4.62.3 + '@rollup/rollup-linux-arm64-musl': 4.62.3 + '@rollup/rollup-linux-loong64-gnu': 4.62.3 + '@rollup/rollup-linux-loong64-musl': 4.62.3 + '@rollup/rollup-linux-ppc64-gnu': 4.62.3 + '@rollup/rollup-linux-ppc64-musl': 4.62.3 + '@rollup/rollup-linux-riscv64-gnu': 4.62.3 + '@rollup/rollup-linux-riscv64-musl': 4.62.3 + '@rollup/rollup-linux-s390x-gnu': 4.62.3 + '@rollup/rollup-linux-x64-gnu': 4.62.3 + '@rollup/rollup-linux-x64-musl': 4.62.3 + '@rollup/rollup-openbsd-x64': 4.62.3 + '@rollup/rollup-openharmony-arm64': 4.62.3 + '@rollup/rollup-win32-arm64-msvc': 4.62.3 + '@rollup/rollup-win32-ia32-msvc': 4.62.3 + '@rollup/rollup-win32-x64-gnu': 4.62.3 + '@rollup/rollup-win32-x64-msvc': 4.62.3 + fsevents: 2.3.3 - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 + run-applescript@7.1.0: {} - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 + rx.mini@1.4.0: + optional: true safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - safe-regex-test@1.1.0: dependencies: call-bound: 1.0.4 @@ -16266,35 +19248,24 @@ snapshots: safe-stable-stringify@2.5.0: {} - safer-buffer@2.1.2: {} - sanitize-filename@1.6.3: dependencies: truncate-utf8-bytes: 1.0.2 - sass-loader@14.2.1(sass@1.87.0)(webpack@5.105.4(esbuild@0.19.12)): + sass-loader@16.0.8(sass@1.77.4)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): dependencies: neo-async: 2.6.2 optionalDependencies: - sass: 1.87.0 - webpack: 5.105.4(esbuild@0.19.12) + sass: 1.77.4 + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) sass@1.77.4: dependencies: chokidar: 3.6.0 - immutable: 4.3.8 - source-map-js: 1.2.1 - - sass@1.87.0: - dependencies: - chokidar: 4.0.3 - immutable: 5.1.5 + immutable: 4.3.9 source-map-js: 1.2.1 - optionalDependencies: - '@parcel/watcher': 2.5.6 - optional: true - sax@1.6.0: {} + sax@1.6.1: {} saxes@6.0.0: dependencies: @@ -16302,70 +19273,81 @@ snapshots: scheduler@0.25.0: {} - scheduler@0.26.0: {} + scheduler@0.25.0-rc-603e6108-20241029: {} - schema-utils@3.3.0: + scheduler@0.27.0: {} + + schema-dts-lib@1.0.0(typescript@6.0.3): dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.14.0 - ajv-keywords: 3.5.2(ajv@6.14.0) + typescript: 6.0.3 - schema-utils@4.3.0: + schema-dts@2.0.0(typescript@6.0.3): dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.18.0 - ajv-formats: 2.1.1(ajv@8.18.0) - ajv-keywords: 5.1.0(ajv@8.18.0) + schema-dts-lib: 1.0.0(typescript@6.0.3) + transitivePeerDependencies: + - typescript - schema-utils@4.3.3: + schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.18.0 - ajv-formats: 2.1.1(ajv@8.18.0) - ajv-keywords: 5.1.0(ajv@8.18.0) + ajv: 6.15.0 + ajv-keywords: 3.5.2(ajv@6.15.0) - scslre@0.3.0: + schema-utils@4.3.3: dependencies: - '@eslint-community/regexpp': 4.12.1 - refa: 0.12.1 - regexp-ast-analysis: 0.7.1 + '@types/json-schema': 7.0.15 + ajv: 8.20.0 + ajv-formats: 2.1.1(ajv@8.20.0) + ajv-keywords: 5.1.0(ajv@8.20.0) secure-json-parse@4.1.0: {} - semver@6.3.1: {} - - semver@7.7.1: {} - - semver@7.7.4: {} - - send@1.2.1: - dependencies: - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 2.0.0 - http-errors: 2.0.1 - mime-types: 3.0.2 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.2 + selderee@0.11.0: + dependencies: + parseley: 0.12.1 + + semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3): + dependencies: + '@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2) + '@semantic-release/error': 4.0.0 + '@semantic-release/github': 12.0.9(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2) + '@semantic-release/npm': 13.1.5(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3)) + '@semantic-release/release-notes-generator': 14.1.1(semantic-release@25.0.9(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2) + aggregate-error: 5.0.0 + cosmiconfig: 9.0.2(typescript@6.0.3) + debug: 4.4.3(supports-color@10.2.2) + env-ci: 11.2.0 + execa: 9.6.1 + figures: 6.1.0 + find-versions: 6.0.0 + get-stream: 6.0.1 + git-log-parser: 1.2.1 + hook-std: 4.0.0 + hosted-git-info: 9.0.3 + import-from-esm: 2.0.0(supports-color@10.2.2) + lodash-es: 4.18.1 + marked: 15.0.12 + marked-terminal: 7.3.0(marked@15.0.12) + micromatch: 4.0.8 + p-each-series: 3.0.0 + p-reduce: 3.0.0 + read-package-up: 12.0.0 + resolve-from: 5.0.0 + semver: 7.8.5 + signale: 1.4.0 + yargs: 18.1.0 transitivePeerDependencies: + - kerberos - supports-color + - typescript - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 + semifies@1.0.0: {} - serve-static@2.2.1: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 1.2.1 - transitivePeerDependencies: - - supports-color + semver-regex@4.0.5: {} + + semver@6.3.1: {} + + semver@7.8.5: {} set-function-length@1.2.2: dependencies: @@ -16376,114 +19358,46 @@ snapshots: gopd: 1.2.0 has-property-descriptors: 1.0.2 - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - setimmediate@1.0.5: {} - setprototypeof@1.2.0: {} - sha.js@2.4.12: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 to-buffer: 1.2.2 - sharp@0.33.5: - dependencies: - color: 4.2.3 - detect-libc: 2.0.4 - semver: 7.7.1 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - optional: true - - sharp@0.34.1: - dependencies: - color: 4.2.3 - detect-libc: 2.0.4 - semver: 7.7.1 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.1 - '@img/sharp-darwin-x64': 0.34.1 - '@img/sharp-libvips-darwin-arm64': 1.1.0 - '@img/sharp-libvips-darwin-x64': 1.1.0 - '@img/sharp-libvips-linux-arm': 1.1.0 - '@img/sharp-libvips-linux-arm64': 1.1.0 - '@img/sharp-libvips-linux-ppc64': 1.1.0 - '@img/sharp-libvips-linux-s390x': 1.1.0 - '@img/sharp-libvips-linux-x64': 1.1.0 - '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 - '@img/sharp-libvips-linuxmusl-x64': 1.1.0 - '@img/sharp-linux-arm': 0.34.1 - '@img/sharp-linux-arm64': 0.34.1 - '@img/sharp-linux-s390x': 0.34.1 - '@img/sharp-linux-x64': 0.34.1 - '@img/sharp-linuxmusl-arm64': 0.34.1 - '@img/sharp-linuxmusl-x64': 0.34.1 - '@img/sharp-wasm32': 0.34.1 - '@img/sharp-win32-ia32': 0.34.1 - '@img/sharp-win32-x64': 0.34.1 - - sharp@0.34.5: + sharp@0.35.3(@types/node@26.1.2): dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.7.4 + semver: 7.8.5 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.5 - '@img/sharp-darwin-x64': 0.34.5 - '@img/sharp-libvips-darwin-arm64': 1.2.4 - '@img/sharp-libvips-darwin-x64': 1.2.4 - '@img/sharp-libvips-linux-arm': 1.2.4 - '@img/sharp-libvips-linux-arm64': 1.2.4 - '@img/sharp-libvips-linux-ppc64': 1.2.4 - '@img/sharp-libvips-linux-riscv64': 1.2.4 - '@img/sharp-libvips-linux-s390x': 1.2.4 - '@img/sharp-libvips-linux-x64': 1.2.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - '@img/sharp-linux-arm': 0.34.5 - '@img/sharp-linux-arm64': 0.34.5 - '@img/sharp-linux-ppc64': 0.34.5 - '@img/sharp-linux-riscv64': 0.34.5 - '@img/sharp-linux-s390x': 0.34.5 - '@img/sharp-linux-x64': 0.34.5 - '@img/sharp-linuxmusl-arm64': 0.34.5 - '@img/sharp-linuxmusl-x64': 0.34.5 - '@img/sharp-wasm32': 0.34.5 - '@img/sharp-win32-arm64': 0.34.5 - '@img/sharp-win32-ia32': 0.34.5 - '@img/sharp-win32-x64': 0.34.5 - optional: true + '@img/sharp-darwin-arm64': 0.35.3 + '@img/sharp-darwin-x64': 0.35.3 + '@img/sharp-freebsd-wasm32': 0.35.3 + '@img/sharp-libvips-darwin-arm64': 1.3.2 + '@img/sharp-libvips-darwin-x64': 1.3.2 + '@img/sharp-libvips-linux-arm': 1.3.2 + '@img/sharp-libvips-linux-arm64': 1.3.2 + '@img/sharp-libvips-linux-ppc64': 1.3.2 + '@img/sharp-libvips-linux-riscv64': 1.3.2 + '@img/sharp-libvips-linux-s390x': 1.3.2 + '@img/sharp-libvips-linux-x64': 1.3.2 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.2 + '@img/sharp-libvips-linuxmusl-x64': 1.3.2 + '@img/sharp-linux-arm': 0.35.3 + '@img/sharp-linux-arm64': 0.35.3 + '@img/sharp-linux-ppc64': 0.35.3 + '@img/sharp-linux-riscv64': 0.35.3 + '@img/sharp-linux-s390x': 0.35.3 + '@img/sharp-linux-x64': 0.35.3 + '@img/sharp-linuxmusl-arm64': 0.35.3 + '@img/sharp-linuxmusl-x64': 0.35.3 + '@img/sharp-webcontainers-wasm32': 0.35.3 + '@img/sharp-win32-arm64': 0.35.3 + '@img/sharp-win32-ia32': 0.35.3 + '@img/sharp-win32-x64': 0.35.3 + '@types/node': 26.1.2 shebang-command@2.0.0: dependencies: @@ -16491,64 +19405,127 @@ snapshots: shebang-regex@3.0.0: {} - side-channel-list@1.0.0: + shiki@4.4.3: + dependencies: + '@shikijs/core': 4.4.3 + '@shikijs/engine-javascript': 4.4.3 + '@shikijs/engine-oniguruma': 4.4.3 + '@shikijs/langs': 4.4.3 + '@shikijs/themes': 4.4.3 + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + shimmer@1.2.1: {} + + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-map@1.0.1: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 get-intrinsic: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-weakmap@1.0.2: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 get-intrinsic: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-map: 1.0.1 - side-channel@1.1.0: + side-channel@1.1.1: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.3 - side-channel-list: 1.0.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + sift@17.1.3: {} + + siginfo@2.0.0: {} + signal-exit@4.1.0: {} - simple-swizzle@0.2.2: + signale@1.4.0: + dependencies: + chalk: 2.4.2 + figures: 2.0.0 + pkg-conf: 2.1.0 + + simple-concat@1.0.1: + optional: true + + simple-get@4.0.1: dependencies: - is-arrayish: 0.3.2 + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + optional: true simple-wcswidth@1.1.2: {} sisteransi@1.0.5: {} + skin-tone@2.0.0: + dependencies: + unicode-emoji-modifier-base: 1.0.0 + + socket.io-adapter@2.5.8(supports-color@10.2.2): + dependencies: + debug: 4.4.3(supports-color@10.2.2) + ws: 8.21.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-parser@4.2.7(supports-color@10.2.2): + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + socket.io@4.8.3(supports-color@10.2.2): + dependencies: + accepts: 1.3.8 + base64id: 2.0.0 + cors: 2.8.6 + debug: 4.4.3(supports-color@10.2.2) + engine.io: 6.6.9(supports-color@10.2.2) + socket.io-adapter: 2.5.8(supports-color@10.2.2) + socket.io-parser: 4.2.7(supports-color@10.2.2) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + sonic-boom@4.2.1: dependencies: atomic-sleep: 1.0.0 - sonner@1.7.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + sonner@1.7.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) - sort-object-keys@1.1.3: {} + sort-object-keys@2.1.0: {} - sort-package-json@3.2.0: + sort-package-json@4.0.0: dependencies: - detect-indent: 7.0.1 + detect-indent: 7.0.2 detect-newline: 4.0.1 - git-hooks-list: 4.1.1 + git-hooks-list: 4.2.1 is-plain-obj: 4.1.0 - semver: 7.7.1 - sort-object-keys: 1.1.3 - tinyglobby: 0.2.13 + semver: 7.8.5 + sort-object-keys: 2.1.0 + tinyglobby: 0.2.17 source-map-js@1.2.1: {} @@ -16561,42 +19538,75 @@ snapshots: source-map@0.6.1: {} - source-map@0.7.4: {} + source-map@0.7.6: {} - split2@4.2.0: {} + space-separated-tokens@2.0.2: {} + + sparse-bitfield@3.0.3: + dependencies: + memory-pager: 1.5.0 - sshpk@1.18.0: + spawn-error-forwarder@1.0.0: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.23 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: dependencies: - asn1: 0.2.6 - assert-plus: 1.0.0 - bcrypt-pbkdf: 1.0.2 - dashdash: 1.14.1 - ecc-jsbn: 0.1.2 - getpass: 0.1.7 - jsbn: 0.1.1 - safer-buffer: 2.1.2 - tweetnacl: 0.14.5 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.23 - stable-hash@0.0.4: {} + spdx-license-ids@3.0.23: {} + + split2@1.0.0: + dependencies: + through2: 2.0.5 + + split2@4.2.0: {} - stable-hash@0.0.5: {} + stackback@0.0.2: {} stackframe@1.3.4: {} - state-local@1.0.7: {} + stacktrace-parser@0.1.11: + dependencies: + type-fest: 0.7.1 - statuses@2.0.1: {} + standard-as-callback@2.1.0: {} + + state-local@1.0.7: {} - statuses@2.0.2: {} + std-env@4.2.0: {} - storybook@8.6.17(prettier@3.5.3): + storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8): dependencies: - '@storybook/core': 8.6.17(prettier@3.5.3)(storybook@8.6.17(prettier@3.5.3)) + '@storybook/global': 5.0.0 + '@storybook/icons': 2.1.0(react@19.2.8) + '@testing-library/dom': 10.4.1 + '@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 + '@webcontainer/env': 1.1.1 + esbuild: 0.28.1 + jsonc-parser: 3.3.1 + open: 10.2.0 + oxc-parser: 0.127.0 + oxc-resolver: 11.24.2 + recast: 0.23.12 + semver: 7.8.5 + use-sync-external-store: 1.6.0(react@19.2.8) + ws: 8.21.1 optionalDependencies: - prettier: 3.5.3 + '@types/react': 19.2.18 + prettier: 3.9.6 transitivePeerDependencies: - bufferutil - - supports-color + - react - utf-8-validate stream-browserify@3.0.0: @@ -16604,6 +19614,11 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + stream-combiner2@1.1.1: + dependencies: + duplexer2: 0.1.4 + readable-stream: 2.3.8 + stream-http@3.2.0: dependencies: builtin-status-codes: 3.0.0 @@ -16613,7 +19628,7 @@ snapshots: streamsearch@1.1.0: {} - string-ts@2.2.1: {} + string-argv@0.3.2: {} string-width@4.2.3: dependencies: @@ -16621,61 +19636,16 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - - string.prototype.includes@2.0.1: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.9 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: + string-width@7.2.0: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + emoji-regex: 10.6.0 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 - string.prototype.trimstart@1.0.8: + string-width@8.2.2: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 string_decoder@1.1.1: dependencies: @@ -16694,57 +19664,75 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + strip-ansi@7.2.0: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 strip-bom@3.0.0: {} + strip-final-newline@3.0.0: {} + + strip-final-newline@4.0.0: {} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 - strip-indent@4.0.0: - dependencies: - min-indent: 1.0.1 + strip-indent@4.1.1: {} - strip-json-comments@3.1.1: {} + strip-json-comments@2.0.1: {} strip-json-comments@5.0.3: {} - strtok3@8.1.0: + strtok3@10.3.5: dependencies: '@tokenizer/token': 0.3.0 - peek-readable: 5.4.2 - style-loader@3.3.4(webpack@5.105.4(esbuild@0.19.12)): + stubborn-fs@2.0.0: + dependencies: + stubborn-utils: 1.0.2 + + stubborn-utils@1.0.2: {} + + style-loader@3.3.4(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): + dependencies: + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) + + style-loader@4.0.0(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): dependencies: - webpack: 5.105.4(esbuild@0.19.12) + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) + + styled-jsx@5.1.6(@babel/core@7.29.7(supports-color@10.2.2))(babel-plugin-macros@3.1.0)(react@19.2.8): + dependencies: + client-only: 0.0.1 + react: 19.2.8 + optionalDependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + babel-plugin-macros: 3.1.0 - styled-jsx@5.1.6(@babel/core@7.26.0)(react@19.1.0): + styled-jsx@5.1.7(@babel/core@7.29.7(supports-color@10.2.2))(babel-plugin-macros@3.1.0)(react@19.2.8): dependencies: client-only: 0.0.1 - react: 19.1.0 + react: 19.2.8 optionalDependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.29.7(supports-color@10.2.2) + babel-plugin-macros: 3.1.0 - stylehacks@7.0.4(postcss@8.5.3): + stylehacks@8.0.1(postcss@8.5.25): dependencies: - browserslist: 4.24.4 - postcss: 8.5.3 - postcss-selector-parser: 6.1.2 + browserslist: 4.28.7 + postcss: 8.5.25 + postcss-selector-parser: 7.1.4 stylis@4.2.0: {} - sucrase@3.35.0: + super-regex@1.1.0: dependencies: - '@jridgewell/gen-mapping': 0.3.8 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 + function-timeout: 1.0.2 + make-asynchronous: 1.1.0 + time-span: 5.1.0 + + supports-color@10.2.2: {} supports-color@5.5.0: dependencies: @@ -16754,95 +19742,145 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-color@8.1.1: + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@3.2.0: dependencies: has-flag: 4.0.0 + supports-color: 7.2.0 supports-preserve-symlinks-flag@1.0.0: {} - svgo@3.3.3: + svg-arc-to-cubic-bezier@3.2.0: {} + + svgo@4.0.2: dependencies: - commander: 7.2.0 + commander: 11.1.0 css-select: 5.2.2 - css-tree: 2.3.1 + css-tree: 3.2.1 css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 - sax: 1.6.0 + sax: 1.6.1 + + swc-loader@0.2.7(@swc/core@1.15.47(@swc/helpers@0.5.23))(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): + dependencies: + '@swc/core': 1.15.47(@swc/helpers@0.5.23) + '@swc/counter': 0.1.3 + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) symbol-tree@3.2.4: {} - tabbable@6.2.0: {} + syncpack-darwin-arm64@15.3.2: + optional: true + + syncpack-darwin-x64@15.3.2: + optional: true - tailwind-merge@2.6.0: {} + syncpack-linux-arm64-musl@15.3.2: + optional: true - tailwindcss-animate@1.0.7(tailwindcss@3.4.17): - dependencies: - tailwindcss: 3.4.17 + syncpack-linux-arm64@15.3.2: + optional: true + + syncpack-linux-x64-musl@15.3.2: + optional: true + + syncpack-linux-x64@15.3.2: + optional: true - tailwindcss@3.4.17: + syncpack-windows-arm64@15.3.2: + optional: true + + syncpack-windows-x64@15.3.2: + optional: true + + syncpack@15.3.2: + optionalDependencies: + syncpack-darwin-arm64: 15.3.2 + syncpack-darwin-x64: 15.3.2 + syncpack-linux-arm64: 15.3.2 + syncpack-linux-arm64-musl: 15.3.2 + syncpack-linux-x64: 15.3.2 + syncpack-linux-x64-musl: 15.3.2 + syncpack-windows-arm64: 15.3.2 + syncpack-windows-x64: 15.3.2 + + tabbable@6.5.0: {} + + tagged-tag@1.0.0: {} + + tailwind-merge@3.6.0: {} + + tailwind-variants@3.3.1(tailwind-merge@3.6.0)(tailwindcss@4.3.3): + optionalDependencies: + tailwind-merge: 3.6.0 + tailwindcss: 4.3.3 + + tailwindcss@4.3.3: {} + + takumi-js@2.5.4(csstype@3.2.3)(react@19.2.8): dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.3 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.7 - lilconfig: 3.1.3 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.5.3 - postcss-import: 15.1.0(postcss@8.5.3) - postcss-js: 4.0.1(postcss@8.5.3) - postcss-load-config: 4.0.2(postcss@8.5.3) - postcss-nested: 6.2.0(postcss@8.5.3) - postcss-selector-parser: 6.1.2 - resolve: 1.22.10 - sucrase: 3.35.0 + '@takumi-rs/core': 2.5.4(csstype@3.2.3)(react@19.2.8) + '@takumi-rs/helpers': 2.5.4(react@19.2.8) + '@takumi-rs/wasm': 2.5.4(csstype@3.2.3)(react@19.2.8) transitivePeerDependencies: - - ts-node + - csstype + - preact + - react - tapable@2.2.1: {} + tapable@2.3.3: {} - tapable@2.3.0: {} + tar-fs@2.1.5: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.4 + tar-stream: 2.2.0 + optional: true - terser-webpack-plugin@5.3.14(esbuild@0.19.12)(webpack@5.105.4(esbuild@0.19.12)): + tar-stream@2.2.0: dependencies: - '@jridgewell/trace-mapping': 0.3.25 - jest-worker: 27.5.1 - schema-utils: 4.3.0 - serialize-javascript: 6.0.2 - terser: 5.39.0 - webpack: 5.105.4(esbuild@0.19.12) - optionalDependencies: - esbuild: 0.19.12 + bl: 4.1.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + optional: true + + temp-dir@3.0.0: {} + + tempy@3.2.0: + dependencies: + is-stream: 3.0.0 + temp-dir: 3.0.0 + type-fest: 2.19.0 + unique-string: 3.0.0 - terser-webpack-plugin@5.4.0(esbuild@0.19.12)(webpack@5.105.4(esbuild@0.19.12)): + terser-webpack-plugin@5.6.1(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.46.1 - webpack: 5.105.4(esbuild@0.19.12) + terser: 5.49.0 + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) optionalDependencies: - esbuild: 0.19.12 - - terser@5.39.0: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.14.1 - commander: 2.20.3 - source-map-support: 0.5.21 + '@swc/core': 1.15.47(@swc/helpers@0.5.23) + clean-css: 5.3.3 + cssnano: 8.0.2(postcss@8.5.25) + csso: 5.0.5 + esbuild: 0.28.1 + html-minifier-terser: 6.1.0 + lightningcss: 1.33.0 + postcss: 8.5.25 + uglify-js: 3.19.3 - terser@5.46.1: + terser@5.49.0: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.16.0 + acorn: 8.17.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -16854,37 +19892,52 @@ snapshots: dependencies: any-promise: 1.3.0 - thread-stream@3.1.0: + thread-stream@3.2.0: dependencies: real-require: 0.2.0 - throttleit@2.1.0: {} + through2@2.0.5: + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + + thunky@1.1.0: + optional: true + + time-span@5.1.0: + dependencies: + convert-hrtime: 5.0.0 timers-browserify@2.0.12: dependencies: setimmediate: 1.0.5 + timestring@7.0.0: {} + + tiny-inflate@1.0.3: {} + tiny-invariant@1.3.3: {} - tinyglobby@0.2.13: - dependencies: - fdir: 6.4.4(picomatch@4.0.4) - picomatch: 4.0.4 + tinybench@2.9.0: {} + + tinyexec@1.2.4: {} - tinyglobby@0.2.15: + tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 - tinyrainbow@1.2.0: {} + tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} + tinyrainbow@3.1.1: {} - tldts-core@6.1.83: {} + tinyspy@4.0.4: {} - tldts@6.1.83: + tldts-core@7.4.9: {} + + tldts@7.4.9: dependencies: - tldts-core: 6.1.83 + tldts-core: 7.4.9 to-buffer@1.2.2: dependencies: @@ -16892,122 +19945,100 @@ snapshots: safe-buffer: 5.2.1 typed-array-buffer: 1.0.3 - to-no-case@1.0.2: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - to-snake-case@1.0.0: - dependencies: - to-space-case: 1.0.0 - - to-space-case@1.0.0: - dependencies: - to-no-case: 1.0.2 - - toidentifier@1.0.1: {} - token-types@6.1.2: dependencies: '@borewit/text-codec': 0.2.2 '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - tough-cookie@2.5.0: + tough-cookie@6.0.2: dependencies: - psl: 1.15.0 - punycode: 2.3.1 + tldts: 7.4.9 - tough-cookie@5.1.2: - dependencies: - tldts: 6.1.83 + tr46@0.0.3: {} - tr46@5.0.0: + tr46@5.1.1: dependencies: punycode: 2.3.1 - truncate-utf8-bytes@1.0.2: + tr46@6.0.0: dependencies: - utf8-byte-length: 1.0.5 + punycode: 2.3.1 - ts-api-utils@2.1.0(typescript@5.7.3): - dependencies: - typescript: 5.7.3 + traverse@0.6.8: {} - ts-api-utils@2.1.0(typescript@5.8.3): - dependencies: - typescript: 5.8.3 + trim-lines@3.0.1: {} - ts-api-utils@2.4.0(typescript@5.8.3): + truncate-utf8-bytes@1.0.2: dependencies: - typescript: 5.8.3 - optional: true - - ts-dedent@2.2.0: {} - - ts-essentials@10.0.3(typescript@5.8.3): - optionalDependencies: - typescript: 5.8.3 - - ts-interface-checker@0.1.13: {} + utf8-byte-length: 1.0.5 - ts-pattern@5.7.0: {} + ts-dedent@2.3.0: {} - ts-pnp@1.2.0(typescript@5.8.3): + ts-essentials@10.0.3(typescript@6.0.3): optionalDependencies: - typescript: 5.8.3 + typescript: 6.0.3 tsconfig-paths-webpack-plugin@4.2.0: dependencies: chalk: 4.1.2 - enhanced-resolve: 5.18.1 - tapable: 2.2.1 + enhanced-resolve: 5.24.4 + tapable: 2.3.3 tsconfig-paths: 4.2.0 - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 minimist: 1.2.8 strip-bom: 3.0.0 + tslib@1.14.1: + optional: true + tslib@2.8.1: {} - tsx@4.21.0: + tsx@4.22.4: dependencies: - esbuild: 0.27.4 - get-tsconfig: 4.13.6 + esbuild: 0.28.1 optionalDependencies: fsevents: 2.3.3 + tsyringe@4.10.0: + dependencies: + tslib: 1.14.1 + optional: true + tty-browserify@0.0.1: {} tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 + optional: true - tweetnacl@0.14.5: {} + tunnel@0.0.6: {} - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 + turbores@1.2.2: + optionalDependencies: + '@rollup/rollup-linux-x64-gnu': 4.62.1 + + tweetnacl@1.0.3: + optional: true + + type-fest@0.7.1: {} + + type-fest@1.4.0: {} type-fest@2.19.0: {} - type-fest@4.40.1: {} + type-fest@4.41.0: {} - type-is@2.0.1: + type-fest@5.8.0: dependencies: - content-type: 1.0.5 - media-typer: 1.1.0 - mime-types: 3.0.2 + tagged-tag: 1.0.0 typed-array-buffer@1.0.3: dependencies: @@ -17015,86 +20046,63 @@ snapshots: es-errors: 1.3.0 is-typed-array: 1.1.15 - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 + typescript@6.0.3: {} - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.0.0 - reflect.getprototypeof: 1.0.10 + uglify-js@3.19.3: + optional: true - typescript-eslint@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + uint8array-extras@1.5.0: {} - typescript-eslint@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.31.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color + undici-types@8.10.0: {} - typescript@5.7.3: {} + undici-types@8.3.0: {} - typescript@5.8.3: {} + undici@6.28.0: {} - uint8array-extras@1.5.0: {} + undici@7.28.0: {} - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 + undici@7.29.0: {} - undici-types@6.21.0: {} + undici@8.9.0: {} - undici@5.29.0: + unenv@2.0.0-rc.24: dependencies: - '@fastify/busboy': 2.1.1 - - undici@7.18.2: {} + pathe: 2.0.3 unicode-canonical-property-names-ecmascript@2.0.1: {} + unicode-emoji-modifier-base@1.0.0: {} + unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.1 - unicode-property-aliases-ecmascript: 2.1.0 + unicode-property-aliases-ecmascript: 2.2.0 + + unicode-match-property-value-ecmascript@2.2.1: {} + + unicode-properties@1.4.1: + dependencies: + base64-js: 1.5.1 + unicode-trie: 2.0.0 + + unicode-property-aliases-ecmascript@2.2.0: {} + + unicode-trie@2.0.0: + dependencies: + pako: 0.2.9 + tiny-inflate: 1.0.3 + + unicorn-magic@0.1.0: {} - unicode-match-property-value-ecmascript@2.2.0: {} + unicorn-magic@0.3.0: {} - unicode-property-aliases-ecmascript@2.1.0: {} + unicorn-magic@0.4.0: {} + + unique-string@3.0.0: + dependencies: + crypto-random-string: 4.0.0 - unist-util-is@6.0.0: + unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -17102,86 +20110,54 @@ snapshots: dependencies: '@types/unist': 3.0.3 + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-visit-parents@6.0.1: + unist-util-visit-parents@6.0.2: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 - unist-util-visit@5.0.0: + unist-util-visit@5.1.0: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + universal-user-agent@7.0.3: {} universalify@2.0.1: {} - unpipe@1.0.0: {} + unplugin@1.0.1: + dependencies: + acorn: 8.17.0 + chokidar: 3.6.0 + webpack-sources: 3.5.1 + webpack-virtual-modules: 0.5.0 - unplugin@1.16.1: + unplugin@2.3.11: dependencies: - acorn: 8.14.1 + '@jridgewell/remapping': 2.3.5 + acorn: 8.17.0 + picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 - unrs-resolver@1.11.1: + unzipper@0.12.5: dependencies: - napi-postinstall: 0.3.4 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - optional: true - - unrs-resolver@1.7.2: - dependencies: - napi-postinstall: 0.2.3 - optionalDependencies: - '@unrs/resolver-binding-darwin-arm64': 1.7.2 - '@unrs/resolver-binding-darwin-x64': 1.7.2 - '@unrs/resolver-binding-freebsd-x64': 1.7.2 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.2 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.2 - '@unrs/resolver-binding-linux-arm64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-arm64-musl': 1.7.2 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-riscv64-musl': 1.7.2 - '@unrs/resolver-binding-linux-s390x-gnu': 1.7.2 - '@unrs/resolver-binding-linux-x64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-x64-musl': 1.7.2 - '@unrs/resolver-binding-wasm32-wasi': 1.7.2 - '@unrs/resolver-binding-win32-arm64-msvc': 1.7.2 - '@unrs/resolver-binding-win32-ia32-msvc': 1.7.2 - '@unrs/resolver-binding-win32-x64-msvc': 1.7.2 - - update-browserslist-db@1.1.2(browserslist@4.24.4): - dependencies: - browserslist: 4.24.4 - escalade: 3.2.0 - picocolors: 1.1.1 + bluebird: 3.7.2 + duplexer2: 0.1.4 + fs-extra: 11.3.1 + graceful-fs: 4.2.11 + node-int64: 0.4.0 - update-browserslist-db@1.2.3(browserslist@4.28.1): + update-browserslist-db@1.2.3(browserslist@4.28.7): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.7 escalade: 3.2.0 picocolors: 1.1.1 @@ -17189,21 +20165,32 @@ snapshots: dependencies: punycode: 2.3.1 + url-join@5.0.0: {} + url@0.11.4: dependencies: punycode: 1.4.1 - qs: 6.14.0 + qs: 6.15.3 - use-context-selector@2.0.0(react@19.1.0)(scheduler@0.25.0): + use-context-selector@2.0.0(react@19.2.8)(scheduler@0.25.0): dependencies: - react: 19.1.0 + react: 19.2.8 scheduler: 0.25.0 - use-isomorphic-layout-effect@1.2.0(@types/react@19.1.2)(react@19.1.0): + use-isomorphic-layout-effect@1.2.1(@types/react@19.2.18)(react@19.2.8): dependencies: - react: 19.1.0 + react: 19.2.8 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.2.18 + + use-sync-external-store@1.6.0(react@19.2.8): + dependencies: + react: 19.2.8 + + usehooks-ts@3.1.1(react@19.2.8): + dependencies: + lodash.debounce: 4.0.8 + react: 19.2.8 utf8-byte-length@1.0.5: {} @@ -17215,30 +20202,101 @@ snapshots: is-arguments: 1.2.0 is-generator-function: 1.1.2 is-typed-array: 1.1.15 - which-typed-array: 1.1.20 + which-typed-array: 1.1.22 utila@0.4.0: {} - uuid@10.0.0: {} - - uuid@3.4.0: {} - - uuid@9.0.0: {} + uuid@13.0.2: {} uuid@9.0.1: {} + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + vary@1.1.2: {} - verror@1.10.0: + vfile-message@4.0.3: dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.3.0 + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 - vfile-message@4.0.2: + vfile@6.0.3: dependencies: '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + + victory-vendor@37.3.6: + dependencies: + '@types/d3-array': 3.2.2 + '@types/d3-ease': 3.0.2 + '@types/d3-interpolate': 3.0.4 + '@types/d3-scale': 4.0.9 + '@types/d3-shape': 3.1.8 + '@types/d3-time': 3.0.4 + '@types/d3-timer': 3.0.2 + d3-array: 3.2.4 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-scale: 4.0.2 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-timer: 3.0.1 + + vite-compatible-readable-stream@3.6.1: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0): + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.5 + postcss: 8.5.25 + rolldown: 1.2.1 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 26.1.2 + esbuild: 0.28.1 + fsevents: 2.3.3 + jiti: 2.7.0 + sass: 1.77.4 + terser: 5.49.0 + tsx: 4.22.4 + yaml: 2.9.0 + + vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.1)(jsdom@30.0.1(@noble/hashes@1.8.0)(canvas@3.2.3))(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + es-module-lexer: 2.3.1 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.4 + pathe: 2.0.3 + picomatch: 4.0.5 + std-env: 4.2.0 + tinybench: 2.9.0 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.1 + vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.49.0)(tsx@4.22.4)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@types/node': 26.1.2 + '@vitest/coverage-v8': 4.1.10(vitest@4.1.10) + happy-dom: 20.11.1 + jsdom: 30.0.1(@noble/hashes@1.8.0)(canvas@3.2.3) + transitivePeerDependencies: + - msw vm-browserify@1.1.2: {} @@ -17246,22 +20304,27 @@ snapshots: dependencies: xml-name-validator: 5.0.0 - watchpack@2.5.1: + watchpack@2.5.2: dependencies: - glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 + web-worker@1.5.0: {} + + webidl-conversions@3.0.1: {} + webidl-conversions@7.0.0: {} - webpack-dev-middleware@6.1.3(webpack@5.105.4(esbuild@0.19.12)): + webidl-conversions@8.0.1: {} + + webpack-dev-middleware@6.1.3(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.3.0 + range-parser: 1.3.0 + schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.4(esbuild@0.19.12) + webpack: 5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3) webpack-hot-middleware@2.26.1: dependencies: @@ -17269,88 +20332,161 @@ snapshots: html-entities: 2.6.0 strip-ansi: 6.0.1 - webpack-sources@3.3.4: {} + webpack-sources@3.5.1: {} + + webpack-virtual-modules@0.5.0: {} webpack-virtual-modules@0.6.2: {} - webpack@5.105.4(esbuild@0.19.12): + webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3): dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + acorn: 8.17.0 + browserslist: 4.28.7 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.1 - es-module-lexer: 2.0.0 + enhanced-resolve: 5.24.4 + es-module-lexer: 2.3.1 eslint-scope: 5.1.1 events: 3.3.0 - glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.1 - mime-types: 2.1.35 + mime-db: 1.54.0 + minimizer-webpack-plugin: 5.6.1(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@8.0.2(postcss@8.5.25))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@6.1.0)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)) neo-async: 2.6.2 schema-utils: 4.3.3 - tapable: 2.3.0 - terser-webpack-plugin: 5.4.0(esbuild@0.19.12)(webpack@5.105.4(esbuild@0.19.12)) - watchpack: 2.5.1 - webpack-sources: 3.3.4 + tapable: 2.3.3 + watchpack: 2.5.2 + webpack-sources: 3.5.1 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js - whatwg-encoding@3.1.1: + werift-common@0.0.3(supports-color@10.2.2): + dependencies: + '@shinyoshiaki/jspack': 0.0.6 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + optional: true + + werift-dtls@0.5.8(supports-color@10.2.2): + dependencies: + '@fidm/x509': 1.2.1 + '@noble/curves': 1.9.7 + '@peculiar/x509': 1.14.3 + '@shinyoshiaki/binary-data': 0.6.1 + debug: 4.4.0(supports-color@10.2.2) + tweetnacl: 1.0.3 + transitivePeerDependencies: + - supports-color + optional: true + + werift-ice@0.2.2(supports-color@10.2.2): + dependencies: + '@shinyoshiaki/jspack': 0.0.6 + buffer-crc32: 1.0.0 + debug: 4.4.3(supports-color@10.2.2) + int64-buffer: 1.1.1 + ip: 2.0.1 + lodash: 4.18.1 + multicast-dns: 7.2.5 + p-cancelable: 2.1.1 + rx.mini: 1.4.0 + transitivePeerDependencies: + - supports-color + optional: true + + werift-rtp@0.8.9(supports-color@10.2.2): + dependencies: + buffer: 6.0.3 + debug: 4.4.0(supports-color@10.2.2) + mediabunny: 1.52.2 + transitivePeerDependencies: + - supports-color + optional: true + + werift-sctp@0.0.11: + dependencies: + '@shinyoshiaki/jspack': 0.0.6 + optional: true + + werift@0.23.0(supports-color@10.2.2): dependencies: - iconv-lite: 0.6.3 + '@fidm/x509': 1.2.1 + '@minhducsun2002/leb128': 1.0.0 + '@noble/curves': 1.9.7 + '@peculiar/x509': 1.14.3 + '@shinyoshiaki/binary-data': 0.6.1 + '@shinyoshiaki/jspack': 0.0.6 + aes-js: 3.1.2 + buffer: 6.0.3 + debug: 4.4.0(supports-color@10.2.2) + fast-deep-equal: 3.1.3 + int64-buffer: 1.1.0 + ip: 2.0.1 + mp4box: 0.5.4 + multicast-dns: 7.2.5 + tweetnacl: 1.0.3 + werift-common: 0.0.3(supports-color@10.2.2) + werift-dtls: 0.5.8(supports-color@10.2.2) + werift-ice: 0.2.2(supports-color@10.2.2) + werift-rtp: 0.8.9(supports-color@10.2.2) + werift-sctp: 0.0.11 + transitivePeerDependencies: + - supports-color + optional: true - whatwg-mimetype@4.0.0: {} + whatwg-mimetype@3.0.0: {} - whatwg-url@14.1.1: + whatwg-mimetype@5.0.0: {} + + whatwg-url@14.2.0: dependencies: - tr46: 5.0.0 + tr46: 5.1.1 webidl-conversions: 7.0.0 - which-boxed-primitive@1.1.1: + whatwg-url@16.0.1(@noble/hashes@1.8.0): dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.1 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 + '@exodus/bytes': 1.15.1(@noble/hashes@1.8.0) + tr46: 6.0.0 + webidl-conversions: 8.0.1 + transitivePeerDependencies: + - '@noble/hashes' - which-builtin-type@1.2.1: + whatwg-url@17.1.0(@noble/hashes@1.8.0): dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.0 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.0 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.20 + '@exodus/bytes': 1.15.1(@noble/hashes@1.8.0) + tr46: 6.0.0 + webidl-conversions: 8.0.1 + transitivePeerDependencies: + - '@noble/hashes' - which-collection@1.0.2: + whatwg-url@5.0.0: dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + when-exit@2.1.5: {} + + which-command@0.1.0: {} - which-typed-array@1.1.20: + which-typed-array@1.1.22: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 for-each: 0.3.5 get-proto: 1.0.1 @@ -17365,7 +20501,37 @@ snapshots: dependencies: isexe: 2.0.0 - word-wrap@1.2.5: {} + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wordwrap@1.0.0: {} + + workerd@1.20260730.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20260730.1 + '@cloudflare/workerd-darwin-arm64': 1.20260730.1 + '@cloudflare/workerd-linux-64': 1.20260730.1 + '@cloudflare/workerd-linux-arm64': 1.20260730.1 + '@cloudflare/workerd-windows-64': 1.20260730.1 + + wrangler@4.118.0(@types/node@26.1.2): + dependencies: + '@cloudflare/kv-asset-handler': 0.5.0 + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260730.1) + blake3-wasm: 2.1.5 + esbuild: 0.28.1 + miniflare: 5.20260730.0-alpha(@types/node@26.1.2) + path-to-regexp: 6.3.0 + unenv: 2.0.0-rc.24 + workerd: 1.20260730.1 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - utf-8-validate wrap-ansi@7.0.0: dependencies: @@ -17373,17 +20539,21 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: + wrap-ansi@9.0.2: dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 wrappy@1.0.2: {} - ws@8.18.2: {} + ws@8.21.0: {} - ws@8.19.0: {} + ws@8.21.1: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 xml-name-validator@5.0.0: {} @@ -17396,24 +20566,65 @@ snapshots: xtend@4.0.2: {} + y18n@5.0.8: {} + yallist@3.1.1: {} + yallist@4.0.0: {} + yaml@1.10.3: {} - yaml@2.8.3: {} + yaml@2.9.0: + optional: true + + yargs-parser@20.2.9: {} + + yargs-parser@22.0.0: {} + + yargs@16.2.2: + dependencies: + cliui: 7.0.4 + 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: 20.2.9 + + yargs@18.1.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 8.2.2 + y18n: 5.0.8 + yargs-parser: 22.0.0 - yjs@13.6.26: + yjs@13.6.31: dependencies: lib0: 0.2.117 yocto-queue@0.1.0: {} - yocto-queue@1.1.1: {} + yocto-queue@1.2.2: {} + + yoctocolors@2.2.0: {} + + yoga-layout@3.2.1: {} + + youch-core@0.3.3: + dependencies: + '@poppinss/exception': 1.2.3 + error-stack-parser-es: 1.0.5 - zod-to-json-schema@3.25.1(zod@3.24.4): + youch@4.1.0-beta.10: dependencies: - zod: 3.24.4 + '@poppinss/colors': 4.1.6 + '@poppinss/dumper': 0.6.5 + '@speed-highlight/core': 1.2.17 + cookie: 1.1.1 + youch-core: 0.3.3 - zod@3.24.4: {} + zod@4.4.3: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 00000000..f859720c --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,54 @@ +# Single-package repo: no `packages:` globs. This file stays because pnpm reads +# overrides, patchedDependencies, allowBuilds and the linker settings from here +# regardless of whether a workspace is defined. + +# `patches/` dir stays at the repo root, where the lockfile lives. +patchedDependencies: + pdfjs-dist@5.4.296: patches/pdfjs-dist@5.4.296.patch + +# next and wrangler pull older sharp majors transitively. Two libvips builds +# loading into one process collide on Objective-C class names ("Class +# GNotificationCenterDelegate is implemented in both ..."), so every consumer is +# pinned to the version this repo depends on directly. +overrides: + sharp: ^0.35.3 + redis: 4.7.0 + pdfjs-dist: 5.4.296 + '@emnapi/runtime': ^2.0.0-alpha + react: ^19.2.7 + react-dom: ^19.2.7 + +allowBuilds: + '@sentry/cli': true + '@swc/core': true + # the repo uses @napi-rs/canvas (prebuilt); plain `canvas` is only a + # transitive dep and does not need to compile + canvas: false + core-js-pure: true + esbuild: true + mongodb-memory-server: true + node-av: true + sharp: true + unrs-resolver: true + workerd: true + +updateNotifier: false +symlink: true +nodeLinker: isolated +hoistWorkspacePackages: false # the default in pnpm v9 is true, but that can break our runtime dependency checks +minimumReleaseAgeExclude: + - '@radix-ui/react-arrow@1.1.10' + - '@radix-ui/react-dismissable-layer@1.1.13' + - '@radix-ui/react-popper@1.3.1' + - '@radix-ui/react-portal@1.1.12' + - '@radix-ui/react-primitive@2.1.6' + - '@radix-ui/react-slot@1.3.0' + - '@radix-ui/react-tooltip@1.2.10' + - '@radix-ui/react-visually-hidden@1.2.6' + - '@radix-ui/react-collection@1.1.10' + - '@radix-ui/react-dropdown-menu@2.1.18' + - '@radix-ui/react-focus-scope@1.1.10' + - '@radix-ui/react-menu@2.1.18' + - '@radix-ui/react-roving-focus@1.1.13' + - '@radix-ui/react-switch@1.3.1' + - '@trieb.work/nextjs-turbo-redis-cache@1.17.0' diff --git a/postcss.config.js b/postcss.config.js index 5c80b7f7..9dd49abc 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,8 +1,14 @@ +/* global process */ + const config = { plugins: { autoprefixer: {}, - tailwindcss: {}, - ...(process.env.NODE_ENV === 'production' ? { cssnano: {} } : {}), + '@tailwindcss/postcss': {}, + ...(process.env.NODE_ENV === 'production' + ? { + cssnano: {}, + } + : {}), }, } diff --git a/proxy.ts b/proxy.ts new file mode 100644 index 00000000..0dfb2c18 --- /dev/null +++ b/proxy.ts @@ -0,0 +1,86 @@ +import { NextRequest, NextResponse } from 'next/server' + +import { fetchLatestResumeDocumentCore } from '@/lib/fetchers/fetchLatestResumeDocumentCore' +import { generateAPIPath } from '@/lib/generateAPIPath' +import { generateContentPath } from '@/lib/generateContentPath' +import { fetchRedirect } from '@/lib/redirects/redirectCache' +import { CollectionSlug } from '@/types/collections' + +/** Paths that must never be redirected, regardless of stored rows. */ +const REDIRECT_EXEMPT = [ + '/admin', + '/api', + '/_next', + '/next', +] + +/** + * Resolves a redirect for the current request. + * + * Runs in-process: `proxy.ts` is on the Node runtime, so Payload loads here + * directly. Results are memoized in the KV store and invalidated by the + * Redirects collection hooks. + * + * Failures are swallowed: a redirect lookup must never take down a page. + */ +const lookupRedirect = async (request: NextRequest) => { + const { pathname } = request.nextUrl + + if (REDIRECT_EXEMPT.some((prefix) => pathname.startsWith(prefix))) return null + + try { + return await fetchRedirect(pathname) + } catch { + return null + } +} + +export default async function proxy(request: NextRequest) { + const domainRe = /^https?:\/\/resume.heene\.(io|dev|review|nexus|local)/ + if (domainRe.test(request.nextUrl.href)) { + return NextResponse.redirect( + new URL( + `/resume/${request.nextUrl.pathname ?? 'latest'}`, + request.nextUrl.href.replace('resume', 'daniel'), + ), + 301, + ) + } + + const resumeDocumentLatestContentPath = generateContentPath( + CollectionSlug.ResumeDocuments, + 'latest', + ) + const resumeDocumentLatestAPIPath = generateAPIPath(CollectionSlug.ResumeDocuments, 'latest') + + if (request.nextUrl.pathname.startsWith(resumeDocumentLatestContentPath)) { + const latest = await fetchLatestResumeDocumentCore() + if (!latest) + return new NextResponse(null, { + status: 404, + }) + const path = generateContentPath(CollectionSlug.ResumeDocuments, latest.slug) + return NextResponse.rewrite(new URL(path, request.url)) + } + if (request.nextUrl.pathname.startsWith(resumeDocumentLatestAPIPath)) { + const latest = await fetchLatestResumeDocumentCore() + if (!latest) + return new NextResponse(null, { + status: 404, + }) + const path = generateAPIPath(CollectionSlug.ResumeDocuments, latest.id) + return NextResponse.rewrite(new URL(path, request.url)) + } + + const redirect = await lookupRedirect(request) + if (redirect) { + const destination = new URL(redirect.destination, request.url) + // preserve the incoming query string unless the target defines its own + if (!redirect.destination.includes('?')) { + destination.search = request.nextUrl.search + } + return NextResponse.redirect(destination, redirect.statusCode) + } + + return NextResponse.next() +} diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100755 index 00000000..7c88e1ed Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/bimi.svg b/public/bimi.svg new file mode 100644 index 00000000..f8fd7584 --- /dev/null +++ b/public/bimi.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny-ps"><title>Untitled Logo \ No newline at end of file diff --git a/public/favicon-192x192.png b/public/favicon-192x192.png new file mode 100755 index 00000000..9455a3ce Binary files /dev/null and b/public/favicon-192x192.png differ diff --git a/public/favicon-512x512.png b/public/favicon-512x512.png new file mode 100755 index 00000000..abf31380 Binary files /dev/null and b/public/favicon-512x512.png differ diff --git a/public/favicon-96x96.png b/public/favicon-96x96.png new file mode 100755 index 00000000..c8d70331 Binary files /dev/null and b/public/favicon-96x96.png differ diff --git a/public/favicon.ico b/public/favicon.ico old mode 100644 new mode 100755 index 6ebf6f08..9e1d4499 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/fonts/inter-variable/inter-latin-opsz-italic.woff2 b/public/fonts/inter-variable/inter-latin-opsz-italic.woff2 deleted file mode 100644 index dabb65a3..00000000 Binary files a/public/fonts/inter-variable/inter-latin-opsz-italic.woff2 and /dev/null differ diff --git a/public/fonts/inter-variable/inter-latin-opsz-normal.woff2 b/public/fonts/inter-variable/inter-latin-opsz-normal.woff2 deleted file mode 100644 index 891fc5cc..00000000 Binary files a/public/fonts/inter-variable/inter-latin-opsz-normal.woff2 and /dev/null differ diff --git a/public/fonts/inter-variable/inter-latin-standard-italic.woff2 b/public/fonts/inter-variable/inter-latin-standard-italic.woff2 deleted file mode 100644 index dabb65a3..00000000 Binary files a/public/fonts/inter-variable/inter-latin-standard-italic.woff2 and /dev/null differ diff --git a/public/fonts/inter-variable/inter-latin-standard-normal.woff2 b/public/fonts/inter-variable/inter-latin-standard-normal.woff2 deleted file mode 100644 index 891fc5cc..00000000 Binary files a/public/fonts/inter-variable/inter-latin-standard-normal.woff2 and /dev/null differ diff --git a/public/fonts/inter-variable/inter-latin-wght-italic.woff2 b/public/fonts/inter-variable/inter-latin-wght-italic.woff2 deleted file mode 100644 index 4a956792..00000000 Binary files a/public/fonts/inter-variable/inter-latin-wght-italic.woff2 and /dev/null differ diff --git a/public/fonts/inter-variable/inter-latin-wght-normal.woff2 b/public/fonts/inter-variable/inter-latin-wght-normal.woff2 deleted file mode 100644 index 798d6d9f..00000000 Binary files a/public/fonts/inter-variable/inter-latin-wght-normal.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-100-italic.woff2 b/public/fonts/inter/inter-latin-100-italic.woff2 deleted file mode 100755 index 502fe89a..00000000 Binary files a/public/fonts/inter/inter-latin-100-italic.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-100-normal.woff2 b/public/fonts/inter/inter-latin-100-normal.woff2 deleted file mode 100755 index 6aa06cb6..00000000 Binary files a/public/fonts/inter/inter-latin-100-normal.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-200-italic.woff2 b/public/fonts/inter/inter-latin-200-italic.woff2 deleted file mode 100755 index 3fb8a8e9..00000000 Binary files a/public/fonts/inter/inter-latin-200-italic.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-200-normal.woff2 b/public/fonts/inter/inter-latin-200-normal.woff2 deleted file mode 100755 index ba5753e4..00000000 Binary files a/public/fonts/inter/inter-latin-200-normal.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-300-italic.woff2 b/public/fonts/inter/inter-latin-300-italic.woff2 deleted file mode 100755 index 34af554a..00000000 Binary files a/public/fonts/inter/inter-latin-300-italic.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-300-normal.woff2 b/public/fonts/inter/inter-latin-300-normal.woff2 deleted file mode 100755 index 794bde5a..00000000 Binary files a/public/fonts/inter/inter-latin-300-normal.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-400-italic.woff2 b/public/fonts/inter/inter-latin-400-italic.woff2 deleted file mode 100755 index ec07ef7d..00000000 Binary files a/public/fonts/inter/inter-latin-400-italic.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-400-normal.woff2 b/public/fonts/inter/inter-latin-400-normal.woff2 deleted file mode 100755 index 33002f12..00000000 Binary files a/public/fonts/inter/inter-latin-400-normal.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-500-italic.woff2 b/public/fonts/inter/inter-latin-500-italic.woff2 deleted file mode 100755 index ef0937e0..00000000 Binary files a/public/fonts/inter/inter-latin-500-italic.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-500-normal.woff2 b/public/fonts/inter/inter-latin-500-normal.woff2 deleted file mode 100755 index 03aaea1c..00000000 Binary files a/public/fonts/inter/inter-latin-500-normal.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-600-italic.woff2 b/public/fonts/inter/inter-latin-600-italic.woff2 deleted file mode 100755 index feee055b..00000000 Binary files a/public/fonts/inter/inter-latin-600-italic.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-600-normal.woff2 b/public/fonts/inter/inter-latin-600-normal.woff2 deleted file mode 100755 index fb50a02b..00000000 Binary files a/public/fonts/inter/inter-latin-600-normal.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-700-italic.woff2 b/public/fonts/inter/inter-latin-700-italic.woff2 deleted file mode 100755 index 46172807..00000000 Binary files a/public/fonts/inter/inter-latin-700-italic.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-700-normal.woff2 b/public/fonts/inter/inter-latin-700-normal.woff2 deleted file mode 100755 index 12b51d77..00000000 Binary files a/public/fonts/inter/inter-latin-700-normal.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-800-italic.woff2 b/public/fonts/inter/inter-latin-800-italic.woff2 deleted file mode 100755 index f4f2106e..00000000 Binary files a/public/fonts/inter/inter-latin-800-italic.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-800-normal.woff2 b/public/fonts/inter/inter-latin-800-normal.woff2 deleted file mode 100755 index 882bd182..00000000 Binary files a/public/fonts/inter/inter-latin-800-normal.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-900-italic.woff2 b/public/fonts/inter/inter-latin-900-italic.woff2 deleted file mode 100755 index 9c2eafaa..00000000 Binary files a/public/fonts/inter/inter-latin-900-italic.woff2 and /dev/null differ diff --git a/public/fonts/inter/inter-latin-900-normal.woff2 b/public/fonts/inter/inter-latin-900-normal.woff2 deleted file mode 100755 index ecc6f69c..00000000 Binary files a/public/fonts/inter/inter-latin-900-normal.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono-variable/jetbrains-mono-latin-wght-italic.woff2 b/public/fonts/jetbrains-mono-variable/jetbrains-mono-latin-wght-italic.woff2 deleted file mode 100644 index b13c8f0b..00000000 Binary files a/public/fonts/jetbrains-mono-variable/jetbrains-mono-latin-wght-italic.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono-variable/jetbrains-mono-latin-wght-normal.woff2 b/public/fonts/jetbrains-mono-variable/jetbrains-mono-latin-wght-normal.woff2 deleted file mode 100644 index 9d416580..00000000 Binary files a/public/fonts/jetbrains-mono-variable/jetbrains-mono-latin-wght-normal.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-100-italic.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-100-italic.woff2 deleted file mode 100755 index 9bfb1c6c..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-100-italic.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-100-normal.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-100-normal.woff2 deleted file mode 100755 index cf35a5ca..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-100-normal.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-200-italic.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-200-italic.woff2 deleted file mode 100755 index 2b6e2bf2..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-200-italic.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-200-normal.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-200-normal.woff2 deleted file mode 100755 index ae9db3a8..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-200-normal.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-300-italic.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-300-italic.woff2 deleted file mode 100755 index 5f33c8c7..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-300-italic.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-300-normal.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-300-normal.woff2 deleted file mode 100755 index ba78a3d6..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-300-normal.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-400-italic.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-400-italic.woff2 deleted file mode 100755 index ddecc6ad..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-400-italic.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-400-normal.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-400-normal.woff2 deleted file mode 100755 index c3f046fc..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-400-normal.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-500-italic.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-500-italic.woff2 deleted file mode 100755 index 28fdb569..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-500-italic.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-500-normal.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-500-normal.woff2 deleted file mode 100755 index f2ca96c3..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-500-normal.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-600-italic.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-600-italic.woff2 deleted file mode 100755 index f2f3040b..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-600-italic.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-600-normal.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-600-normal.woff2 deleted file mode 100755 index 001a3d0b..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-600-normal.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-700-italic.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-700-italic.woff2 deleted file mode 100755 index edfd8cc1..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-700-italic.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-700-normal.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-700-normal.woff2 deleted file mode 100755 index 7080d064..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-700-normal.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-800-italic.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-800-italic.woff2 deleted file mode 100755 index fc62eaff..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-800-italic.woff2 and /dev/null differ diff --git a/public/fonts/jetbrains-mono/jetbrains-mono-latin-800-normal.woff2 b/public/fonts/jetbrains-mono/jetbrains-mono-latin-800-normal.woff2 deleted file mode 100755 index fa4d05a1..00000000 Binary files a/public/fonts/jetbrains-mono/jetbrains-mono-latin-800-normal.woff2 and /dev/null differ diff --git a/public/fonts/pp-supply-mono/pp-supply-mono-100.woff2 b/public/fonts/pp-supply-mono/pp-supply-mono-100.woff2 deleted file mode 100644 index e783a2b1..00000000 Binary files a/public/fonts/pp-supply-mono/pp-supply-mono-100.woff2 and /dev/null differ diff --git a/public/fonts/pp-supply-mono/pp-supply-mono-400.woff2 b/public/fonts/pp-supply-mono/pp-supply-mono-400.woff2 deleted file mode 100644 index a3341641..00000000 Binary files a/public/fonts/pp-supply-mono/pp-supply-mono-400.woff2 and /dev/null differ diff --git a/public/not-found.webp b/public/not-found.webp new file mode 100644 index 00000000..c5492402 Binary files /dev/null and b/public/not-found.webp differ diff --git a/public/payload/blocks/general-code-icon.svg b/public/payload/blocks/general-code-icon.svg new file mode 100644 index 00000000..ba2f00c5 --- /dev/null +++ b/public/payload/blocks/general-code-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/payload/blocks/general-code-thumbnail.svg b/public/payload/blocks/general-code-thumbnail.svg new file mode 100644 index 00000000..d280783b --- /dev/null +++ b/public/payload/blocks/general-code-thumbnail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/payload/blocks/general-contact-thumbnail.svg b/public/payload/blocks/general-contact-thumbnail.svg new file mode 100644 index 00000000..96877399 --- /dev/null +++ b/public/payload/blocks/general-contact-thumbnail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/payload/blocks/general-link-group-icon.svg b/public/payload/blocks/general-link-group-icon.svg new file mode 100644 index 00000000..57487a86 --- /dev/null +++ b/public/payload/blocks/general-link-group-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/payload/blocks/general-link-group-thumbnail.svg b/public/payload/blocks/general-link-group-thumbnail.svg new file mode 100644 index 00000000..cf6b7944 --- /dev/null +++ b/public/payload/blocks/general-link-group-thumbnail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/payload/blocks/general-one-column-icon.svg b/public/payload/blocks/general-one-column-icon.svg new file mode 100644 index 00000000..1fd3b733 --- /dev/null +++ b/public/payload/blocks/general-one-column-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/payload/blocks/general-one-column-thumbnail.svg b/public/payload/blocks/general-one-column-thumbnail.svg new file mode 100644 index 00000000..5889acbe --- /dev/null +++ b/public/payload/blocks/general-one-column-thumbnail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/payload/blocks/general-photo-thumbnail.svg b/public/payload/blocks/general-photo-thumbnail.svg new file mode 100644 index 00000000..275cd84c --- /dev/null +++ b/public/payload/blocks/general-photo-thumbnail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/payload/blocks/general-photo-video-thumbnail.svg b/public/payload/blocks/general-photo-video-thumbnail.svg new file mode 100644 index 00000000..8b3449fe --- /dev/null +++ b/public/payload/blocks/general-photo-video-thumbnail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/payload/blocks/general-two-column-icon.svg b/public/payload/blocks/general-two-column-icon.svg new file mode 100644 index 00000000..921454ce --- /dev/null +++ b/public/payload/blocks/general-two-column-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/payload/blocks/general-two-column-thumbnail.svg b/public/payload/blocks/general-two-column-thumbnail.svg new file mode 100644 index 00000000..889950ce --- /dev/null +++ b/public/payload/blocks/general-two-column-thumbnail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/payload/blocks/resume-about-me-thumbnail.svg b/public/payload/blocks/resume-about-me-thumbnail.svg new file mode 100644 index 00000000..8043865f --- /dev/null +++ b/public/payload/blocks/resume-about-me-thumbnail.svg @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed uttincidunt metus. Phasellus in dui sit amet diam convallis vulputate. Inligula nunc, elementum ut gravida ut, tempor sit amet augue. Namtincidunt purus sit amet turpis tempor, in lobortis est posuere. Namaliquam, arcu sed ultricies porta, velit ipsum gravida nunc, feugiatcommodo mauris risus maximus nisi. Vestibulum vestibulum ligula eununc interdum porttitor.Morbi in dolor nec lorem vestibulum gravida. Aenean turpis risus,maximus non enim in, dapibus facilisis mauris. Nam turpis tellus,interdum quis mattis dapibus, tristique at sem. Cras ac egestaspurus. Curabitur placerat id turpis a pellentesque. Etiam pharetramauris tincidunt mauris dictum accumsan. Cras ultrices metus dolor,eleifend rutrum odio congue in. Mauris bibendum cursus sodales.Orci varius natoque penatibus et magnis dis parturient montes,nascetur ridiculus mus. Donec et nibh efficitur, lacinia arcu et,convallis velit. \ No newline at end of file diff --git a/public/payload/blocks/resume-customers-thumbnail.svg b/public/payload/blocks/resume-customers-thumbnail.svg new file mode 100644 index 00000000..ee6117c0 --- /dev/null +++ b/public/payload/blocks/resume-customers-thumbnail.svg @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diamnonumy eirmod tempor invidunt ut labore et dolore magna aliquyamerat, sed diam voluptua. \ No newline at end of file diff --git a/public/payload/blocks/resume-experience-thumbnail.svg b/public/payload/blocks/resume-experience-thumbnail.svg new file mode 100644 index 00000000..4afe2ec4 --- /dev/null +++ b/public/payload/blocks/resume-experience-thumbnail.svg @@ -0,0 +1 @@ +Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sitamet.Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sitamet.Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sitamet.Lorem Ipsum SubtitleLorem Ipsum Job TitleFrom Date - To DateStet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sitamet.Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sitamet.Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sitamet.Lorem Ipsum SubtitleLorem Ipsum Job TitleFrom Date - To DateLorem ipsum dolor sit amet, consetetur sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore etdolore magna aliquyam erat, sed diam voluptua. At veroeos et accusam et justo duo dolores et ea rebum. Stetclita kasd gubergren, no sea takimata sanctus est Loremipsum dolor sit amet.Lorem ipsum dolor sit amet, consetetur sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore etdolore magna aliquyam erat, sed diam voluptua. At veroeos et accusam et justo duo dolores et ea rebum. Stetclita kasd gubergren, no sea takimata sanctus est Loremipsum dolor sit amet.Lorem ipsum dolor sit amet, consetetur sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore etdolore magna aliquyam erat, sed diam voluptua. At veroeos et accusam et justo duo dolores et ea rebum. Stetclita kasd gubergren, no sea takimata sanctus est Loremipsum dolor sit amet. \ No newline at end of file diff --git a/public/payload/blocks/resume-projects-thumbnail.svg b/public/payload/blocks/resume-projects-thumbnail.svg new file mode 100644 index 00000000..969dea86 --- /dev/null +++ b/public/payload/blocks/resume-projects-thumbnail.svg @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua.At vero eos et accusam et justo duo dolores et ea rebum. Stet clitakasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sitamet.Nam doming liber tempor cum soluta nobis eleifend option conguenihil imperdiet doming id quod invidunt ut labore et do mazim placeratfacer possim assum.Duis autem vel eum iriure dolor in hendrerit in vulputate velit essemolestie consequat, vel doming invidunt ut labore doming et do illumdolore eu feugiat nulla facilisisLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diamnonumy eirmod tempor invidunt ut labore et dolore magna aliquyamerat, sed.Key Features:Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua. \ No newline at end of file diff --git a/public/seed/resumeAboutMe-portrait.webp b/public/seed/resumeAboutMe-portrait.webp old mode 100755 new mode 100644 index 415f00ce..2ae90274 Binary files a/public/seed/resumeAboutMe-portrait.webp and b/public/seed/resumeAboutMe-portrait.webp differ diff --git a/public/seed/resumeHero-background.webp b/public/seed/resumeHero-background.webp old mode 100755 new mode 100644 index ed79dd44..5fccdb78 Binary files a/public/seed/resumeHero-background.webp and b/public/seed/resumeHero-background.webp differ diff --git a/public/seed/resumeHero-portrait.webp b/public/seed/resumeHero-portrait.webp old mode 100755 new mode 100644 index 45a40a3d..7c1bf179 Binary files a/public/seed/resumeHero-portrait.webp and b/public/seed/resumeHero-portrait.webp differ diff --git a/release.config.mjs b/release.config.mjs new file mode 100644 index 00000000..ac8d7a22 --- /dev/null +++ b/release.config.mjs @@ -0,0 +1,52 @@ +/** + * semantic-release configuration. + * + * Runs on push to `main` (.github/workflows/release.yml) and drives the + * version half of Sentry release tracking: it reads Conventional Commits + * since the last tag, bumps package.json's `version`, commits that bump back + * with a `[skip ci]` tag, and pushes a `vX.Y.Z` git tag. + * + * This package is never published to a registry — `npmPublish: false` keeps + * @semantic-release/npm to its version-bump side effect only, which is the + * one piece this repo actually needs. + * + * Dokploy then builds from the commit this workflow pushes, computes + * SENTRY_RELEASE as `website@${the bumped version}` from that same + * package.json, and next.config.ts's withSentryConfig `release.name` / + * src/lib/sentry/options.ts's `release` both read that one value — see the + * comments there for why they have to match byte-for-byte. + * + * @type {import('semantic-release').GlobalConfig} + */ +export default { + branches: [ + 'main', + ], + plugins: [ + '@semantic-release/commit-analyzer', + '@semantic-release/release-notes-generator', + [ + '@semantic-release/changelog', + { + changelogFile: 'CHANGELOG.md', + }, + ], + [ + '@semantic-release/npm', + { + npmPublish: false, + }, + ], + [ + '@semantic-release/git', + { + assets: [ + 'package.json', + 'CHANGELOG.md', + ], + message: 'chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}', + }, + ], + '@semantic-release/github', + ], +} diff --git a/scripts/backfill-references.ts b/scripts/backfill-references.ts new file mode 100644 index 00000000..3f85a261 --- /dev/null +++ b/scripts/backfill-references.ts @@ -0,0 +1,115 @@ +/** + * Rebuilds the references table from existing content. + * + * Usage: + * pnpm refs:backfill + * + * References are normally written by the `references` plugin on save, + * so this is only needed once after enabling it (or to repair the table). + * Safe to re-run: each source document's rows are replaced, not appended. + */ +import config from '@payload-config' +import { getPayload } from 'payload' + +import { syncReferences } from '@/lib/references' +import { CollectionSlug } from '@/types/collections' + +const SKIPPED_COLLECTIONS = new Set([ + CollectionSlug.DocumentReferences, + CollectionSlug.PayloadJobs, + CollectionSlug.PayloadKVS, + CollectionSlug.PayloadLockedDocuments, + CollectionSlug.PayloadMigrations, + CollectionSlug.PayloadPreferences, + CollectionSlug.PayloadQueryPresets, + CollectionSlug.PayloadExports, + CollectionSlug.PayloadImports, + CollectionSlug.PayloadFolders, +]) + +const payload = await getPayload({ + config, +}) + +{ + let totalDocuments = 0 + let totalReferences = 0 + + /** + * Clear first rather than relying on the per-source replace below: rows + * whose source no longer exists — or which predate a field rename — match + * no source being rebuilt and would otherwise survive as dead entries. + * + * The table is derived state, so dropping it is always recoverable by + * completing this run. + */ + await payload.delete({ + collection: CollectionSlug.DocumentReferences, + where: {}, + }) + + for (const collection of Object.values(payload.collections)) { + const slug = collection.config.slug + if (SKIPPED_COLLECTIONS.has(slug)) continue + + // depth 0 keeps relations as ids, which is all the extractor needs and + // avoids pulling entire referenced documents into memory + const { docs } = (await payload.find({ + collection: slug as never, + pagination: false, + limit: 0, + depth: 0, + draft: false, + })) as { + docs: { + id: string | number + }[] + } + + let collectionReferences = 0 + for (const doc of docs) { + const count = await syncReferences({ + payload, + sourceCollection: slug, + sourceId: String(doc.id), + data: doc, + // without the field config, monomorphic relations (a bare id, with no + // collection in the stored value) are indistinguishable from plain + // strings and would be dropped from the rebuilt table + fields: collection.config.fields, + blocks: payload.config.blocks, + }) + collectionReferences += count + } + + totalDocuments += docs.length + totalReferences += collectionReferences + + if (docs.length > 0) { + console.info(`${slug}: ${docs.length} documents, ${collectionReferences} references`) + } + } + + for (const global of payload.config.globals) { + const data = await payload.findGlobal({ + slug: global.slug as never, + depth: 0, + }) + + const count = await syncReferences({ + payload, + sourceCollection: global.slug, + sourceId: global.slug, + sourceType: 'global', + data, + fields: global.fields, + blocks: payload.config.blocks, + }) + + totalReferences += count + if (count > 0) console.info(`${global.slug} (global): ${count} references`) + } + + console.info(`\nBackfill complete: ${totalDocuments} documents, ${totalReferences} references.`) + process.exit(0) +} diff --git a/scripts/dev.mjs b/scripts/dev.mjs new file mode 100644 index 00000000..14d48287 --- /dev/null +++ b/scripts/dev.mjs @@ -0,0 +1,123 @@ +#!/usr/bin/env node + +/** + * `next dev` wrapper that owns the --tunnel flag. + * + * Next parses its own argv and rejects unknown options, so the flag cannot + * be read inside next.config.ts. This wrapper strips it, translates it into + * DEV_TUNNEL=1, and forwards everything else through untouched. + */ + +import { spawn } from 'node:child_process' +import { createRequire } from 'node:module' +import path from 'node:path' + +const argv = process.argv.slice(2) +const tunnel = argv.includes('--tunnel') +const forwarded = argv.filter((arg) => arg !== '--tunnel') + +/** + * Resolve Next's own CLI entry rather than relying on `next` being on PATH: + * pnpm only adds node_modules/.bin when it runs the script itself, so a bare + * `spawn('next')` breaks when this file is invoked directly. + */ +const require = createRequire(import.meta.url) +const nextCli = path.join(path.dirname(require.resolve('next/package.json')), 'dist/bin/next') + +const child = spawn(process.execPath, [nextCli, 'dev', ...forwarded], { + // Both streams are piped only when the tunnel line has to be spliced into + // the startup banner; otherwise Next writes straight through untouched. + stdio: tunnel ? ['inherit', 'pipe', 'pipe'] : 'inherit', + env: { + ...process.env, + ...(tunnel ? { DEV_TUNNEL: '1' } : {}), + }, +}) + +if (tunnel) { + const MARKER = /__DEV_TUNNEL_URL__(\S+)\n?/ + let tunnelUrl = null + let pending = null + let done = false + + /** + * Splice the tunnel host in after Next's `- Network:` line so it reads as + * part of the address block rather than trailing the "Ready" line. + */ + const splice = (text) => { + const lines = text.split('\n') + const at = lines.findIndex((line) => line.startsWith('- Network:')) + // Nothing to anchor to: pass the banner through rather than lose it. + if (at === -1) return text + + const label = '- Tunnel:' + // Match the column Next pads its own labels to. + const pad = ' '.repeat(Math.max(1, lines[at].indexOf('http') - label.length)) + lines.splice(at + 1, 0, `${label}${pad}${tunnelUrl}`) + return lines.join('\n') + } + + const flush = () => { + if (done || pending === null) return + done = true + process.stdout.write(tunnelUrl ? splice(pending) : pending) + pending = null + } + + /** + * next.config.ts reports the URL on stderr, but Next loads the config in a + * worker whose output can arrive *after* the address block — so the block + * is held back briefly rather than printed as it arrives. + */ + child.stderr.on('data', (chunk) => { + let text = chunk.toString() + const marker = text.match(MARKER) + + if (marker) { + tunnelUrl = marker[1] + text = text.replace(MARKER, '') + flush() + if (!text) return + } + + process.stderr.write(text) + }) + + child.stdout.on('data', (chunk) => { + const text = chunk.toString() + + if (!done && /^- Network:/m.test(text)) { + pending = text + if (tunnelUrl) { + flush() + return + } + // Cap the wait so a failed tunnel never swallows the banner. + setTimeout(flush, 2000).unref() + return + } + + process.stdout.write(text) + }) +} + +child.on('exit', (code, signal) => { + // Re-raise the signal so the shell sees a normal Ctrl-C rather than exit 0. + if (signal) { + process.kill(process.pid, signal) + return + } + process.exit(code ?? 0) +}) + +for (const signal of ['SIGINT', 'SIGTERM']) { + process.on(signal, () => child.kill(signal)) +} + +// Backstop for SIGKILL/uncaught exits, which skip the signal handlers above and +// would otherwise strand the dev server as an orphan holding .next/dev/lock. +process.on('exit', () => { + if (!child.killed) { + child.kill('SIGTERM') + } +}) diff --git a/scripts/e2e-docker.sh b/scripts/e2e-docker.sh new file mode 100755 index 00000000..60a93a3e --- /dev/null +++ b/scripts/e2e-docker.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Runs the Playwright E2E suite with Chromium inside the official +# Playwright Docker image, targeting the dev server on the HOST. +# +# Prerequisites: +# docker compose up -d (Mongo/Redis/S3) +# pnpm run dev:app (Next.js on the host, port 3000) +# +# The image tag MUST match the @playwright/test version in package.json — +# bump them together, otherwise browser revisions mismatch. + +IMAGE="mcr.microsoft.com/playwright:v1.62.1-noble" + +# Host networking lets the container reach the dev server as +# http://localhost:3000 — required because the Payload admin UI talks to +# the absolute SERVER_URL, which must match the browser origin. +# Requires Docker Desktop >= 4.34 on macOS/Windows (built-in on Linux). +BASE_URL="${E2E_BASE_URL:-http://localhost:3000}" + +TTY_FLAGS="" +if [ -t 0 ]; then TTY_FLAGS="-it"; fi + +# shellcheck disable=SC2086 +docker run --rm $TTY_FLAGS \ + --network host \ + --ipc=host \ + -v "$PWD:/work" -w /work \ + -e CI=1 \ + -e E2E_NO_SERVER=1 \ + -e E2E_BASE_URL="$BASE_URL" \ + "$IMAGE" \ + npx playwright test "$@" diff --git a/scripts/health-server.ts b/scripts/health-server.ts new file mode 100644 index 00000000..5a2903d2 --- /dev/null +++ b/scripts/health-server.ts @@ -0,0 +1,80 @@ +/** + * Standalone HTTP health server for the `worker` container. + * + * Usage: + * pnpm run payload run scripts/health-server.ts + * + * `payload jobs:run` (see `start:worker`) is a CLI loop with no HTTP + * listener of its own, so a container `HEALTHCHECK` has nothing to curl + * locally. This starts a tiny server alongside it, in the same container, + * reporting the same `checkJobsHealth` truth the Next.js app exposes at + * `/api/health/jobs` — reachable at `http://localhost:$JOB_RUNNER_HEALTH_PORT/health` + * without depending on the app container or any external network. + * + * Runs forever; `worker`'s CMD is expected to start this alongside + * `jobs:run` (see `scripts/start-worker.mjs`), not in place of it. + * + * `payload run . + * We replace + {schemas.map((schema, index) => ( + ') + + expect(result).not.toContain('script') + expect(result).not.toContain('alert') + expect(result).toContain(' { + const result = sanitizeSvg('') + + expect(result).not.toContain('onload') + expect(result).not.toContain('onclick') + expect(result).not.toContain('alert') + expect(result).toContain(' { + const result = sanitizeSvg('') + + expect(result).not.toContain('javascript:') + }) + + it('strips foreignObject, which can carry arbitrary HTML', () => { + const result = sanitizeSvg( + '', + ) + + expect(result).not.toContain('foreignObject') + expect(result).not.toContain('onerror') + }) + + it('strips animation elements that can set attributes at runtime', () => { + const result = sanitizeSvg( + '', + ) + + expect(result).not.toContain(' { + expect(sanitizeSvg('')).toBe('') + }) +}) diff --git a/src/lib/sanitizeSvg.ts b/src/lib/sanitizeSvg.ts new file mode 100644 index 00000000..48f66a89 --- /dev/null +++ b/src/lib/sanitizeSvg.ts @@ -0,0 +1,41 @@ +import DOMPurify from 'isomorphic-dompurify' + +/** + * Strips anything executable out of an SVG. + * + * SVG is a full XML document format, not an image blob: it can carry + * `"', + language: 'typescript', + }) + + expect(html).not.toContain('') + expect(html).toContain('<script>') + }) + + it('highlights every language the code field offers', async () => { + for (const language of SUPPORTED_LANGUAGES) { + const html = await highlightCode({ + code: 'test', + language, + }) + expect(html).toContain(' { + const html = await highlightCode({ + code: 'SELECT 1', + language: 'brainfuck', + }) + + expect(html).toContain(' { + const html = await highlightCode({ + code: 'const a = 1', + }) + + expect(html).toContain(' { + expect( + await highlightCode({ + code: '', + language: 'typescript', + }), + ).toContain(' { + const started = Date.now() + await highlightCode({ + code: 'a', + language: 'typescript', + }) + const firstDuration = Date.now() - started + + const secondStarted = Date.now() + await highlightCode({ + code: 'b', + language: 'typescript', + }) + const secondDuration = Date.now() - secondStarted + + // the second call must not pay grammar/engine load cost again + expect(secondDuration).toBeLessThanOrEqual(Math.max(firstDuration, 50)) + }) +}) diff --git a/src/lib/shiki/highlightCode.ts b/src/lib/shiki/highlightCode.ts new file mode 100644 index 00000000..7ff2ff93 --- /dev/null +++ b/src/lib/shiki/highlightCode.ts @@ -0,0 +1,106 @@ +import type { BundledLanguage, Highlighter } from 'shiki' +import { createHighlighter } from 'shiki' + +/** + * Languages offered by the Code block field, plus the fallbacks the Lexical + * code node can produce. Loading a fixed set keeps the bundle predictable — + * Shiki's full grammar collection is an order of magnitude larger. + */ +export const SUPPORTED_LANGUAGES = [ + 'bash', + 'css', + 'diff', + 'docker', + 'go', + 'graphql', + 'html', + 'http', + 'ini', + 'javascript', + 'json', + 'json5', + 'jsonl', + 'jsx', + 'markdown', + 'mdx', + 'nginx', + 'shellscript', + 'shellsession', + 'sql', + 'ssh-config', + 'systemd', + 'toml', + 'tsx', + 'typescript', + 'xml', + 'yaml', +] as const satisfies readonly BundledLanguage[] + +export type SupportedLanguage = (typeof SUPPORTED_LANGUAGES)[number] + +/** + * Both themes are loaded so a single highlight pass can emit CSS variables for + * each, letting the site's theme toggle switch instantly without re-running + * Shiki in the browser. + */ +const THEMES = { + light: 'github-light', + dark: 'github-dark', +} as const + +export const FALLBACK_LANGUAGE: SupportedLanguage = 'typescript' + +/** + * Creating a highlighter loads the regex engine and grammars, which is far too + * expensive to repeat per render. The promise is cached so concurrent callers + * share one instance. + */ +let highlighterPromise: Promise | null = null + +const getHighlighter = (): Promise => { + if (!highlighterPromise) { + highlighterPromise = createHighlighter({ + themes: Object.values(THEMES), + langs: [ + ...SUPPORTED_LANGUAGES, + ], + }) + } + return highlighterPromise +} + +const isSupported = (language: string): language is SupportedLanguage => + (SUPPORTED_LANGUAGES as readonly string[]).includes(language) + +export interface HighlightCodeOptions { + code: string + language?: string +} + +/** + * Renders code to themed HTML on the server. + * + * Unknown languages fall back rather than throwing: the field's options can + * change independently of the grammars loaded here, and a mismatch should + * degrade to plain formatting instead of breaking the page. + * + * Shiki's tokenizer reads `Date.now()` internally for its grammar timeout + * guard, which Cache Components rejects during an uncached prerender — server + * callers must go through `highlightCodeCached` rather than calling this + * directly. + */ +export const highlightCode = async ({ + code, + language = FALLBACK_LANGUAGE, +}: HighlightCodeOptions): Promise => { + const highlighter = await getHighlighter() + const resolvedLanguage = isSupported(language) ? language : FALLBACK_LANGUAGE + + return highlighter.codeToHtml(code, { + lang: resolvedLanguage, + themes: THEMES, + // emits `--shiki-light` / `--shiki-dark` custom properties per token + defaultColor: false, + colorReplacements: {}, + }) +} diff --git a/src/lib/shiki/highlightCodeCached.ts b/src/lib/shiki/highlightCodeCached.ts new file mode 100644 index 00000000..f106f6a6 --- /dev/null +++ b/src/lib/shiki/highlightCodeCached.ts @@ -0,0 +1,24 @@ +import { cacheLife } from 'next/cache' + +import { type HighlightCodeOptions, highlightCode } from '@/lib/shiki/highlightCode' + +/** + * Server-side entry point for highlighting. + * + * Wrapping the call in a cache scope is required, not just an optimisation: + * Shiki's tokenizer reads `Date.now()` for its grammar timeout guard, and + * Cache Components rejects reading the current time during an uncached + * prerender. Highlighting is a pure function of `code` and `language`, so the + * result can never go stale — hence `cacheLife('max')` and no cache tag. The + * cache also skips re-tokenizing blocks that repeat across pages. + * + * Kept in its own module so the `next/cache` import never enters a client + * component's module graph — `next/cache` is unimportable from the client, and + * `RichText` renders code blocks from a client component. + */ +export const highlightCodeCached = async (options: HighlightCodeOptions): Promise => { + 'use cache' + cacheLife('max') + + return highlightCode(options) +} diff --git a/src/lib/shiki/highlightRichText.test.ts b/src/lib/shiki/highlightRichText.test.ts new file mode 100644 index 00000000..b796621b --- /dev/null +++ b/src/lib/shiki/highlightRichText.test.ts @@ -0,0 +1,126 @@ +import { describe, expect, it } from 'vitest' + +import { codeBlockKey } from '@/lib/shiki/codeBlockKey' + +import { highlightRichText } from './highlightRichText' + +const codeNode = (code: string, language?: string) => ({ + type: 'block', + fields: { + blockType: 'CodeBlock', + code, + language, + }, +}) + +const doc = (children: unknown[]) => ({ + root: { + children, + }, +}) + +describe('highlightRichText', () => { + it('highlights a top-level code block', async () => { + const map = await highlightRichText( + doc([ + codeNode('const a = 1', 'typescript'), + ]), + ) + + expect(Object.keys(map)).toHaveLength(1) + expect(map[codeBlockKey('const a = 1', 'typescript')]).toContain('--shiki-light') + }) + + it('finds code blocks nested below the root', async () => { + const map = await highlightRichText( + doc([ + { + type: 'paragraph', + children: [ + { + type: 'quote', + children: [ + codeNode('const nested = 1', 'typescript'), + ], + }, + ], + }, + ]), + ) + + expect(map[codeBlockKey('const nested = 1', 'typescript')]).toContain(' { + const map = await highlightRichText( + doc([ + codeNode('const a = 1', 'typescript'), + codeNode('const a = 1', 'typescript'), + ]), + ) + + expect(Object.keys(map)).toHaveLength(1) + }) + + it('keys the same code separately per language', async () => { + const map = await highlightRichText( + doc([ + codeNode('a', 'typescript'), + codeNode('a', 'css'), + ]), + ) + + expect(Object.keys(map)).toHaveLength(2) + }) + + it('produces keys the renderer can look up when language is omitted', async () => { + const map = await highlightRichText( + doc([ + codeNode('const a = 1'), + ]), + ) + + // the converter passes `node.fields.language`, which is undefined here — + // both sides must resolve to the same fallback key + expect(map[codeBlockKey('const a = 1', undefined)]).toContain(' { + const map = await highlightRichText( + doc([ + { + type: 'block', + fields: { + blockType: 'LinkGroupBlock', + }, + }, + codeNode(''), + ]), + ) + + expect(map).toEqual({}) + }) + + it('returns an empty map for documents without code', async () => { + expect( + await highlightRichText( + doc([ + { + type: 'paragraph', + children: [], + }, + ]), + ), + ).toEqual({}) + }) + + it('tolerates missing or malformed input', async () => { + expect(await highlightRichText(undefined)).toEqual({}) + expect(await highlightRichText({})).toEqual({}) + expect( + await highlightRichText({ + root: null, + }), + ).toEqual({}) + }) +}) diff --git a/src/lib/shiki/highlightRichText.ts b/src/lib/shiki/highlightRichText.ts new file mode 100644 index 00000000..73331796 --- /dev/null +++ b/src/lib/shiki/highlightRichText.ts @@ -0,0 +1,91 @@ +import { codeBlockKey, type HighlightedCodeMap } from '@/lib/shiki/codeBlockKey' +import { BlockSlug } from '@/types/blocks' + +import { highlightCodeCached } from './highlightCodeCached' + +type LexicalNode = { + type?: string + fields?: { + blockType?: string + code?: string | null + language?: string | null + } + children?: unknown[] +} + +/** Depth-first walk collecting every code block's `(code, language)` pair. */ +const collectCodeNodes = ( + node: unknown, + found: Map< + string, + { + code: string + language?: string | null + } + >, +): void => { + if (!node || typeof node !== 'object') return + + const { type, fields, children } = node as LexicalNode + + if (type === 'block' && fields?.blockType === BlockSlug.Code && fields.code) { + found.set(codeBlockKey(fields.code, fields.language), { + code: fields.code, + language: fields.language, + }) + } + + if (Array.isArray(children)) { + for (const child of children) collectCodeNodes(child, found) + } +} + +/** + * Highlights every code block in a Lexical document up front, on the server. + * + * `RichText` is a Client Component, so it cannot run Shiki itself — and Shiki + * cannot run in the browser here anyway (it is server-only, and reads the + * current time, which Cache Components only permits inside a cache scope). + * Resolving the markup ahead of render lets client-rendered documents show + * fully highlighted code. + * + * Blocks are highlighted concurrently; each call is individually cached, so + * repeated snippets cost nothing after the first build. + */ +export const highlightRichText = async (data: unknown): Promise => { + const found = new Map< + string, + { + code: string + language?: string | null + } + >() + + collectCodeNodes( + ( + data as { + root?: unknown + } + )?.root, + found, + ) + + if (found.size === 0) return {} + + const entries = await Promise.all( + [ + ...found, + ].map(async ([key, { code, language }]) => { + const html = await highlightCodeCached({ + code, + language: language ?? undefined, + }) + return [ + key, + html, + ] as const + }), + ) + + return Object.fromEntries(entries) +} diff --git a/src/lib/shiki/index.ts b/src/lib/shiki/index.ts new file mode 100644 index 00000000..d73df870 --- /dev/null +++ b/src/lib/shiki/index.ts @@ -0,0 +1,12 @@ +export { + type HighlightCodeOptions, + highlightCode, + SUPPORTED_LANGUAGES, + type SupportedLanguage, +} from './highlightCode' + +// `highlightCodeCached` is deliberately not part of this package: it imports +// `next/cache`, which would drag a Next.js dependency into a framework-free +// utils package (and cannot be resolved from a client component anyway). It +// stays in the app — import '@/lib/shiki/highlightCodeCached' directly in +// Server Components. diff --git a/src/lib/sse/channels.test.ts b/src/lib/sse/channels.test.ts new file mode 100644 index 00000000..a5d91f79 --- /dev/null +++ b/src/lib/sse/channels.test.ts @@ -0,0 +1,176 @@ +import { describe, expect, it } from 'vitest' + +import { + bilingualTranslateChannel, + isBilingualTranslateChannel, + isResumeGenerateChannel, + isScheduledJobChannel, + isSeedTaskChannel, + isSseChannel, + resumeGenerateChannel, + SSE_CHANNELS, + scheduledJobChannel, + seedTaskChannel, +} from './channels' + +describe('isSseChannel', () => { + it('accepts every allowlisted channel', () => { + for (const channel of SSE_CHANNELS) { + expect(isSseChannel(channel)).toBe(true) + } + }) + + it('rejects a missing channel', () => { + expect(isSseChannel(null)).toBe(false) + expect(isSseChannel('')).toBe(false) + }) + + it('rejects channels that are not allowlisted', () => { + expect(isSseChannel('arbitrary-channel')).toBe(false) + expect(isSseChannel('__keyspace@0__:*')).toBe(false) + }) + + it('does not treat the allowlist as a prefix or pattern match', () => { + expect(isSseChannel('service-status-other')).toBe(false) + expect(isSseChannel('service-*')).toBe(false) + expect(isSseChannel('*')).toBe(false) + }) + + it('is case-sensitive', () => { + expect(isSseChannel('SERVICE-STATUS')).toBe(false) + }) + + it('does not inherit Object.prototype members', () => { + expect(isSseChannel('toString')).toBe(false) + expect(isSseChannel('constructor')).toBe(false) + expect(isSseChannel('__proto__')).toBe(false) + }) + + it('rejects a bilingual-translate channel (that pattern is checked separately)', () => { + expect(isSseChannel(bilingualTranslateChannel('job-1'))).toBe(false) + }) +}) + +describe('bilingualTranslateChannel', () => { + it('prefixes the job id', () => { + expect(bilingualTranslateChannel('68abc123')).toBe('bilingual-translate:68abc123') + }) +}) + +describe('isBilingualTranslateChannel', () => { + it('accepts a channel built by bilingualTranslateChannel', () => { + expect(isBilingualTranslateChannel(bilingualTranslateChannel('68abc123'))).toBe(true) + }) + + it('rejects a missing channel', () => { + expect(isBilingualTranslateChannel(null)).toBe(false) + expect(isBilingualTranslateChannel('')).toBe(false) + }) + + it('rejects a channel with no job id', () => { + expect(isBilingualTranslateChannel('bilingual-translate:')).toBe(false) + }) + + it('rejects a job id containing characters outside the allowed set', () => { + expect(isBilingualTranslateChannel('bilingual-translate:../etc/passwd')).toBe(false) + expect(isBilingualTranslateChannel('bilingual-translate:job 1')).toBe(false) + }) + + it('rejects channels outside the bilingual-translate prefix', () => { + expect(isBilingualTranslateChannel('service-status')).toBe(false) + expect(isBilingualTranslateChannel('other-prefix:job-1')).toBe(false) + }) +}) + +describe('seedTaskChannel', () => { + it('prefixes the job id', () => { + expect(seedTaskChannel('68abc123')).toBe('seed-task:68abc123') + }) +}) + +describe('isSeedTaskChannel', () => { + it('accepts a channel built by seedTaskChannel', () => { + expect(isSeedTaskChannel(seedTaskChannel('68abc123'))).toBe(true) + }) + + it('rejects a missing channel', () => { + expect(isSeedTaskChannel(null)).toBe(false) + expect(isSeedTaskChannel('')).toBe(false) + }) + + it('rejects a channel with no job id', () => { + expect(isSeedTaskChannel('seed-task:')).toBe(false) + }) + + it('rejects a job id containing characters outside the allowed set', () => { + expect(isSeedTaskChannel('seed-task:../etc/passwd')).toBe(false) + expect(isSeedTaskChannel('seed-task:job 1')).toBe(false) + }) + + it('rejects channels outside the seed-task prefix', () => { + expect(isSeedTaskChannel('service-status')).toBe(false) + expect(isSeedTaskChannel('other-prefix:job-1')).toBe(false) + }) +}) + +describe('scheduledJobChannel', () => { + it('prefixes the job id', () => { + expect(scheduledJobChannel('68abc123')).toBe('scheduled-job:68abc123') + }) +}) + +describe('isScheduledJobChannel', () => { + it('accepts a channel built by scheduledJobChannel', () => { + expect(isScheduledJobChannel(scheduledJobChannel('68abc123'))).toBe(true) + }) + + it('rejects a missing channel', () => { + expect(isScheduledJobChannel(null)).toBe(false) + expect(isScheduledJobChannel('')).toBe(false) + }) + + it('rejects a channel with no job id', () => { + expect(isScheduledJobChannel('scheduled-job:')).toBe(false) + }) + + it('rejects a job id containing characters outside the allowed set', () => { + expect(isScheduledJobChannel('scheduled-job:../etc/passwd')).toBe(false) + expect(isScheduledJobChannel('scheduled-job:job 1')).toBe(false) + }) + + it('rejects channels outside the scheduled-job prefix', () => { + expect(isScheduledJobChannel('service-status')).toBe(false) + expect(isScheduledJobChannel('other-prefix:job-1')).toBe(false) + }) +}) + +describe('resumeGenerateChannel', () => { + it('prefixes the job id', () => { + expect(resumeGenerateChannel('68abc123')).toBe('resume-generate:68abc123') + }) +}) + +describe('isResumeGenerateChannel', () => { + it('accepts a channel built by resumeGenerateChannel', () => { + expect(isResumeGenerateChannel(resumeGenerateChannel('68abc123'))).toBe(true) + }) + + it('rejects a missing channel', () => { + expect(isResumeGenerateChannel(null)).toBe(false) + expect(isResumeGenerateChannel('')).toBe(false) + }) + + it('rejects a channel with no job id', () => { + expect(isResumeGenerateChannel('resume-generate:')).toBe(false) + }) + + it('rejects a job id containing characters outside the allowed set', () => { + expect(isResumeGenerateChannel('resume-generate:../etc/passwd')).toBe(false) + expect(isResumeGenerateChannel('resume-generate:job 1')).toBe(false) + }) + + it('rejects channels outside the resume-generate prefix', () => { + expect(isResumeGenerateChannel('service-status')).toBe(false) + expect(isResumeGenerateChannel('other-prefix:job-1')).toBe(false) + }) +}) diff --git a/src/lib/sse/channels.ts b/src/lib/sse/channels.ts new file mode 100644 index 00000000..3768e803 --- /dev/null +++ b/src/lib/sse/channels.ts @@ -0,0 +1,180 @@ +import type { SerializedEditorState } from '@payloadcms/richtext-lexical/lexical' + +/** + * Channels the SSE endpoint is allowed to subscribe to. + * + * `/api/sse` is unauthenticated, so the `channel` query parameter must never + * reach `redis.subscribe()` unchecked — otherwise any visitor can attach to + * an arbitrary Pub/Sub channel and read whatever is published there. + * + * Add a channel here before streaming it to the browser. + */ +export const SSE_CHANNELS = [ + 'service-status', +] as const + +export type SseChannel = (typeof SSE_CHANNELS)[number] + +/** + * Narrows an untrusted query-string value to a known public channel. + */ +export const isSseChannel = (value: string | null): value is SseChannel => + value !== null && (SSE_CHANNELS as readonly string[]).includes(value) + +/** + * Per-job progress channels for `AutoTranslateBilingualField` (see + * `src/jobs-queue/tasks/autoTranslateBilingualField.ts`), one per queued + * job rather than a fixed slug from `SSE_CHANNELS` above. + * + * Translated CV content isn't public, so unlike the channels above, the + * route additionally requires an authenticated session before subscribing + * to one of these — see `app/(frontend)/api/sse/route.ts`. The prefix + * match here only narrows the shape of the value; it is not itself an + * access check. + */ +const BILINGUAL_TRANSLATE_CHANNEL_PREFIX = 'bilingual-translate:' + +/** Payload job IDs are Mongo ObjectIds or short numeric/UUID strings. */ +const JOB_ID_PATTERN = /^[a-zA-Z0-9-]{1,64}$/ + +export const bilingualTranslateChannel = (jobId: string): string => + `${BILINGUAL_TRANSLATE_CHANNEL_PREFIX}${jobId}` + +/** + * Narrows an untrusted query-string value to a well-formed (not yet + * authorized) bilingual-translate job channel. + */ +export const isBilingualTranslateChannel = (value: string | null): value is string => + Boolean(value?.startsWith(BILINGUAL_TRANSLATE_CHANNEL_PREFIX)) && + JOB_ID_PATTERN.test((value as string).slice(BILINGUAL_TRANSLATE_CHANNEL_PREFIX.length)) + +/** + * Shape of the messages published on a `bilingualTranslateChannel`, as the + * `AutoTranslateBilingualField` task runs. Lives here (rather than next to + * the task) so the client-side `TranslateControls` component can import + * just the type without pulling in the task module's server-only + * dependencies (Redis, Payload's local API, etc.). + */ +export type AutoTranslateBilingualFieldProgress = + | { + status: 'progress' + message: string + } + | { + status: 'success' + translated: SerializedEditorState + } + | { + status: 'skipped' + reason: 'no-doc-id' | 'target-already-populated' | 'empty-translation' + } + | { + status: 'error' + message: string + } + +/** + * Per-job progress channel for the seed/clean admin-panel action (see + * `src/jobs-queue/tasks/seedCollection.ts`), one per queued job. + * + * Requires an authenticated session, same as `bilingual-translate:` — + * seed/clean is an admin-only write operation, not something an + * anonymous caller has any reason to watch. + */ +const SEED_TASK_CHANNEL_PREFIX = 'seed-task:' + +export const seedTaskChannel = (jobId: string): string => `${SEED_TASK_CHANNEL_PREFIX}${jobId}` + +export const isSeedTaskChannel = (value: string | null): value is string => + Boolean(value?.startsWith(SEED_TASK_CHANNEL_PREFIX)) && + JOB_ID_PATTERN.test((value as string).slice(SEED_TASK_CHANNEL_PREFIX.length)) + +export type SeedTaskProgress = + | { + status: 'queued' + } + | { + status: 'progress' + step: string + current: number + total: number + } + | { + status: 'success' + /** + * Human-readable label → count, e.g. `{ 'posts created': 5 }` or + * `{ 'pages deleted': 3, 'images deleted': 2, 'topics skipped': 1 }`. + * A bag rather than fixed fields (`created`/`deleted`/`skipped`/…) so + * each seedable collection's result shape — which varies (Pages + * seeds/deletes one document type plus media, Blog seeds/deletes two + * and can skip a topic still referenced elsewhere) — renders without + * `SeedActions` needing to special-case every collection. + */ + counts: Record + } + | { + status: 'error' + message: string + } + +/** + * Per-job channel for manually-triggered scheduled-job actions — running a + * job now (`runScheduledJobNow`) or cancelling it (`cancelScheduledJob`) — + * one per job ID. + * + * Requires an authenticated session, same as `bilingual-translate:` and + * `seed-task:` — triggering a job on demand is an admin-only action from + * the admin panel's scheduled-jobs widget, not something an anonymous + * caller has any reason to watch. + */ +const SCHEDULED_JOB_CHANNEL_PREFIX = 'scheduled-job:' + +export const scheduledJobChannel = (jobId: string): string => + `${SCHEDULED_JOB_CHANNEL_PREFIX}${jobId}` + +export const isScheduledJobChannel = (value: string | null): value is string => + Boolean(value?.startsWith(SCHEDULED_JOB_CHANNEL_PREFIX)) && + JOB_ID_PATTERN.test((value as string).slice(SCHEDULED_JOB_CHANNEL_PREFIX.length)) + +export type ScheduledJobActionProgress = + | { + status: 'success' + } + | { + status: 'cancelled' + } + | { + status: 'error' + message: string + } + +/** + * Per-job progress channel for the `GenerateResumeDocument` workflow (see + * `src/jobs-queue/workflows/generateResumeDocument.tsx`), one per job ID. + * + * Requires an authenticated session, same as the other per-job channels + * above — resume generation is an admin-only action triggered from + * `PDFGeneratorSettings`' Generate button, not something an anonymous + * caller has any reason to watch. + */ +const RESUME_GENERATE_CHANNEL_PREFIX = 'resume-generate:' + +export const resumeGenerateChannel = (jobId: string): string => + `${RESUME_GENERATE_CHANNEL_PREFIX}${jobId}` + +export const isResumeGenerateChannel = (value: string | null): value is string => + Boolean(value?.startsWith(RESUME_GENERATE_CHANNEL_PREFIX)) && + JOB_ID_PATTERN.test((value as string).slice(RESUME_GENERATE_CHANNEL_PREFIX.length)) + +export type ResumeGenerateProgress = + | { + status: 'progress' + step: string + } + | { + status: 'success' + } + | { + status: 'error' + message: string + } diff --git a/src/lib/typeGuards.test.ts b/src/lib/typeGuards.test.ts new file mode 100644 index 00000000..8c4c7983 --- /dev/null +++ b/src/lib/typeGuards.test.ts @@ -0,0 +1,212 @@ +import { describe, expect, it } from 'vitest' + +import { + isHeroMedia, + isHeroMediaArray, + isMediaAudio, + isMediaDocument, + isMediaImage, + isMediaImageReference, + isMediaObject, + isMediaVideo, + isMediaVideoReference, + isRenderableImage, + isRenderableImageRelation, +} from './typeGuards' + +const image = { + mimeType: 'image/png', + url: '/img.png', +} +const video = { + mimeType: 'video/mp4', +} +const doc = { + mimeType: 'application/pdf', +} +const audio = { + mimeType: 'audio/mpeg', +} + +describe('isMediaObject', () => { + it('accepts objects with a string mimeType', () => { + expect(isMediaObject(image)).toBe(true) + }) + + it('rejects non-objects and missing/invalid mimeType', () => { + expect(isMediaObject(null)).toBeFalsy() + expect(isMediaObject('image/png')).toBeFalsy() + expect(isMediaObject({})).toBeFalsy() + expect( + isMediaObject({ + mimeType: 5, + }), + ).toBeFalsy() + }) +}) + +describe('mime type guards', () => { + it('discriminates by mime type prefix', () => { + expect(isMediaImage(image)).toBe(true) + expect(isMediaImage(video)).toBe(false) + expect(isMediaVideo(video)).toBe(true) + expect(isMediaVideo(doc)).toBe(false) + expect(isMediaDocument(doc)).toBe(true) + expect(isMediaDocument(audio)).toBe(false) + expect(isMediaAudio(audio)).toBe(true) + expect(isMediaAudio(image)).toBe(false) + }) +}) + +describe('isHeroMedia', () => { + it('accepts images and videos only', () => { + expect(isHeroMedia(image)).toBe(true) + expect(isHeroMedia(video)).toBe(true) + expect(isHeroMedia(doc)).toBe(false) + expect(isHeroMedia(audio)).toBe(false) + }) +}) + +describe('isHeroMediaArray', () => { + it('accepts non-empty arrays of hero media', () => { + expect( + isHeroMediaArray([ + image, + video, + ]), + ).toBe(true) + }) + + it('rejects empty arrays', () => { + expect(isHeroMediaArray([])).toBe(false) + }) + + it('rejects arrays containing non-hero media', () => { + expect( + isHeroMediaArray([ + image, + doc, + ]), + ).toBe(false) + }) +}) + +describe('reference guards', () => { + it('accepts matching referenceTo and value', () => { + expect( + isMediaImageReference({ + referenceTo: 'images', + value: image, + }), + ).toBe(true) + expect( + isMediaVideoReference({ + referenceTo: 'videos', + value: video, + }), + ).toBe(true) + }) + + it('rejects a wrong referenceTo', () => { + expect( + isMediaImageReference({ + referenceTo: 'videos', + value: image, + }), + ).toBe(false) + expect( + isMediaVideoReference({ + referenceTo: 'images', + value: video, + }), + ).toBe(false) + }) + + it('rejects a mismatched value', () => { + expect( + isMediaImageReference({ + referenceTo: 'images', + value: video, + }), + ).toBe(false) + expect(isMediaImageReference(null)).toBeFalsy() + }) +}) + +describe('isRenderableImage', () => { + it('accepts an image with a non-empty url', () => { + expect(isRenderableImage(image)).toBe(true) + }) + + it('rejects an image with a missing, null, or empty url', () => { + expect( + isRenderableImage({ + mimeType: 'image/png', + }), + ).toBe(false) + expect( + isRenderableImage({ + mimeType: 'image/png', + url: null, + }), + ).toBe(false) + expect( + isRenderableImage({ + mimeType: 'image/png', + url: '', + }), + ).toBe(false) + }) + + it('rejects non-image media even when a url is present', () => { + expect( + isRenderableImage({ + mimeType: 'video/mp4', + url: '/clip.mp4', + }), + ).toBe(false) + }) + + it('rejects unpopulated relation ids and nullish values', () => { + expect(isRenderableImage('some-doc-id')).toBeFalsy() + expect(isRenderableImage(null)).toBeFalsy() + expect(isRenderableImage(undefined)).toBeFalsy() + }) +}) + +describe('isRenderableImageRelation', () => { + it('accepts a relation whose value is a populated, renderable image', () => { + expect( + isRenderableImageRelation({ + relationTo: 'images', + value: image, + }), + ).toBe(true) + }) + + it('rejects a relation whose value is still an unpopulated id string', () => { + expect( + isRenderableImageRelation({ + relationTo: 'images', + value: 'some-doc-id', + }), + ).toBe(false) + }) + + it('rejects a relation whose populated image has no url', () => { + expect( + isRenderableImageRelation({ + relationTo: 'images', + value: { + mimeType: 'image/png', + }, + }), + ).toBe(false) + }) + + it('rejects nullish and value-less objects', () => { + expect(isRenderableImageRelation(null)).toBe(false) + expect(isRenderableImageRelation(undefined)).toBe(false) + expect(isRenderableImageRelation({})).toBe(false) + }) +}) diff --git a/src/lib/typeGuards.ts b/src/lib/typeGuards.ts new file mode 100644 index 00000000..23bbe67b --- /dev/null +++ b/src/lib/typeGuards.ts @@ -0,0 +1,93 @@ +import { CollectionSlug } from '@/types/collections' +import type { MediaAudio, MediaDocument, MediaImage, MediaVideo } from '@/types/payload' + +export const isMediaObject = ( + media: unknown, +): media is MediaImage | MediaVideo | MediaDocument | MediaAudio => + media && typeof media === 'object' && 'mimeType' in media && typeof media.mimeType === 'string' + +export const isMediaImage = (media: unknown): media is MediaImage => + isMediaObject(media) && media.mimeType.startsWith('image/') + +export const isMediaVideo = (media: unknown): media is MediaVideo => + isMediaObject(media) && media.mimeType.startsWith('video/') + +export const isMediaDocument = (media: unknown): media is MediaDocument => + isMediaObject(media) && media.mimeType.startsWith('application/') + +export const isMediaAudio = (media: unknown): media is MediaAudio => + isMediaObject(media) && media.mimeType.startsWith('audio/') + +export const isHeroMedia = (media: unknown): media is MediaImage | MediaVideo => + isMediaImage(media) || isMediaVideo(media) + +export const isHeroMediaArray = (media: unknown): media is (MediaImage | MediaVideo)[] => + Array.isArray(media) && media.length > 0 && media.every(isHeroMedia) + +/** + * Narrows a `MediaImage` to one that is actually renderable by `ImageMedia`. + * + * `MediaImage.url` is optional/nullable in the generated Payload types, but + * `ImageMedia` does `new URL(src)` on it — which throws on a relative or + * missing value. Guarding with this before rendering keeps a half-populated + * upload from taking down the whole page, and narrows `url` to `string` so + * callers don't need a non-null assertion. + */ +export const isRenderableImage = ( + media: unknown, +): media is MediaImage & { + url: string +} => isMediaImage(media) && typeof media.url === 'string' && media.url.length > 0 + +/** + * Narrows a Payload upload/relationship field (`{ relationTo, value }`) to one + * whose `value` has been populated into a renderable `MediaImage` rather than + * left as an unpopulated ID string. + */ +export const isRenderableImageRelation = ( + object: unknown, +): object is { + relationTo: CollectionSlug['MediaImages'] + value: MediaImage & { + url: string + } +} => + !!object && + typeof object === 'object' && + 'value' in object && + isRenderableImage( + ( + object as { + value: unknown + } + ).value, + ) + +export const isMediaImageReference = ( + object: unknown, +): object is { + referenceTo: CollectionSlug['MediaImages'] + value: MediaImage +} => + object && + typeof object === 'object' && + 'referenceTo' in object && + object.referenceTo === CollectionSlug.MediaImages && + 'value' in object && + isMediaImage(object.value) + +export const isMediaVideoReference = ( + object: unknown, +): object is { + referenceTo: CollectionSlug['MediaVideos'] + value: MediaVideo +} => + object && + typeof object === 'object' && + 'referenceTo' in object && + object.referenceTo === CollectionSlug.MediaVideos && + 'value' in object && + isMediaVideo(object.value) + +export const isArrayBuffer = (data: unknown): data is ArrayBuffer => + typeof data === 'object' && data !== null && data.toString() === '[object ArrayBuffer]' diff --git a/src/lib/umami/Umami.types.ts b/src/lib/umami/Umami.types.ts new file mode 100644 index 00000000..d08daf62 --- /dev/null +++ b/src/lib/umami/Umami.types.ts @@ -0,0 +1,24 @@ +export interface UmamiSendPayloadPayload { + website: string + url?: string + referrer?: string + hostname?: string + language?: string + screen?: string + title?: string + name?: string + data?: Record +} + +export interface UmamiSendPayload { + payload: UmamiSendPayloadPayload + type: 'event' +} + +export interface TrackFunction { + (): void + (eventName: string): void + (data: Record): void + (eventName: string, data: Record): void + (fn: (data: Record) => Record): void +} diff --git a/src/lib/umami/isTrackingSuppressed.server.ts b/src/lib/umami/isTrackingSuppressed.server.ts new file mode 100644 index 00000000..a77ad3d6 --- /dev/null +++ b/src/lib/umami/isTrackingSuppressed.server.ts @@ -0,0 +1,53 @@ +'use server' + +import { cookies } from 'next/headers' + +import { jwtVerify } from 'jose' + +const PAYLOAD_TOKEN_COOKIE = 'payload-token' + +const getSecretKey = () => new TextEncoder().encode(process.env.PAYLOAD_SECRET) + +/** + * Determines whether server-side Umami tracking should be suppressed for + * the current request, based on the site owner's Payload session. + * + * Suppresses (returns `true`) whenever a valid `payload-token` JWT is + * present and its `enableOwnTracking` claim is not explicitly `true` — this + * keeps the site owner's own authenticated browsing out of analytics by + * default. Anonymous visitors (no cookie) and sessions with an invalid or + * expired token are never suppressed, since they're indistinguishable from + * a genuine visitor. Verifies the JWT signature directly via `jose` rather + * than calling `payload.auth()`, avoiding a database roundtrip on every + * tracking call. + * + * Never throws — any failure (missing cookie, bad signature, expired + * token, malformed value, missing env var) resolves to `false` so tracking + * fails open rather than breaking the calling Server Component/Action. + */ +export async function isTrackingSuppressed(): Promise { + try { + const cookieStore = await cookies() + const token = cookieStore.get(PAYLOAD_TOKEN_COOKIE)?.value + + if (!token) { + return false + } + + const { payload } = await jwtVerify(token, getSecretKey(), { + algorithms: [ + 'HS256', + ], + }) + + const enableOwnTracking = payload.enableOwnTracking + + if (typeof enableOwnTracking === 'boolean' && enableOwnTracking === true) { + return false + } + + return true + } catch { + return false + } +} diff --git a/src/lib/umami/isTrackingSuppressed.test.ts b/src/lib/umami/isTrackingSuppressed.test.ts new file mode 100644 index 00000000..e081bc22 --- /dev/null +++ b/src/lib/umami/isTrackingSuppressed.test.ts @@ -0,0 +1,127 @@ +import { SignJWT } from 'jose' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' + +const TEST_SECRET = 'test-payload-secret-1234567890' +const WRONG_SECRET = 'wrong-payload-secret-0987654321' + +const mockGet = vi.fn() + +vi.mock('next/headers', () => ({ + cookies: vi.fn(async () => ({ + get: mockGet, + })), +})) + +const { isTrackingSuppressed } = await import('./isTrackingSuppressed.server') + +const signToken = async ( + claims: Record, + secret: string, + expiresInSeconds = 60 * 60, +) => + new SignJWT(claims) + .setProtectedHeader({ + alg: 'HS256', + typ: 'JWT', + }) + .setIssuedAt() + .setExpirationTime(Math.floor(Date.now() / 1000) + expiresInSeconds) + .sign(new TextEncoder().encode(secret)) + +describe('isTrackingSuppressed', () => { + beforeEach(() => { + vi.stubEnv('PAYLOAD_SECRET', TEST_SECRET) + }) + + afterEach(() => { + vi.unstubAllEnvs() + mockGet.mockReset() + }) + + it('returns false when no payload-token cookie is present', async () => { + mockGet.mockReturnValue(undefined) + + await expect(isTrackingSuppressed()).resolves.toBe(false) + }) + + it('returns true for a valid token with no enableOwnTracking claim at all', async () => { + const token = await signToken( + { + id: 'user-1', + }, + TEST_SECRET, + ) + mockGet.mockReturnValue({ + value: token, + }) + + await expect(isTrackingSuppressed()).resolves.toBe(true) + }) + + it('returns true for a valid token with enableOwnTracking: false', async () => { + const token = await signToken( + { + id: 'user-1', + enableOwnTracking: false, + }, + TEST_SECRET, + ) + mockGet.mockReturnValue({ + value: token, + }) + + await expect(isTrackingSuppressed()).resolves.toBe(true) + }) + + it('returns false for a valid token with enableOwnTracking: true', async () => { + const token = await signToken( + { + id: 'user-1', + enableOwnTracking: true, + }, + TEST_SECRET, + ) + mockGet.mockReturnValue({ + value: token, + }) + + await expect(isTrackingSuppressed()).resolves.toBe(false) + }) + + it('returns false for a token signed with the wrong secret', async () => { + const token = await signToken( + { + id: 'user-1', + }, + WRONG_SECRET, + ) + mockGet.mockReturnValue({ + value: token, + }) + + await expect(isTrackingSuppressed()).resolves.toBe(false) + }) + + it('returns false for an expired token', async () => { + const token = await signToken( + { + id: 'user-1', + }, + TEST_SECRET, + -60, + ) + mockGet.mockReturnValue({ + value: token, + }) + + await expect(isTrackingSuppressed()).resolves.toBe(false) + }) + + it('returns false for a malformed/garbage cookie value without throwing', async () => { + mockGet.mockReturnValue({ + value: 'not-a-jwt-at-all', + }) + + await expect(isTrackingSuppressed()).resolves.toBe(false) + }) +}) diff --git a/src/lib/umami/sendUmamiPayload.test.ts b/src/lib/umami/sendUmamiPayload.test.ts new file mode 100644 index 00000000..4ca58727 --- /dev/null +++ b/src/lib/umami/sendUmamiPayload.test.ts @@ -0,0 +1,189 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' + +import { sendUmamiPayload } from './sendUmamiPayload' + +const UMAMI_URL = 'https://umami.example.com' + +describe('sendUmamiPayload', () => { + beforeEach(() => { + vi.stubEnv('NEXT_PUBLIC_UMAMI_URL', UMAMI_URL) + }) + + afterEach(() => { + vi.unstubAllGlobals() + }) + + describe('in a browser context', () => { + beforeEach(() => { + vi.stubGlobal('window', {}) + }) + + it('sends via navigator.sendBeacon when available', async () => { + const sendBeacon = vi.fn().mockReturnValue(true) + vi.stubGlobal('navigator', { + sendBeacon, + }) + const fetchMock = vi.fn() + vi.stubGlobal('fetch', fetchMock) + + await sendUmamiPayload({ + payload: { + website: 'abc', + }, + type: 'event', + }) + + expect(sendBeacon).toHaveBeenCalledTimes(1) + expect(sendBeacon).toHaveBeenCalledWith('/stats/api/send', expect.any(Blob)) + expect(fetchMock).not.toHaveBeenCalled() + }) + + it('falls back to fetch with keepalive when sendBeacon is unavailable', async () => { + vi.stubGlobal('navigator', {}) + const fetchMock = vi.fn().mockResolvedValue({ + ok: true, + status: 200, + }) + vi.stubGlobal('fetch', fetchMock) + + await sendUmamiPayload({ + payload: { + website: 'abc', + }, + type: 'event', + }) + + expect(fetchMock).toHaveBeenCalledTimes(1) + const [url, init] = fetchMock.mock.calls[0] + expect(url).toBe('/stats/api/send') + expect(init).toMatchObject({ + method: 'POST', + keepalive: true, + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + payload: { + website: 'abc', + }, + type: 'event', + }), + }) + }) + + it('falls back to fetch with keepalive when the payload exceeds the beacon size limit', async () => { + const sendBeacon = vi.fn().mockReturnValue(true) + vi.stubGlobal('navigator', { + sendBeacon, + }) + const fetchMock = vi.fn().mockResolvedValue({ + ok: true, + status: 200, + }) + vi.stubGlobal('fetch', fetchMock) + + const largeValue = 'a'.repeat(70_000) + + await sendUmamiPayload({ + payload: { + website: largeValue, + }, + type: 'event', + }) + + expect(sendBeacon).not.toHaveBeenCalled() + expect(fetchMock).toHaveBeenCalledTimes(1) + const [url, init] = fetchMock.mock.calls[0] + expect(url).toBe('/stats/api/send') + expect(init).toMatchObject({ + method: 'POST', + keepalive: true, + headers: { + 'Content-Type': 'application/json', + }, + }) + }) + + it('never throws when sendBeacon returns false', async () => { + const sendBeacon = vi.fn().mockReturnValue(false) + vi.stubGlobal('navigator', { + sendBeacon, + }) + vi.stubGlobal('fetch', vi.fn()) + + await expect( + sendUmamiPayload({ + payload: { + website: 'abc', + }, + type: 'event', + }), + ).resolves.toBeUndefined() + }) + }) + + describe('in a server context (no window)', () => { + it('always uses fetch', async () => { + const fetchMock = vi.fn().mockResolvedValue({ + ok: true, + status: 200, + }) + vi.stubGlobal('fetch', fetchMock) + + await sendUmamiPayload({ + payload: { + website: 'abc', + }, + type: 'event', + }) + + expect(fetchMock).toHaveBeenCalledTimes(1) + const [url, init] = fetchMock.mock.calls[0] + expect(url).toBe(`${UMAMI_URL}/api/send`) + expect(init).toMatchObject({ + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + payload: { + website: 'abc', + }, + type: 'event', + }), + }) + }) + + it('never rejects when fetch rejects', async () => { + vi.stubGlobal('fetch', vi.fn().mockRejectedValue(new Error('network down'))) + + await expect( + sendUmamiPayload({ + payload: { + website: 'abc', + }, + type: 'event', + }), + ).resolves.toBeUndefined() + }) + + it('never rejects when fetch resolves with a non-2xx status', async () => { + vi.stubGlobal( + 'fetch', + vi.fn().mockResolvedValue({ + ok: false, + status: 500, + }), + ) + + await expect( + sendUmamiPayload({ + payload: { + website: 'abc', + }, + type: 'event', + }), + ).resolves.toBeUndefined() + }) + }) +}) diff --git a/src/lib/umami/sendUmamiPayload.ts b/src/lib/umami/sendUmamiPayload.ts new file mode 100644 index 00000000..57cfeeb3 --- /dev/null +++ b/src/lib/umami/sendUmamiPayload.ts @@ -0,0 +1,77 @@ +import type { UmamiSendPayload } from './Umami.types' + +// `navigator.sendBeacon` rejects payloads over ~64KB. Use a slightly +// conservative threshold to leave headroom for browser-specific overhead. +const UMAMI_BEACON_MAX_BYTES = 64_000 + +const isBrowser = () => typeof window !== 'undefined' + +const getByteSize = (body: string): number => new TextEncoder().encode(body).length + +const sendViaFetch = async (url: string, body: string, keepalive: boolean) => { + const response = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body, + ...(keepalive + ? { + keepalive: true, + } + : {}), + }) + + if (!response.ok) { + console.debug(`sendUmamiPayload: request failed with status ${response.status}`) + } +} + +/** + * Sends a pre-built payload to Umami's collect API. Works from both browser + * and server code: in the browser it prefers `navigator.sendBeacon` when + * available and the payload is within the beacon size limit, falling back + * to `fetch` with `keepalive: true` otherwise (including when the payload + * exceeds `UMAMI_BEACON_MAX_BYTES`); on the server it always uses `fetch`. + * Never throws or rejects — failures are swallowed and logged via + * `console.debug` so tracking issues never break the calling code. + */ +export const sendUmamiPayload = async (payload: UmamiSendPayload): Promise => { + // In the browser, route through the same-origin `/stats` rewrite (see + // next.config.ts) so the request doesn't visibly hit the Umami domain, + // which keeps it out of ad-blocker filter lists that target known + // analytics hosts/paths. On the server there is no origin to resolve a + // relative URL against and no rewrite applies to a raw server fetch, so + // the absolute Umami URL is used instead. + const url = isBrowser() ? '/stats/api/send' : `${process.env.NEXT_PUBLIC_UMAMI_URL}/api/send` + const body = JSON.stringify(payload) + + try { + if ( + isBrowser() && + typeof navigator !== 'undefined' && + navigator.sendBeacon && + getByteSize(body) <= UMAMI_BEACON_MAX_BYTES + ) { + const blob = new Blob( + [ + body, + ], + { + type: 'application/json', + }, + ) + const sent = navigator.sendBeacon(url, blob) + + if (!sent) { + console.debug('sendUmamiPayload: navigator.sendBeacon reported failure') + } + + return + } + + await sendViaFetch(url, body, isBrowser()) + } catch (error) { + console.debug('sendUmamiPayload: failed to send payload', error) + } +} diff --git a/src/lib/umami/track.server.test.ts b/src/lib/umami/track.server.test.ts new file mode 100644 index 00000000..54d4a724 --- /dev/null +++ b/src/lib/umami/track.server.test.ts @@ -0,0 +1,99 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' + +import { isTrackingSuppressed } from './isTrackingSuppressed.server' +import { sendUmamiPayload } from './sendUmamiPayload' +import { trackServerEvent } from './track.server' + +vi.mock('./sendUmamiPayload', () => ({ + sendUmamiPayload: vi.fn().mockResolvedValue(undefined), +})) + +vi.mock('./isTrackingSuppressed.server', () => ({ + isTrackingSuppressed: vi.fn().mockResolvedValue(false), +})) + +const SITE_ID = 'site-abc' + +describe('trackServerEvent', () => { + beforeEach(() => { + vi.stubEnv('NEXT_PUBLIC_UMAMI_SITE_ID', SITE_ID) + }) + + afterEach(() => { + vi.unstubAllEnvs() + vi.clearAllMocks() + }) + + it('sends a minimal payload when called with just a name', async () => { + await trackServerEvent({ + name: 'my-event', + }) + + expect(sendUmamiPayload).toHaveBeenCalledTimes(1) + expect(sendUmamiPayload).toHaveBeenCalledWith({ + type: 'event', + payload: { + website: SITE_ID, + name: 'my-event', + }, + }) + }) + + it('sends all fields when data/url/referrer/hostname are provided', async () => { + await trackServerEvent({ + name: 'my-event', + data: { + foo: 'bar', + }, + url: '/some/path', + referrer: 'https://referrer.example.com', + hostname: 'example.com', + }) + + expect(sendUmamiPayload).toHaveBeenCalledWith({ + type: 'event', + payload: { + website: SITE_ID, + name: 'my-event', + data: { + foo: 'bar', + }, + url: '/some/path', + referrer: 'https://referrer.example.com', + hostname: 'example.com', + }, + }) + }) + + it('never throws or rejects even if sendUmamiPayload were to throw', async () => { + vi.mocked(sendUmamiPayload).mockImplementationOnce(() => { + throw new Error('boom') + }) + + await expect( + trackServerEvent({ + name: 'my-event', + }), + ).resolves.toBeUndefined() + }) + + it('never rejects even if sendUmamiPayload were to reject', async () => { + vi.mocked(sendUmamiPayload).mockRejectedValueOnce(new Error('boom')) + + await expect( + trackServerEvent({ + name: 'my-event', + }), + ).resolves.toBeUndefined() + }) + + it('does not send when isTrackingSuppressed resolves true', async () => { + vi.mocked(isTrackingSuppressed).mockResolvedValueOnce(true) + + await trackServerEvent({ + name: 'my-event', + }) + + expect(sendUmamiPayload).not.toHaveBeenCalled() + }) +}) diff --git a/src/lib/umami/track.server.ts b/src/lib/umami/track.server.ts new file mode 100644 index 00000000..07926567 --- /dev/null +++ b/src/lib/umami/track.server.ts @@ -0,0 +1,70 @@ +'use server' + +import { isTrackingSuppressed } from './isTrackingSuppressed.server' +import { sendUmamiPayload } from './sendUmamiPayload' +import type { UmamiSendPayload, UmamiSendPayloadPayload } from './Umami.types' + +export interface TrackServerEventInput { + name: string + data?: Record + url?: string + referrer?: string + hostname?: string +} + +/** + * Server-callable equivalent of `track()` for use in Route Handlers, Server + * Actions, and RSC data fetchers, where there's no `window`/`document`/ + * `location` to infer context from. Callers must pass `url`/`referrer`/ + * `hostname` explicitly if they want them included. Builds a payload and + * fires it via `sendUmamiPayload`, without awaiting or surfacing its result. + * Suppresses tracking for the site owner's own authenticated Payload + * sessions unless they've opted back in. + */ +export const trackServerEvent = async ({ + name, + data, + url, + referrer, + hostname, +}: TrackServerEventInput): Promise => { + if (await isTrackingSuppressed()) { + return + } + + const payload: UmamiSendPayloadPayload = { + website: process.env.NEXT_PUBLIC_UMAMI_SITE_ID ?? '', + name, + ...(data + ? { + data, + } + : {}), + ...(url + ? { + url, + } + : {}), + ...(referrer + ? { + referrer, + } + : {}), + ...(hostname + ? { + hostname, + } + : {}), + } + + const sendPayload: UmamiSendPayload = { + type: 'event', + payload, + } + + try { + void sendUmamiPayload(sendPayload) + } catch { + // sendUmamiPayload never throws in practice; this guards defensively. + } +} diff --git a/src/lib/umami/track.test.ts b/src/lib/umami/track.test.ts new file mode 100644 index 00000000..47d567f1 --- /dev/null +++ b/src/lib/umami/track.test.ts @@ -0,0 +1,442 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' + +import { sendUmamiPayload } from './sendUmamiPayload' +import { track, trackPageview } from './track' + +vi.mock('./sendUmamiPayload', () => ({ + sendUmamiPayload: vi.fn().mockResolvedValue(undefined), +})) + +const SITE_ID = 'site-abc' + +describe('track', () => { + beforeEach(() => { + vi.stubEnv('NEXT_PUBLIC_UMAMI_SITE_ID', SITE_ID) + }) + + afterEach(() => { + vi.unstubAllGlobals() + vi.unstubAllEnvs() + vi.clearAllMocks() + }) + + describe('in a browser context', () => { + beforeEach(() => { + vi.stubGlobal('window', {}) + vi.stubGlobal('location', { + pathname: '/foo', + search: '?bar=baz', + hostname: 'example.com', + }) + vi.stubGlobal('navigator', { + language: 'en-US', + }) + vi.stubGlobal('screen', { + width: 1920, + height: 1080, + }) + vi.stubGlobal('document', { + title: 'Foo Page', + referrer: 'https://referrer.example.com', + }) + }) + + it('sends a pageview payload with browser fields when called bare', () => { + track() + + expect(sendUmamiPayload).toHaveBeenCalledTimes(1) + expect(sendUmamiPayload).toHaveBeenCalledWith({ + type: 'event', + payload: { + website: SITE_ID, + url: '/foo?bar=baz', + hostname: 'example.com', + language: 'en-US', + screen: '1920x1080', + title: 'Foo Page', + referrer: 'https://referrer.example.com', + }, + }) + }) + + it('sets payload.name when called with a string', () => { + track('my-event') + + expect(sendUmamiPayload).toHaveBeenCalledWith( + expect.objectContaining({ + payload: expect.objectContaining({ + name: 'my-event', + }), + }), + ) + const [[sentPayload]] = vi.mocked(sendUmamiPayload).mock.calls + expect(sentPayload.payload.data).toBeUndefined() + }) + + it('sets payload.data with no name when called with an object', () => { + track({ + foo: 'bar', + }) + + const [[sentPayload]] = vi.mocked(sendUmamiPayload).mock.calls + expect(sentPayload.payload.name).toBeUndefined() + expect(sentPayload.payload.data).toEqual({ + foo: 'bar', + }) + }) + + it('sets both name and data when called with a string and object', () => { + track('my-event', { + foo: 'bar', + }) + + const [[sentPayload]] = vi.mocked(sendUmamiPayload).mock.calls + expect(sentPayload.payload.name).toBe('my-event') + expect(sentPayload.payload.data).toEqual({ + foo: 'bar', + }) + }) + + it('invokes a callback function and uses its return value as data', () => { + const fn = vi.fn().mockImplementation((data: Record) => ({ + ...data, + added: true, + })) + + track(fn) + + expect(fn).toHaveBeenCalledWith({}) + const [[sentPayload]] = vi.mocked(sendUmamiPayload).mock.calls + expect(sentPayload.payload.data).toEqual({ + added: true, + }) + }) + + it('omits referrer when document.referrer is empty', () => { + vi.stubGlobal('document', { + title: 'Foo Page', + referrer: '', + }) + + track() + + const [[sentPayload]] = vi.mocked(sendUmamiPayload).mock.calls + expect(sentPayload.payload.referrer).toBeUndefined() + }) + }) + + describe('outside a browser context (no window)', () => { + it('does not throw and sends a minimal payload', () => { + expect(() => + track('server-event', { + foo: 'bar', + }), + ).not.toThrow() + + const [[sentPayload]] = vi.mocked(sendUmamiPayload).mock.calls + expect(sentPayload).toEqual({ + type: 'event', + payload: { + website: SITE_ID, + name: 'server-event', + data: { + foo: 'bar', + }, + }, + }) + }) + + it('does not throw when called bare', () => { + expect(() => track()).not.toThrow() + + const [[sentPayload]] = vi.mocked(sendUmamiPayload).mock.calls + expect(sentPayload).toEqual({ + type: 'event', + payload: { + website: SITE_ID, + }, + }) + }) + }) + + describe('window.__UMAMI_SUPPRESSED__ flag', () => { + beforeEach(() => { + vi.stubGlobal('location', { + pathname: '/foo', + search: '?bar=baz', + hostname: 'example.com', + }) + vi.stubGlobal('navigator', { + language: 'en-US', + }) + vi.stubGlobal('screen', { + width: 1920, + height: 1080, + }) + vi.stubGlobal('document', { + title: 'Foo Page', + referrer: '', + }) + }) + + it('does not send when window.__UMAMI_SUPPRESSED__ is true', () => { + vi.stubGlobal('window', { + __UMAMI_SUPPRESSED__: true, + }) + + track() + + expect(sendUmamiPayload).not.toHaveBeenCalled() + }) + + it('sends when window.__UMAMI_SUPPRESSED__ is false', () => { + vi.stubGlobal('window', { + __UMAMI_SUPPRESSED__: false, + }) + + track() + + expect(sendUmamiPayload).toHaveBeenCalledTimes(1) + }) + + it('sends when window.__UMAMI_SUPPRESSED__ is unset', () => { + vi.stubGlobal('window', {}) + + track() + + expect(sendUmamiPayload).toHaveBeenCalledTimes(1) + }) + }) + + describe('admin path exclusion', () => { + beforeEach(() => { + vi.stubGlobal('window', {}) + vi.stubGlobal('navigator', { + language: 'en-US', + }) + vi.stubGlobal('screen', { + width: 1920, + height: 1080, + }) + vi.stubGlobal('document', { + title: 'Admin', + referrer: '', + }) + }) + + it('does not send when the current location is /admin', () => { + vi.stubGlobal('location', { + pathname: '/admin', + search: '', + hostname: 'example.com', + }) + + track() + + expect(sendUmamiPayload).not.toHaveBeenCalled() + }) + + it('does not send when the current location is nested under /admin', () => { + vi.stubGlobal('location', { + pathname: '/admin/collections/pages', + search: '', + hostname: 'example.com', + }) + + track() + + expect(sendUmamiPayload).not.toHaveBeenCalled() + }) + + it('still sends for a path that merely starts with "/admin" as a different segment', () => { + vi.stubGlobal('location', { + pathname: '/administration', + search: '', + hostname: 'example.com', + }) + + track() + + expect(sendUmamiPayload).toHaveBeenCalledTimes(1) + }) + }) +}) + +describe('trackPageview', () => { + beforeEach(() => { + vi.stubEnv('NEXT_PUBLIC_UMAMI_SITE_ID', SITE_ID) + }) + + afterEach(() => { + vi.unstubAllGlobals() + vi.unstubAllEnvs() + vi.clearAllMocks() + }) + + describe('in a browser context', () => { + beforeEach(() => { + vi.stubGlobal('window', {}) + vi.stubGlobal('location', { + pathname: '/previous/path', + search: '?bar=baz', + hostname: 'example.com', + }) + vi.stubGlobal('navigator', { + language: 'en-US', + }) + vi.stubGlobal('screen', { + width: 1920, + height: 1080, + }) + vi.stubGlobal('document', { + title: 'Foo Page', + referrer: 'https://referrer.example.com', + }) + }) + + it('uses the explicit url argument instead of the current location', () => { + trackPageview('/destination/path') + + expect(sendUmamiPayload).toHaveBeenCalledTimes(1) + const [[sentPayload]] = vi.mocked(sendUmamiPayload).mock.calls + expect(sentPayload.payload.url).toBe('/destination/path') + expect(sentPayload.payload.url).not.toBe('/previous/path?bar=baz') + expect(sentPayload.payload).toMatchObject({ + website: SITE_ID, + url: '/destination/path', + hostname: 'example.com', + language: 'en-US', + screen: '1920x1080', + title: 'Foo Page', + referrer: 'https://referrer.example.com', + }) + }) + + it('falls back to location.pathname + location.search when no url is given', () => { + trackPageview() + + expect(sendUmamiPayload).toHaveBeenCalledTimes(1) + const [[sentPayload]] = vi.mocked(sendUmamiPayload).mock.calls + expect(sentPayload.payload.url).toBe('/previous/path?bar=baz') + }) + }) + + describe('outside a browser context (no window)', () => { + it('does not throw and omits the url field when called bare', () => { + expect(() => trackPageview()).not.toThrow() + + const [[sentPayload]] = vi.mocked(sendUmamiPayload).mock.calls + expect(sentPayload).toEqual({ + type: 'event', + payload: { + website: SITE_ID, + }, + }) + }) + }) + + describe('suppression/allow gating', () => { + beforeEach(() => { + vi.stubGlobal('location', { + pathname: '/foo', + search: '?bar=baz', + hostname: 'example.com', + }) + vi.stubGlobal('navigator', { + language: 'en-US', + }) + vi.stubGlobal('screen', { + width: 1920, + height: 1080, + }) + vi.stubGlobal('document', { + title: 'Foo Page', + referrer: '', + }) + }) + + it('does not send when window.__UMAMI_SUPPRESSED__ is true', () => { + vi.stubGlobal('window', { + __UMAMI_SUPPRESSED__: true, + }) + + trackPageview('/destination/path') + + expect(sendUmamiPayload).not.toHaveBeenCalled() + }) + + it('sends when not suppressed', () => { + vi.stubGlobal('window', {}) + + trackPageview('/destination/path') + + expect(sendUmamiPayload).toHaveBeenCalledTimes(1) + }) + }) + + describe('admin path exclusion', () => { + beforeEach(() => { + vi.stubGlobal('window', {}) + vi.stubGlobal('navigator', { + language: 'en-US', + }) + vi.stubGlobal('screen', { + width: 1920, + height: 1080, + }) + vi.stubGlobal('document', { + title: 'Admin', + referrer: '', + }) + }) + + it('does not send when the explicit url targets /admin', () => { + vi.stubGlobal('location', { + pathname: '/foo', + search: '', + hostname: 'example.com', + }) + + trackPageview('/admin') + + expect(sendUmamiPayload).not.toHaveBeenCalled() + }) + + it('does not send when the explicit url targets a nested /admin path', () => { + vi.stubGlobal('location', { + pathname: '/foo', + search: '', + hostname: 'example.com', + }) + + trackPageview('/admin/collections/pages') + + expect(sendUmamiPayload).not.toHaveBeenCalled() + }) + + it('does not send when called bare on the /admin location (first page load)', () => { + vi.stubGlobal('location', { + pathname: '/admin', + search: '', + hostname: 'example.com', + }) + + trackPageview() + + expect(sendUmamiPayload).not.toHaveBeenCalled() + }) + + it('does not send when the explicit url is an absolute /admin URL', () => { + vi.stubGlobal('location', { + pathname: '/foo', + search: '', + hostname: 'example.com', + origin: 'https://example.com', + }) + + trackPageview('https://example.com/admin/login') + + expect(sendUmamiPayload).not.toHaveBeenCalled() + }) + }) +}) diff --git a/src/lib/umami/track.ts b/src/lib/umami/track.ts new file mode 100644 index 00000000..2ed1bd10 --- /dev/null +++ b/src/lib/umami/track.ts @@ -0,0 +1,175 @@ +import { sendUmamiPayload } from './sendUmamiPayload' +import type { TrackFunction, UmamiSendPayload, UmamiSendPayloadPayload } from './Umami.types' + +declare global { + interface Window { + /** + * Set by `UmamiSuppressionFlag` (an inline script rendered from the root + * layout) when the current request's authenticated Payload session + * should be excluded from analytics. `isTrackingSuppressed()` can only + * run server-side (it reads/JWT-verifies the `payload-token` cookie via + * `cookies()`), so this flag is how that decision reaches client-side + * `track()` calls. + */ + __UMAMI_SUPPRESSED__?: boolean + } +} + +const isBrowser = () => typeof window !== 'undefined' + +/** + * Path prefix for the Payload admin panel (see `app/(payload)/`). Excluded + * from tracking unconditionally — regardless of `__UMAMI_SUPPRESSED__` state + * — since visits to `/admin` (including by anonymous visitors who just hit + * the login screen) should never show up in analytics. This matters because + * `instrumentation-client.ts` fires `trackPageview()` for every page load + * and every client-side route transition app-wide, not just within the + * `(frontend)` route group, so `/admin` needs its own explicit exclusion. + */ +const ADMIN_PATH_PREFIX = '/admin' + +const isAdminPath = (pathname: string): boolean => + pathname === ADMIN_PATH_PREFIX || pathname.startsWith(`${ADMIN_PATH_PREFIX}/`) + +/** + * True when `url` (or, if omitted, the current `location.pathname`) targets + * the admin panel. Accepts both relative paths and absolute URLs. + */ +const isAdminUrl = (url?: string): boolean => { + const candidate = url ?? (isBrowser() ? location.pathname : undefined) + + if (!candidate) { + return false + } + + try { + return isAdminPath( + new URL(candidate, isBrowser() ? location.origin : 'http://localhost').pathname, + ) + } catch { + return isAdminPath(candidate) + } +} + +/** + * Shared guard used by both `track()` and `trackPageview()`: true when the + * current session was flagged suppressed (`window.__UMAMI_SUPPRESSED__`, set + * by `UmamiSuppressionFlag` for authenticated Payload sessions), or when the + * current/target URL falls under the Payload admin panel (`/admin`). + */ +const shouldSuppressTracking = (url?: string): boolean => + (isBrowser() && window.__UMAMI_SUPPRESSED__ === true) || isAdminUrl(url) + +/** + * Populates the browser-derived fields (hostname/language/screen/title/ + * referrer) shared by `track()` and `trackPageview()`. No-ops outside a + * browser context. + */ +const applyBrowserPayloadFields = (payload: UmamiSendPayloadPayload): void => { + if (!isBrowser()) { + return + } + + payload.hostname = location.hostname + payload.language = navigator.language + payload.screen = `${screen.width}x${screen.height}` + payload.title = document.title + + if (document.referrer) { + payload.referrer = document.referrer + } +} + +/** + * Directly-importable, isomorphic replacement for Umami's script-injected + * `track()` global. Builds a payload from browser globals (when available) + * plus the caller-supplied event name/data and fires it via + * `sendUmamiPayload`, without awaiting or surfacing its result. Honors (in + * the browser) the `window.__UMAMI_SUPPRESSED__` flag set for authenticated + * Payload sessions, no-oping when tracking is suppressed. + */ +export const track: TrackFunction = ( + eventNameOrData?: + | string + | Record + | ((data: Record) => Record), + data?: Record, +): void => { + if (shouldSuppressTracking(isBrowser() ? location.pathname : undefined)) { + return + } + + let name: string | undefined + let eventData: Record | undefined + + if (typeof eventNameOrData === 'string') { + name = eventNameOrData + eventData = data + } else if (typeof eventNameOrData === 'function') { + eventData = eventNameOrData({}) + } else if (typeof eventNameOrData === 'object' && eventNameOrData !== null) { + eventData = eventNameOrData + } + + const payload: UmamiSendPayloadPayload = { + website: process.env.NEXT_PUBLIC_UMAMI_SITE_ID ?? '', + ...(name + ? { + name, + } + : {}), + ...(eventData + ? { + data: eventData, + } + : {}), + } + + if (isBrowser()) { + payload.url = location.pathname + location.search + } + applyBrowserPayloadFields(payload) + + const sendPayload: UmamiSendPayload = { + type: 'event', + payload, + } + + void sendUmamiPayload(sendPayload) +} + +/** + * Fires a plain Umami pageview, similar to `track()` called bare, but lets + * the caller supply the destination `url` explicitly. This matters for + * client-side route transitions: `onRouterTransitionStart` fires BEFORE + * `location` updates to the destination, so deriving the URL from + * `location.pathname + location.search` (as bare `track()` does) would + * record the page being left, not the page being navigated to. Called with + * no `url` argument (e.g. for the very first page load, before any + * navigation has started), it falls back to the current + * `location.pathname + location.search`, matching bare `track()`'s prior + * pageview behavior. + */ +export const trackPageview = (url?: string): void => { + if (shouldSuppressTracking(url)) { + return + } + + const payload: UmamiSendPayloadPayload = { + website: process.env.NEXT_PUBLIC_UMAMI_SITE_ID ?? '', + } + + if (url !== undefined) { + payload.url = url + } else if (isBrowser()) { + payload.url = location.pathname + location.search + } + applyBrowserPayloadFields(payload) + + const sendPayload: UmamiSendPayload = { + type: 'event', + payload, + } + + void sendUmamiPayload(sendPayload) +} diff --git a/src/lib/unsplash/buildCreditsValue.test.ts b/src/lib/unsplash/buildCreditsValue.test.ts new file mode 100644 index 00000000..e1846edb --- /dev/null +++ b/src/lib/unsplash/buildCreditsValue.test.ts @@ -0,0 +1,110 @@ +import { describe, expect, it } from 'vitest' + +import { buildCreditsValue } from './buildCreditsValue' + +type CreditsChild = { + type: string + text?: string + fields?: Record + children?: Array<{ + text: string + }> +} + +const paragraphChildren = (value: ReturnType): CreditsChild[] => + ( + value.root.children[0] as unknown as { + type: string + children: CreditsChild[] + } + ).children + +describe('buildCreditsValue', () => { + it('builds a Lexical document with a photographer link and an Unsplash link', () => { + const value = buildCreditsValue({ + photographerName: 'Jane Doe', + photographerProfileUrl: 'https://unsplash.com/@janedoe', + }) + + expect( + ( + value.root.children[0] as unknown as { + type: string + } + ).type, + ).toBe('paragraph') + + const children = paragraphChildren(value) + + // The visible text is the plain text nodes plus each link's *children* — + // every Lexical -> JSX link converter renders the anchor body from + // `node.children`, not from a `label` field (which doesn't exist on this + // shape). See the render-layer test in `creditsRendering.test.tsx`. + const flatText = children + .map((node) => + node.type === 'link' + ? (node.children ?? []).map((child) => child.text).join('') + : (node.text ?? ''), + ) + .join('') + expect(flatText).toBe('Photo by Jane Doe on Unsplash') + + const links = children.filter((node) => node.type === 'link') + expect(links).toHaveLength(2) + + expect(links[0]?.fields).toEqual({ + doc: null, + linkType: 'custom', + url: 'https://unsplash.com/@janedoe?utm_source=heene_io&utm_medium=referral', + newTab: true, + }) + + expect(links[1]?.fields).toEqual({ + doc: null, + linkType: 'custom', + url: 'https://unsplash.com/?utm_source=heene_io&utm_medium=referral', + newTab: true, + }) + }) + + it('emits lexical’s own linkType vocabulary', () => { + const value = buildCreditsValue({ + photographerName: 'Jane Doe', + photographerProfileUrl: 'https://unsplash.com/@janedoe', + }) + + for (const node of paragraphChildren(value).filter((child) => child.type === 'link')) { + expect(node.fields).toHaveProperty('linkType', 'custom') + } + }) + + it('carries the link text as a real text child, not only as `fields.label`', () => { + // Regression guard for the render layer: `children: []` still validates and + // still passes every `fields`-only assertion above, but renders as an empty + // ``. + const value = buildCreditsValue({ + photographerName: 'Jane Doe', + photographerProfileUrl: 'https://unsplash.com/@janedoe', + }) + + const links = paragraphChildren(value).filter((child) => child.type === 'link') + + expect(links.map((link) => (link.children ?? []).map((child) => child.text).join(''))).toEqual([ + 'Jane Doe', + 'Unsplash', + ]) + }) + + it('keeps the link fields flat — no `link` sub-key', () => { + // Lexical's stock `LinkFeature` fields are flat (`linkType`, `doc`, `url`, + // `newTab`) — there is no nested `link` sub-key. + const value = buildCreditsValue({ + photographerName: 'Jane Doe', + photographerProfileUrl: 'https://unsplash.com/@janedoe', + }) + + for (const node of paragraphChildren(value).filter((child) => child.type === 'link')) { + expect(node.fields).not.toHaveProperty('link') + } + }) +}) diff --git a/src/lib/unsplash/buildCreditsValue.ts b/src/lib/unsplash/buildCreditsValue.ts new file mode 100644 index 00000000..81bcb559 --- /dev/null +++ b/src/lib/unsplash/buildCreditsValue.ts @@ -0,0 +1,102 @@ +import type { DefaultTypedEditorState } from '@payloadcms/richtext-lexical' + +/** + * Unsplash's API guidelines require crediting the photographer and Unsplash, + * each linking back with the app's UTM params attached + * (https://help.unsplash.com/en/articles/2511315). + */ +const UTM_PARAMS = 'utm_source=heene_io&utm_medium=referral' + +const textNode = (text: string) => ({ + type: 'text', + version: 1, + format: 0, + style: '', + mode: 'normal', + detail: 0, + text, +}) + +/** + * A link node for the `caption` editor variant. + * + * ## `fields` is lexical's own stock shape (validation layer) + * + * `LinkFeature()` (see `src/fields/RichText/index.ts`) no longer swaps in + * `LinkField`'s fields, so the validated schema for a link node's `fields` + * object is lexical's own: `linkType`, `doc`, `url`, `newTab` — no `label`, + * no icon fields. `linkType` here is always `'custom'`, since every credits + * link is a custom URL, never a CMS document reference. `doc` is set + * explicitly to `null` so the key exists, mirroring what the editor itself + * writes for a custom-URL link. + * + * This is also what a human-authored link produces: the floating link + * editor's `handleDrawerSubmit` + * (`.../features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js:301-331`) + * passes the drawer form's reduced values straight through as + * `$createLinkNode({ fields })` / `TOGGLE_LINK_COMMAND { fields }`, and those + * values are keyed by this same stock schema. + * + * ## `children` carries the visible text (render layer) + * + * Every Lexical→JSX link converter — Payload's own + * (`.../converters/lexicalToJSX/converter/converters/link.js`) and this + * repo's override in `src/components/RichText/linkConverter.tsx` — renders + * the anchor's text from `nodesToJSX({ nodes: node.children })`, never from + * a `label` field (which doesn't exist on this shape). `children: []` would + * produce an empty ``; a text child produces + * `Jane Doe`. + */ +const linkNode = (text: string, url: string) => ({ + type: 'link', + version: 1, + format: '', + indent: 0, + direction: 'ltr', + fields: { + linkType: 'custom', + doc: null, + url, + newTab: true, + }, + children: [ + textNode(text), + ], +}) + +/** + * Builds the Lexical value for a `MediaImages.credits` field crediting an + * imported Unsplash photo: "Photo by {photographer} on Unsplash", with both + * names linking out per Unsplash's attribution requirements. + */ +export const buildCreditsValue = ({ + photographerName, + photographerProfileUrl, +}: { + photographerName: string + photographerProfileUrl: string +}): DefaultTypedEditorState => + ({ + root: { + type: 'root', + version: 1, + format: '', + indent: 0, + direction: 'ltr', + children: [ + { + type: 'paragraph', + version: 1, + format: '', + indent: 0, + direction: 'ltr', + children: [ + textNode('Photo by '), + linkNode(photographerName, `${photographerProfileUrl}?${UTM_PARAMS}`), + textNode(' on '), + linkNode('Unsplash', `https://unsplash.com/?${UTM_PARAMS}`), + ], + }, + ], + }, + }) as unknown as DefaultTypedEditorState diff --git a/src/lib/unsplash/creditsRendering.test.tsx b/src/lib/unsplash/creditsRendering.test.tsx new file mode 100644 index 00000000..7e59adc8 --- /dev/null +++ b/src/lib/unsplash/creditsRendering.test.tsx @@ -0,0 +1,97 @@ +import { renderToStaticMarkup } from 'react-dom/server' +import { + convertLexicalNodesToJSX, + defaultJSXConverters, + LinkJSXConverter, +} from '@payloadcms/richtext-lexical/react' + +import { describe, expect, it } from 'vitest' + +import { buildCreditsValue } from './buildCreditsValue' + +/** + * A *render*-boundary test for the credits value. + * + * A link node can validate fine while still rendering wrong: `children: []` + * would still validate (validation only ever inspects `node.fields`) but + * renders as an empty ``, because every Lexical -> JSX link + * converter builds the anchor body from `nodesToJSX({ nodes: node.children + * })`, never from a `label` field. + * + * This drives Payload's own converter stack — `convertLexicalNodesToJSX` with + * `defaultJSXConverters` + `LinkJSXConverter` — over the real output of + * `buildCreditsValue`, and asserts on the resulting HTML. + * + * Scope note: `src/components/RichText/index.tsx` uses its own `link` + * converter (`src/components/RichText/linkConverter.tsx`, unit-tested in + * `RichText/linkConverter.test.tsx`), not the bare `defaultJSXConverters` + + * `LinkJSXConverter` stack this file drives. Since `LinkFeature()` now uses + * lexical's own stock fields (no override), both converters read the same + * `{ linkType, doc, url, newTab }` shape — this file is deliberately scoped + * to the generic Payload converter stack, but the two are no longer + * expected to diverge. + */ + +// biome-ignore lint/suspicious/noExplicitAny: converter args are structurally typed against internal Lexical node unions +type ConverterArgs = any + +const renderCredits = (value: ReturnType): string => + renderToStaticMarkup( + convertLexicalNodesToJSX({ + converters: { + ...defaultJSXConverters, + ...LinkJSXConverter({ + internalDocToHref: () => '#', + }), + }, + nodes: value.root.children, + parent: { + ...value.root, + parent: undefined, + }, + } as ConverterArgs) as ConverterArgs, + ) + +describe('credits value rendering', () => { + it('renders both credits as anchors with visible text and the UTM-tagged hrefs', () => { + const html = renderCredits( + buildCreditsValue({ + photographerName: 'Jane Doe', + photographerProfileUrl: 'https://unsplash.com/@janedoe', + }), + ) + + expect(html).toContain( + 'Jane Doe', + ) + expect(html).toContain( + 'Unsplash', + ) + + // No empty anchors: the exact failure mode `children: []` produced. + expect(html).not.toMatch(/]*><\/a>/) + expect(html.replace(/<[^>]+>/g, '')).toBe('Photo by Jane Doe on Unsplash') + }) + + it('is a real render boundary: emptying the link children produces empty anchors', () => { + // Negative control. Without this, the assertions above would be + // indistinguishable from a harness that renders anything into an anchor. + const value = buildCreditsValue({ + photographerName: 'Jane Doe', + photographerProfileUrl: 'https://unsplash.com/@janedoe', + }) + + for (const node of ( + value.root.children[0] as unknown as { + children: Array<{ + type: string + children: unknown[] + }> + } + ).children) { + if (node.type === 'link') node.children = [] + } + + expect(renderCredits(value).replace(/<[^>]+>/g, '')).toBe('Photo by on ') + }) +}) diff --git a/src/lib/unsplash/importPhoto.test.ts b/src/lib/unsplash/importPhoto.test.ts new file mode 100644 index 00000000..4e0f9db2 --- /dev/null +++ b/src/lib/unsplash/importPhoto.test.ts @@ -0,0 +1,166 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' + +const fetchMock = vi.fn() +const payloadCreateMock = vi.fn() +const getPayloadMock = vi.fn(async () => ({ + create: payloadCreateMock, +})) + +vi.mock('payload', () => ({ + getPayload: () => getPayloadMock(), +})) + +vi.mock('@payload-config', () => ({ + default: {}, +})) + +beforeEach(() => { + vi.stubGlobal('fetch', fetchMock) + vi.stubEnv('UNSPLASH_ACCESS_KEY', 'test-access-key') +}) + +afterEach(() => { + vi.unstubAllGlobals() + vi.unstubAllEnvs() + fetchMock.mockReset() + payloadCreateMock.mockReset() + getPayloadMock.mockClear() +}) + +const { importPhoto } = await import('./importPhoto') + +const photoDetailResponse = () => ({ + id: 'abc123', + urls: { + full: 'https://images.unsplash.com/abc123-full', + }, + links: { + download_location: 'https://api.unsplash.com/photos/abc123/download', + }, + user: { + name: 'Jane Doe', + links: { + html: 'https://unsplash.com/@janedoe', + }, + }, +}) + +describe('importPhoto', () => { + it('downloads the full image, pings the download endpoint, and creates a MediaImages doc', async () => { + const imageBytes = new Uint8Array([ + 1, + 2, + 3, + ]) + + fetchMock.mockImplementation(async (url: string) => { + if (String(url).includes('/photos/abc123') && !String(url).includes('download')) { + return { + ok: true, + status: 200, + json: async () => photoDetailResponse(), + } + } + if (String(url).includes('/photos/abc123/download')) { + return { + ok: true, + status: 200, + json: async () => ({ + url: 'https://images.unsplash.com/abc123-full?tracked=1', + }), + } + } + if (String(url).includes('images.unsplash.com')) { + return { + ok: true, + status: 200, + arrayBuffer: async () => imageBytes.buffer, + headers: new Map([ + [ + 'content-type', + 'image/jpeg', + ], + ]), + } + } + throw new Error(`Unexpected fetch to ${url}`) + }) + + payloadCreateMock.mockResolvedValue({ + id: 'doc-1', + url: '/media/abc123-full.jpg', + alt: null, + blurDataURL: null, + }) + + const result = await importPhoto({ + photoId: 'abc123', + }) + + expect(payloadCreateMock).toHaveBeenCalledTimes(1) + const [call] = payloadCreateMock.mock.calls + expect(call[0].collection).toBe('images') + expect(call[0].data.generatorFlags).toEqual([ + 'unsplash-import', + ]) + // The link text lives in the node's `children`, not a `label` field — + // lexical's stock link fields have no `label`. See buildCreditsValue. + expect(call[0].data.credits.root.children[0].children[1].children[0].text).toBe('Jane Doe') + expect(call[0].file.data).toBeInstanceOf(Buffer) + expect(call[0].file.mimetype).toBe('image/jpeg') + + expect(result).toEqual({ + id: 'doc-1', + url: '/media/abc123-full.jpg', + alt: null, + blurDataURL: null, + }) + }) + + it('throws and creates nothing when the image download fails', async () => { + fetchMock.mockImplementation(async (url: string) => { + if (String(url).includes('/photos/abc123') && !String(url).includes('download')) { + return { + ok: true, + status: 200, + json: async () => photoDetailResponse(), + } + } + if (String(url).includes('/photos/abc123/download')) { + return { + ok: true, + status: 200, + json: async () => ({ + url: 'https://images.unsplash.com/abc123-full?tracked=1', + }), + } + } + return { + ok: false, + status: 500, + arrayBuffer: async () => new ArrayBuffer(0), + } + }) + + await expect( + importPhoto({ + photoId: 'abc123', + }), + ).rejects.toThrow() + + expect(payloadCreateMock).not.toHaveBeenCalled() + }) + + it('throws when UNSPLASH_ACCESS_KEY is not configured', async () => { + vi.stubEnv('UNSPLASH_ACCESS_KEY', '') + + await expect( + importPhoto({ + photoId: 'abc123', + }), + ).rejects.toThrow(/UNSPLASH_ACCESS_KEY/) + + expect(fetchMock).not.toHaveBeenCalled() + expect(payloadCreateMock).not.toHaveBeenCalled() + }) +}) diff --git a/src/lib/unsplash/importPhoto.ts b/src/lib/unsplash/importPhoto.ts new file mode 100644 index 00000000..0e94001e --- /dev/null +++ b/src/lib/unsplash/importPhoto.ts @@ -0,0 +1,137 @@ +'use server' + +import config from '@payload-config' +import { getPayload } from 'payload' + +import { CollectionSlug } from '@/types/collections' + +import { buildCreditsValue } from './buildCreditsValue' +import type { UnsplashApiPhoto } from './types' + +const UNSPLASH_API_BASE = 'https://api.unsplash.com' + +export interface UnsplashImportResult { + id: string + url: string | null + alt: string | null + blurDataURL: string | null +} + +const unsplashHeaders = (accessKey: string) => ({ + Authorization: `Client-ID ${accessKey}`, + 'Accept-Version': 'v1', +}) + +/** + * Fetches full photo detail (needed for `links.download_location`, which + * search results also carry, but this keeps `importPhoto` independent of + * exactly what `searchPhotos` passed through). + */ +const fetchPhotoDetail = async (photoId: string, accessKey: string): Promise => { + const response = await fetch(`${UNSPLASH_API_BASE}/photos/${photoId}`, { + headers: unsplashHeaders(accessKey), + }) + const body = await response.json() + + if (!response.ok) { + const message = Array.isArray(body?.errors) + ? body.errors.join(', ') + : `Failed to load Unsplash photo ${photoId} (${response.status}).` + throw new Error(message) + } + + return body as UnsplashApiPhoto +} + +/** + * Unsplash's API guidelines require this ping whenever a photo is used + * (downloaded/imported), separate from and in addition to fetching the image + * bytes themselves. It returns the tracked download URL, which is safe to + * ignore here since the `full` rendition URL already has everything needed. + */ +const triggerDownloadTracking = async ( + downloadLocation: string, + accessKey: string, +): Promise => { + const response = await fetch(downloadLocation, { + headers: unsplashHeaders(accessKey), + }) + if (!response.ok) { + throw new Error(`Failed to register Unsplash download (${response.status}).`) + } +} + +const downloadImageBytes = async ( + url: string, +): Promise<{ + data: Buffer + mimetype: string +}> => { + const response = await fetch(url) + if (!response.ok) { + throw new Error(`Failed to download the Unsplash image (${response.status}).`) + } + + const arrayBuffer = await response.arrayBuffer() + const mimetype = response.headers.get('content-type') ?? 'image/jpeg' + + return { + data: Buffer.from(arrayBuffer), + mimetype, + } +} + +/** + * Imports one Unsplash photo into `MediaImages`: downloads the `full` + * rendition, fires the required download-tracking ping, and creates a normal + * media document — attributed and flagged — through Payload's local API so + * the collection's existing `beforeChange` hooks run exactly as they do for a + * manual upload. + */ +export const importPhoto = async ({ + photoId, +}: { + photoId: string +}): Promise => { + const accessKey = process.env.UNSPLASH_ACCESS_KEY + if (!accessKey) { + throw new Error('UNSPLASH_ACCESS_KEY is not configured.') + } + + const photo = await fetchPhotoDetail(photoId, accessKey) + await triggerDownloadTracking(photo.links.download_location, accessKey) + const { data, mimetype } = await downloadImageBytes(photo.urls.full) + + const extension = mimetype === 'image/png' ? 'png' : 'jpg' + const filename = `unsplash-${photo.id}.${extension}` + + const payload = await getPayload({ + config, + }) + + const doc = await payload.create({ + collection: CollectionSlug.MediaImages, + data: { + generatorFlags: [ + 'unsplash-import', + ], + credits: buildCreditsValue({ + photographerName: photo.user.name, + photographerProfileUrl: photo.user.links.html, + }), + }, + file: { + data, + name: filename, + mimetype, + size: data.byteLength, + }, + }) + + return { + id: String(doc.id), + url: doc.url ?? null, + alt: doc.alt ?? null, + blurDataURL: doc.blurDataURL ?? null, + } +} diff --git a/src/lib/unsplash/isConfigured.test.ts b/src/lib/unsplash/isConfigured.test.ts new file mode 100644 index 00000000..d8afd933 --- /dev/null +++ b/src/lib/unsplash/isConfigured.test.ts @@ -0,0 +1,19 @@ +import { afterEach, describe, expect, it, vi } from 'vitest' + +afterEach(() => { + vi.unstubAllEnvs() +}) + +const { isUnsplashConfigured } = await import('./isConfigured') + +describe('isUnsplashConfigured', () => { + it('returns false when UNSPLASH_ACCESS_KEY is unset', async () => { + vi.stubEnv('UNSPLASH_ACCESS_KEY', '') + expect(await isUnsplashConfigured()).toBe(false) + }) + + it('returns true when UNSPLASH_ACCESS_KEY is set', async () => { + vi.stubEnv('UNSPLASH_ACCESS_KEY', 'key-value') + expect(await isUnsplashConfigured()).toBe(true) + }) +}) diff --git a/src/lib/unsplash/isConfigured.ts b/src/lib/unsplash/isConfigured.ts new file mode 100644 index 00000000..e39a0675 --- /dev/null +++ b/src/lib/unsplash/isConfigured.ts @@ -0,0 +1,9 @@ +'use server' + +/** + * Whether Unsplash search/import can run. The admin UI uses this to decide + * whether to show a working search box or a "not configured" message, + * without ever exposing the key value itself to the client. + */ +export const isUnsplashConfigured = async (): Promise => + Boolean(process.env.UNSPLASH_ACCESS_KEY) diff --git a/src/lib/unsplash/searchPhotos.test.ts b/src/lib/unsplash/searchPhotos.test.ts new file mode 100644 index 00000000..f341cb3a --- /dev/null +++ b/src/lib/unsplash/searchPhotos.test.ts @@ -0,0 +1,143 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' + +import type { UnsplashApiSearchResponse } from './types' + +const fetchMock = vi.fn() + +beforeEach(() => { + vi.stubGlobal('fetch', fetchMock) + vi.stubEnv('UNSPLASH_ACCESS_KEY', 'test-access-key') +}) + +afterEach(() => { + vi.unstubAllGlobals() + vi.unstubAllEnvs() + fetchMock.mockReset() +}) + +const { searchPhotos } = await import('./searchPhotos') + +const rawResponse = (): UnsplashApiSearchResponse => ({ + total: 1, + total_pages: 1, + results: [ + { + id: 'abc123', + description: null, + alt_description: 'a mountain at sunset', + width: 4000, + height: 3000, + urls: { + full: 'https://images.unsplash.com/abc123-full', + thumb: 'https://images.unsplash.com/abc123-thumb', + }, + links: { + download_location: 'https://api.unsplash.com/photos/abc123/download', + }, + user: { + name: 'Jane Doe', + links: { + html: 'https://unsplash.com/@janedoe', + }, + }, + }, + ], +}) + +describe('searchPhotos', () => { + it('sends the query and page to Unsplash and returns a trimmed shape', async () => { + fetchMock.mockResolvedValue({ + ok: true, + status: 200, + json: async () => rawResponse(), + }) + + const result = await searchPhotos({ + query: 'mountains', + page: 1, + }) + + expect(fetchMock).toHaveBeenCalledTimes(1) + const [url, init] = fetchMock.mock.calls[0] + expect(String(url)).toContain('https://api.unsplash.com/search/photos') + expect(String(url)).toContain('query=mountains') + expect(String(url)).toContain('page=1') + expect(init.headers.Authorization).toBe('Client-ID test-access-key') + + expect(result).toEqual({ + total: 1, + totalPages: 1, + results: [ + { + id: 'abc123', + thumbUrl: 'https://images.unsplash.com/abc123-thumb', + description: 'a mountain at sunset', + photographerName: 'Jane Doe', + photographerProfileUrl: 'https://unsplash.com/@janedoe', + width: 4000, + height: 3000, + }, + ], + }) + }) + + it('falls back to an empty description when Unsplash provides none', async () => { + const raw = rawResponse() + raw.results[0].alt_description = null + fetchMock.mockResolvedValue({ + ok: true, + status: 200, + json: async () => raw, + }) + + const result = await searchPhotos({ + query: 'mountains', + page: 1, + }) + + expect(result.results[0].description).toBe('') + }) + + it('throws a friendly error when UNSPLASH_ACCESS_KEY is not configured', async () => { + vi.stubEnv('UNSPLASH_ACCESS_KEY', '') + + await expect( + searchPhotos({ + query: 'mountains', + page: 1, + }), + ).rejects.toThrow(/UNSPLASH_ACCESS_KEY/) + + expect(fetchMock).not.toHaveBeenCalled() + }) + + it('throws when Unsplash responds with a non-2xx status', async () => { + fetchMock.mockResolvedValue({ + ok: false, + status: 403, + json: async () => ({ + errors: [ + 'Rate Limit Exceeded', + ], + }), + }) + + await expect( + searchPhotos({ + query: 'mountains', + page: 1, + }), + ).rejects.toThrow(/Rate Limit Exceeded/) + }) + + it('throws when the network request itself fails', async () => { + fetchMock.mockRejectedValue(new Error('network unreachable')) + + await expect( + searchPhotos({ + query: 'mountains', + page: 1, + }), + ).rejects.toThrow(/network unreachable/) + }) +}) diff --git a/src/lib/unsplash/searchPhotos.ts b/src/lib/unsplash/searchPhotos.ts new file mode 100644 index 00000000..26cd3215 --- /dev/null +++ b/src/lib/unsplash/searchPhotos.ts @@ -0,0 +1,62 @@ +'use server' + +import type { UnsplashApiSearchResponse, UnsplashSearchResponse } from './types' + +const UNSPLASH_API_BASE = 'https://api.unsplash.com' + +/** + * Searches Unsplash's photo library. + * + * Requires `UNSPLASH_ACCESS_KEY`, which is optional at the environment-schema + * level (the feature is hidden in the admin UI when unset) — so this throws + * rather than silently returning no results if it's called anyway. + */ +export const searchPhotos = async ({ + query, + page, +}: { + query: string + page: number +}): Promise => { + const accessKey = process.env.UNSPLASH_ACCESS_KEY + if (!accessKey) { + throw new Error('UNSPLASH_ACCESS_KEY is not configured.') + } + + const url = new URL('/search/photos', UNSPLASH_API_BASE) + url.searchParams.set('query', query) + url.searchParams.set('page', String(page)) + url.searchParams.set('per_page', '20') + + const response = await fetch(url, { + headers: { + Authorization: `Client-ID ${accessKey}`, + 'Accept-Version': 'v1', + }, + }) + + const body = await response.json() + + if (!response.ok) { + const message = Array.isArray(body?.errors) + ? body.errors.join(', ') + : `Unsplash search failed (${response.status}).` + throw new Error(message) + } + + const data = body as UnsplashApiSearchResponse + + return { + total: data.total, + totalPages: data.total_pages, + results: data.results.map((photo) => ({ + id: photo.id, + thumbUrl: photo.urls.thumb, + description: photo.alt_description ?? photo.description ?? '', + photographerName: photo.user.name, + photographerProfileUrl: photo.user.links.html, + width: photo.width, + height: photo.height, + })), + } +} diff --git a/src/lib/unsplash/types.ts b/src/lib/unsplash/types.ts new file mode 100644 index 00000000..e57cfa17 --- /dev/null +++ b/src/lib/unsplash/types.ts @@ -0,0 +1,46 @@ +export interface UnsplashSearchResult { + id: string + thumbUrl: string + description: string + photographerName: string + photographerProfileUrl: string + width: number + height: number +} + +export interface UnsplashSearchResponse { + results: UnsplashSearchResult[] + total: number + totalPages: number +} + +/** + * Raw shape of a single entry in Unsplash's `GET /search/photos` response. + * Only the fields this app reads are declared. + */ +export interface UnsplashApiPhoto { + id: string + description: string | null + alt_description: string | null + width: number + height: number + urls: { + full: string + thumb: string + } + links: { + download_location: string + } + user: { + name: string + links: { + html: string + } + } +} + +export interface UnsplashApiSearchResponse { + total: number + total_pages: number + results: UnsplashApiPhoto[] +} diff --git a/src/lib/uptime-kuma.ts b/src/lib/uptime-kuma.ts new file mode 100644 index 00000000..62eff9cf --- /dev/null +++ b/src/lib/uptime-kuma.ts @@ -0,0 +1,78 @@ +export enum HeartbeatStatusCode { + Down = 0, + Up = 1, + Pending = 2, + Maintenance = 3, +} + +export enum OverallStatusCode { + AllDown = 0, + AllUp = 1, + PartialDown = 2, + Maintenance = 3, + NoServices = -1, +} + +export interface Heartbeat { + status: HeartbeatStatusCode + time: string + msg: string + ping: number +} + +export interface HeartbeatResponse { + heartbeatList: { + [key: string]: Heartbeat[] + } + uptimeList: { + [key: string]: number + } +} + +export interface OverallStatus { + code: OverallStatusCode + message: string +} + +/** + * Resolves the overall status of the system based on the provided heartbeats. + * @param heartbeats - The list of heartbeats to evaluate. + * @returns The overall status of the system. + */ +export function resolveOverallStatusCode(heartbeats: Heartbeat[]): OverallStatusCode { + const statuses = heartbeats.map((heartbeat) => heartbeat.status) + + if (statuses.length === 0) { + return OverallStatusCode.NoServices + } + if (statuses.every((status) => status === HeartbeatStatusCode.Down)) { + return OverallStatusCode.AllDown + } + if (statuses.some((status) => status === HeartbeatStatusCode.Down)) { + return OverallStatusCode.PartialDown + } + if (statuses.some((status) => status === HeartbeatStatusCode.Maintenance)) { + return OverallStatusCode.Maintenance + } + return OverallStatusCode.AllUp +} + +/** + * Resolves the message to display for the overall status of the system. + * @param overallStatus - The overall status of the system. + * @returns The message to display for the overall status of the system. + */ +export function resolveOverallStatusMessage(overallStatus: OverallStatusCode): string { + switch (overallStatus) { + case OverallStatusCode.AllDown: + return 'Degraded Service' + case OverallStatusCode.PartialDown: + return 'Partially Degraded Service' + case OverallStatusCode.Maintenance: + return 'Under Maintenance' + case OverallStatusCode.NoServices: + return 'No Services Available' + default: + return 'All Systems Operational' + } +} diff --git a/src/lib/useSendAdapter.ts b/src/lib/useSendAdapter.ts new file mode 100644 index 00000000..1b25596d --- /dev/null +++ b/src/lib/useSendAdapter.ts @@ -0,0 +1,314 @@ +import type { EmailAdapter, SendEmailOptions } from 'payload' +import { APIError } from 'payload' + +export type useSendAdapterArgs = { + apiKey: string + defaultFromAddress: string + defaultFromName: string + scheduledAt?: string + templateId?: string + useSendUrl: string + variables?: Record +} + +type UseSendEmailAdapter = EmailAdapter + +type useSendError = { + error: { + code: string + message: string + } +} + +type useSendResponse = + | { + emailId: string + } + | useSendError + +/** + * Email adapter for [useSend](https://usesend.com) REST API + */ +export const useSendAdapter = (args: useSendAdapterArgs): UseSendEmailAdapter => { + const { + apiKey, + defaultFromAddress, + defaultFromName, + scheduledAt, + templateId, + useSendUrl, + variables, + } = args + + const adapter: UseSendEmailAdapter = () => ({ + name: 'usesend-rest', + defaultFromName, + defaultFromAddress, + sendEmail: async (message) => { + const sendEmailOptions = mapPayloadToUseSendEmail( + defaultFromName, + defaultFromAddress, + message, + ) + + const payload = { + ...sendEmailOptions, + ...(scheduledAt + ? { + scheduledAt, + } + : {}), + ...(templateId + ? { + templateId, + } + : {}), + ...(variables + ? { + variables, + } + : {}), + } + + const res = await fetch(`${useSendUrl}/api/v1/emails`, { + body: JSON.stringify(payload), + headers: { + Authorization: `Bearer ${apiKey}`, + 'Content-Type': 'application/json', + }, + method: 'POST', + }) + + const data = (await res.json()) as useSendResponse + + if ('emailId' in data) { + return data + } else { + const statusCode = res.status + let formattedError = `Error sending email: ${statusCode}` + if ('error' in data) { + formattedError += ` ${data.error.code} - ${data.error.message}` + } + + throw new APIError(formattedError, statusCode) + } + }, + }) + + return adapter +} + +function mapPayloadToUseSendEmail( + defaultFromName: string, + defaultFromAddress: string, + message: SendEmailOptions, +): useSendEmailOptions { + const emailOptions: Partial = { + from: mapFromAddress(message.from, defaultFromName, defaultFromAddress), + subject: message.subject, + to: mapAddresses(message.to), + } + + if (message.text?.toString().trim()) { + emailOptions.text = message.text.toString() + } else { + emailOptions.text = 'Please view this email in an HTML-compatible client.' + } + + if (message.html?.toString().trim()) { + emailOptions.html = message.html.toString() + } + + if (message.attachments?.length) { + if (message.attachments.length > 10) { + throw new APIError('Maximum of 10 attachments allowed', 400) + } + emailOptions.attachments = mapAttachments(message.attachments) + } + + if (message.replyTo) { + emailOptions.replyTo = mapAddresses(message.replyTo) + } + + if (message.cc) { + emailOptions.cc = mapAddresses(message.cc) + } + + if (message.bcc) { + emailOptions.bcc = mapAddresses(message.bcc) + } + + return emailOptions as useSendEmailOptions +} + +function mapFromAddress( + address: SendEmailOptions['from'], + defaultFromName: string, + defaultFromAddress: string, +): useSendEmailOptions['from'] { + if (Array.isArray(address)) { + return mapFromAddress(address[0], defaultFromName, defaultFromAddress) + } + + if (!address) { + return `${defaultFromName} <${defaultFromAddress}>` + } + + if (typeof address === 'string') { + return address + } + + return `${address.name} <${address.address}>` +} + +function mapAddresses(addresses: SendEmailOptions['to']): useSendEmailOptions['to'] { + if (!addresses) { + return '' + } + + if (typeof addresses === 'string') { + return addresses + } + + if (Array.isArray(addresses)) { + return addresses.map((address) => (typeof address === 'string' ? address : address.address)) + } + + return [ + addresses.address, + ] +} + +function mapAttachments( + attachments: SendEmailOptions['attachments'], +): useSendEmailOptions['attachments'] { + if (!attachments) { + return [] + } + + if (attachments.length > 10) { + throw new APIError('Maximum of 10 attachments allowed', 400) + } + + return attachments.map((attachment) => { + if (!attachment.filename || !attachment.content) { + throw new APIError('Attachment is missing filename or content', 400) + } + + if (typeof attachment.content === 'string') { + return { + content: Buffer.from(attachment.content).toString('base64'), + filename: attachment.filename, + } + } + + if (attachment.content instanceof Buffer) { + return { + content: attachment.content.toString('base64'), + filename: attachment.filename, + } + } + + throw new APIError('Attachment content must be a string or a buffer', 400) + }) +} + +type useSendEmailOptions = { + /** + * Filename and content of attachments. Max 10 attachments per email. + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-attachments + */ + attachments?: Attachment[] + + /** + * Blind carbon copy recipient email address. For multiple addresses, send as an array of strings. + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-bcc + */ + bcc?: string | string[] + + /** + * Carbon copy recipient email address. For multiple addresses, send as an array of strings. + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-cc + */ + cc?: string | string[] + + /** + * Sender email address. To include a friendly name, use the format `"Your Name "` + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-from + */ + from: string + + /** + * The HTML version of the message. + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-html + */ + html?: null | string + + /** + * The ID of the email this is in reply to, if applicable. + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-in-reply-to-id + */ + inReplyToId?: string + + /** + * Reply-to email address. For multiple addresses, send as an array of strings. + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-reply-to + */ + replyTo?: string | string[] + + /** + * The date and time to send the email. If not provided, the email will be sent immediately. + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-scheduled-at + */ + scheduledAt?: string + + /** + * Email subject. Optional when templateId is provided. + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-subject + */ + subject?: string + + /** + * ID of a template to use for this email. + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-template-id + */ + templateId?: string + + /** + * The plain text version of the message. + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-text + */ + text?: null | string + + /** + * Recipient email address. For multiple addresses, send as an array of strings. Max 50. + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-to + */ + to: string | string[] + + /** + * Email template variables. Allows for dynamic content in the email template. + * + * @link https://docs.usesend.com/api-reference/emails/send-email#body-variables + */ + variables?: Record +} + +type Attachment = { + /** Content of an attached file. */ + content: string + /** Name of attached file. */ + filename: string +} diff --git a/src/migrations/00000001_initialize_site_settings.ts b/src/migrations/00000001_initialize_site_settings.ts new file mode 100644 index 00000000..21eb6241 --- /dev/null +++ b/src/migrations/00000001_initialize_site_settings.ts @@ -0,0 +1,15 @@ +import { MigrateDownArgs, MigrateUpArgs } from '@payloadcms/db-mongodb' + +import { GlobalSlug } from '@/types/globals' + +export async function up({ payload, req, session }: MigrateUpArgs): Promise { + // Migration code + + const settings = await payload.findGlobal({ + slug: GlobalSlug.SiteSettings, + }) +} + +export async function down({ payload, req, session }: MigrateDownArgs): Promise { + // Migration code +} diff --git a/src/migrations/20250505_000746.json b/src/migrations/20250505_000746.json deleted file mode 100644 index be1a55bf..00000000 --- a/src/migrations/20250505_000746.json +++ /dev/null @@ -1,9040 +0,0 @@ -{ - "id": "50500a48-1245-4b56-9952-da43c6c5dc08", - "prevId": "00000000-0000-0000-0000-000000000000", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.resume_dummy_collection": { - "name": "resume_dummy_collection", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "resume_dummy_collection_updated_at_idx": { - "name": "resume_dummy_collection_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "resume_dummy_collection_created_at_idx": { - "name": "resume_dummy_collection_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.blog_dummy_collection": { - "name": "blog_dummy_collection", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "blog_dummy_collection_updated_at_idx": { - "name": "blog_dummy_collection_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_dummy_collection_created_at_idx": { - "name": "blog_dummy_collection_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.blog_categories": { - "name": "blog_categories", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "_status": { - "name": "_status", - "type": "enum_blog_categories_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - } - }, - "indexes": { - "blog_categories_slug_idx": { - "name": "blog_categories_slug_idx", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_categories_updated_at_idx": { - "name": "blog_categories_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_categories_created_at_idx": { - "name": "blog_categories_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_categories__status_idx": { - "name": "blog_categories__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._blog_categories_v": { - "name": "_blog_categories_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_title": { - "name": "version_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_slug": { - "name": "version_slug", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version__status": { - "name": "version__status", - "type": "enum__blog_categories_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__blog_categories_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_blog_categories_v_parent_idx": { - "name": "_blog_categories_v_parent_idx", - "columns": [ - { - "expression": "parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_categories_v_version_version_slug_idx": { - "name": "_blog_categories_v_version_version_slug_idx", - "columns": [ - { - "expression": "version_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_categories_v_version_version_updated_at_idx": { - "name": "_blog_categories_v_version_version_updated_at_idx", - "columns": [ - { - "expression": "version_updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_categories_v_version_version_created_at_idx": { - "name": "_blog_categories_v_version_version_created_at_idx", - "columns": [ - { - "expression": "version_created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_categories_v_version_version__status_idx": { - "name": "_blog_categories_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_categories_v_created_at_idx": { - "name": "_blog_categories_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_categories_v_updated_at_idx": { - "name": "_blog_categories_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_categories_v_snapshot_idx": { - "name": "_blog_categories_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_categories_v_published_locale_idx": { - "name": "_blog_categories_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_categories_v_latest_idx": { - "name": "_blog_categories_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_blog_categories_v_parent_id_blog_categories_id_fk": { - "name": "_blog_categories_v_parent_id_blog_categories_id_fk", - "tableFrom": "_blog_categories_v", - "tableTo": "blog_categories", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.blog_tags": { - "name": "blog_tags", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "_status": { - "name": "_status", - "type": "enum_blog_tags_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - } - }, - "indexes": { - "blog_tags_slug_idx": { - "name": "blog_tags_slug_idx", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_tags_updated_at_idx": { - "name": "blog_tags_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_tags_created_at_idx": { - "name": "blog_tags_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_tags__status_idx": { - "name": "blog_tags__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._blog_tags_v": { - "name": "_blog_tags_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_title": { - "name": "version_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_slug": { - "name": "version_slug", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version__status": { - "name": "version__status", - "type": "enum__blog_tags_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__blog_tags_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_blog_tags_v_parent_idx": { - "name": "_blog_tags_v_parent_idx", - "columns": [ - { - "expression": "parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_tags_v_version_version_slug_idx": { - "name": "_blog_tags_v_version_version_slug_idx", - "columns": [ - { - "expression": "version_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_tags_v_version_version_updated_at_idx": { - "name": "_blog_tags_v_version_version_updated_at_idx", - "columns": [ - { - "expression": "version_updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_tags_v_version_version_created_at_idx": { - "name": "_blog_tags_v_version_version_created_at_idx", - "columns": [ - { - "expression": "version_created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_tags_v_version_version__status_idx": { - "name": "_blog_tags_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_tags_v_created_at_idx": { - "name": "_blog_tags_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_tags_v_updated_at_idx": { - "name": "_blog_tags_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_tags_v_snapshot_idx": { - "name": "_blog_tags_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_tags_v_published_locale_idx": { - "name": "_blog_tags_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_tags_v_latest_idx": { - "name": "_blog_tags_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_blog_tags_v_parent_id_blog_tags_id_fk": { - "name": "_blog_tags_v_parent_id_blog_tags_id_fk", - "tableFrom": "_blog_tags_v", - "tableTo": "blog_tags", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.blog_posts_populated_authors": { - "name": "blog_posts_populated_authors", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "blog_posts_populated_authors_order_idx": { - "name": "blog_posts_populated_authors_order_idx", - "columns": [ - { - "expression": "_order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_posts_populated_authors_parent_id_idx": { - "name": "blog_posts_populated_authors_parent_id_idx", - "columns": [ - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "blog_posts_populated_authors_parent_id_fk": { - "name": "blog_posts_populated_authors_parent_id_fk", - "tableFrom": "blog_posts_populated_authors", - "tableTo": "blog_posts", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.blog_posts": { - "name": "blog_posts", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "published_at": { - "name": "published_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "_status": { - "name": "_status", - "type": "enum_blog_posts_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - } - }, - "indexes": { - "blog_posts_slug_idx": { - "name": "blog_posts_slug_idx", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_posts_updated_at_idx": { - "name": "blog_posts_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_posts_created_at_idx": { - "name": "blog_posts_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_posts__status_idx": { - "name": "blog_posts__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.blog_posts_locales": { - "name": "blog_posts_locales", - "schema": "", - "columns": { - "meta_title": { - "name": "meta_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "meta_image_id": { - "name": "meta_image_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "meta_description": { - "name": "meta_description", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "_locale": { - "name": "_locale", - "type": "_locales", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "blog_posts_meta_meta_image_idx": { - "name": "blog_posts_meta_meta_image_idx", - "columns": [ - { - "expression": "meta_image_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_posts_locales_locale_parent_id_unique": { - "name": "blog_posts_locales_locale_parent_id_unique", - "columns": [ - { - "expression": "_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "blog_posts_locales_meta_image_id_media_id_fk": { - "name": "blog_posts_locales_meta_image_id_media_id_fk", - "tableFrom": "blog_posts_locales", - "tableTo": "media", - "columnsFrom": [ - "meta_image_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "blog_posts_locales_parent_id_fk": { - "name": "blog_posts_locales_parent_id_fk", - "tableFrom": "blog_posts_locales", - "tableTo": "blog_posts", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.blog_posts_rels": { - "name": "blog_posts_rels", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "order": { - "name": "order", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "path": { - "name": "path", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "blog_posts_id": { - "name": "blog_posts_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "blog_categories_id": { - "name": "blog_categories_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "users_id": { - "name": "users_id", - "type": "integer", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "blog_posts_rels_order_idx": { - "name": "blog_posts_rels_order_idx", - "columns": [ - { - "expression": "order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_posts_rels_parent_idx": { - "name": "blog_posts_rels_parent_idx", - "columns": [ - { - "expression": "parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_posts_rels_path_idx": { - "name": "blog_posts_rels_path_idx", - "columns": [ - { - "expression": "path", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_posts_rels_blog_posts_id_idx": { - "name": "blog_posts_rels_blog_posts_id_idx", - "columns": [ - { - "expression": "blog_posts_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_posts_rels_blog_categories_id_idx": { - "name": "blog_posts_rels_blog_categories_id_idx", - "columns": [ - { - "expression": "blog_categories_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "blog_posts_rels_users_id_idx": { - "name": "blog_posts_rels_users_id_idx", - "columns": [ - { - "expression": "users_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "blog_posts_rels_parent_fk": { - "name": "blog_posts_rels_parent_fk", - "tableFrom": "blog_posts_rels", - "tableTo": "blog_posts", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "blog_posts_rels_blog_posts_fk": { - "name": "blog_posts_rels_blog_posts_fk", - "tableFrom": "blog_posts_rels", - "tableTo": "blog_posts", - "columnsFrom": [ - "blog_posts_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "blog_posts_rels_blog_categories_fk": { - "name": "blog_posts_rels_blog_categories_fk", - "tableFrom": "blog_posts_rels", - "tableTo": "blog_categories", - "columnsFrom": [ - "blog_categories_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "blog_posts_rels_users_fk": { - "name": "blog_posts_rels_users_fk", - "tableFrom": "blog_posts_rels", - "tableTo": "users", - "columnsFrom": [ - "users_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._blog_posts_v_version_populated_authors": { - "name": "_blog_posts_v_version_populated_authors", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "_uuid": { - "name": "_uuid", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_blog_posts_v_version_populated_authors_order_idx": { - "name": "_blog_posts_v_version_populated_authors_order_idx", - "columns": [ - { - "expression": "_order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_version_populated_authors_parent_id_idx": { - "name": "_blog_posts_v_version_populated_authors_parent_id_idx", - "columns": [ - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_blog_posts_v_version_populated_authors_parent_id_fk": { - "name": "_blog_posts_v_version_populated_authors_parent_id_fk", - "tableFrom": "_blog_posts_v_version_populated_authors", - "tableTo": "_blog_posts_v", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._blog_posts_v": { - "name": "_blog_posts_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_title": { - "name": "version_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_content": { - "name": "version_content", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "version_published_at": { - "name": "version_published_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_slug": { - "name": "version_slug", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version__status": { - "name": "version__status", - "type": "enum__blog_posts_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__blog_posts_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "autosave": { - "name": "autosave", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_blog_posts_v_parent_idx": { - "name": "_blog_posts_v_parent_idx", - "columns": [ - { - "expression": "parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_version_version_slug_idx": { - "name": "_blog_posts_v_version_version_slug_idx", - "columns": [ - { - "expression": "version_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_version_version_updated_at_idx": { - "name": "_blog_posts_v_version_version_updated_at_idx", - "columns": [ - { - "expression": "version_updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_version_version_created_at_idx": { - "name": "_blog_posts_v_version_version_created_at_idx", - "columns": [ - { - "expression": "version_created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_version_version__status_idx": { - "name": "_blog_posts_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_created_at_idx": { - "name": "_blog_posts_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_updated_at_idx": { - "name": "_blog_posts_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_snapshot_idx": { - "name": "_blog_posts_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_published_locale_idx": { - "name": "_blog_posts_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_latest_idx": { - "name": "_blog_posts_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_autosave_idx": { - "name": "_blog_posts_v_autosave_idx", - "columns": [ - { - "expression": "autosave", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_blog_posts_v_parent_id_blog_posts_id_fk": { - "name": "_blog_posts_v_parent_id_blog_posts_id_fk", - "tableFrom": "_blog_posts_v", - "tableTo": "blog_posts", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._blog_posts_v_locales": { - "name": "_blog_posts_v_locales", - "schema": "", - "columns": { - "version_meta_title": { - "name": "version_meta_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_meta_image_id": { - "name": "version_meta_image_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_meta_description": { - "name": "version_meta_description", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "_locale": { - "name": "_locale", - "type": "_locales", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "_blog_posts_v_version_meta_version_meta_image_idx": { - "name": "_blog_posts_v_version_meta_version_meta_image_idx", - "columns": [ - { - "expression": "version_meta_image_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_locales_locale_parent_id_unique": { - "name": "_blog_posts_v_locales_locale_parent_id_unique", - "columns": [ - { - "expression": "_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_blog_posts_v_locales_version_meta_image_id_media_id_fk": { - "name": "_blog_posts_v_locales_version_meta_image_id_media_id_fk", - "tableFrom": "_blog_posts_v_locales", - "tableTo": "media", - "columnsFrom": [ - "version_meta_image_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "_blog_posts_v_locales_parent_id_fk": { - "name": "_blog_posts_v_locales_parent_id_fk", - "tableFrom": "_blog_posts_v_locales", - "tableTo": "_blog_posts_v", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._blog_posts_v_rels": { - "name": "_blog_posts_v_rels", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "order": { - "name": "order", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "path": { - "name": "path", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "blog_posts_id": { - "name": "blog_posts_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "blog_categories_id": { - "name": "blog_categories_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "users_id": { - "name": "users_id", - "type": "integer", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_blog_posts_v_rels_order_idx": { - "name": "_blog_posts_v_rels_order_idx", - "columns": [ - { - "expression": "order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_rels_parent_idx": { - "name": "_blog_posts_v_rels_parent_idx", - "columns": [ - { - "expression": "parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_rels_path_idx": { - "name": "_blog_posts_v_rels_path_idx", - "columns": [ - { - "expression": "path", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_rels_blog_posts_id_idx": { - "name": "_blog_posts_v_rels_blog_posts_id_idx", - "columns": [ - { - "expression": "blog_posts_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_rels_blog_categories_id_idx": { - "name": "_blog_posts_v_rels_blog_categories_id_idx", - "columns": [ - { - "expression": "blog_categories_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_blog_posts_v_rels_users_id_idx": { - "name": "_blog_posts_v_rels_users_id_idx", - "columns": [ - { - "expression": "users_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_blog_posts_v_rels_parent_fk": { - "name": "_blog_posts_v_rels_parent_fk", - "tableFrom": "_blog_posts_v_rels", - "tableTo": "_blog_posts_v", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "_blog_posts_v_rels_blog_posts_fk": { - "name": "_blog_posts_v_rels_blog_posts_fk", - "tableFrom": "_blog_posts_v_rels", - "tableTo": "blog_posts", - "columnsFrom": [ - "blog_posts_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "_blog_posts_v_rels_blog_categories_fk": { - "name": "_blog_posts_v_rels_blog_categories_fk", - "tableFrom": "_blog_posts_v_rels", - "tableTo": "blog_categories", - "columnsFrom": [ - "blog_categories_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "_blog_posts_v_rels_users_fk": { - "name": "_blog_posts_v_rels_users_fk", - "tableFrom": "_blog_posts_v_rels", - "tableTo": "users", - "columnsFrom": [ - "users_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.general_dummy_collection": { - "name": "general_dummy_collection", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "general_dummy_collection_updated_at_idx": { - "name": "general_dummy_collection_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "general_dummy_collection_created_at_idx": { - "name": "general_dummy_collection_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.media": { - "name": "media", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "alt": { - "name": "alt", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "blur_data_u_r_l": { - "name": "blur_data_u_r_l", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "extension": { - "name": "extension", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "prefix": { - "name": "prefix", - "type": "varchar", - "primaryKey": false, - "notNull": false, - "default": "'development'" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "_status": { - "name": "_status", - "type": "enum_media_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "url": { - "name": "url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "thumbnail_u_r_l": { - "name": "thumbnail_u_r_l", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "filename": { - "name": "filename", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "mime_type": { - "name": "mime_type", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "filesize": { - "name": "filesize", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "width": { - "name": "width", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "height": { - "name": "height", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "focal_x": { - "name": "focal_x", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "focal_y": { - "name": "focal_y", - "type": "numeric", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "media_updated_at_idx": { - "name": "media_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "media_created_at_idx": { - "name": "media_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "media__status_idx": { - "name": "media__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "media_filename_idx": { - "name": "media_filename_idx", - "columns": [ - { - "expression": "filename", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._media_v": { - "name": "_media_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_alt": { - "name": "version_alt", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_blur_data_u_r_l": { - "name": "version_blur_data_u_r_l", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_type": { - "name": "version_type", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_extension": { - "name": "version_extension", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_prefix": { - "name": "version_prefix", - "type": "varchar", - "primaryKey": false, - "notNull": false, - "default": "'development'" - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version__status": { - "name": "version__status", - "type": "enum__media_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "version_url": { - "name": "version_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_thumbnail_u_r_l": { - "name": "version_thumbnail_u_r_l", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_filename": { - "name": "version_filename", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_mime_type": { - "name": "version_mime_type", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_filesize": { - "name": "version_filesize", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "version_width": { - "name": "version_width", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "version_height": { - "name": "version_height", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "version_focal_x": { - "name": "version_focal_x", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "version_focal_y": { - "name": "version_focal_y", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__media_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_media_v_parent_idx": { - "name": "_media_v_parent_idx", - "columns": [ - { - "expression": "parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_media_v_version_version_updated_at_idx": { - "name": "_media_v_version_version_updated_at_idx", - "columns": [ - { - "expression": "version_updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_media_v_version_version_created_at_idx": { - "name": "_media_v_version_version_created_at_idx", - "columns": [ - { - "expression": "version_created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_media_v_version_version__status_idx": { - "name": "_media_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_media_v_version_version_filename_idx": { - "name": "_media_v_version_version_filename_idx", - "columns": [ - { - "expression": "version_filename", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_media_v_created_at_idx": { - "name": "_media_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_media_v_updated_at_idx": { - "name": "_media_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_media_v_snapshot_idx": { - "name": "_media_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_media_v_published_locale_idx": { - "name": "_media_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_media_v_latest_idx": { - "name": "_media_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_media_v_parent_id_media_id_fk": { - "name": "_media_v_parent_id_media_id_fk", - "tableFrom": "_media_v", - "tableTo": "media", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.pages": { - "name": "pages", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "hero_id": { - "name": "hero_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "published_at": { - "name": "published_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "_status": { - "name": "_status", - "type": "enum_pages_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - } - }, - "indexes": { - "pages_hero_idx": { - "name": "pages_hero_idx", - "columns": [ - { - "expression": "hero_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "pages_slug_idx": { - "name": "pages_slug_idx", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "pages_updated_at_idx": { - "name": "pages_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "pages_created_at_idx": { - "name": "pages_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "pages__status_idx": { - "name": "pages__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "pages_hero_id_media_id_fk": { - "name": "pages_hero_id_media_id_fk", - "tableFrom": "pages", - "tableTo": "media", - "columnsFrom": [ - "hero_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.pages_locales": { - "name": "pages_locales", - "schema": "", - "columns": { - "meta_title": { - "name": "meta_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "meta_image_id": { - "name": "meta_image_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "meta_description": { - "name": "meta_description", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "_locale": { - "name": "_locale", - "type": "_locales", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "pages_meta_meta_image_idx": { - "name": "pages_meta_meta_image_idx", - "columns": [ - { - "expression": "meta_image_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "pages_locales_locale_parent_id_unique": { - "name": "pages_locales_locale_parent_id_unique", - "columns": [ - { - "expression": "_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "pages_locales_meta_image_id_media_id_fk": { - "name": "pages_locales_meta_image_id_media_id_fk", - "tableFrom": "pages_locales", - "tableTo": "media", - "columnsFrom": [ - "meta_image_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "pages_locales_parent_id_fk": { - "name": "pages_locales_parent_id_fk", - "tableFrom": "pages_locales", - "tableTo": "pages", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._pages_v": { - "name": "_pages_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_title": { - "name": "version_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_hero_id": { - "name": "version_hero_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_content": { - "name": "version_content", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "version_published_at": { - "name": "version_published_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_slug": { - "name": "version_slug", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version__status": { - "name": "version__status", - "type": "enum__pages_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__pages_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "autosave": { - "name": "autosave", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_pages_v_parent_idx": { - "name": "_pages_v_parent_idx", - "columns": [ - { - "expression": "parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_pages_v_version_version_hero_idx": { - "name": "_pages_v_version_version_hero_idx", - "columns": [ - { - "expression": "version_hero_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_pages_v_version_version_slug_idx": { - "name": "_pages_v_version_version_slug_idx", - "columns": [ - { - "expression": "version_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_pages_v_version_version_updated_at_idx": { - "name": "_pages_v_version_version_updated_at_idx", - "columns": [ - { - "expression": "version_updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_pages_v_version_version_created_at_idx": { - "name": "_pages_v_version_version_created_at_idx", - "columns": [ - { - "expression": "version_created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_pages_v_version_version__status_idx": { - "name": "_pages_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_pages_v_created_at_idx": { - "name": "_pages_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_pages_v_updated_at_idx": { - "name": "_pages_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_pages_v_snapshot_idx": { - "name": "_pages_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_pages_v_published_locale_idx": { - "name": "_pages_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_pages_v_latest_idx": { - "name": "_pages_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_pages_v_autosave_idx": { - "name": "_pages_v_autosave_idx", - "columns": [ - { - "expression": "autosave", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_pages_v_parent_id_pages_id_fk": { - "name": "_pages_v_parent_id_pages_id_fk", - "tableFrom": "_pages_v", - "tableTo": "pages", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "_pages_v_version_hero_id_media_id_fk": { - "name": "_pages_v_version_hero_id_media_id_fk", - "tableFrom": "_pages_v", - "tableTo": "media", - "columnsFrom": [ - "version_hero_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._pages_v_locales": { - "name": "_pages_v_locales", - "schema": "", - "columns": { - "version_meta_title": { - "name": "version_meta_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_meta_image_id": { - "name": "version_meta_image_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_meta_description": { - "name": "version_meta_description", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "_locale": { - "name": "_locale", - "type": "_locales", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "_pages_v_version_meta_version_meta_image_idx": { - "name": "_pages_v_version_meta_version_meta_image_idx", - "columns": [ - { - "expression": "version_meta_image_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_pages_v_locales_locale_parent_id_unique": { - "name": "_pages_v_locales_locale_parent_id_unique", - "columns": [ - { - "expression": "_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_pages_v_locales_version_meta_image_id_media_id_fk": { - "name": "_pages_v_locales_version_meta_image_id_media_id_fk", - "tableFrom": "_pages_v_locales", - "tableTo": "media", - "columnsFrom": [ - "version_meta_image_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "_pages_v_locales_parent_id_fk": { - "name": "_pages_v_locales_parent_id_fk", - "tableFrom": "_pages_v_locales", - "tableTo": "_pages_v", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "_status": { - "name": "_status", - "type": "enum_users_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "email": { - "name": "email", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "reset_password_token": { - "name": "reset_password_token", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "reset_password_expiration": { - "name": "reset_password_expiration", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "salt": { - "name": "salt", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "hash": { - "name": "hash", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "login_attempts": { - "name": "login_attempts", - "type": "numeric", - "primaryKey": false, - "notNull": false, - "default": 0 - }, - "lock_until": { - "name": "lock_until", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "users_updated_at_idx": { - "name": "users_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "users_created_at_idx": { - "name": "users_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "users__status_idx": { - "name": "users__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "users_email_idx": { - "name": "users_email_idx", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._users_v": { - "name": "_users_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_name": { - "name": "version_name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version__status": { - "name": "version__status", - "type": "enum__users_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "version_email": { - "name": "version_email", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_reset_password_token": { - "name": "version_reset_password_token", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_reset_password_expiration": { - "name": "version_reset_password_expiration", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_salt": { - "name": "version_salt", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_hash": { - "name": "version_hash", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_login_attempts": { - "name": "version_login_attempts", - "type": "numeric", - "primaryKey": false, - "notNull": false, - "default": 0 - }, - "version_lock_until": { - "name": "version_lock_until", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__users_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_users_v_parent_idx": { - "name": "_users_v_parent_idx", - "columns": [ - { - "expression": "parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_users_v_version_version_updated_at_idx": { - "name": "_users_v_version_version_updated_at_idx", - "columns": [ - { - "expression": "version_updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_users_v_version_version_created_at_idx": { - "name": "_users_v_version_version_created_at_idx", - "columns": [ - { - "expression": "version_created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_users_v_version_version__status_idx": { - "name": "_users_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_users_v_version_version_email_idx": { - "name": "_users_v_version_version_email_idx", - "columns": [ - { - "expression": "version_email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_users_v_created_at_idx": { - "name": "_users_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_users_v_updated_at_idx": { - "name": "_users_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_users_v_snapshot_idx": { - "name": "_users_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_users_v_published_locale_idx": { - "name": "_users_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_users_v_latest_idx": { - "name": "_users_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_users_v_parent_id_users_id_fk": { - "name": "_users_v_parent_id_users_id_fk", - "tableFrom": "_users_v", - "tableTo": "users", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.settings_dummy_collection": { - "name": "settings_dummy_collection", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "settings_dummy_collection_updated_at_idx": { - "name": "settings_dummy_collection_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "settings_dummy_collection_created_at_idx": { - "name": "settings_dummy_collection_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.payload_locked_documents": { - "name": "payload_locked_documents", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "global_slug": { - "name": "global_slug", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "payload_locked_documents_global_slug_idx": { - "name": "payload_locked_documents_global_slug_idx", - "columns": [ - { - "expression": "global_slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_updated_at_idx": { - "name": "payload_locked_documents_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_created_at_idx": { - "name": "payload_locked_documents_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.payload_locked_documents_rels": { - "name": "payload_locked_documents_rels", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "order": { - "name": "order", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "path": { - "name": "path", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "resume_dummy_collection_id": { - "name": "resume_dummy_collection_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "blog_dummy_collection_id": { - "name": "blog_dummy_collection_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "blog_categories_id": { - "name": "blog_categories_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "blog_tags_id": { - "name": "blog_tags_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "blog_posts_id": { - "name": "blog_posts_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "general_dummy_collection_id": { - "name": "general_dummy_collection_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "media_id": { - "name": "media_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "pages_id": { - "name": "pages_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "users_id": { - "name": "users_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "settings_dummy_collection_id": { - "name": "settings_dummy_collection_id", - "type": "integer", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "payload_locked_documents_rels_order_idx": { - "name": "payload_locked_documents_rels_order_idx", - "columns": [ - { - "expression": "order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_rels_parent_idx": { - "name": "payload_locked_documents_rels_parent_idx", - "columns": [ - { - "expression": "parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_rels_path_idx": { - "name": "payload_locked_documents_rels_path_idx", - "columns": [ - { - "expression": "path", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_rels_resume_dummy_collection_id_idx": { - "name": "payload_locked_documents_rels_resume_dummy_collection_id_idx", - "columns": [ - { - "expression": "resume_dummy_collection_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_rels_blog_dummy_collection_id_idx": { - "name": "payload_locked_documents_rels_blog_dummy_collection_id_idx", - "columns": [ - { - "expression": "blog_dummy_collection_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_rels_blog_categories_id_idx": { - "name": "payload_locked_documents_rels_blog_categories_id_idx", - "columns": [ - { - "expression": "blog_categories_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_rels_blog_tags_id_idx": { - "name": "payload_locked_documents_rels_blog_tags_id_idx", - "columns": [ - { - "expression": "blog_tags_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_rels_blog_posts_id_idx": { - "name": "payload_locked_documents_rels_blog_posts_id_idx", - "columns": [ - { - "expression": "blog_posts_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_rels_general_dummy_collection_id_idx": { - "name": "payload_locked_documents_rels_general_dummy_collection_id_idx", - "columns": [ - { - "expression": "general_dummy_collection_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_rels_media_id_idx": { - "name": "payload_locked_documents_rels_media_id_idx", - "columns": [ - { - "expression": "media_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_rels_pages_id_idx": { - "name": "payload_locked_documents_rels_pages_id_idx", - "columns": [ - { - "expression": "pages_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_rels_users_id_idx": { - "name": "payload_locked_documents_rels_users_id_idx", - "columns": [ - { - "expression": "users_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_locked_documents_rels_settings_dummy_collection_id_idx": { - "name": "payload_locked_documents_rels_settings_dummy_collection_id_idx", - "columns": [ - { - "expression": "settings_dummy_collection_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "payload_locked_documents_rels_parent_fk": { - "name": "payload_locked_documents_rels_parent_fk", - "tableFrom": "payload_locked_documents_rels", - "tableTo": "payload_locked_documents", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "payload_locked_documents_rels_resume_dummy_collection_fk": { - "name": "payload_locked_documents_rels_resume_dummy_collection_fk", - "tableFrom": "payload_locked_documents_rels", - "tableTo": "resume_dummy_collection", - "columnsFrom": [ - "resume_dummy_collection_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "payload_locked_documents_rels_blog_dummy_collection_fk": { - "name": "payload_locked_documents_rels_blog_dummy_collection_fk", - "tableFrom": "payload_locked_documents_rels", - "tableTo": "blog_dummy_collection", - "columnsFrom": [ - "blog_dummy_collection_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "payload_locked_documents_rels_blog_categories_fk": { - "name": "payload_locked_documents_rels_blog_categories_fk", - "tableFrom": "payload_locked_documents_rels", - "tableTo": "blog_categories", - "columnsFrom": [ - "blog_categories_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "payload_locked_documents_rels_blog_tags_fk": { - "name": "payload_locked_documents_rels_blog_tags_fk", - "tableFrom": "payload_locked_documents_rels", - "tableTo": "blog_tags", - "columnsFrom": [ - "blog_tags_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "payload_locked_documents_rels_blog_posts_fk": { - "name": "payload_locked_documents_rels_blog_posts_fk", - "tableFrom": "payload_locked_documents_rels", - "tableTo": "blog_posts", - "columnsFrom": [ - "blog_posts_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "payload_locked_documents_rels_general_dummy_collection_fk": { - "name": "payload_locked_documents_rels_general_dummy_collection_fk", - "tableFrom": "payload_locked_documents_rels", - "tableTo": "general_dummy_collection", - "columnsFrom": [ - "general_dummy_collection_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "payload_locked_documents_rels_media_fk": { - "name": "payload_locked_documents_rels_media_fk", - "tableFrom": "payload_locked_documents_rels", - "tableTo": "media", - "columnsFrom": [ - "media_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "payload_locked_documents_rels_pages_fk": { - "name": "payload_locked_documents_rels_pages_fk", - "tableFrom": "payload_locked_documents_rels", - "tableTo": "pages", - "columnsFrom": [ - "pages_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "payload_locked_documents_rels_users_fk": { - "name": "payload_locked_documents_rels_users_fk", - "tableFrom": "payload_locked_documents_rels", - "tableTo": "users", - "columnsFrom": [ - "users_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "payload_locked_documents_rels_settings_dummy_collection_fk": { - "name": "payload_locked_documents_rels_settings_dummy_collection_fk", - "tableFrom": "payload_locked_documents_rels", - "tableTo": "settings_dummy_collection", - "columnsFrom": [ - "settings_dummy_collection_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.payload_preferences": { - "name": "payload_preferences", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "key": { - "name": "key", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "value": { - "name": "value", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "payload_preferences_key_idx": { - "name": "payload_preferences_key_idx", - "columns": [ - { - "expression": "key", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_preferences_updated_at_idx": { - "name": "payload_preferences_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_preferences_created_at_idx": { - "name": "payload_preferences_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.payload_preferences_rels": { - "name": "payload_preferences_rels", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "order": { - "name": "order", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "path": { - "name": "path", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "users_id": { - "name": "users_id", - "type": "integer", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "payload_preferences_rels_order_idx": { - "name": "payload_preferences_rels_order_idx", - "columns": [ - { - "expression": "order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_preferences_rels_parent_idx": { - "name": "payload_preferences_rels_parent_idx", - "columns": [ - { - "expression": "parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_preferences_rels_path_idx": { - "name": "payload_preferences_rels_path_idx", - "columns": [ - { - "expression": "path", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_preferences_rels_users_id_idx": { - "name": "payload_preferences_rels_users_id_idx", - "columns": [ - { - "expression": "users_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "payload_preferences_rels_parent_fk": { - "name": "payload_preferences_rels_parent_fk", - "tableFrom": "payload_preferences_rels", - "tableTo": "payload_preferences", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "payload_preferences_rels_users_fk": { - "name": "payload_preferences_rels_users_fk", - "tableFrom": "payload_preferences_rels", - "tableTo": "users", - "columnsFrom": [ - "users_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.payload_migrations": { - "name": "payload_migrations", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "batch": { - "name": "batch", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "payload_migrations_updated_at_idx": { - "name": "payload_migrations_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "payload_migrations_created_at_idx": { - "name": "payload_migrations_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.resume_dummy_global": { - "name": "resume_dummy_global", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.resume_hero": { - "name": "resume_hero", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "background_id": { - "name": "background_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "portrait_id": { - "name": "portrait_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "caption": { - "name": "caption", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "_status": { - "name": "_status", - "type": "enum_resume_hero_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "resume_hero_background_idx": { - "name": "resume_hero_background_idx", - "columns": [ - { - "expression": "background_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "resume_hero_portrait_idx": { - "name": "resume_hero_portrait_idx", - "columns": [ - { - "expression": "portrait_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "resume_hero__status_idx": { - "name": "resume_hero__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "resume_hero_background_id_media_id_fk": { - "name": "resume_hero_background_id_media_id_fk", - "tableFrom": "resume_hero", - "tableTo": "media", - "columnsFrom": [ - "background_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "resume_hero_portrait_id_media_id_fk": { - "name": "resume_hero_portrait_id_media_id_fk", - "tableFrom": "resume_hero", - "tableTo": "media", - "columnsFrom": [ - "portrait_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._resume_hero_v": { - "name": "_resume_hero_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "version_background_id": { - "name": "version_background_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_portrait_id": { - "name": "version_portrait_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_title": { - "name": "version_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_caption": { - "name": "version_caption", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "version__status": { - "name": "version__status", - "type": "enum__resume_hero_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__resume_hero_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_resume_hero_v_version_version_background_idx": { - "name": "_resume_hero_v_version_version_background_idx", - "columns": [ - { - "expression": "version_background_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_hero_v_version_version_portrait_idx": { - "name": "_resume_hero_v_version_version_portrait_idx", - "columns": [ - { - "expression": "version_portrait_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_hero_v_version_version__status_idx": { - "name": "_resume_hero_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_hero_v_created_at_idx": { - "name": "_resume_hero_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_hero_v_updated_at_idx": { - "name": "_resume_hero_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_hero_v_snapshot_idx": { - "name": "_resume_hero_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_hero_v_published_locale_idx": { - "name": "_resume_hero_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_hero_v_latest_idx": { - "name": "_resume_hero_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_resume_hero_v_version_background_id_media_id_fk": { - "name": "_resume_hero_v_version_background_id_media_id_fk", - "tableFrom": "_resume_hero_v", - "tableTo": "media", - "columnsFrom": [ - "version_background_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "_resume_hero_v_version_portrait_id_media_id_fk": { - "name": "_resume_hero_v_version_portrait_id_media_id_fk", - "tableFrom": "_resume_hero_v", - "tableTo": "media", - "columnsFrom": [ - "version_portrait_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.resume_about_me": { - "name": "resume_about_me", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "portrait_id": { - "name": "portrait_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "anchor": { - "name": "anchor", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "_status": { - "name": "_status", - "type": "enum_resume_about_me_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "resume_about_me_portrait_idx": { - "name": "resume_about_me_portrait_idx", - "columns": [ - { - "expression": "portrait_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "resume_about_me__status_idx": { - "name": "resume_about_me__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "resume_about_me_portrait_id_media_id_fk": { - "name": "resume_about_me_portrait_id_media_id_fk", - "tableFrom": "resume_about_me", - "tableTo": "media", - "columnsFrom": [ - "portrait_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._resume_about_me_v": { - "name": "_resume_about_me_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "version_portrait_id": { - "name": "version_portrait_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_title": { - "name": "version_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_content": { - "name": "version_content", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "version_anchor": { - "name": "version_anchor", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version__status": { - "name": "version__status", - "type": "enum__resume_about_me_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__resume_about_me_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_resume_about_me_v_version_version_portrait_idx": { - "name": "_resume_about_me_v_version_version_portrait_idx", - "columns": [ - { - "expression": "version_portrait_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_about_me_v_version_version__status_idx": { - "name": "_resume_about_me_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_about_me_v_created_at_idx": { - "name": "_resume_about_me_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_about_me_v_updated_at_idx": { - "name": "_resume_about_me_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_about_me_v_snapshot_idx": { - "name": "_resume_about_me_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_about_me_v_published_locale_idx": { - "name": "_resume_about_me_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_about_me_v_latest_idx": { - "name": "_resume_about_me_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_resume_about_me_v_version_portrait_id_media_id_fk": { - "name": "_resume_about_me_v_version_portrait_id_media_id_fk", - "tableFrom": "_resume_about_me_v", - "tableTo": "media", - "columnsFrom": [ - "version_portrait_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.resume_experience_entries": { - "name": "resume_experience_entries", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "employer": { - "name": "employer", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "start_date": { - "name": "start_date", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "end_date": { - "name": "end_date", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "rich_text": { - "name": "rich_text", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "technologies": { - "name": "technologies", - "type": "jsonb", - "primaryKey": false, - "notNull": false, - "default": "'[]'::jsonb" - } - }, - "indexes": { - "resume_experience_entries_order_idx": { - "name": "resume_experience_entries_order_idx", - "columns": [ - { - "expression": "_order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "resume_experience_entries_parent_id_idx": { - "name": "resume_experience_entries_parent_id_idx", - "columns": [ - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "resume_experience_entries_parent_id_fk": { - "name": "resume_experience_entries_parent_id_fk", - "tableFrom": "resume_experience_entries", - "tableTo": "resume_experience", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.resume_experience": { - "name": "resume_experience", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "caption": { - "name": "caption", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "anchor": { - "name": "anchor", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "skill_summary": { - "name": "skill_summary", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "_status": { - "name": "_status", - "type": "enum_resume_experience_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "resume_experience__status_idx": { - "name": "resume_experience__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._resume_experience_v_version_entries": { - "name": "_resume_experience_v_version_entries", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "employer": { - "name": "employer", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "start_date": { - "name": "start_date", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "end_date": { - "name": "end_date", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "rich_text": { - "name": "rich_text", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "technologies": { - "name": "technologies", - "type": "jsonb", - "primaryKey": false, - "notNull": false, - "default": "'[]'::jsonb" - }, - "_uuid": { - "name": "_uuid", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_resume_experience_v_version_entries_order_idx": { - "name": "_resume_experience_v_version_entries_order_idx", - "columns": [ - { - "expression": "_order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_experience_v_version_entries_parent_id_idx": { - "name": "_resume_experience_v_version_entries_parent_id_idx", - "columns": [ - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_resume_experience_v_version_entries_parent_id_fk": { - "name": "_resume_experience_v_version_entries_parent_id_fk", - "tableFrom": "_resume_experience_v_version_entries", - "tableTo": "_resume_experience_v", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._resume_experience_v": { - "name": "_resume_experience_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "version_title": { - "name": "version_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_caption": { - "name": "version_caption", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "version_anchor": { - "name": "version_anchor", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_skill_summary": { - "name": "version_skill_summary", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "version__status": { - "name": "version__status", - "type": "enum__resume_experience_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__resume_experience_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_resume_experience_v_version_version__status_idx": { - "name": "_resume_experience_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_experience_v_created_at_idx": { - "name": "_resume_experience_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_experience_v_updated_at_idx": { - "name": "_resume_experience_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_experience_v_snapshot_idx": { - "name": "_resume_experience_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_experience_v_published_locale_idx": { - "name": "_resume_experience_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_experience_v_latest_idx": { - "name": "_resume_experience_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.resume_projects_entries": { - "name": "resume_projects_entries", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "headline": { - "name": "headline", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "subline": { - "name": "subline", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "rich_text": { - "name": "rich_text", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "image_id": { - "name": "image_id", - "type": "integer", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "resume_projects_entries_order_idx": { - "name": "resume_projects_entries_order_idx", - "columns": [ - { - "expression": "_order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "resume_projects_entries_parent_id_idx": { - "name": "resume_projects_entries_parent_id_idx", - "columns": [ - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "resume_projects_entries_image_idx": { - "name": "resume_projects_entries_image_idx", - "columns": [ - { - "expression": "image_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "resume_projects_entries_image_id_media_id_fk": { - "name": "resume_projects_entries_image_id_media_id_fk", - "tableFrom": "resume_projects_entries", - "tableTo": "media", - "columnsFrom": [ - "image_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "resume_projects_entries_parent_id_fk": { - "name": "resume_projects_entries_parent_id_fk", - "tableFrom": "resume_projects_entries", - "tableTo": "resume_projects", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.resume_projects": { - "name": "resume_projects", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "caption": { - "name": "caption", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "anchor": { - "name": "anchor", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "_status": { - "name": "_status", - "type": "enum_resume_projects_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "resume_projects__status_idx": { - "name": "resume_projects__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._resume_projects_v_version_entries": { - "name": "_resume_projects_v_version_entries", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "headline": { - "name": "headline", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "subline": { - "name": "subline", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "rich_text": { - "name": "rich_text", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "image_id": { - "name": "image_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "_uuid": { - "name": "_uuid", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_resume_projects_v_version_entries_order_idx": { - "name": "_resume_projects_v_version_entries_order_idx", - "columns": [ - { - "expression": "_order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_projects_v_version_entries_parent_id_idx": { - "name": "_resume_projects_v_version_entries_parent_id_idx", - "columns": [ - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_projects_v_version_entries_image_idx": { - "name": "_resume_projects_v_version_entries_image_idx", - "columns": [ - { - "expression": "image_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_resume_projects_v_version_entries_image_id_media_id_fk": { - "name": "_resume_projects_v_version_entries_image_id_media_id_fk", - "tableFrom": "_resume_projects_v_version_entries", - "tableTo": "media", - "columnsFrom": [ - "image_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "_resume_projects_v_version_entries_parent_id_fk": { - "name": "_resume_projects_v_version_entries_parent_id_fk", - "tableFrom": "_resume_projects_v_version_entries", - "tableTo": "_resume_projects_v", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._resume_projects_v": { - "name": "_resume_projects_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "version_title": { - "name": "version_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_caption": { - "name": "version_caption", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "version_anchor": { - "name": "version_anchor", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version__status": { - "name": "version__status", - "type": "enum__resume_projects_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__resume_projects_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_resume_projects_v_version_version__status_idx": { - "name": "_resume_projects_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_projects_v_created_at_idx": { - "name": "_resume_projects_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_projects_v_updated_at_idx": { - "name": "_resume_projects_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_projects_v_snapshot_idx": { - "name": "_resume_projects_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_projects_v_published_locale_idx": { - "name": "_resume_projects_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_projects_v_latest_idx": { - "name": "_resume_projects_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.resume_customers_entries": { - "name": "resume_customers_entries", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "logo": { - "name": "logo", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "resume_customers_entries_order_idx": { - "name": "resume_customers_entries_order_idx", - "columns": [ - { - "expression": "_order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "resume_customers_entries_parent_id_idx": { - "name": "resume_customers_entries_parent_id_idx", - "columns": [ - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "resume_customers_entries_parent_id_fk": { - "name": "resume_customers_entries_parent_id_fk", - "tableFrom": "resume_customers_entries", - "tableTo": "resume_customers", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.resume_customers": { - "name": "resume_customers", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "caption": { - "name": "caption", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "anchor": { - "name": "anchor", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "_status": { - "name": "_status", - "type": "enum_resume_customers_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "resume_customers__status_idx": { - "name": "resume_customers__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._resume_customers_v_version_entries": { - "name": "_resume_customers_v_version_entries", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "logo": { - "name": "logo", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "_uuid": { - "name": "_uuid", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_resume_customers_v_version_entries_order_idx": { - "name": "_resume_customers_v_version_entries_order_idx", - "columns": [ - { - "expression": "_order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_customers_v_version_entries_parent_id_idx": { - "name": "_resume_customers_v_version_entries_parent_id_idx", - "columns": [ - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_resume_customers_v_version_entries_parent_id_fk": { - "name": "_resume_customers_v_version_entries_parent_id_fk", - "tableFrom": "_resume_customers_v_version_entries", - "tableTo": "_resume_customers_v", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._resume_customers_v": { - "name": "_resume_customers_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "version_title": { - "name": "version_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_caption": { - "name": "version_caption", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "version_anchor": { - "name": "version_anchor", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version__status": { - "name": "version__status", - "type": "enum__resume_customers_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__resume_customers_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_resume_customers_v_version_version__status_idx": { - "name": "_resume_customers_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_customers_v_created_at_idx": { - "name": "_resume_customers_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_customers_v_updated_at_idx": { - "name": "_resume_customers_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_customers_v_snapshot_idx": { - "name": "_resume_customers_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_customers_v_published_locale_idx": { - "name": "_resume_customers_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_customers_v_latest_idx": { - "name": "_resume_customers_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.resume_contact": { - "name": "resume_contact", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "caption": { - "name": "caption", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "mail_button_label": { - "name": "mail_button_label", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "mail_button_href": { - "name": "mail_button_href", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "anchor": { - "name": "anchor", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "_status": { - "name": "_status", - "type": "enum_resume_contact_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "resume_contact__status_idx": { - "name": "resume_contact__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._resume_contact_v": { - "name": "_resume_contact_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "version_title": { - "name": "version_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_caption": { - "name": "version_caption", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "version_mail_button_label": { - "name": "version_mail_button_label", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_mail_button_href": { - "name": "version_mail_button_href", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_anchor": { - "name": "version_anchor", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version__status": { - "name": "version__status", - "type": "enum__resume_contact_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__resume_contact_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_resume_contact_v_version_version__status_idx": { - "name": "_resume_contact_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_contact_v_created_at_idx": { - "name": "_resume_contact_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_contact_v_updated_at_idx": { - "name": "_resume_contact_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_contact_v_snapshot_idx": { - "name": "_resume_contact_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_contact_v_published_locale_idx": { - "name": "_resume_contact_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_resume_contact_v_latest_idx": { - "name": "_resume_contact_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.blog_dummy_global": { - "name": "blog_dummy_global", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.general_dummy_global": { - "name": "general_dummy_global", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.settings_dummy_global": { - "name": "settings_dummy_global", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.settings_navigation_header_nav_items": { - "name": "settings_navigation_header_nav_items", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "link_type": { - "name": "link_type", - "type": "enum_settings_navigation_header_nav_items_link_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'reference'" - }, - "link_new_tab": { - "name": "link_new_tab", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "link_url": { - "name": "link_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "link_label": { - "name": "link_label", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "settings_navigation_header_nav_items_order_idx": { - "name": "settings_navigation_header_nav_items_order_idx", - "columns": [ - { - "expression": "_order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "settings_navigation_header_nav_items_parent_id_idx": { - "name": "settings_navigation_header_nav_items_parent_id_idx", - "columns": [ - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "settings_navigation_header_nav_items_parent_id_fk": { - "name": "settings_navigation_header_nav_items_parent_id_fk", - "tableFrom": "settings_navigation_header_nav_items", - "tableTo": "settings_navigation", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.settings_navigation_footer_nav_items": { - "name": "settings_navigation_footer_nav_items", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "link_type": { - "name": "link_type", - "type": "enum_settings_navigation_footer_nav_items_link_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'reference'" - }, - "link_new_tab": { - "name": "link_new_tab", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "link_url": { - "name": "link_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "link_label": { - "name": "link_label", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "settings_navigation_footer_nav_items_order_idx": { - "name": "settings_navigation_footer_nav_items_order_idx", - "columns": [ - { - "expression": "_order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "settings_navigation_footer_nav_items_parent_id_idx": { - "name": "settings_navigation_footer_nav_items_parent_id_idx", - "columns": [ - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "settings_navigation_footer_nav_items_parent_id_fk": { - "name": "settings_navigation_footer_nav_items_parent_id_fk", - "tableFrom": "settings_navigation_footer_nav_items", - "tableTo": "settings_navigation", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.settings_navigation": { - "name": "settings_navigation", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "_status": { - "name": "_status", - "type": "enum_settings_navigation_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "settings_navigation__status_idx": { - "name": "settings_navigation__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.settings_navigation_rels": { - "name": "settings_navigation_rels", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "order": { - "name": "order", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "path": { - "name": "path", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "pages_id": { - "name": "pages_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "blog_posts_id": { - "name": "blog_posts_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "blog_categories_id": { - "name": "blog_categories_id", - "type": "integer", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "settings_navigation_rels_order_idx": { - "name": "settings_navigation_rels_order_idx", - "columns": [ - { - "expression": "order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "settings_navigation_rels_parent_idx": { - "name": "settings_navigation_rels_parent_idx", - "columns": [ - { - "expression": "parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "settings_navigation_rels_path_idx": { - "name": "settings_navigation_rels_path_idx", - "columns": [ - { - "expression": "path", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "settings_navigation_rels_pages_id_idx": { - "name": "settings_navigation_rels_pages_id_idx", - "columns": [ - { - "expression": "pages_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "settings_navigation_rels_blog_posts_id_idx": { - "name": "settings_navigation_rels_blog_posts_id_idx", - "columns": [ - { - "expression": "blog_posts_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "settings_navigation_rels_blog_categories_id_idx": { - "name": "settings_navigation_rels_blog_categories_id_idx", - "columns": [ - { - "expression": "blog_categories_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "settings_navigation_rels_parent_fk": { - "name": "settings_navigation_rels_parent_fk", - "tableFrom": "settings_navigation_rels", - "tableTo": "settings_navigation", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "settings_navigation_rels_pages_fk": { - "name": "settings_navigation_rels_pages_fk", - "tableFrom": "settings_navigation_rels", - "tableTo": "pages", - "columnsFrom": [ - "pages_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "settings_navigation_rels_blog_posts_fk": { - "name": "settings_navigation_rels_blog_posts_fk", - "tableFrom": "settings_navigation_rels", - "tableTo": "blog_posts", - "columnsFrom": [ - "blog_posts_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "settings_navigation_rels_blog_categories_fk": { - "name": "settings_navigation_rels_blog_categories_fk", - "tableFrom": "settings_navigation_rels", - "tableTo": "blog_categories", - "columnsFrom": [ - "blog_categories_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._settings_navigation_v_version_header_nav_items": { - "name": "_settings_navigation_v_version_header_nav_items", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "link_type": { - "name": "link_type", - "type": "enum__settings_navigation_v_version_header_nav_items_link_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'reference'" - }, - "link_new_tab": { - "name": "link_new_tab", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "link_url": { - "name": "link_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "link_label": { - "name": "link_label", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "_uuid": { - "name": "_uuid", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_settings_navigation_v_version_header_nav_items_order_idx": { - "name": "_settings_navigation_v_version_header_nav_items_order_idx", - "columns": [ - { - "expression": "_order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_navigation_v_version_header_nav_items_parent_id_idx": { - "name": "_settings_navigation_v_version_header_nav_items_parent_id_idx", - "columns": [ - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_settings_navigation_v_version_header_nav_items_parent_id_fk": { - "name": "_settings_navigation_v_version_header_nav_items_parent_id_fk", - "tableFrom": "_settings_navigation_v_version_header_nav_items", - "tableTo": "_settings_navigation_v", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._settings_navigation_v_version_footer_nav_items": { - "name": "_settings_navigation_v_version_footer_nav_items", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "link_type": { - "name": "link_type", - "type": "enum__settings_navigation_v_version_footer_nav_items_link_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'reference'" - }, - "link_new_tab": { - "name": "link_new_tab", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "link_url": { - "name": "link_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "link_label": { - "name": "link_label", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "_uuid": { - "name": "_uuid", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_settings_navigation_v_version_footer_nav_items_order_idx": { - "name": "_settings_navigation_v_version_footer_nav_items_order_idx", - "columns": [ - { - "expression": "_order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_navigation_v_version_footer_nav_items_parent_id_idx": { - "name": "_settings_navigation_v_version_footer_nav_items_parent_id_idx", - "columns": [ - { - "expression": "_parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_settings_navigation_v_version_footer_nav_items_parent_id_fk": { - "name": "_settings_navigation_v_version_footer_nav_items_parent_id_fk", - "tableFrom": "_settings_navigation_v_version_footer_nav_items", - "tableTo": "_settings_navigation_v", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._settings_navigation_v": { - "name": "_settings_navigation_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "version__status": { - "name": "version__status", - "type": "enum__settings_navigation_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__settings_navigation_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_settings_navigation_v_version_version__status_idx": { - "name": "_settings_navigation_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_navigation_v_created_at_idx": { - "name": "_settings_navigation_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_navigation_v_updated_at_idx": { - "name": "_settings_navigation_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_navigation_v_snapshot_idx": { - "name": "_settings_navigation_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_navigation_v_published_locale_idx": { - "name": "_settings_navigation_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_navigation_v_latest_idx": { - "name": "_settings_navigation_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._settings_navigation_v_rels": { - "name": "_settings_navigation_v_rels", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "order": { - "name": "order", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "path": { - "name": "path", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "pages_id": { - "name": "pages_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "blog_posts_id": { - "name": "blog_posts_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "blog_categories_id": { - "name": "blog_categories_id", - "type": "integer", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_settings_navigation_v_rels_order_idx": { - "name": "_settings_navigation_v_rels_order_idx", - "columns": [ - { - "expression": "order", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_navigation_v_rels_parent_idx": { - "name": "_settings_navigation_v_rels_parent_idx", - "columns": [ - { - "expression": "parent_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_navigation_v_rels_path_idx": { - "name": "_settings_navigation_v_rels_path_idx", - "columns": [ - { - "expression": "path", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_navigation_v_rels_pages_id_idx": { - "name": "_settings_navigation_v_rels_pages_id_idx", - "columns": [ - { - "expression": "pages_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_navigation_v_rels_blog_posts_id_idx": { - "name": "_settings_navigation_v_rels_blog_posts_id_idx", - "columns": [ - { - "expression": "blog_posts_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_navigation_v_rels_blog_categories_id_idx": { - "name": "_settings_navigation_v_rels_blog_categories_id_idx", - "columns": [ - { - "expression": "blog_categories_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_settings_navigation_v_rels_parent_fk": { - "name": "_settings_navigation_v_rels_parent_fk", - "tableFrom": "_settings_navigation_v_rels", - "tableTo": "_settings_navigation_v", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "_settings_navigation_v_rels_pages_fk": { - "name": "_settings_navigation_v_rels_pages_fk", - "tableFrom": "_settings_navigation_v_rels", - "tableTo": "pages", - "columnsFrom": [ - "pages_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "_settings_navigation_v_rels_blog_posts_fk": { - "name": "_settings_navigation_v_rels_blog_posts_fk", - "tableFrom": "_settings_navigation_v_rels", - "tableTo": "blog_posts", - "columnsFrom": [ - "blog_posts_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "_settings_navigation_v_rels_blog_categories_fk": { - "name": "_settings_navigation_v_rels_blog_categories_fk", - "tableFrom": "_settings_navigation_v_rels", - "tableTo": "blog_categories", - "columnsFrom": [ - "blog_categories_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.settings_meta": { - "name": "settings_meta", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "site_name": { - "name": "site_name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "title_template": { - "name": "title_template", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "fallback_title": { - "name": "fallback_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "fallback_description": { - "name": "fallback_description", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "fallback_image_id": { - "name": "fallback_image_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "keywords": { - "name": "keywords", - "type": "jsonb", - "primaryKey": false, - "notNull": false, - "default": "'[]'::jsonb" - }, - "_status": { - "name": "_status", - "type": "enum_settings_meta_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "settings_meta_fallback_image_idx": { - "name": "settings_meta_fallback_image_idx", - "columns": [ - { - "expression": "fallback_image_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "settings_meta__status_idx": { - "name": "settings_meta__status_idx", - "columns": [ - { - "expression": "_status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "settings_meta_fallback_image_id_media_id_fk": { - "name": "settings_meta_fallback_image_id_media_id_fk", - "tableFrom": "settings_meta", - "tableTo": "media", - "columnsFrom": [ - "fallback_image_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public._settings_meta_v": { - "name": "_settings_meta_v", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "version_site_name": { - "name": "version_site_name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_title_template": { - "name": "version_title_template", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_fallback_title": { - "name": "version_fallback_title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_fallback_description": { - "name": "version_fallback_description", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "version_fallback_image_id": { - "name": "version_fallback_image_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "version_keywords": { - "name": "version_keywords", - "type": "jsonb", - "primaryKey": false, - "notNull": false, - "default": "'[]'::jsonb" - }, - "version__status": { - "name": "version__status", - "type": "enum__settings_meta_v_version_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'draft'" - }, - "version_updated_at": { - "name": "version_updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "version_created_at": { - "name": "version_created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp(3) with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "snapshot": { - "name": "snapshot", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "published_locale": { - "name": "published_locale", - "type": "enum__settings_meta_v_published_locale", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "latest": { - "name": "latest", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "_settings_meta_v_version_version_fallback_image_idx": { - "name": "_settings_meta_v_version_version_fallback_image_idx", - "columns": [ - { - "expression": "version_fallback_image_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_meta_v_version_version__status_idx": { - "name": "_settings_meta_v_version_version__status_idx", - "columns": [ - { - "expression": "version__status", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_meta_v_created_at_idx": { - "name": "_settings_meta_v_created_at_idx", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_meta_v_updated_at_idx": { - "name": "_settings_meta_v_updated_at_idx", - "columns": [ - { - "expression": "updated_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_meta_v_snapshot_idx": { - "name": "_settings_meta_v_snapshot_idx", - "columns": [ - { - "expression": "snapshot", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_meta_v_published_locale_idx": { - "name": "_settings_meta_v_published_locale_idx", - "columns": [ - { - "expression": "published_locale", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "_settings_meta_v_latest_idx": { - "name": "_settings_meta_v_latest_idx", - "columns": [ - { - "expression": "latest", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "_settings_meta_v_version_fallback_image_id_media_id_fk": { - "name": "_settings_meta_v_version_fallback_image_id_media_id_fk", - "tableFrom": "_settings_meta_v", - "tableTo": "media", - "columnsFrom": [ - "version_fallback_image_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public._locales": { - "name": "_locales", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_blog_categories_status": { - "name": "enum_blog_categories_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__blog_categories_v_version_status": { - "name": "enum__blog_categories_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__blog_categories_v_published_locale": { - "name": "enum__blog_categories_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_blog_tags_status": { - "name": "enum_blog_tags_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__blog_tags_v_version_status": { - "name": "enum__blog_tags_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__blog_tags_v_published_locale": { - "name": "enum__blog_tags_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_blog_posts_status": { - "name": "enum_blog_posts_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__blog_posts_v_version_status": { - "name": "enum__blog_posts_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__blog_posts_v_published_locale": { - "name": "enum__blog_posts_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_media_status": { - "name": "enum_media_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__media_v_version_status": { - "name": "enum__media_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__media_v_published_locale": { - "name": "enum__media_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_pages_status": { - "name": "enum_pages_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__pages_v_version_status": { - "name": "enum__pages_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__pages_v_published_locale": { - "name": "enum__pages_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_users_status": { - "name": "enum_users_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__users_v_version_status": { - "name": "enum__users_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__users_v_published_locale": { - "name": "enum__users_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_resume_hero_status": { - "name": "enum_resume_hero_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__resume_hero_v_version_status": { - "name": "enum__resume_hero_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__resume_hero_v_published_locale": { - "name": "enum__resume_hero_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_resume_about_me_status": { - "name": "enum_resume_about_me_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__resume_about_me_v_version_status": { - "name": "enum__resume_about_me_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__resume_about_me_v_published_locale": { - "name": "enum__resume_about_me_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_resume_experience_status": { - "name": "enum_resume_experience_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__resume_experience_v_version_status": { - "name": "enum__resume_experience_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__resume_experience_v_published_locale": { - "name": "enum__resume_experience_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_resume_projects_status": { - "name": "enum_resume_projects_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__resume_projects_v_version_status": { - "name": "enum__resume_projects_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__resume_projects_v_published_locale": { - "name": "enum__resume_projects_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_resume_customers_status": { - "name": "enum_resume_customers_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__resume_customers_v_version_status": { - "name": "enum__resume_customers_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__resume_customers_v_published_locale": { - "name": "enum__resume_customers_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_resume_contact_status": { - "name": "enum_resume_contact_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__resume_contact_v_version_status": { - "name": "enum__resume_contact_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__resume_contact_v_published_locale": { - "name": "enum__resume_contact_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_settings_navigation_header_nav_items_link_type": { - "name": "enum_settings_navigation_header_nav_items_link_type", - "schema": "public", - "values": [ - "reference", - "custom" - ] - }, - "public.enum_settings_navigation_footer_nav_items_link_type": { - "name": "enum_settings_navigation_footer_nav_items_link_type", - "schema": "public", - "values": [ - "reference", - "custom" - ] - }, - "public.enum_settings_navigation_status": { - "name": "enum_settings_navigation_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__settings_navigation_v_version_header_nav_items_link_type": { - "name": "enum__settings_navigation_v_version_header_nav_items_link_type", - "schema": "public", - "values": [ - "reference", - "custom" - ] - }, - "public.enum__settings_navigation_v_version_footer_nav_items_link_type": { - "name": "enum__settings_navigation_v_version_footer_nav_items_link_type", - "schema": "public", - "values": [ - "reference", - "custom" - ] - }, - "public.enum__settings_navigation_v_version_status": { - "name": "enum__settings_navigation_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__settings_navigation_v_published_locale": { - "name": "enum__settings_navigation_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - }, - "public.enum_settings_meta_status": { - "name": "enum_settings_meta_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__settings_meta_v_version_status": { - "name": "enum__settings_meta_v_version_status", - "schema": "public", - "values": [ - "draft", - "published" - ] - }, - "public.enum__settings_meta_v_published_locale": { - "name": "enum__settings_meta_v_published_locale", - "schema": "public", - "values": [ - "en" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - } -} \ No newline at end of file diff --git a/src/migrations/20250505_000746.ts b/src/migrations/20250505_000746.ts deleted file mode 100644 index ab0af27e..00000000 --- a/src/migrations/20250505_000746.ts +++ /dev/null @@ -1,1503 +0,0 @@ -import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-postgres' - -export async function up({ db, payload, req }: MigrateUpArgs): Promise { - await db.execute(sql` - CREATE TYPE "public"."_locales" AS ENUM('en'); - CREATE TYPE "public"."enum_blog_categories_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__blog_categories_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__blog_categories_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_blog_tags_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__blog_tags_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__blog_tags_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_blog_posts_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__blog_posts_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__blog_posts_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_media_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__media_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__media_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_pages_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__pages_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__pages_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_users_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__users_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__users_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_resume_hero_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__resume_hero_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__resume_hero_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_resume_about_me_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__resume_about_me_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__resume_about_me_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_resume_experience_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__resume_experience_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__resume_experience_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_resume_projects_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__resume_projects_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__resume_projects_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_resume_customers_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__resume_customers_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__resume_customers_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_resume_contact_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__resume_contact_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__resume_contact_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_settings_navigation_header_nav_items_link_type" AS ENUM('reference', 'custom'); - CREATE TYPE "public"."enum_settings_navigation_footer_nav_items_link_type" AS ENUM('reference', 'custom'); - CREATE TYPE "public"."enum_settings_navigation_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__settings_navigation_v_version_header_nav_items_link_type" AS ENUM('reference', 'custom'); - CREATE TYPE "public"."enum__settings_navigation_v_version_footer_nav_items_link_type" AS ENUM('reference', 'custom'); - CREATE TYPE "public"."enum__settings_navigation_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__settings_navigation_v_published_locale" AS ENUM('en'); - CREATE TYPE "public"."enum_settings_meta_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__settings_meta_v_version_status" AS ENUM('draft', 'published'); - CREATE TYPE "public"."enum__settings_meta_v_published_locale" AS ENUM('en'); - CREATE TABLE IF NOT EXISTS "resume_dummy_collection" ( - "id" serial PRIMARY KEY NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL - ); - - CREATE TABLE IF NOT EXISTS "blog_dummy_collection" ( - "id" serial PRIMARY KEY NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL - ); - - CREATE TABLE IF NOT EXISTS "blog_categories" ( - "id" serial PRIMARY KEY NOT NULL, - "title" varchar, - "slug" varchar, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "_status" "enum_blog_categories_status" DEFAULT 'draft' - ); - - CREATE TABLE IF NOT EXISTS "_blog_categories_v" ( - "id" serial PRIMARY KEY NOT NULL, - "parent_id" integer, - "version_title" varchar, - "version_slug" varchar, - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "version__status" "enum__blog_categories_v_version_status" DEFAULT 'draft', - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__blog_categories_v_published_locale", - "latest" boolean - ); - - CREATE TABLE IF NOT EXISTS "blog_tags" ( - "id" serial PRIMARY KEY NOT NULL, - "title" varchar, - "slug" varchar, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "_status" "enum_blog_tags_status" DEFAULT 'draft' - ); - - CREATE TABLE IF NOT EXISTS "_blog_tags_v" ( - "id" serial PRIMARY KEY NOT NULL, - "parent_id" integer, - "version_title" varchar, - "version_slug" varchar, - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "version__status" "enum__blog_tags_v_version_status" DEFAULT 'draft', - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__blog_tags_v_published_locale", - "latest" boolean - ); - - CREATE TABLE IF NOT EXISTS "blog_posts_populated_authors" ( - "_order" integer NOT NULL, - "_parent_id" integer NOT NULL, - "id" varchar PRIMARY KEY NOT NULL, - "name" varchar - ); - - CREATE TABLE IF NOT EXISTS "blog_posts" ( - "id" serial PRIMARY KEY NOT NULL, - "title" varchar, - "content" jsonb, - "published_at" timestamp(3) with time zone, - "slug" varchar, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "_status" "enum_blog_posts_status" DEFAULT 'draft' - ); - - CREATE TABLE IF NOT EXISTS "blog_posts_locales" ( - "meta_title" varchar, - "meta_image_id" integer, - "meta_description" varchar, - "id" serial PRIMARY KEY NOT NULL, - "_locale" "_locales" NOT NULL, - "_parent_id" integer NOT NULL - ); - - CREATE TABLE IF NOT EXISTS "blog_posts_rels" ( - "id" serial PRIMARY KEY NOT NULL, - "order" integer, - "parent_id" integer NOT NULL, - "path" varchar NOT NULL, - "blog_posts_id" integer, - "blog_categories_id" integer, - "users_id" integer - ); - - CREATE TABLE IF NOT EXISTS "_blog_posts_v_version_populated_authors" ( - "_order" integer NOT NULL, - "_parent_id" integer NOT NULL, - "id" serial PRIMARY KEY NOT NULL, - "_uuid" varchar, - "name" varchar - ); - - CREATE TABLE IF NOT EXISTS "_blog_posts_v" ( - "id" serial PRIMARY KEY NOT NULL, - "parent_id" integer, - "version_title" varchar, - "version_content" jsonb, - "version_published_at" timestamp(3) with time zone, - "version_slug" varchar, - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "version__status" "enum__blog_posts_v_version_status" DEFAULT 'draft', - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__blog_posts_v_published_locale", - "latest" boolean, - "autosave" boolean - ); - - CREATE TABLE IF NOT EXISTS "_blog_posts_v_locales" ( - "version_meta_title" varchar, - "version_meta_image_id" integer, - "version_meta_description" varchar, - "id" serial PRIMARY KEY NOT NULL, - "_locale" "_locales" NOT NULL, - "_parent_id" integer NOT NULL - ); - - CREATE TABLE IF NOT EXISTS "_blog_posts_v_rels" ( - "id" serial PRIMARY KEY NOT NULL, - "order" integer, - "parent_id" integer NOT NULL, - "path" varchar NOT NULL, - "blog_posts_id" integer, - "blog_categories_id" integer, - "users_id" integer - ); - - CREATE TABLE IF NOT EXISTS "general_dummy_collection" ( - "id" serial PRIMARY KEY NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL - ); - - CREATE TABLE IF NOT EXISTS "media" ( - "id" serial PRIMARY KEY NOT NULL, - "alt" varchar, - "blur_data_u_r_l" varchar, - "type" varchar, - "extension" varchar, - "prefix" varchar DEFAULT 'development', - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "_status" "enum_media_status" DEFAULT 'draft', - "url" varchar, - "thumbnail_u_r_l" varchar, - "filename" varchar, - "mime_type" varchar, - "filesize" numeric, - "width" numeric, - "height" numeric, - "focal_x" numeric, - "focal_y" numeric - ); - - CREATE TABLE IF NOT EXISTS "_media_v" ( - "id" serial PRIMARY KEY NOT NULL, - "parent_id" integer, - "version_alt" varchar, - "version_blur_data_u_r_l" varchar, - "version_type" varchar, - "version_extension" varchar, - "version_prefix" varchar DEFAULT 'development', - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "version__status" "enum__media_v_version_status" DEFAULT 'draft', - "version_url" varchar, - "version_thumbnail_u_r_l" varchar, - "version_filename" varchar, - "version_mime_type" varchar, - "version_filesize" numeric, - "version_width" numeric, - "version_height" numeric, - "version_focal_x" numeric, - "version_focal_y" numeric, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__media_v_published_locale", - "latest" boolean - ); - - CREATE TABLE IF NOT EXISTS "pages" ( - "id" serial PRIMARY KEY NOT NULL, - "title" varchar, - "hero_id" integer, - "content" jsonb, - "published_at" timestamp(3) with time zone, - "slug" varchar, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "_status" "enum_pages_status" DEFAULT 'draft' - ); - - CREATE TABLE IF NOT EXISTS "pages_locales" ( - "meta_title" varchar, - "meta_image_id" integer, - "meta_description" varchar, - "id" serial PRIMARY KEY NOT NULL, - "_locale" "_locales" NOT NULL, - "_parent_id" integer NOT NULL - ); - - CREATE TABLE IF NOT EXISTS "_pages_v" ( - "id" serial PRIMARY KEY NOT NULL, - "parent_id" integer, - "version_title" varchar, - "version_hero_id" integer, - "version_content" jsonb, - "version_published_at" timestamp(3) with time zone, - "version_slug" varchar, - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "version__status" "enum__pages_v_version_status" DEFAULT 'draft', - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__pages_v_published_locale", - "latest" boolean, - "autosave" boolean - ); - - CREATE TABLE IF NOT EXISTS "_pages_v_locales" ( - "version_meta_title" varchar, - "version_meta_image_id" integer, - "version_meta_description" varchar, - "id" serial PRIMARY KEY NOT NULL, - "_locale" "_locales" NOT NULL, - "_parent_id" integer NOT NULL - ); - - CREATE TABLE IF NOT EXISTS "users" ( - "id" serial PRIMARY KEY NOT NULL, - "name" varchar, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "_status" "enum_users_status" DEFAULT 'draft', - "email" varchar, - "reset_password_token" varchar, - "reset_password_expiration" timestamp(3) with time zone, - "salt" varchar, - "hash" varchar, - "login_attempts" numeric DEFAULT 0, - "lock_until" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "_users_v" ( - "id" serial PRIMARY KEY NOT NULL, - "parent_id" integer, - "version_name" varchar, - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "version__status" "enum__users_v_version_status" DEFAULT 'draft', - "version_email" varchar, - "version_reset_password_token" varchar, - "version_reset_password_expiration" timestamp(3) with time zone, - "version_salt" varchar, - "version_hash" varchar, - "version_login_attempts" numeric DEFAULT 0, - "version_lock_until" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__users_v_published_locale", - "latest" boolean - ); - - CREATE TABLE IF NOT EXISTS "settings_dummy_collection" ( - "id" serial PRIMARY KEY NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL - ); - - CREATE TABLE IF NOT EXISTS "payload_locked_documents" ( - "id" serial PRIMARY KEY NOT NULL, - "global_slug" varchar, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL - ); - - CREATE TABLE IF NOT EXISTS "payload_locked_documents_rels" ( - "id" serial PRIMARY KEY NOT NULL, - "order" integer, - "parent_id" integer NOT NULL, - "path" varchar NOT NULL, - "resume_dummy_collection_id" integer, - "blog_dummy_collection_id" integer, - "blog_categories_id" integer, - "blog_tags_id" integer, - "blog_posts_id" integer, - "general_dummy_collection_id" integer, - "media_id" integer, - "pages_id" integer, - "users_id" integer, - "settings_dummy_collection_id" integer - ); - - CREATE TABLE IF NOT EXISTS "payload_preferences" ( - "id" serial PRIMARY KEY NOT NULL, - "key" varchar, - "value" jsonb, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL - ); - - CREATE TABLE IF NOT EXISTS "payload_preferences_rels" ( - "id" serial PRIMARY KEY NOT NULL, - "order" integer, - "parent_id" integer NOT NULL, - "path" varchar NOT NULL, - "users_id" integer - ); - - CREATE TABLE IF NOT EXISTS "payload_migrations" ( - "id" serial PRIMARY KEY NOT NULL, - "name" varchar, - "batch" numeric, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL - ); - - CREATE TABLE IF NOT EXISTS "resume_dummy_global" ( - "id" serial PRIMARY KEY NOT NULL, - "updated_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "resume_hero" ( - "id" serial PRIMARY KEY NOT NULL, - "background_id" integer, - "portrait_id" integer, - "title" varchar, - "caption" jsonb, - "_status" "enum_resume_hero_status" DEFAULT 'draft', - "updated_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "_resume_hero_v" ( - "id" serial PRIMARY KEY NOT NULL, - "version_background_id" integer, - "version_portrait_id" integer, - "version_title" varchar, - "version_caption" jsonb, - "version__status" "enum__resume_hero_v_version_status" DEFAULT 'draft', - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__resume_hero_v_published_locale", - "latest" boolean - ); - - CREATE TABLE IF NOT EXISTS "resume_about_me" ( - "id" serial PRIMARY KEY NOT NULL, - "portrait_id" integer, - "title" varchar, - "content" jsonb, - "anchor" varchar, - "_status" "enum_resume_about_me_status" DEFAULT 'draft', - "updated_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "_resume_about_me_v" ( - "id" serial PRIMARY KEY NOT NULL, - "version_portrait_id" integer, - "version_title" varchar, - "version_content" jsonb, - "version_anchor" varchar, - "version__status" "enum__resume_about_me_v_version_status" DEFAULT 'draft', - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__resume_about_me_v_published_locale", - "latest" boolean - ); - - CREATE TABLE IF NOT EXISTS "resume_experience_entries" ( - "_order" integer NOT NULL, - "_parent_id" integer NOT NULL, - "id" varchar PRIMARY KEY NOT NULL, - "title" varchar, - "employer" varchar, - "start_date" timestamp(3) with time zone, - "end_date" timestamp(3) with time zone, - "rich_text" jsonb, - "technologies" jsonb DEFAULT '[]'::jsonb - ); - - CREATE TABLE IF NOT EXISTS "resume_experience" ( - "id" serial PRIMARY KEY NOT NULL, - "title" varchar, - "caption" jsonb, - "anchor" varchar, - "skill_summary" jsonb, - "_status" "enum_resume_experience_status" DEFAULT 'draft', - "updated_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "_resume_experience_v_version_entries" ( - "_order" integer NOT NULL, - "_parent_id" integer NOT NULL, - "id" serial PRIMARY KEY NOT NULL, - "title" varchar, - "employer" varchar, - "start_date" timestamp(3) with time zone, - "end_date" timestamp(3) with time zone, - "rich_text" jsonb, - "technologies" jsonb DEFAULT '[]'::jsonb, - "_uuid" varchar - ); - - CREATE TABLE IF NOT EXISTS "_resume_experience_v" ( - "id" serial PRIMARY KEY NOT NULL, - "version_title" varchar, - "version_caption" jsonb, - "version_anchor" varchar, - "version_skill_summary" jsonb, - "version__status" "enum__resume_experience_v_version_status" DEFAULT 'draft', - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__resume_experience_v_published_locale", - "latest" boolean - ); - - CREATE TABLE IF NOT EXISTS "resume_projects_entries" ( - "_order" integer NOT NULL, - "_parent_id" integer NOT NULL, - "id" varchar PRIMARY KEY NOT NULL, - "headline" varchar, - "subline" varchar, - "rich_text" jsonb, - "image_id" integer - ); - - CREATE TABLE IF NOT EXISTS "resume_projects" ( - "id" serial PRIMARY KEY NOT NULL, - "title" varchar, - "caption" jsonb, - "anchor" varchar, - "_status" "enum_resume_projects_status" DEFAULT 'draft', - "updated_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "_resume_projects_v_version_entries" ( - "_order" integer NOT NULL, - "_parent_id" integer NOT NULL, - "id" serial PRIMARY KEY NOT NULL, - "headline" varchar, - "subline" varchar, - "rich_text" jsonb, - "image_id" integer, - "_uuid" varchar - ); - - CREATE TABLE IF NOT EXISTS "_resume_projects_v" ( - "id" serial PRIMARY KEY NOT NULL, - "version_title" varchar, - "version_caption" jsonb, - "version_anchor" varchar, - "version__status" "enum__resume_projects_v_version_status" DEFAULT 'draft', - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__resume_projects_v_published_locale", - "latest" boolean - ); - - CREATE TABLE IF NOT EXISTS "resume_customers_entries" ( - "_order" integer NOT NULL, - "_parent_id" integer NOT NULL, - "id" varchar PRIMARY KEY NOT NULL, - "logo" varchar, - "title" varchar - ); - - CREATE TABLE IF NOT EXISTS "resume_customers" ( - "id" serial PRIMARY KEY NOT NULL, - "title" varchar, - "caption" jsonb, - "anchor" varchar, - "_status" "enum_resume_customers_status" DEFAULT 'draft', - "updated_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "_resume_customers_v_version_entries" ( - "_order" integer NOT NULL, - "_parent_id" integer NOT NULL, - "id" serial PRIMARY KEY NOT NULL, - "logo" varchar, - "title" varchar, - "_uuid" varchar - ); - - CREATE TABLE IF NOT EXISTS "_resume_customers_v" ( - "id" serial PRIMARY KEY NOT NULL, - "version_title" varchar, - "version_caption" jsonb, - "version_anchor" varchar, - "version__status" "enum__resume_customers_v_version_status" DEFAULT 'draft', - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__resume_customers_v_published_locale", - "latest" boolean - ); - - CREATE TABLE IF NOT EXISTS "resume_contact" ( - "id" serial PRIMARY KEY NOT NULL, - "title" varchar, - "caption" jsonb, - "mail_button_label" varchar, - "mail_button_href" varchar, - "anchor" varchar, - "_status" "enum_resume_contact_status" DEFAULT 'draft', - "updated_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "_resume_contact_v" ( - "id" serial PRIMARY KEY NOT NULL, - "version_title" varchar, - "version_caption" jsonb, - "version_mail_button_label" varchar, - "version_mail_button_href" varchar, - "version_anchor" varchar, - "version__status" "enum__resume_contact_v_version_status" DEFAULT 'draft', - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__resume_contact_v_published_locale", - "latest" boolean - ); - - CREATE TABLE IF NOT EXISTS "blog_dummy_global" ( - "id" serial PRIMARY KEY NOT NULL, - "updated_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "general_dummy_global" ( - "id" serial PRIMARY KEY NOT NULL, - "updated_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "settings_dummy_global" ( - "id" serial PRIMARY KEY NOT NULL, - "updated_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "settings_navigation_header_nav_items" ( - "_order" integer NOT NULL, - "_parent_id" integer NOT NULL, - "id" varchar PRIMARY KEY NOT NULL, - "link_type" "enum_settings_navigation_header_nav_items_link_type" DEFAULT 'reference', - "link_new_tab" boolean, - "link_url" varchar, - "link_label" varchar - ); - - CREATE TABLE IF NOT EXISTS "settings_navigation_footer_nav_items" ( - "_order" integer NOT NULL, - "_parent_id" integer NOT NULL, - "id" varchar PRIMARY KEY NOT NULL, - "link_type" "enum_settings_navigation_footer_nav_items_link_type" DEFAULT 'reference', - "link_new_tab" boolean, - "link_url" varchar, - "link_label" varchar - ); - - CREATE TABLE IF NOT EXISTS "settings_navigation" ( - "id" serial PRIMARY KEY NOT NULL, - "_status" "enum_settings_navigation_status" DEFAULT 'draft', - "updated_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "settings_navigation_rels" ( - "id" serial PRIMARY KEY NOT NULL, - "order" integer, - "parent_id" integer NOT NULL, - "path" varchar NOT NULL, - "pages_id" integer, - "blog_posts_id" integer, - "blog_categories_id" integer - ); - - CREATE TABLE IF NOT EXISTS "_settings_navigation_v_version_header_nav_items" ( - "_order" integer NOT NULL, - "_parent_id" integer NOT NULL, - "id" serial PRIMARY KEY NOT NULL, - "link_type" "enum__settings_navigation_v_version_header_nav_items_link_type" DEFAULT 'reference', - "link_new_tab" boolean, - "link_url" varchar, - "link_label" varchar, - "_uuid" varchar - ); - - CREATE TABLE IF NOT EXISTS "_settings_navigation_v_version_footer_nav_items" ( - "_order" integer NOT NULL, - "_parent_id" integer NOT NULL, - "id" serial PRIMARY KEY NOT NULL, - "link_type" "enum__settings_navigation_v_version_footer_nav_items_link_type" DEFAULT 'reference', - "link_new_tab" boolean, - "link_url" varchar, - "link_label" varchar, - "_uuid" varchar - ); - - CREATE TABLE IF NOT EXISTS "_settings_navigation_v" ( - "id" serial PRIMARY KEY NOT NULL, - "version__status" "enum__settings_navigation_v_version_status" DEFAULT 'draft', - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__settings_navigation_v_published_locale", - "latest" boolean - ); - - CREATE TABLE IF NOT EXISTS "_settings_navigation_v_rels" ( - "id" serial PRIMARY KEY NOT NULL, - "order" integer, - "parent_id" integer NOT NULL, - "path" varchar NOT NULL, - "pages_id" integer, - "blog_posts_id" integer, - "blog_categories_id" integer - ); - - CREATE TABLE IF NOT EXISTS "settings_meta" ( - "id" serial PRIMARY KEY NOT NULL, - "site_name" varchar, - "title_template" varchar, - "fallback_title" varchar, - "fallback_description" varchar, - "fallback_image_id" integer, - "keywords" jsonb DEFAULT '[]'::jsonb, - "_status" "enum_settings_meta_status" DEFAULT 'draft', - "updated_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone - ); - - CREATE TABLE IF NOT EXISTS "_settings_meta_v" ( - "id" serial PRIMARY KEY NOT NULL, - "version_site_name" varchar, - "version_title_template" varchar, - "version_fallback_title" varchar, - "version_fallback_description" varchar, - "version_fallback_image_id" integer, - "version_keywords" jsonb DEFAULT '[]'::jsonb, - "version__status" "enum__settings_meta_v_version_status" DEFAULT 'draft', - "version_updated_at" timestamp(3) with time zone, - "version_created_at" timestamp(3) with time zone, - "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, - "snapshot" boolean, - "published_locale" "enum__settings_meta_v_published_locale", - "latest" boolean - ); - - DO $$ BEGIN - ALTER TABLE "_blog_categories_v" ADD CONSTRAINT "_blog_categories_v_parent_id_blog_categories_id_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."blog_categories"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_blog_tags_v" ADD CONSTRAINT "_blog_tags_v_parent_id_blog_tags_id_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."blog_tags"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "blog_posts_populated_authors" ADD CONSTRAINT "blog_posts_populated_authors_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."blog_posts"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "blog_posts_locales" ADD CONSTRAINT "blog_posts_locales_meta_image_id_media_id_fk" FOREIGN KEY ("meta_image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "blog_posts_locales" ADD CONSTRAINT "blog_posts_locales_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."blog_posts"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "blog_posts_rels" ADD CONSTRAINT "blog_posts_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."blog_posts"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "blog_posts_rels" ADD CONSTRAINT "blog_posts_rels_blog_posts_fk" FOREIGN KEY ("blog_posts_id") REFERENCES "public"."blog_posts"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "blog_posts_rels" ADD CONSTRAINT "blog_posts_rels_blog_categories_fk" FOREIGN KEY ("blog_categories_id") REFERENCES "public"."blog_categories"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "blog_posts_rels" ADD CONSTRAINT "blog_posts_rels_users_fk" FOREIGN KEY ("users_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_blog_posts_v_version_populated_authors" ADD CONSTRAINT "_blog_posts_v_version_populated_authors_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_blog_posts_v"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_blog_posts_v" ADD CONSTRAINT "_blog_posts_v_parent_id_blog_posts_id_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."blog_posts"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_blog_posts_v_locales" ADD CONSTRAINT "_blog_posts_v_locales_version_meta_image_id_media_id_fk" FOREIGN KEY ("version_meta_image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_blog_posts_v_locales" ADD CONSTRAINT "_blog_posts_v_locales_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_blog_posts_v"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_blog_posts_v_rels" ADD CONSTRAINT "_blog_posts_v_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."_blog_posts_v"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_blog_posts_v_rels" ADD CONSTRAINT "_blog_posts_v_rels_blog_posts_fk" FOREIGN KEY ("blog_posts_id") REFERENCES "public"."blog_posts"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_blog_posts_v_rels" ADD CONSTRAINT "_blog_posts_v_rels_blog_categories_fk" FOREIGN KEY ("blog_categories_id") REFERENCES "public"."blog_categories"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_blog_posts_v_rels" ADD CONSTRAINT "_blog_posts_v_rels_users_fk" FOREIGN KEY ("users_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_media_v" ADD CONSTRAINT "_media_v_parent_id_media_id_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "pages" ADD CONSTRAINT "pages_hero_id_media_id_fk" FOREIGN KEY ("hero_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "pages_locales" ADD CONSTRAINT "pages_locales_meta_image_id_media_id_fk" FOREIGN KEY ("meta_image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "pages_locales" ADD CONSTRAINT "pages_locales_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_pages_v" ADD CONSTRAINT "_pages_v_parent_id_pages_id_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."pages"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_pages_v" ADD CONSTRAINT "_pages_v_version_hero_id_media_id_fk" FOREIGN KEY ("version_hero_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_pages_v_locales" ADD CONSTRAINT "_pages_v_locales_version_meta_image_id_media_id_fk" FOREIGN KEY ("version_meta_image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_pages_v_locales" ADD CONSTRAINT "_pages_v_locales_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_pages_v"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_users_v" ADD CONSTRAINT "_users_v_parent_id_users_id_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."payload_locked_documents"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_resume_dummy_collection_fk" FOREIGN KEY ("resume_dummy_collection_id") REFERENCES "public"."resume_dummy_collection"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_blog_dummy_collection_fk" FOREIGN KEY ("blog_dummy_collection_id") REFERENCES "public"."blog_dummy_collection"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_blog_categories_fk" FOREIGN KEY ("blog_categories_id") REFERENCES "public"."blog_categories"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_blog_tags_fk" FOREIGN KEY ("blog_tags_id") REFERENCES "public"."blog_tags"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_blog_posts_fk" FOREIGN KEY ("blog_posts_id") REFERENCES "public"."blog_posts"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_general_dummy_collection_fk" FOREIGN KEY ("general_dummy_collection_id") REFERENCES "public"."general_dummy_collection"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_media_fk" FOREIGN KEY ("media_id") REFERENCES "public"."media"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_pages_fk" FOREIGN KEY ("pages_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_users_fk" FOREIGN KEY ("users_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_settings_dummy_collection_fk" FOREIGN KEY ("settings_dummy_collection_id") REFERENCES "public"."settings_dummy_collection"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_preferences_rels" ADD CONSTRAINT "payload_preferences_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."payload_preferences"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "payload_preferences_rels" ADD CONSTRAINT "payload_preferences_rels_users_fk" FOREIGN KEY ("users_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "resume_hero" ADD CONSTRAINT "resume_hero_background_id_media_id_fk" FOREIGN KEY ("background_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "resume_hero" ADD CONSTRAINT "resume_hero_portrait_id_media_id_fk" FOREIGN KEY ("portrait_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_resume_hero_v" ADD CONSTRAINT "_resume_hero_v_version_background_id_media_id_fk" FOREIGN KEY ("version_background_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_resume_hero_v" ADD CONSTRAINT "_resume_hero_v_version_portrait_id_media_id_fk" FOREIGN KEY ("version_portrait_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "resume_about_me" ADD CONSTRAINT "resume_about_me_portrait_id_media_id_fk" FOREIGN KEY ("portrait_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_resume_about_me_v" ADD CONSTRAINT "_resume_about_me_v_version_portrait_id_media_id_fk" FOREIGN KEY ("version_portrait_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "resume_experience_entries" ADD CONSTRAINT "resume_experience_entries_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."resume_experience"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_resume_experience_v_version_entries" ADD CONSTRAINT "_resume_experience_v_version_entries_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_resume_experience_v"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "resume_projects_entries" ADD CONSTRAINT "resume_projects_entries_image_id_media_id_fk" FOREIGN KEY ("image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "resume_projects_entries" ADD CONSTRAINT "resume_projects_entries_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."resume_projects"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_resume_projects_v_version_entries" ADD CONSTRAINT "_resume_projects_v_version_entries_image_id_media_id_fk" FOREIGN KEY ("image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_resume_projects_v_version_entries" ADD CONSTRAINT "_resume_projects_v_version_entries_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_resume_projects_v"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "resume_customers_entries" ADD CONSTRAINT "resume_customers_entries_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."resume_customers"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_resume_customers_v_version_entries" ADD CONSTRAINT "_resume_customers_v_version_entries_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_resume_customers_v"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "settings_navigation_header_nav_items" ADD CONSTRAINT "settings_navigation_header_nav_items_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."settings_navigation"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "settings_navigation_footer_nav_items" ADD CONSTRAINT "settings_navigation_footer_nav_items_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."settings_navigation"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "settings_navigation_rels" ADD CONSTRAINT "settings_navigation_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."settings_navigation"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "settings_navigation_rels" ADD CONSTRAINT "settings_navigation_rels_pages_fk" FOREIGN KEY ("pages_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "settings_navigation_rels" ADD CONSTRAINT "settings_navigation_rels_blog_posts_fk" FOREIGN KEY ("blog_posts_id") REFERENCES "public"."blog_posts"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "settings_navigation_rels" ADD CONSTRAINT "settings_navigation_rels_blog_categories_fk" FOREIGN KEY ("blog_categories_id") REFERENCES "public"."blog_categories"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_settings_navigation_v_version_header_nav_items" ADD CONSTRAINT "_settings_navigation_v_version_header_nav_items_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_settings_navigation_v"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_settings_navigation_v_version_footer_nav_items" ADD CONSTRAINT "_settings_navigation_v_version_footer_nav_items_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_settings_navigation_v"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_settings_navigation_v_rels" ADD CONSTRAINT "_settings_navigation_v_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."_settings_navigation_v"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_settings_navigation_v_rels" ADD CONSTRAINT "_settings_navigation_v_rels_pages_fk" FOREIGN KEY ("pages_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_settings_navigation_v_rels" ADD CONSTRAINT "_settings_navigation_v_rels_blog_posts_fk" FOREIGN KEY ("blog_posts_id") REFERENCES "public"."blog_posts"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_settings_navigation_v_rels" ADD CONSTRAINT "_settings_navigation_v_rels_blog_categories_fk" FOREIGN KEY ("blog_categories_id") REFERENCES "public"."blog_categories"("id") ON DELETE cascade ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "settings_meta" ADD CONSTRAINT "settings_meta_fallback_image_id_media_id_fk" FOREIGN KEY ("fallback_image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - DO $$ BEGIN - ALTER TABLE "_settings_meta_v" ADD CONSTRAINT "_settings_meta_v_version_fallback_image_id_media_id_fk" FOREIGN KEY ("version_fallback_image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; - EXCEPTION - WHEN duplicate_object THEN null; - END $$; - - CREATE INDEX IF NOT EXISTS "resume_dummy_collection_updated_at_idx" ON "resume_dummy_collection" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "resume_dummy_collection_created_at_idx" ON "resume_dummy_collection" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "blog_dummy_collection_updated_at_idx" ON "blog_dummy_collection" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "blog_dummy_collection_created_at_idx" ON "blog_dummy_collection" USING btree ("created_at"); - CREATE UNIQUE INDEX IF NOT EXISTS "blog_categories_slug_idx" ON "blog_categories" USING btree ("slug"); - CREATE INDEX IF NOT EXISTS "blog_categories_updated_at_idx" ON "blog_categories" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "blog_categories_created_at_idx" ON "blog_categories" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "blog_categories__status_idx" ON "blog_categories" USING btree ("_status"); - CREATE INDEX IF NOT EXISTS "_blog_categories_v_parent_idx" ON "_blog_categories_v" USING btree ("parent_id"); - CREATE INDEX IF NOT EXISTS "_blog_categories_v_version_version_slug_idx" ON "_blog_categories_v" USING btree ("version_slug"); - CREATE INDEX IF NOT EXISTS "_blog_categories_v_version_version_updated_at_idx" ON "_blog_categories_v" USING btree ("version_updated_at"); - CREATE INDEX IF NOT EXISTS "_blog_categories_v_version_version_created_at_idx" ON "_blog_categories_v" USING btree ("version_created_at"); - CREATE INDEX IF NOT EXISTS "_blog_categories_v_version_version__status_idx" ON "_blog_categories_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_blog_categories_v_created_at_idx" ON "_blog_categories_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_blog_categories_v_updated_at_idx" ON "_blog_categories_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_blog_categories_v_snapshot_idx" ON "_blog_categories_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_blog_categories_v_published_locale_idx" ON "_blog_categories_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_blog_categories_v_latest_idx" ON "_blog_categories_v" USING btree ("latest"); - CREATE UNIQUE INDEX IF NOT EXISTS "blog_tags_slug_idx" ON "blog_tags" USING btree ("slug"); - CREATE INDEX IF NOT EXISTS "blog_tags_updated_at_idx" ON "blog_tags" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "blog_tags_created_at_idx" ON "blog_tags" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "blog_tags__status_idx" ON "blog_tags" USING btree ("_status"); - CREATE INDEX IF NOT EXISTS "_blog_tags_v_parent_idx" ON "_blog_tags_v" USING btree ("parent_id"); - CREATE INDEX IF NOT EXISTS "_blog_tags_v_version_version_slug_idx" ON "_blog_tags_v" USING btree ("version_slug"); - CREATE INDEX IF NOT EXISTS "_blog_tags_v_version_version_updated_at_idx" ON "_blog_tags_v" USING btree ("version_updated_at"); - CREATE INDEX IF NOT EXISTS "_blog_tags_v_version_version_created_at_idx" ON "_blog_tags_v" USING btree ("version_created_at"); - CREATE INDEX IF NOT EXISTS "_blog_tags_v_version_version__status_idx" ON "_blog_tags_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_blog_tags_v_created_at_idx" ON "_blog_tags_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_blog_tags_v_updated_at_idx" ON "_blog_tags_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_blog_tags_v_snapshot_idx" ON "_blog_tags_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_blog_tags_v_published_locale_idx" ON "_blog_tags_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_blog_tags_v_latest_idx" ON "_blog_tags_v" USING btree ("latest"); - CREATE INDEX IF NOT EXISTS "blog_posts_populated_authors_order_idx" ON "blog_posts_populated_authors" USING btree ("_order"); - CREATE INDEX IF NOT EXISTS "blog_posts_populated_authors_parent_id_idx" ON "blog_posts_populated_authors" USING btree ("_parent_id"); - CREATE UNIQUE INDEX IF NOT EXISTS "blog_posts_slug_idx" ON "blog_posts" USING btree ("slug"); - CREATE INDEX IF NOT EXISTS "blog_posts_updated_at_idx" ON "blog_posts" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "blog_posts_created_at_idx" ON "blog_posts" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "blog_posts__status_idx" ON "blog_posts" USING btree ("_status"); - CREATE INDEX IF NOT EXISTS "blog_posts_meta_meta_image_idx" ON "blog_posts_locales" USING btree ("meta_image_id","_locale"); - CREATE UNIQUE INDEX IF NOT EXISTS "blog_posts_locales_locale_parent_id_unique" ON "blog_posts_locales" USING btree ("_locale","_parent_id"); - CREATE INDEX IF NOT EXISTS "blog_posts_rels_order_idx" ON "blog_posts_rels" USING btree ("order"); - CREATE INDEX IF NOT EXISTS "blog_posts_rels_parent_idx" ON "blog_posts_rels" USING btree ("parent_id"); - CREATE INDEX IF NOT EXISTS "blog_posts_rels_path_idx" ON "blog_posts_rels" USING btree ("path"); - CREATE INDEX IF NOT EXISTS "blog_posts_rels_blog_posts_id_idx" ON "blog_posts_rels" USING btree ("blog_posts_id"); - CREATE INDEX IF NOT EXISTS "blog_posts_rels_blog_categories_id_idx" ON "blog_posts_rels" USING btree ("blog_categories_id"); - CREATE INDEX IF NOT EXISTS "blog_posts_rels_users_id_idx" ON "blog_posts_rels" USING btree ("users_id"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_version_populated_authors_order_idx" ON "_blog_posts_v_version_populated_authors" USING btree ("_order"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_version_populated_authors_parent_id_idx" ON "_blog_posts_v_version_populated_authors" USING btree ("_parent_id"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_parent_idx" ON "_blog_posts_v" USING btree ("parent_id"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_version_version_slug_idx" ON "_blog_posts_v" USING btree ("version_slug"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_version_version_updated_at_idx" ON "_blog_posts_v" USING btree ("version_updated_at"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_version_version_created_at_idx" ON "_blog_posts_v" USING btree ("version_created_at"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_version_version__status_idx" ON "_blog_posts_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_created_at_idx" ON "_blog_posts_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_updated_at_idx" ON "_blog_posts_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_snapshot_idx" ON "_blog_posts_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_published_locale_idx" ON "_blog_posts_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_latest_idx" ON "_blog_posts_v" USING btree ("latest"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_autosave_idx" ON "_blog_posts_v" USING btree ("autosave"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_version_meta_version_meta_image_idx" ON "_blog_posts_v_locales" USING btree ("version_meta_image_id","_locale"); - CREATE UNIQUE INDEX IF NOT EXISTS "_blog_posts_v_locales_locale_parent_id_unique" ON "_blog_posts_v_locales" USING btree ("_locale","_parent_id"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_rels_order_idx" ON "_blog_posts_v_rels" USING btree ("order"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_rels_parent_idx" ON "_blog_posts_v_rels" USING btree ("parent_id"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_rels_path_idx" ON "_blog_posts_v_rels" USING btree ("path"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_rels_blog_posts_id_idx" ON "_blog_posts_v_rels" USING btree ("blog_posts_id"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_rels_blog_categories_id_idx" ON "_blog_posts_v_rels" USING btree ("blog_categories_id"); - CREATE INDEX IF NOT EXISTS "_blog_posts_v_rels_users_id_idx" ON "_blog_posts_v_rels" USING btree ("users_id"); - CREATE INDEX IF NOT EXISTS "general_dummy_collection_updated_at_idx" ON "general_dummy_collection" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "general_dummy_collection_created_at_idx" ON "general_dummy_collection" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "media_updated_at_idx" ON "media" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "media_created_at_idx" ON "media" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "media__status_idx" ON "media" USING btree ("_status"); - CREATE UNIQUE INDEX IF NOT EXISTS "media_filename_idx" ON "media" USING btree ("filename"); - CREATE INDEX IF NOT EXISTS "_media_v_parent_idx" ON "_media_v" USING btree ("parent_id"); - CREATE INDEX IF NOT EXISTS "_media_v_version_version_updated_at_idx" ON "_media_v" USING btree ("version_updated_at"); - CREATE INDEX IF NOT EXISTS "_media_v_version_version_created_at_idx" ON "_media_v" USING btree ("version_created_at"); - CREATE INDEX IF NOT EXISTS "_media_v_version_version__status_idx" ON "_media_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_media_v_version_version_filename_idx" ON "_media_v" USING btree ("version_filename"); - CREATE INDEX IF NOT EXISTS "_media_v_created_at_idx" ON "_media_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_media_v_updated_at_idx" ON "_media_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_media_v_snapshot_idx" ON "_media_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_media_v_published_locale_idx" ON "_media_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_media_v_latest_idx" ON "_media_v" USING btree ("latest"); - CREATE INDEX IF NOT EXISTS "pages_hero_idx" ON "pages" USING btree ("hero_id"); - CREATE UNIQUE INDEX IF NOT EXISTS "pages_slug_idx" ON "pages" USING btree ("slug"); - CREATE INDEX IF NOT EXISTS "pages_updated_at_idx" ON "pages" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "pages_created_at_idx" ON "pages" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "pages__status_idx" ON "pages" USING btree ("_status"); - CREATE INDEX IF NOT EXISTS "pages_meta_meta_image_idx" ON "pages_locales" USING btree ("meta_image_id","_locale"); - CREATE UNIQUE INDEX IF NOT EXISTS "pages_locales_locale_parent_id_unique" ON "pages_locales" USING btree ("_locale","_parent_id"); - CREATE INDEX IF NOT EXISTS "_pages_v_parent_idx" ON "_pages_v" USING btree ("parent_id"); - CREATE INDEX IF NOT EXISTS "_pages_v_version_version_hero_idx" ON "_pages_v" USING btree ("version_hero_id"); - CREATE INDEX IF NOT EXISTS "_pages_v_version_version_slug_idx" ON "_pages_v" USING btree ("version_slug"); - CREATE INDEX IF NOT EXISTS "_pages_v_version_version_updated_at_idx" ON "_pages_v" USING btree ("version_updated_at"); - CREATE INDEX IF NOT EXISTS "_pages_v_version_version_created_at_idx" ON "_pages_v" USING btree ("version_created_at"); - CREATE INDEX IF NOT EXISTS "_pages_v_version_version__status_idx" ON "_pages_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_pages_v_created_at_idx" ON "_pages_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_pages_v_updated_at_idx" ON "_pages_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_pages_v_snapshot_idx" ON "_pages_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_pages_v_published_locale_idx" ON "_pages_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_pages_v_latest_idx" ON "_pages_v" USING btree ("latest"); - CREATE INDEX IF NOT EXISTS "_pages_v_autosave_idx" ON "_pages_v" USING btree ("autosave"); - CREATE INDEX IF NOT EXISTS "_pages_v_version_meta_version_meta_image_idx" ON "_pages_v_locales" USING btree ("version_meta_image_id","_locale"); - CREATE UNIQUE INDEX IF NOT EXISTS "_pages_v_locales_locale_parent_id_unique" ON "_pages_v_locales" USING btree ("_locale","_parent_id"); - CREATE INDEX IF NOT EXISTS "users_updated_at_idx" ON "users" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "users_created_at_idx" ON "users" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "users__status_idx" ON "users" USING btree ("_status"); - CREATE UNIQUE INDEX IF NOT EXISTS "users_email_idx" ON "users" USING btree ("email"); - CREATE INDEX IF NOT EXISTS "_users_v_parent_idx" ON "_users_v" USING btree ("parent_id"); - CREATE INDEX IF NOT EXISTS "_users_v_version_version_updated_at_idx" ON "_users_v" USING btree ("version_updated_at"); - CREATE INDEX IF NOT EXISTS "_users_v_version_version_created_at_idx" ON "_users_v" USING btree ("version_created_at"); - CREATE INDEX IF NOT EXISTS "_users_v_version_version__status_idx" ON "_users_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_users_v_version_version_email_idx" ON "_users_v" USING btree ("version_email"); - CREATE INDEX IF NOT EXISTS "_users_v_created_at_idx" ON "_users_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_users_v_updated_at_idx" ON "_users_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_users_v_snapshot_idx" ON "_users_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_users_v_published_locale_idx" ON "_users_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_users_v_latest_idx" ON "_users_v" USING btree ("latest"); - CREATE INDEX IF NOT EXISTS "settings_dummy_collection_updated_at_idx" ON "settings_dummy_collection" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "settings_dummy_collection_created_at_idx" ON "settings_dummy_collection" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_global_slug_idx" ON "payload_locked_documents" USING btree ("global_slug"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_updated_at_idx" ON "payload_locked_documents" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_created_at_idx" ON "payload_locked_documents" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_order_idx" ON "payload_locked_documents_rels" USING btree ("order"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_parent_idx" ON "payload_locked_documents_rels" USING btree ("parent_id"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_path_idx" ON "payload_locked_documents_rels" USING btree ("path"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_resume_dummy_collection_id_idx" ON "payload_locked_documents_rels" USING btree ("resume_dummy_collection_id"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_blog_dummy_collection_id_idx" ON "payload_locked_documents_rels" USING btree ("blog_dummy_collection_id"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_blog_categories_id_idx" ON "payload_locked_documents_rels" USING btree ("blog_categories_id"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_blog_tags_id_idx" ON "payload_locked_documents_rels" USING btree ("blog_tags_id"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_blog_posts_id_idx" ON "payload_locked_documents_rels" USING btree ("blog_posts_id"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_general_dummy_collection_id_idx" ON "payload_locked_documents_rels" USING btree ("general_dummy_collection_id"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_media_id_idx" ON "payload_locked_documents_rels" USING btree ("media_id"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_pages_id_idx" ON "payload_locked_documents_rels" USING btree ("pages_id"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_users_id_idx" ON "payload_locked_documents_rels" USING btree ("users_id"); - CREATE INDEX IF NOT EXISTS "payload_locked_documents_rels_settings_dummy_collection_id_idx" ON "payload_locked_documents_rels" USING btree ("settings_dummy_collection_id"); - CREATE INDEX IF NOT EXISTS "payload_preferences_key_idx" ON "payload_preferences" USING btree ("key"); - CREATE INDEX IF NOT EXISTS "payload_preferences_updated_at_idx" ON "payload_preferences" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "payload_preferences_created_at_idx" ON "payload_preferences" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "payload_preferences_rels_order_idx" ON "payload_preferences_rels" USING btree ("order"); - CREATE INDEX IF NOT EXISTS "payload_preferences_rels_parent_idx" ON "payload_preferences_rels" USING btree ("parent_id"); - CREATE INDEX IF NOT EXISTS "payload_preferences_rels_path_idx" ON "payload_preferences_rels" USING btree ("path"); - CREATE INDEX IF NOT EXISTS "payload_preferences_rels_users_id_idx" ON "payload_preferences_rels" USING btree ("users_id"); - CREATE INDEX IF NOT EXISTS "payload_migrations_updated_at_idx" ON "payload_migrations" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "payload_migrations_created_at_idx" ON "payload_migrations" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "resume_hero_background_idx" ON "resume_hero" USING btree ("background_id"); - CREATE INDEX IF NOT EXISTS "resume_hero_portrait_idx" ON "resume_hero" USING btree ("portrait_id"); - CREATE INDEX IF NOT EXISTS "resume_hero__status_idx" ON "resume_hero" USING btree ("_status"); - CREATE INDEX IF NOT EXISTS "_resume_hero_v_version_version_background_idx" ON "_resume_hero_v" USING btree ("version_background_id"); - CREATE INDEX IF NOT EXISTS "_resume_hero_v_version_version_portrait_idx" ON "_resume_hero_v" USING btree ("version_portrait_id"); - CREATE INDEX IF NOT EXISTS "_resume_hero_v_version_version__status_idx" ON "_resume_hero_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_resume_hero_v_created_at_idx" ON "_resume_hero_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_resume_hero_v_updated_at_idx" ON "_resume_hero_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_resume_hero_v_snapshot_idx" ON "_resume_hero_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_resume_hero_v_published_locale_idx" ON "_resume_hero_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_resume_hero_v_latest_idx" ON "_resume_hero_v" USING btree ("latest"); - CREATE INDEX IF NOT EXISTS "resume_about_me_portrait_idx" ON "resume_about_me" USING btree ("portrait_id"); - CREATE INDEX IF NOT EXISTS "resume_about_me__status_idx" ON "resume_about_me" USING btree ("_status"); - CREATE INDEX IF NOT EXISTS "_resume_about_me_v_version_version_portrait_idx" ON "_resume_about_me_v" USING btree ("version_portrait_id"); - CREATE INDEX IF NOT EXISTS "_resume_about_me_v_version_version__status_idx" ON "_resume_about_me_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_resume_about_me_v_created_at_idx" ON "_resume_about_me_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_resume_about_me_v_updated_at_idx" ON "_resume_about_me_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_resume_about_me_v_snapshot_idx" ON "_resume_about_me_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_resume_about_me_v_published_locale_idx" ON "_resume_about_me_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_resume_about_me_v_latest_idx" ON "_resume_about_me_v" USING btree ("latest"); - CREATE INDEX IF NOT EXISTS "resume_experience_entries_order_idx" ON "resume_experience_entries" USING btree ("_order"); - CREATE INDEX IF NOT EXISTS "resume_experience_entries_parent_id_idx" ON "resume_experience_entries" USING btree ("_parent_id"); - CREATE INDEX IF NOT EXISTS "resume_experience__status_idx" ON "resume_experience" USING btree ("_status"); - CREATE INDEX IF NOT EXISTS "_resume_experience_v_version_entries_order_idx" ON "_resume_experience_v_version_entries" USING btree ("_order"); - CREATE INDEX IF NOT EXISTS "_resume_experience_v_version_entries_parent_id_idx" ON "_resume_experience_v_version_entries" USING btree ("_parent_id"); - CREATE INDEX IF NOT EXISTS "_resume_experience_v_version_version__status_idx" ON "_resume_experience_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_resume_experience_v_created_at_idx" ON "_resume_experience_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_resume_experience_v_updated_at_idx" ON "_resume_experience_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_resume_experience_v_snapshot_idx" ON "_resume_experience_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_resume_experience_v_published_locale_idx" ON "_resume_experience_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_resume_experience_v_latest_idx" ON "_resume_experience_v" USING btree ("latest"); - CREATE INDEX IF NOT EXISTS "resume_projects_entries_order_idx" ON "resume_projects_entries" USING btree ("_order"); - CREATE INDEX IF NOT EXISTS "resume_projects_entries_parent_id_idx" ON "resume_projects_entries" USING btree ("_parent_id"); - CREATE INDEX IF NOT EXISTS "resume_projects_entries_image_idx" ON "resume_projects_entries" USING btree ("image_id"); - CREATE INDEX IF NOT EXISTS "resume_projects__status_idx" ON "resume_projects" USING btree ("_status"); - CREATE INDEX IF NOT EXISTS "_resume_projects_v_version_entries_order_idx" ON "_resume_projects_v_version_entries" USING btree ("_order"); - CREATE INDEX IF NOT EXISTS "_resume_projects_v_version_entries_parent_id_idx" ON "_resume_projects_v_version_entries" USING btree ("_parent_id"); - CREATE INDEX IF NOT EXISTS "_resume_projects_v_version_entries_image_idx" ON "_resume_projects_v_version_entries" USING btree ("image_id"); - CREATE INDEX IF NOT EXISTS "_resume_projects_v_version_version__status_idx" ON "_resume_projects_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_resume_projects_v_created_at_idx" ON "_resume_projects_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_resume_projects_v_updated_at_idx" ON "_resume_projects_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_resume_projects_v_snapshot_idx" ON "_resume_projects_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_resume_projects_v_published_locale_idx" ON "_resume_projects_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_resume_projects_v_latest_idx" ON "_resume_projects_v" USING btree ("latest"); - CREATE INDEX IF NOT EXISTS "resume_customers_entries_order_idx" ON "resume_customers_entries" USING btree ("_order"); - CREATE INDEX IF NOT EXISTS "resume_customers_entries_parent_id_idx" ON "resume_customers_entries" USING btree ("_parent_id"); - CREATE INDEX IF NOT EXISTS "resume_customers__status_idx" ON "resume_customers" USING btree ("_status"); - CREATE INDEX IF NOT EXISTS "_resume_customers_v_version_entries_order_idx" ON "_resume_customers_v_version_entries" USING btree ("_order"); - CREATE INDEX IF NOT EXISTS "_resume_customers_v_version_entries_parent_id_idx" ON "_resume_customers_v_version_entries" USING btree ("_parent_id"); - CREATE INDEX IF NOT EXISTS "_resume_customers_v_version_version__status_idx" ON "_resume_customers_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_resume_customers_v_created_at_idx" ON "_resume_customers_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_resume_customers_v_updated_at_idx" ON "_resume_customers_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_resume_customers_v_snapshot_idx" ON "_resume_customers_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_resume_customers_v_published_locale_idx" ON "_resume_customers_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_resume_customers_v_latest_idx" ON "_resume_customers_v" USING btree ("latest"); - CREATE INDEX IF NOT EXISTS "resume_contact__status_idx" ON "resume_contact" USING btree ("_status"); - CREATE INDEX IF NOT EXISTS "_resume_contact_v_version_version__status_idx" ON "_resume_contact_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_resume_contact_v_created_at_idx" ON "_resume_contact_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_resume_contact_v_updated_at_idx" ON "_resume_contact_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_resume_contact_v_snapshot_idx" ON "_resume_contact_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_resume_contact_v_published_locale_idx" ON "_resume_contact_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_resume_contact_v_latest_idx" ON "_resume_contact_v" USING btree ("latest"); - CREATE INDEX IF NOT EXISTS "settings_navigation_header_nav_items_order_idx" ON "settings_navigation_header_nav_items" USING btree ("_order"); - CREATE INDEX IF NOT EXISTS "settings_navigation_header_nav_items_parent_id_idx" ON "settings_navigation_header_nav_items" USING btree ("_parent_id"); - CREATE INDEX IF NOT EXISTS "settings_navigation_footer_nav_items_order_idx" ON "settings_navigation_footer_nav_items" USING btree ("_order"); - CREATE INDEX IF NOT EXISTS "settings_navigation_footer_nav_items_parent_id_idx" ON "settings_navigation_footer_nav_items" USING btree ("_parent_id"); - CREATE INDEX IF NOT EXISTS "settings_navigation__status_idx" ON "settings_navigation" USING btree ("_status"); - CREATE INDEX IF NOT EXISTS "settings_navigation_rels_order_idx" ON "settings_navigation_rels" USING btree ("order"); - CREATE INDEX IF NOT EXISTS "settings_navigation_rels_parent_idx" ON "settings_navigation_rels" USING btree ("parent_id"); - CREATE INDEX IF NOT EXISTS "settings_navigation_rels_path_idx" ON "settings_navigation_rels" USING btree ("path"); - CREATE INDEX IF NOT EXISTS "settings_navigation_rels_pages_id_idx" ON "settings_navigation_rels" USING btree ("pages_id"); - CREATE INDEX IF NOT EXISTS "settings_navigation_rels_blog_posts_id_idx" ON "settings_navigation_rels" USING btree ("blog_posts_id"); - CREATE INDEX IF NOT EXISTS "settings_navigation_rels_blog_categories_id_idx" ON "settings_navigation_rels" USING btree ("blog_categories_id"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_version_header_nav_items_order_idx" ON "_settings_navigation_v_version_header_nav_items" USING btree ("_order"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_version_header_nav_items_parent_id_idx" ON "_settings_navigation_v_version_header_nav_items" USING btree ("_parent_id"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_version_footer_nav_items_order_idx" ON "_settings_navigation_v_version_footer_nav_items" USING btree ("_order"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_version_footer_nav_items_parent_id_idx" ON "_settings_navigation_v_version_footer_nav_items" USING btree ("_parent_id"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_version_version__status_idx" ON "_settings_navigation_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_created_at_idx" ON "_settings_navigation_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_updated_at_idx" ON "_settings_navigation_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_snapshot_idx" ON "_settings_navigation_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_published_locale_idx" ON "_settings_navigation_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_latest_idx" ON "_settings_navigation_v" USING btree ("latest"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_rels_order_idx" ON "_settings_navigation_v_rels" USING btree ("order"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_rels_parent_idx" ON "_settings_navigation_v_rels" USING btree ("parent_id"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_rels_path_idx" ON "_settings_navigation_v_rels" USING btree ("path"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_rels_pages_id_idx" ON "_settings_navigation_v_rels" USING btree ("pages_id"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_rels_blog_posts_id_idx" ON "_settings_navigation_v_rels" USING btree ("blog_posts_id"); - CREATE INDEX IF NOT EXISTS "_settings_navigation_v_rels_blog_categories_id_idx" ON "_settings_navigation_v_rels" USING btree ("blog_categories_id"); - CREATE INDEX IF NOT EXISTS "settings_meta_fallback_image_idx" ON "settings_meta" USING btree ("fallback_image_id"); - CREATE INDEX IF NOT EXISTS "settings_meta__status_idx" ON "settings_meta" USING btree ("_status"); - CREATE INDEX IF NOT EXISTS "_settings_meta_v_version_version_fallback_image_idx" ON "_settings_meta_v" USING btree ("version_fallback_image_id"); - CREATE INDEX IF NOT EXISTS "_settings_meta_v_version_version__status_idx" ON "_settings_meta_v" USING btree ("version__status"); - CREATE INDEX IF NOT EXISTS "_settings_meta_v_created_at_idx" ON "_settings_meta_v" USING btree ("created_at"); - CREATE INDEX IF NOT EXISTS "_settings_meta_v_updated_at_idx" ON "_settings_meta_v" USING btree ("updated_at"); - CREATE INDEX IF NOT EXISTS "_settings_meta_v_snapshot_idx" ON "_settings_meta_v" USING btree ("snapshot"); - CREATE INDEX IF NOT EXISTS "_settings_meta_v_published_locale_idx" ON "_settings_meta_v" USING btree ("published_locale"); - CREATE INDEX IF NOT EXISTS "_settings_meta_v_latest_idx" ON "_settings_meta_v" USING btree ("latest");`) -} - -export async function down({ db, payload, req }: MigrateDownArgs): Promise { - await db.execute(sql` - DROP TABLE "resume_dummy_collection" CASCADE; - DROP TABLE "blog_dummy_collection" CASCADE; - DROP TABLE "blog_categories" CASCADE; - DROP TABLE "_blog_categories_v" CASCADE; - DROP TABLE "blog_tags" CASCADE; - DROP TABLE "_blog_tags_v" CASCADE; - DROP TABLE "blog_posts_populated_authors" CASCADE; - DROP TABLE "blog_posts" CASCADE; - DROP TABLE "blog_posts_locales" CASCADE; - DROP TABLE "blog_posts_rels" CASCADE; - DROP TABLE "_blog_posts_v_version_populated_authors" CASCADE; - DROP TABLE "_blog_posts_v" CASCADE; - DROP TABLE "_blog_posts_v_locales" CASCADE; - DROP TABLE "_blog_posts_v_rels" CASCADE; - DROP TABLE "general_dummy_collection" CASCADE; - DROP TABLE "media" CASCADE; - DROP TABLE "_media_v" CASCADE; - DROP TABLE "pages" CASCADE; - DROP TABLE "pages_locales" CASCADE; - DROP TABLE "_pages_v" CASCADE; - DROP TABLE "_pages_v_locales" CASCADE; - DROP TABLE "users" CASCADE; - DROP TABLE "_users_v" CASCADE; - DROP TABLE "settings_dummy_collection" CASCADE; - DROP TABLE "payload_locked_documents" CASCADE; - DROP TABLE "payload_locked_documents_rels" CASCADE; - DROP TABLE "payload_preferences" CASCADE; - DROP TABLE "payload_preferences_rels" CASCADE; - DROP TABLE "payload_migrations" CASCADE; - DROP TABLE "resume_dummy_global" CASCADE; - DROP TABLE "resume_hero" CASCADE; - DROP TABLE "_resume_hero_v" CASCADE; - DROP TABLE "resume_about_me" CASCADE; - DROP TABLE "_resume_about_me_v" CASCADE; - DROP TABLE "resume_experience_entries" CASCADE; - DROP TABLE "resume_experience" CASCADE; - DROP TABLE "_resume_experience_v_version_entries" CASCADE; - DROP TABLE "_resume_experience_v" CASCADE; - DROP TABLE "resume_projects_entries" CASCADE; - DROP TABLE "resume_projects" CASCADE; - DROP TABLE "_resume_projects_v_version_entries" CASCADE; - DROP TABLE "_resume_projects_v" CASCADE; - DROP TABLE "resume_customers_entries" CASCADE; - DROP TABLE "resume_customers" CASCADE; - DROP TABLE "_resume_customers_v_version_entries" CASCADE; - DROP TABLE "_resume_customers_v" CASCADE; - DROP TABLE "resume_contact" CASCADE; - DROP TABLE "_resume_contact_v" CASCADE; - DROP TABLE "blog_dummy_global" CASCADE; - DROP TABLE "general_dummy_global" CASCADE; - DROP TABLE "settings_dummy_global" CASCADE; - DROP TABLE "settings_navigation_header_nav_items" CASCADE; - DROP TABLE "settings_navigation_footer_nav_items" CASCADE; - DROP TABLE "settings_navigation" CASCADE; - DROP TABLE "settings_navigation_rels" CASCADE; - DROP TABLE "_settings_navigation_v_version_header_nav_items" CASCADE; - DROP TABLE "_settings_navigation_v_version_footer_nav_items" CASCADE; - DROP TABLE "_settings_navigation_v" CASCADE; - DROP TABLE "_settings_navigation_v_rels" CASCADE; - DROP TABLE "settings_meta" CASCADE; - DROP TABLE "_settings_meta_v" CASCADE; - DROP TYPE "public"."_locales"; - DROP TYPE "public"."enum_blog_categories_status"; - DROP TYPE "public"."enum__blog_categories_v_version_status"; - DROP TYPE "public"."enum__blog_categories_v_published_locale"; - DROP TYPE "public"."enum_blog_tags_status"; - DROP TYPE "public"."enum__blog_tags_v_version_status"; - DROP TYPE "public"."enum__blog_tags_v_published_locale"; - DROP TYPE "public"."enum_blog_posts_status"; - DROP TYPE "public"."enum__blog_posts_v_version_status"; - DROP TYPE "public"."enum__blog_posts_v_published_locale"; - DROP TYPE "public"."enum_media_status"; - DROP TYPE "public"."enum__media_v_version_status"; - DROP TYPE "public"."enum__media_v_published_locale"; - DROP TYPE "public"."enum_pages_status"; - DROP TYPE "public"."enum__pages_v_version_status"; - DROP TYPE "public"."enum__pages_v_published_locale"; - DROP TYPE "public"."enum_users_status"; - DROP TYPE "public"."enum__users_v_version_status"; - DROP TYPE "public"."enum__users_v_published_locale"; - DROP TYPE "public"."enum_resume_hero_status"; - DROP TYPE "public"."enum__resume_hero_v_version_status"; - DROP TYPE "public"."enum__resume_hero_v_published_locale"; - DROP TYPE "public"."enum_resume_about_me_status"; - DROP TYPE "public"."enum__resume_about_me_v_version_status"; - DROP TYPE "public"."enum__resume_about_me_v_published_locale"; - DROP TYPE "public"."enum_resume_experience_status"; - DROP TYPE "public"."enum__resume_experience_v_version_status"; - DROP TYPE "public"."enum__resume_experience_v_published_locale"; - DROP TYPE "public"."enum_resume_projects_status"; - DROP TYPE "public"."enum__resume_projects_v_version_status"; - DROP TYPE "public"."enum__resume_projects_v_published_locale"; - DROP TYPE "public"."enum_resume_customers_status"; - DROP TYPE "public"."enum__resume_customers_v_version_status"; - DROP TYPE "public"."enum__resume_customers_v_published_locale"; - DROP TYPE "public"."enum_resume_contact_status"; - DROP TYPE "public"."enum__resume_contact_v_version_status"; - DROP TYPE "public"."enum__resume_contact_v_published_locale"; - DROP TYPE "public"."enum_settings_navigation_header_nav_items_link_type"; - DROP TYPE "public"."enum_settings_navigation_footer_nav_items_link_type"; - DROP TYPE "public"."enum_settings_navigation_status"; - DROP TYPE "public"."enum__settings_navigation_v_version_header_nav_items_link_type"; - DROP TYPE "public"."enum__settings_navigation_v_version_footer_nav_items_link_type"; - DROP TYPE "public"."enum__settings_navigation_v_version_status"; - DROP TYPE "public"."enum__settings_navigation_v_published_locale"; - DROP TYPE "public"."enum_settings_meta_status"; - DROP TYPE "public"."enum__settings_meta_v_version_status"; - DROP TYPE "public"."enum__settings_meta_v_published_locale";`) -} diff --git a/src/migrations/index.ts b/src/migrations/index.ts index 51bb1cdd..7bb64c4c 100644 --- a/src/migrations/index.ts +++ b/src/migrations/index.ts @@ -1,9 +1,9 @@ -import * as migration_20250505_000746 from './20250505_000746'; +import * as migration_00000001_initialize_site_settings from './00000001_initialize_site_settings' export const migrations = [ { - up: migration_20250505_000746.up, - down: migration_20250505_000746.down, - name: '20250505_000746' + up: migration_00000001_initialize_site_settings.up, + down: migration_00000001_initialize_site_settings.down, + name: '00000001_initialize_site_settings', }, -]; +] diff --git a/src/payload-types.ts b/src/payload-types.ts deleted file mode 100644 index 477acace..00000000 --- a/src/payload-types.ts +++ /dev/null @@ -1,1189 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * This file was automatically generated by Payload. - * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config, - * and re-run `payload generate:types` to regenerate this file. - */ - -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "HeaderNavItems". - */ -export type HeaderNavItems = - | { - link: { - type?: ('reference' | 'custom') | null; - newTab?: boolean | null; - reference?: - | ({ - relationTo: 'pages'; - value: number | Page; - } | null) - | ({ - relationTo: 'blogPosts'; - value: number | BlogPost; - } | null) - | ({ - relationTo: 'blogCategories'; - value: number | BlogCategory; - } | null); - url?: string | null; - label: string; - }; - id?: string | null; - }[] - | null; -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "FooterNavItems". - */ -export type FooterNavItems = - | { - link: { - type?: ('reference' | 'custom') | null; - newTab?: boolean | null; - reference?: - | ({ - relationTo: 'pages'; - value: number | Page; - } | null) - | ({ - relationTo: 'blogPosts'; - value: number | BlogPost; - } | null) - | ({ - relationTo: 'blogCategories'; - value: number | BlogCategory; - } | null); - url?: string | null; - label: string; - }; - id?: string | null; - }[] - | null; -/** - * Supported timezones in IANA format. - * - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "supportedTimezones". - */ -export type SupportedTimezones = - | 'Pacific/Midway' - | 'Pacific/Niue' - | 'Pacific/Honolulu' - | 'Pacific/Rarotonga' - | 'America/Anchorage' - | 'Pacific/Gambier' - | 'America/Los_Angeles' - | 'America/Tijuana' - | 'America/Denver' - | 'America/Phoenix' - | 'America/Chicago' - | 'America/Guatemala' - | 'America/New_York' - | 'America/Bogota' - | 'America/Caracas' - | 'America/Santiago' - | 'America/Buenos_Aires' - | 'America/Sao_Paulo' - | 'Atlantic/South_Georgia' - | 'Atlantic/Azores' - | 'Atlantic/Cape_Verde' - | 'Europe/London' - | 'Europe/Berlin' - | 'Africa/Lagos' - | 'Europe/Athens' - | 'Africa/Cairo' - | 'Europe/Moscow' - | 'Asia/Riyadh' - | 'Asia/Dubai' - | 'Asia/Baku' - | 'Asia/Karachi' - | 'Asia/Tashkent' - | 'Asia/Calcutta' - | 'Asia/Dhaka' - | 'Asia/Almaty' - | 'Asia/Jakarta' - | 'Asia/Bangkok' - | 'Asia/Shanghai' - | 'Asia/Singapore' - | 'Asia/Tokyo' - | 'Asia/Seoul' - | 'Australia/Brisbane' - | 'Australia/Sydney' - | 'Pacific/Guam' - | 'Pacific/Noumea' - | 'Pacific/Auckland' - | 'Pacific/Fiji'; - -export interface Config { - auth: { - users: UserAuthOperations; - }; - blocks: {}; - collections: { - resumeDummyCollection: ResumeDummyCollection; - blogDummyCollection: BlogDummyCollection; - blogCategories: BlogCategory; - blogTags: BlogTag; - blogPosts: BlogPost; - generalDummyCollection: GeneralDummyCollection; - media: Media; - pages: Page; - users: User; - settingsDummyCollection: SettingsDummyCollection; - 'payload-locked-documents': PayloadLockedDocument; - 'payload-preferences': PayloadPreference; - 'payload-migrations': PayloadMigration; - }; - collectionsJoins: {}; - collectionsSelect: { - resumeDummyCollection: ResumeDummyCollectionSelect | ResumeDummyCollectionSelect; - blogDummyCollection: BlogDummyCollectionSelect | BlogDummyCollectionSelect; - blogCategories: BlogCategoriesSelect | BlogCategoriesSelect; - blogTags: BlogTagsSelect | BlogTagsSelect; - blogPosts: BlogPostsSelect | BlogPostsSelect; - generalDummyCollection: GeneralDummyCollectionSelect | GeneralDummyCollectionSelect; - media: MediaSelect | MediaSelect; - pages: PagesSelect | PagesSelect; - users: UsersSelect | UsersSelect; - settingsDummyCollection: SettingsDummyCollectionSelect | SettingsDummyCollectionSelect; - 'payload-locked-documents': PayloadLockedDocumentsSelect | PayloadLockedDocumentsSelect; - 'payload-preferences': PayloadPreferencesSelect | PayloadPreferencesSelect; - 'payload-migrations': PayloadMigrationsSelect | PayloadMigrationsSelect; - }; - db: { - defaultIDType: number; - }; - globals: { - resumeDummyGlobal: ResumeDummyGlobal; - resumeHero: ResumeHero; - resumeAboutMe: ResumeAboutMe; - resumeExperience: ResumeExperience; - resumeProjects: ResumeProject; - resumeCustomers: ResumeCustomer; - resumeContact: ResumeContact; - blogDummyGlobal: BlogDummyGlobal; - generalDummyGlobal: GeneralDummyGlobal; - settingsDummyGlobal: SettingsDummyGlobal; - settingsNavigation: SettingsNavigation; - settingsMeta: SettingsMeta; - }; - globalsSelect: { - resumeDummyGlobal: ResumeDummyGlobalSelect | ResumeDummyGlobalSelect; - resumeHero: ResumeHeroSelect | ResumeHeroSelect; - resumeAboutMe: ResumeAboutMeSelect | ResumeAboutMeSelect; - resumeExperience: ResumeExperienceSelect | ResumeExperienceSelect; - resumeProjects: ResumeProjectsSelect | ResumeProjectsSelect; - resumeCustomers: ResumeCustomersSelect | ResumeCustomersSelect; - resumeContact: ResumeContactSelect | ResumeContactSelect; - blogDummyGlobal: BlogDummyGlobalSelect | BlogDummyGlobalSelect; - generalDummyGlobal: GeneralDummyGlobalSelect | GeneralDummyGlobalSelect; - settingsDummyGlobal: SettingsDummyGlobalSelect | SettingsDummyGlobalSelect; - settingsNavigation: SettingsNavigationSelect | SettingsNavigationSelect; - settingsMeta: SettingsMetaSelect | SettingsMetaSelect; - }; - locale: 'en'; - user: User & { - collection: 'users'; - }; - jobs: { - tasks: unknown; - workflows: unknown; - }; -} -export interface UserAuthOperations { - forgotPassword: { - email: string; - password: string; - }; - login: { - email: string; - password: string; - }; - registerFirstUser: { - email: string; - password: string; - }; - unlock: { - email: string; - password: string; - }; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeDummyCollection". - */ -export interface ResumeDummyCollection { - id: number; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "blogDummyCollection". - */ -export interface BlogDummyCollection { - id: number; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "blogCategories". - */ -export interface BlogCategory { - id: number; - title: string; - slug?: string | null; - updatedAt: string; - createdAt: string; - _status?: ('draft' | 'published') | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "blogTags". - */ -export interface BlogTag { - id: number; - title: string; - slug?: string | null; - updatedAt: string; - createdAt: string; - _status?: ('draft' | 'published') | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "blogPosts". - */ -export interface BlogPost { - id: number; - title: string; - content?: { - root: { - type: string; - children: { - type: string; - version: number; - [k: string]: unknown; - }[]; - direction: ('ltr' | 'rtl') | null; - format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; - indent: number; - version: number; - }; - [k: string]: unknown; - } | null; - relatedPosts?: (number | BlogPost)[] | null; - categories?: (number | BlogCategory)[] | null; - meta?: { - title?: string | null; - /** - * Maximum upload file size: 12MB. Recommended file size for images is <500KB. - */ - image?: (number | null) | Media; - description?: string | null; - }; - publishedAt?: string | null; - authors?: (number | User)[] | null; - populatedAuthors?: - | { - id?: string | null; - name?: string | null; - }[] - | null; - slug?: string | null; - updatedAt: string; - createdAt: string; - _status?: ('draft' | 'published') | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "media". - */ -export interface Media { - id: number; - alt?: string | null; - blurDataURL?: string | null; - type?: string | null; - extension?: string | null; - prefix?: string | null; - updatedAt: string; - createdAt: string; - _status?: ('draft' | 'published') | null; - url?: string | null; - thumbnailURL?: string | null; - filename?: string | null; - mimeType?: string | null; - filesize?: number | null; - width?: number | null; - height?: number | null; - focalX?: number | null; - focalY?: number | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "users". - */ -export interface User { - id: number; - name?: string | null; - updatedAt: string; - createdAt: string; - _status?: ('draft' | 'published') | null; - email: string; - resetPasswordToken?: string | null; - resetPasswordExpiration?: string | null; - salt?: string | null; - hash?: string | null; - loginAttempts?: number | null; - lockUntil?: string | null; - password?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "generalDummyCollection". - */ -export interface GeneralDummyCollection { - id: number; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "pages". - */ -export interface Page { - id: number; - title: string; - hero?: (number | null) | Media; - content?: { - root: { - type: string; - children: { - type: string; - version: number; - [k: string]: unknown; - }[]; - direction: ('ltr' | 'rtl') | null; - format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; - indent: number; - version: number; - }; - [k: string]: unknown; - } | null; - meta?: { - title?: string | null; - /** - * Maximum upload file size: 12MB. Recommended file size for images is <500KB. - */ - image?: (number | null) | Media; - description?: string | null; - }; - publishedAt?: string | null; - slug?: string | null; - updatedAt: string; - createdAt: string; - _status?: ('draft' | 'published') | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "settingsDummyCollection". - */ -export interface SettingsDummyCollection { - id: number; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-locked-documents". - */ -export interface PayloadLockedDocument { - id: number; - document?: - | ({ - relationTo: 'resumeDummyCollection'; - value: number | ResumeDummyCollection; - } | null) - | ({ - relationTo: 'blogDummyCollection'; - value: number | BlogDummyCollection; - } | null) - | ({ - relationTo: 'blogCategories'; - value: number | BlogCategory; - } | null) - | ({ - relationTo: 'blogTags'; - value: number | BlogTag; - } | null) - | ({ - relationTo: 'blogPosts'; - value: number | BlogPost; - } | null) - | ({ - relationTo: 'generalDummyCollection'; - value: number | GeneralDummyCollection; - } | null) - | ({ - relationTo: 'media'; - value: number | Media; - } | null) - | ({ - relationTo: 'pages'; - value: number | Page; - } | null) - | ({ - relationTo: 'users'; - value: number | User; - } | null) - | ({ - relationTo: 'settingsDummyCollection'; - value: number | SettingsDummyCollection; - } | null); - globalSlug?: string | null; - user: { - relationTo: 'users'; - value: number | User; - }; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-preferences". - */ -export interface PayloadPreference { - id: number; - user: { - relationTo: 'users'; - value: number | User; - }; - key?: string | null; - value?: - | { - [k: string]: unknown; - } - | unknown[] - | string - | number - | boolean - | null; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-migrations". - */ -export interface PayloadMigration { - id: number; - name?: string | null; - batch?: number | null; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeDummyCollection_select". - */ -export interface ResumeDummyCollectionSelect { - updatedAt?: T; - createdAt?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "blogDummyCollection_select". - */ -export interface BlogDummyCollectionSelect { - updatedAt?: T; - createdAt?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "blogCategories_select". - */ -export interface BlogCategoriesSelect { - title?: T; - slug?: T; - updatedAt?: T; - createdAt?: T; - _status?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "blogTags_select". - */ -export interface BlogTagsSelect { - title?: T; - slug?: T; - updatedAt?: T; - createdAt?: T; - _status?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "blogPosts_select". - */ -export interface BlogPostsSelect { - title?: T; - content?: T; - relatedPosts?: T; - categories?: T; - meta?: - | T - | { - title?: T; - image?: T; - description?: T; - }; - publishedAt?: T; - authors?: T; - populatedAuthors?: - | T - | { - id?: T; - name?: T; - }; - slug?: T; - updatedAt?: T; - createdAt?: T; - _status?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "generalDummyCollection_select". - */ -export interface GeneralDummyCollectionSelect { - updatedAt?: T; - createdAt?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "media_select". - */ -export interface MediaSelect { - alt?: T; - blurDataURL?: T; - type?: T; - extension?: T; - prefix?: T; - updatedAt?: T; - createdAt?: T; - _status?: T; - url?: T; - thumbnailURL?: T; - filename?: T; - mimeType?: T; - filesize?: T; - width?: T; - height?: T; - focalX?: T; - focalY?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "pages_select". - */ -export interface PagesSelect { - title?: T; - hero?: T; - content?: T; - meta?: - | T - | { - title?: T; - image?: T; - description?: T; - }; - publishedAt?: T; - slug?: T; - updatedAt?: T; - createdAt?: T; - _status?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "users_select". - */ -export interface UsersSelect { - name?: T; - updatedAt?: T; - createdAt?: T; - _status?: T; - email?: T; - resetPasswordToken?: T; - resetPasswordExpiration?: T; - salt?: T; - hash?: T; - loginAttempts?: T; - lockUntil?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "settingsDummyCollection_select". - */ -export interface SettingsDummyCollectionSelect { - updatedAt?: T; - createdAt?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-locked-documents_select". - */ -export interface PayloadLockedDocumentsSelect { - document?: T; - globalSlug?: T; - user?: T; - updatedAt?: T; - createdAt?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-preferences_select". - */ -export interface PayloadPreferencesSelect { - user?: T; - key?: T; - value?: T; - updatedAt?: T; - createdAt?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-migrations_select". - */ -export interface PayloadMigrationsSelect { - name?: T; - batch?: T; - updatedAt?: T; - createdAt?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeDummyGlobal". - */ -export interface ResumeDummyGlobal { - id: number; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeHero". - */ -export interface ResumeHero { - id: number; - background?: (number | null) | Media; - portrait?: (number | null) | Media; - title?: string | null; - caption?: { - root: { - type: string; - children: { - type: string; - version: number; - [k: string]: unknown; - }[]; - direction: ('ltr' | 'rtl') | null; - format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; - indent: number; - version: number; - }; - [k: string]: unknown; - } | null; - _status?: ('draft' | 'published') | null; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeAboutMe". - */ -export interface ResumeAboutMe { - id: number; - portrait?: (number | null) | Media; - title?: string | null; - content?: { - root: { - type: string; - children: { - type: string; - version: number; - [k: string]: unknown; - }[]; - direction: ('ltr' | 'rtl') | null; - format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; - indent: number; - version: number; - }; - [k: string]: unknown; - } | null; - anchor?: string | null; - _status?: ('draft' | 'published') | null; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeExperience". - */ -export interface ResumeExperience { - id: number; - title?: string | null; - caption?: { - root: { - type: string; - children: { - type: string; - version: number; - [k: string]: unknown; - }[]; - direction: ('ltr' | 'rtl') | null; - format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; - indent: number; - version: number; - }; - [k: string]: unknown; - } | null; - entries?: - | { - title: string; - employer: string; - startDate: string; - endDate?: string | null; - richText?: { - root: { - type: string; - children: { - type: string; - version: number; - [k: string]: unknown; - }[]; - direction: ('ltr' | 'rtl') | null; - format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; - indent: number; - version: number; - }; - [k: string]: unknown; - } | null; - technologies?: { - id?: string; - label?: string; - [k: string]: unknown; - }[]; - id?: string | null; - }[] - | null; - anchor?: string | null; - skillSummary?: - | { - [k: string]: unknown; - } - | unknown[] - | string - | number - | boolean - | null; - _status?: ('draft' | 'published') | null; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeProjects". - */ -export interface ResumeProject { - id: number; - title?: string | null; - caption?: { - root: { - type: string; - children: { - type: string; - version: number; - [k: string]: unknown; - }[]; - direction: ('ltr' | 'rtl') | null; - format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; - indent: number; - version: number; - }; - [k: string]: unknown; - } | null; - entries?: - | { - headline: string; - subline: string; - richText?: { - root: { - type: string; - children: { - type: string; - version: number; - [k: string]: unknown; - }[]; - direction: ('ltr' | 'rtl') | null; - format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; - indent: number; - version: number; - }; - [k: string]: unknown; - } | null; - image?: (number | null) | Media; - id?: string | null; - }[] - | null; - anchor?: string | null; - _status?: ('draft' | 'published') | null; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeCustomers". - */ -export interface ResumeCustomer { - id: number; - title?: string | null; - caption?: { - root: { - type: string; - children: { - type: string; - version: number; - [k: string]: unknown; - }[]; - direction: ('ltr' | 'rtl') | null; - format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; - indent: number; - version: number; - }; - [k: string]: unknown; - } | null; - entries?: - | { - logo?: string | null; - title?: string | null; - id?: string | null; - }[] - | null; - anchor?: string | null; - _status?: ('draft' | 'published') | null; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeContact". - */ -export interface ResumeContact { - id: number; - title?: string | null; - caption?: { - root: { - type: string; - children: { - type: string; - version: number; - [k: string]: unknown; - }[]; - direction: ('ltr' | 'rtl') | null; - format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; - indent: number; - version: number; - }; - [k: string]: unknown; - } | null; - mailButton?: { - label?: string | null; - href?: string | null; - }; - anchor?: string | null; - _status?: ('draft' | 'published') | null; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "blogDummyGlobal". - */ -export interface BlogDummyGlobal { - id: number; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "generalDummyGlobal". - */ -export interface GeneralDummyGlobal { - id: number; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "settingsDummyGlobal". - */ -export interface SettingsDummyGlobal { - id: number; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "settingsNavigation". - */ -export interface SettingsNavigation { - id: number; - headerNavItems?: HeaderNavItems; - footerNavItems?: FooterNavItems; - _status?: ('draft' | 'published') | null; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "settingsMeta". - */ -export interface SettingsMeta { - id: number; - siteName?: string | null; - titleTemplate?: string | null; - fallbackTitle?: string | null; - fallbackDescription?: string | null; - fallbackImage?: (number | null) | Media; - keywords?: { - id?: string; - label?: string; - [k: string]: unknown; - }[]; - _status?: ('draft' | 'published') | null; - updatedAt?: string | null; - createdAt?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeDummyGlobal_select". - */ -export interface ResumeDummyGlobalSelect { - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeHero_select". - */ -export interface ResumeHeroSelect { - background?: T; - portrait?: T; - title?: T; - caption?: T; - _status?: T; - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeAboutMe_select". - */ -export interface ResumeAboutMeSelect { - portrait?: T; - title?: T; - content?: T; - anchor?: T; - _status?: T; - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeExperience_select". - */ -export interface ResumeExperienceSelect { - title?: T; - caption?: T; - entries?: - | T - | { - title?: T; - employer?: T; - startDate?: T; - endDate?: T; - richText?: T; - technologies?: T; - id?: T; - }; - anchor?: T; - skillSummary?: T; - _status?: T; - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeProjects_select". - */ -export interface ResumeProjectsSelect { - title?: T; - caption?: T; - entries?: - | T - | { - headline?: T; - subline?: T; - richText?: T; - image?: T; - id?: T; - }; - anchor?: T; - _status?: T; - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeCustomers_select". - */ -export interface ResumeCustomersSelect { - title?: T; - caption?: T; - entries?: - | T - | { - logo?: T; - title?: T; - id?: T; - }; - anchor?: T; - _status?: T; - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "resumeContact_select". - */ -export interface ResumeContactSelect { - title?: T; - caption?: T; - mailButton?: - | T - | { - label?: T; - href?: T; - }; - anchor?: T; - _status?: T; - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "blogDummyGlobal_select". - */ -export interface BlogDummyGlobalSelect { - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "generalDummyGlobal_select". - */ -export interface GeneralDummyGlobalSelect { - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "settingsDummyGlobal_select". - */ -export interface SettingsDummyGlobalSelect { - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "settingsNavigation_select". - */ -export interface SettingsNavigationSelect { - headerNavItems?: T | HeaderNavItemsSelect; - footerNavItems?: T | FooterNavItemsSelect; - _status?: T; - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "HeaderNavItems_select". - */ -export interface HeaderNavItemsSelect { - link?: - | T - | { - type?: T; - newTab?: T; - reference?: T; - url?: T; - label?: T; - }; - id?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "FooterNavItems_select". - */ -export interface FooterNavItemsSelect { - link?: - | T - | { - type?: T; - newTab?: T; - reference?: T; - url?: T; - label?: T; - }; - id?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "settingsMeta_select". - */ -export interface SettingsMetaSelect { - siteName?: T; - titleTemplate?: T; - fallbackTitle?: T; - fallbackDescription?: T; - fallbackImage?: T; - keywords?: T; - _status?: T; - updatedAt?: T; - createdAt?: T; - globalType?: T; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "auth". - */ -export interface Auth { - [k: string]: unknown; -} - - -declare module 'payload' { - export interface GeneratedTypes extends Config {} -} \ No newline at end of file diff --git a/src/payload.config.ts b/src/payload.config.ts deleted file mode 100644 index f9b9dc2a..00000000 --- a/src/payload.config.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { postgresAdapter } from '@payloadcms/db-postgres' -import { vercelBlobStorage } from '@payloadcms/storage-vercel-blob' -import { - BlockquoteFeature, - BoldFeature, - FixedToolbarFeature, - HeadingFeature, - HorizontalRuleFeature, - IndentFeature, - InlineCodeFeature, - ItalicFeature, - lexicalEditor, - LinkFeature, - OrderedListFeature, - ParagraphFeature, - UnderlineFeature, - UnorderedListFeature, -} from '@payloadcms/richtext-lexical' -import sharp from 'sharp' -import path from 'path' -import { buildConfig } from 'payload' -import { fileURLToPath } from 'url' -import nodemailerSendgrid from 'nodemailer-sendgrid' -import nodemailer from 'nodemailer' -import { nodemailerAdapter } from '@payloadcms/email-nodemailer' -import { resolveCollections, resolveGlobals } from '@/payload/utilities/schemaHelpers' -import { seedHandler } from '@/payload/endpoints/seed' -import * as process from 'node:process' - -const filename = fileURLToPath(import.meta.url) -const dirname = path.dirname(filename) - -export default buildConfig({ - admin: { - components: { - graphics: { - Icon: '/payload/components/Icon', - Logo: '/payload/components/Logo', - }, - }, - dateFormat: 'yyyy-MM-dd', - importMap: { - baseDir: path.resolve(dirname), - }, - meta: { - icons: [ - { - rel: 'icon', - type: 'image/x-icon', - url: '/favicon.ico', - sizes: '32x32', - }, - { - rel: 'icon', - type: 'image/svg+xml', - url: '/favicon.svg', - }, - ], - }, - user: 'users', - }, - editor: lexicalEditor({ - features: [ - HeadingFeature({ enabledHeadingSizes: ['h2', 'h3', 'h4'] }), - ItalicFeature(), - BoldFeature(), - UnderlineFeature(), - OrderedListFeature(), - UnorderedListFeature(), - ParagraphFeature(), - BlockquoteFeature(), - LinkFeature(), - HorizontalRuleFeature(), - IndentFeature(), - InlineCodeFeature(), - FixedToolbarFeature(), - ], - }), - db: postgresAdapter({ - pool: { - connectionString: process.env.DATABASE_URL || '', - }, - }), - collections: await resolveCollections(['resume', 'blog', 'general', 'settings']), - debug: process.env.NODE_ENV === 'development', - email: process.env.SENDGRID_API_KEY - ? nodemailerAdapter({ - defaultFromAddress: 'no-reply@heene.io', - defaultFromName: 'Notifications from Daniel Heene', - - transport: nodemailer.createTransport( - nodemailerSendgrid({ - apiKey: process.env.SENDGRID_API_KEY, - }), - ), - }) - : undefined, - endpoints: [ - // The seed endpoint is used to populate the database with some example data - // You should delete this endpoint before deploying your site to production - { - handler: seedHandler, - method: 'get', - path: '/seed', - }, - ], - globals: await resolveGlobals(['resume', 'blog', 'general', 'settings']), - localization: { - locales: [ - { - label: 'English', - code: 'en', - }, - ], - defaultLocale: 'en', - fallback: true, - }, - plugins: [ - vercelBlobStorage({ - enabled: true, - // clientUploads: true, - // addRandomSuffix: true, - collections: { - media: { - prefix: process.env.VERCEL_ENV || 'development', - }, - }, - token: process.env.BLOB_READ_WRITE_TOKEN || '', - }), - ], - secret: process.env.PAYLOAD_SECRET, - sharp, - telemetry: false, - typescript: { - outputFile: path.resolve(dirname, 'payload-types.ts'), - }, -}) diff --git a/src/payload/access/anyone.ts b/src/payload/access/anyone.ts deleted file mode 100644 index bf37c3a1..00000000 --- a/src/payload/access/anyone.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { Access } from 'payload' - -export const anyone: Access = () => true diff --git a/src/payload/access/authenticated.ts b/src/payload/access/authenticated.ts deleted file mode 100644 index 71e5ba6c..00000000 --- a/src/payload/access/authenticated.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { AccessArgs } from 'payload' - -import type { User } from '@payload-types' - -type isAuthenticated = (args: AccessArgs) => boolean - -export const authenticated: isAuthenticated = ({ req: { user } }) => { - if (user) { - return true - } -} diff --git a/src/payload/components/BlurHash/BlurHashField.module.scss b/src/payload/components/BlurHash/BlurHashField.module.scss deleted file mode 100644 index 3570dfa3..00000000 --- a/src/payload/components/BlurHash/BlurHashField.module.scss +++ /dev/null @@ -1,6 +0,0 @@ -.BlurHashField { - - &_Container { - @apply w-full aspect-video; - } -} diff --git a/src/payload/components/BlurHash/BlurHashField.tsx b/src/payload/components/BlurHash/BlurHashField.tsx deleted file mode 100644 index f9ce1270..00000000 --- a/src/payload/components/BlurHash/BlurHashField.tsx +++ /dev/null @@ -1,26 +0,0 @@ -'use client' - -import { TextFieldClientProps } from 'payload' -import { FieldLabel, useField } from '@payloadcms/ui' -import styles from './BlurHashField.module.scss' -import { Blurhash } from 'react-blurhash' - -interface BlurHashFieldProps extends TextFieldClientProps { - className?: string -} - -export const BlurHashField = ({ path, className = '' }: BlurHashFieldProps) => { - const { value = '' }: { value: string } = useField({ path }) - - return ( -
- - -
- ) -} diff --git a/src/payload/components/BlurHash/index.ts b/src/payload/components/BlurHash/index.ts deleted file mode 100644 index da4ecaa7..00000000 --- a/src/payload/components/BlurHash/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { BlurHashField as Field } from './BlurHashField' diff --git a/src/payload/components/ColorPalette/ColorPaletteField.module.scss b/src/payload/components/ColorPalette/ColorPaletteField.module.scss deleted file mode 100644 index 158f7dda..00000000 --- a/src/payload/components/ColorPalette/ColorPaletteField.module.scss +++ /dev/null @@ -1,5 +0,0 @@ -.ColorPaletteField { - &_Container { - @apply flex flex-row flex-wrap gap-4; - } -} diff --git a/src/payload/components/ColorPalette/ColorPaletteField.tsx b/src/payload/components/ColorPalette/ColorPaletteField.tsx deleted file mode 100644 index 4358caa9..00000000 --- a/src/payload/components/ColorPalette/ColorPaletteField.tsx +++ /dev/null @@ -1,56 +0,0 @@ -'use client' - -import { JSONFieldClientProps } from 'payload' -import { FieldLabel, useField } from '@payloadcms/ui' -import { ColorPaletteSwatchValues, ColorPaletteSwatchVibrancy } from '@custom-types' -import styles from './ColorPaletteField.module.scss' -import { ColorPaletteSwatch } from './ColorPaletteSwatch' -import { useMemo } from 'react' - -interface ColorPaletteFieldProps extends JSONFieldClientProps { - className?: string -} - -const colorSwatchSortingOrder: ColorPaletteSwatchVibrancy[] = [ - 'vibrant', - 'muted', - 'lightVibrant', - 'lightMuted', - 'darkVibrant', - 'darkVibrant', -] - -export const ColorPaletteField = ({ path, className = '' }: ColorPaletteFieldProps) => { - const { value = {} } = useField({ path }) - - const sortedPalette = useMemo( - () => - Object.entries(value || {}).sort(([a], [b]) => { - const aPos = colorSwatchSortingOrder.indexOf(a as ColorPaletteSwatchVibrancy) - const bPos = colorSwatchSortingOrder.indexOf(b as ColorPaletteSwatchVibrancy) - - if (aPos === -1 && bPos === -1) return 0 - if (aPos === -1) return 1 - if (bPos === -1) return -1 - return aPos - bPos - }) as [ColorPaletteSwatchVibrancy, ColorPaletteSwatchValues][], - [value], - ) - - return ( -
- -
- {sortedPalette.map(([vibrancy, { background, foreground, name }]) => ( - - ))} -
-
- ) -} diff --git a/src/payload/components/ColorPalette/ColorPaletteSwatch.module.scss b/src/payload/components/ColorPalette/ColorPaletteSwatch.module.scss deleted file mode 100644 index b05506eb..00000000 --- a/src/payload/components/ColorPalette/ColorPaletteSwatch.module.scss +++ /dev/null @@ -1,17 +0,0 @@ -.ColorPaletteSwatch { - &_Container { - @apply flex flex-col justify-center p-3 shrink-0 grow min-w-fit; - } - - &_Vibrancy { - @apply text-sm mb-4 font-semibold; - } - - &_Color { - @apply text-3xl font-mono font-semibold leading-none tracking-wider uppercase; - } - - &_Name { - @apply text-sm mt-1 font-mono font-semibold; - } -} diff --git a/src/payload/components/ColorPalette/ColorPaletteSwatch.tsx b/src/payload/components/ColorPalette/ColorPaletteSwatch.tsx deleted file mode 100644 index cd97ae53..00000000 --- a/src/payload/components/ColorPalette/ColorPaletteSwatch.tsx +++ /dev/null @@ -1,32 +0,0 @@ -'use client' - -import { ColorPaletteSwatchVibrancy } from '@custom-types' -import styles from './ColorPaletteSwatch.module.scss' -import { memo } from 'react' - -interface ColorPaletteSwatchProps { - name: string - vibrancy: `${ColorPaletteSwatchVibrancy}` - foreground: string - background: string -} - -export const ColorPaletteSwatch = memo(function ColorPaletteSwatch({ - vibrancy, - foreground, - background, - name, -}: ColorPaletteSwatchProps) { - const capitalizedVibrancy = vibrancy.charAt(0).toUpperCase() + vibrancy.slice(1) - - return ( -
- {capitalizedVibrancy} - {background} - {name} -
- ) -}) diff --git a/src/payload/components/ColorPalette/index.ts b/src/payload/components/ColorPalette/index.ts deleted file mode 100644 index f6c26351..00000000 --- a/src/payload/components/ColorPalette/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { ColorPaletteField as Field } from './ColorPaletteField' diff --git a/src/payload/components/CustomerLogoField/CustomerLogoField.module.css b/src/payload/components/CustomerLogoField/CustomerLogoField.module.css deleted file mode 100644 index 3e871108..00000000 --- a/src/payload/components/CustomerLogoField/CustomerLogoField.module.css +++ /dev/null @@ -1,60 +0,0 @@ -.CustomerLogoFieldContainer { - @apply aspect-16/9 max-w-full max-h-full relative flex justify-center items-center; - @apply mb-8 border-2 bg-white/5 border-white/10 transition-colors; -} - - -.DropArea { - @apply w-full h-full flex flex-col justify-center items-center grow-0 shrink-0; - @apply gap-8 transition-colors cursor-pointer opacity-40; - - &:hover { - @apply bg-white/5 border-white/20; - } - - &.DropAreaActive { - @apply bg-white/15 border-white/30; - } -} - - -.CustomerLogoFieldDelete { - @apply absolute top-2 right-2 text-3xl p-0 m-0 border-none cursor-pointer; - line-height: 0; -} - -.DropAreaLabel { - @apply flex flex-row flex-nowrap; - @apply font-mono uppercase items-center; -} - -.DropAreaIcon { - @apply text-white w-auto h-2/3; - - & svg { - @apply w-auto h-2/3; - } - - & path { - stroke-width: 1px; - } -} - -.DropAreaText { - @apply m-4; -} - -.CustomerLogoFieldImage { - @apply w-full h-full grow shrink overflow-hidden; - @apply flex justify-center items-center; - - & svg { - @apply w-[80%] max-w-[80%] h-[80%] max-h-[80%]; - @apply absolute left-1/2 top-1/2; - transform: translate(-50%, -50%); - } - - & path { - fill: white; - } -} diff --git a/src/payload/components/CustomerLogoField/CustomerLogoField.tsx b/src/payload/components/CustomerLogoField/CustomerLogoField.tsx deleted file mode 100644 index 5b260684..00000000 --- a/src/payload/components/CustomerLogoField/CustomerLogoField.tsx +++ /dev/null @@ -1,149 +0,0 @@ -'use client' - -import { - ChangeEvent, - DragEvent, - Fragment, - JSX, - MouseEvent, - useCallback, - useId, - useMemo, - useState, -} from 'react' -import { TextFieldClientProps } from 'payload' - -import { toast } from 'react-toastify' -import styles from './CustomerLogoField.module.css' -import { ClassValue, cn } from '@/utilities/cn' -import { Image, XIcon } from 'lucide-react' -import { useField } from '@payloadcms/ui' - -interface CustomerLogoFieldProps extends TextFieldClientProps { - className?: ClassValue -} - -export const CustomerLogoField = ({ - className, - path, - // field, - // readOnly, - // inputRef, - validate, -}: CustomerLogoFieldProps): JSX.Element => { - const id = useId() - const { value, setValue } = useField({ path, validate }) - const [isDragging, setIsDragging] = useState(false) - - const handleStart = useCallback( - (event: DragEvent | ChangeEvent) => { - event.preventDefault() - event.stopPropagation() - setIsDragging(true) - }, - [], - ) - - const handleEnd = useCallback( - (event: DragEvent | ChangeEvent) => { - event.preventDefault() - event.stopPropagation() - setIsDragging(false) - }, - [], - ) - - const handleFileUpload = useCallback(async (file: File) => { - const sanitizeUrl = new URL('/api/image/sanitize-svg', process.env.NEXT_PUBLIC_SERVER_URL) - const reader = new FileReader() - - reader.readAsText(file, 'UTF-8') - reader.onload = async (event: ProgressEvent) => { - toast.info('') - const { logo } = await fetch(sanitizeUrl, { - method: 'POST', - body: JSON.stringify({ logo: event.target?.result }), - }) - .then((response) => response.json()) - .catch((error) => console.log(error)) - - setValue(Buffer.from(logo).toString('base64')) - } - }, []) - - const handleFileChange = useCallback( - async (event: DragEvent | ChangeEvent) => { - handleEnd(event) - - const file = - 'dataTransfer' in event - ? event.dataTransfer.files[0] - : 'target' in event - ? event.target.files[0] - : null - - if (!file || !file.type.includes('svg')) { - toast.error('The uploaded file must be an SVG.', { - autoClose: 1000, - hideProgressBar: true, - closeOnClick: true, - pauseOnHover: false, - draggable: true, - }) - } else { - await handleFileUpload(file) - } - }, - [], - ) - - const handleFileDelete = useCallback((event: MouseEvent) => { - event.preventDefault() - event.stopPropagation() - setIsDragging(false) - setValue(null) - }, []) - - const logoContent = useMemo(() => { - return value ? Buffer.from(value, 'base64').toString('utf-8') : null - }, [value]) - - return ( -
- {!logoContent ? ( - - - - - ) : ( - -
- - - )} -
- ) -} diff --git a/src/payload/components/CustomerLogoField/index.ts b/src/payload/components/CustomerLogoField/index.ts deleted file mode 100644 index 0befa999..00000000 --- a/src/payload/components/CustomerLogoField/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { CustomerLogoField as default } from './CustomerLogoField' diff --git a/src/payload/components/CustomersRowLabel/CustomersRowLabel.tsx b/src/payload/components/CustomersRowLabel/CustomersRowLabel.tsx deleted file mode 100644 index 96507b10..00000000 --- a/src/payload/components/CustomersRowLabel/CustomersRowLabel.tsx +++ /dev/null @@ -1,12 +0,0 @@ -'use client' - -import { useRowLabel } from '@payloadcms/ui' -import { CustomerEntry } from '@custom-types' - -export const CustomersRowLabel = () => { - const { - data: { title }, - } = useRowLabel() - - return title ? title : '' -} diff --git a/src/payload/components/CustomersRowLabel/index.ts b/src/payload/components/CustomersRowLabel/index.ts deleted file mode 100644 index e1f54c1b..00000000 --- a/src/payload/components/CustomersRowLabel/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { CustomersRowLabel as default } from './CustomersRowLabel' diff --git a/src/payload/components/ExperienceRowLabel/ExperienceRowLabel.module.scss b/src/payload/components/ExperienceRowLabel/ExperienceRowLabel.module.scss deleted file mode 100644 index c882ff72..00000000 --- a/src/payload/components/ExperienceRowLabel/ExperienceRowLabel.module.scss +++ /dev/null @@ -1,16 +0,0 @@ -.ExperienceRowLabel { - &_Container { - display: flex; - width: 100%; - } - - &_DateLabel { - font-weight: 600; - margin-left: 1em; - opacity: 0.5; - } - - &_Title { - font-weight: 600; - } -} diff --git a/src/payload/components/ExperienceRowLabel/ExperienceRowLabel.tsx b/src/payload/components/ExperienceRowLabel/ExperienceRowLabel.tsx deleted file mode 100644 index 6aed8fd6..00000000 --- a/src/payload/components/ExperienceRowLabel/ExperienceRowLabel.tsx +++ /dev/null @@ -1,29 +0,0 @@ -'use client' - -import { useRowLabel } from '@payloadcms/ui' -import styles from './ExperienceRowLabel.module.scss' -import { useExperienceTimeSpan } from '@/utilities/useExperienceTimeSpan' - -type ExperienceRowLabelData = { - title: string - employer: string - startDate: string - endDate?: string -} - -export const ExperienceRowLabel = () => { - const { data: { title, employer, startDate, endDate } = {} } = - useRowLabel() - - const timeString = useExperienceTimeSpan(startDate, endDate) - - return ( -
- {!!title && {title}} - {!!employer && ( -  @ {employer} - )} - {!!timeString && [{timeString}]} -
- ) -} diff --git a/src/payload/components/ExperienceRowLabel/index.ts b/src/payload/components/ExperienceRowLabel/index.ts deleted file mode 100644 index 15a65115..00000000 --- a/src/payload/components/ExperienceRowLabel/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { ExperienceRowLabel as default } from './ExperienceRowLabel' diff --git a/src/payload/components/Icon/Icon.tsx b/src/payload/components/Icon/Icon.tsx deleted file mode 100644 index 7ebdd331..00000000 --- a/src/payload/components/Icon/Icon.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { cn } from '@/utilities/cn' - -export const Icon = ({ className }) => ( - - - -) diff --git a/src/payload/components/Icon/index.ts b/src/payload/components/Icon/index.ts deleted file mode 100644 index 5b35a099..00000000 --- a/src/payload/components/Icon/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Icon as default } from './Icon' diff --git a/src/payload/components/Logo/Logo.module.css b/src/payload/components/Logo/Logo.module.css deleted file mode 100644 index 948d6d1b..00000000 --- a/src/payload/components/Logo/Logo.module.css +++ /dev/null @@ -1,3 +0,0 @@ -.Logo { - @apply w-5/6 h-auto mx-auto; -} diff --git a/src/payload/components/Logo/Logo.tsx b/src/payload/components/Logo/Logo.tsx deleted file mode 100644 index d8e9c7a7..00000000 --- a/src/payload/components/Logo/Logo.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import styles from './Logo.module.css' - -export const Logo = () => ( - - - -) diff --git a/src/payload/components/Logo/index.ts b/src/payload/components/Logo/index.ts deleted file mode 100644 index f60260da..00000000 --- a/src/payload/components/Logo/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Logo as default } from './Logo' diff --git a/src/payload/components/TagInputField/TagInputField.module.scss b/src/payload/components/TagInputField/TagInputField.module.scss deleted file mode 100644 index 31a56adb..00000000 --- a/src/payload/components/TagInputField/TagInputField.module.scss +++ /dev/null @@ -1,37 +0,0 @@ -.TagInputField { - display: flex; - flex-wrap: wrap; - gap: 0.5em; - align-items: center; - border: 1px solid var(--theme-elevation-150); - border-radius: var(--style-radius-s); - background: var(--theme-input-bg); - color: var(--theme-elevation-800); - font-size: 1rem; - min-height: 50px; - line-height: 20px; - font-family: var(--font-mono), 'ui-monospace', 'monospace'; - padding: 4px 8px; - cursor: text; - - &:focus-within { - border-color: var(--theme-elevation-400); - } - - &_Input { - border: 0; - flex-grow: 1; - flex-shrink: 1; - font-size: 1.2rem; - min-width: 0; - height: 100%; - transition: none; - font-family: var(--font-mono), 'ui-monospace', 'monospace'; - width: 0; - background: transparent; - - &:focus { - outline: none; - } - } -} diff --git a/src/payload/components/TagInputField/TagInputField.tsx b/src/payload/components/TagInputField/TagInputField.tsx deleted file mode 100644 index 2746c95d..00000000 --- a/src/payload/components/TagInputField/TagInputField.tsx +++ /dev/null @@ -1,208 +0,0 @@ -'use client' - -import React, { ChangeEvent, KeyboardEvent, useCallback, useRef, useState } from 'react' -import { deburr, kebabCase } from 'lodash-es' -import { fieldBaseClass, FieldDescription, FieldError, useField } from '@payloadcms/ui' -import styles from './TagInputField.module.scss' -import { cn } from '@/utilities/cn' -import { TagItem } from './TagItem' -import { JSONFieldClientProps } from 'payload' - -type Tag = { - id: string - label: string -} - -// type TagFieldExpressions = { -// allowedChars: RegExp -// specialChars: RegExp -// leadingSpecialChars: RegExp -// trailingSpecialChars: RegExp -// } - -const EVENT_KEY = { - BACKSPACE: 'Backspace', - ENTER: 'Enter', -} - -/** - * creates a set of expressions for trimming and adjusting tag values - */ -// const generateExpressions = (allowed: string, specials: string): TagFieldExpressions => ({ -// allowedChars: new RegExp(allowed, 'g'), -// leadingSpecialChars: new RegExp(`^${specials}`, 'g'), -// specialChars: new RegExp(specials, 'g'), -// trailingSpecialChars: new RegExp(`${specials}?`, 'g'), -// }) - -const baseClass = 'tag-field' - -export const TagInputField: React.FC = (props) => { - const { - path, - field: { - admin: { className, description, style, width } = {}, - // jsonSchema, f - // label, - // required, - }, - validate, - } = props - - const containerRef = useRef(null) - const inputRef = useRef(null) - // const [value, setValue] = useState([]) - const [stringValue, setStringValue] = useState('') - // const [jsonError, setJsonError] = useState() - // const [hasLoadedValue, setHasLoadedValue] = useState(false) - - const { - formInitializing, - formProcessing, - setValue, - showError, - readOnly, - errorMessage, - value = [], - } = useField({ - path, - validate, - }) - - const disabled = readOnly || formProcessing || formInitializing - - const handleChange = useCallback( - ({ target: { value } }: ChangeEvent) => { - if (disabled) return - setStringValue(value.replaceAll(/[^a-zA-Z0-9-.]+/g, '')) - }, - [disabled, setStringValue], - ) - - const handleEnterKey = useCallback( - (stringValue: string): void => { - if (!stringValue.length) return - - const tag: Tag = { - id: kebabCase(deburr(stringValue)), - label: stringValue, - } - - const existingTag = value.find(({ id }) => id === tag.id) - if (existingTag) { - const tag = containerRef.current.querySelector( - `[data-tag-id="${existingTag.id}"]`, - ) - - tag?.classList.remove('pulsate') - tag?.classList.add('pulsate') - return - } - - setValue([...value, tag]) - setStringValue('') - }, - [value, setValue], - ) - - const handleBackspaceKeyPress = useCallback( - (stringValue: string): void => { - const hasFocusedInput = document.activeElement === inputRef.current - const hasFocusedLabel = - document.activeElement.hasAttribute('data-tag-id') && - containerRef.current.contains(document.activeElement) - // - // if (hasFocusedInput && stringValue.length > 0) { - // return setStringValue(stringValue.slice(0, -1)) - // } - - if (hasFocusedInput && stringValue.length === 0) { - const lastTagElement = containerRef.current.querySelector( - '[data-tag-id]:last-of-type', - ) - // const lastTagElement = Array.from(allTagElements).pop() - return lastTagElement?.focus() - } - - if (hasFocusedLabel) { - const deleteId = document.activeElement.getAttribute('data-tag-id') - containerRef.current.querySelector('input').focus() - return setValue(value.filter(({ id }) => id !== deleteId)) - } - }, - [setValue, value], - ) - - const handleKeyDown = useCallback( - (event: KeyboardEvent): void => { - if (event.key === EVENT_KEY.ENTER) { - event.preventDefault() - handleEnterKey(stringValue) - } - if (event.key === EVENT_KEY.BACKSPACE) { - handleBackspaceKeyPress(stringValue) - } - }, - [handleBackspaceKeyPress, handleEnterKey, stringValue], - ) - - const handleDeleteAction = useCallback( - (deleteId: string) => setValue(value.filter(({ id }) => id !== deleteId)), - [setValue, value], - ) - - return ( -
- {/**/} -
- - {/**/} - {errorMessage} -
inputRef.current?.focus()}> - {value.map(({ id, label }) => ( - - {label} - - ))} - -
-
- - {/**/} -
- ) -} diff --git a/src/payload/components/TagInputField/TagItem.module.scss b/src/payload/components/TagInputField/TagItem.module.scss deleted file mode 100644 index 05022c1d..00000000 --- a/src/payload/components/TagInputField/TagItem.module.scss +++ /dev/null @@ -1,46 +0,0 @@ -@keyframes pulsate { - from { - border-color: var(--theme-elevation-250); - } - to { - border-color: var(--theme-elevation-1000); - } -} - -.TagItem { - cursor: default; - display: inline-flex; - align-items: center; - justify-content: center; - gap: 0.5em; - padding: 0.1em 0.3em; - flex-shrink: 0; - border: 0.2em solid var(--theme-elevation-250); - background-color: var(--theme-elevation-250); - color: var(--theme-elevation-1000); - font-family: var(--font-mono), 'ui-monospace', 'monospace'; - font-weight: 600; - letter-spacing: -0.5px; - user-select: none; - - &:global(.pulsate) { - animation: pulsate 250ms ease-in-out 2 alternate; - } - - &_Value { - font-size: 1rem; - //line-height: 22px; - } - - &_Remove { - cursor: pointer; - //width: 22px; - text-align: center; - opacity: 0.4; - transition: opacity 125ms ease-in-out; - } - - &:hover &_Remove { - opacity: 1; - } -} diff --git a/src/payload/components/TagInputField/TagItem.tsx b/src/payload/components/TagInputField/TagItem.tsx deleted file mode 100644 index 34b8b072..00000000 --- a/src/payload/components/TagInputField/TagItem.tsx +++ /dev/null @@ -1,33 +0,0 @@ -'use client' - -import React, { DetailedHTMLProps, forwardRef, HTMLAttributes } from 'react' -import { ImCross } from 'react-icons/im' -import styles from './TagItem.module.scss' - -interface TagItemProps - extends DetailedHTMLProps, HTMLButtonElement> { - id: string - children: string - // onKeyDownAction: (event: React.KeyboardEvent) => void - onDeleteAction: (id: string) => void -} - -export const TagItem = forwardRef( - ({ id, children, onDeleteAction, ...buttonProps }, ref) => ( - - ), -) - -TagItem.displayName = 'TagItem' diff --git a/src/payload/components/TagInputField/index.ts b/src/payload/components/TagInputField/index.ts deleted file mode 100644 index fa5bfd63..00000000 --- a/src/payload/components/TagInputField/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { TagInputField as default } from './TagInputField' diff --git a/src/payload/endpoints/data/imprint.ts b/src/payload/endpoints/data/imprint.ts deleted file mode 100755 index 8f5a4ebc..00000000 --- a/src/payload/endpoints/data/imprint.ts +++ /dev/null @@ -1,516 +0,0 @@ -export default { - title: 'Imprint', - content: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - tag: 'h3', - type: 'heading', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Angaben gem. § 5 TMG:', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - { - tag: 'h4', - type: 'heading', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Anschrift:', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Daniel Heene', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - type: 'linebreak', - version: 1, - }, - { - mode: 'normal', - text: 'Von-wSparr-Str. 62', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - type: 'linebreak', - version: 1, - }, - { - mode: 'normal', - text: '51063 Köln', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - type: 'linebreak', - version: 1, - }, - { - mode: 'normal', - text: 'Deutschland', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - { - tag: 'h4', - type: 'heading', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Kontaktaufnahme:', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'E-Mail: ', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - id: '68180d64653b7130f0b03507', - type: 'link', - fields: { - url: 'mailto:daniel@heene.io', - linkType: 'custom', - }, - format: '', - indent: 0, - version: 3, - children: [ - { - mode: 'normal', - text: 'daniel@heene.io', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - { - tag: 'h4', - type: 'heading', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Umsatzsteuer-Identifikationsnummer gem. § 27 a Umsatzsteuergesetz:', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'DE 348 610 586', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - { - tag: 'h3', - type: 'heading', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Image Credits', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - tag: 'ul', - type: 'list', - start: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'listitem', - value: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'About Me Image on Home Page by ', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - type: 'link', - fields: { - doc: null, - url: 'mailto:marcus@sichtplan.de', - newTab: true, - linkType: 'custom', - }, - format: '', - indent: 0, - version: 3, - children: [ - { - mode: 'normal', - text: 'Marcus Becker', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - mode: 'normal', - text: ' from ', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - type: 'link', - fields: { - doc: null, - url: 'https://www.sichtplan.de/', - newTab: true, - linkType: 'custom', - }, - format: '', - indent: 0, - version: 3, - children: [ - { - mode: 'normal', - text: 'Sichtplan', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 2, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Hero Image on Home Page by ', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - type: 'link', - fields: { - doc: null, - url: 'https://unsplash.com/@mvds', - newTab: true, - linkType: 'custom', - }, - format: '', - indent: 0, - version: 3, - children: [ - { - mode: 'normal', - text: 'Mads Schmidt Rasmussen', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - mode: 'normal', - text: ' on ', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - type: 'link', - fields: { - doc: null, - url: 'https://unsplash.com/photos/ice-capped-mountain-at-daytime-xfngap_DToE', - newTab: true, - linkType: 'custom', - }, - format: '', - indent: 0, - version: 3, - children: [ - { - mode: 'normal', - text: 'Unsplash', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 3, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Hero Image on Imprint Page by ', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - type: 'link', - fields: { - url: 'https://unsplash.com/@tjerwin', - newTab: true, - linkType: 'custom', - }, - format: '', - indent: 0, - version: 3, - children: [ - { - mode: 'normal', - text: 'Trent Erwin', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - mode: 'normal', - text: ' on ', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - type: 'link', - fields: { - url: 'https://unsplash.com/photos/black-framed-eyeglasses-and-black-pen-UgA3Xvi3SkA', - newTab: true, - linkType: 'custom', - }, - format: '', - indent: 0, - version: 3, - children: [ - { - mode: 'normal', - text: 'Unsplash', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - direction: 'ltr', - }, - ], - listType: 'bullet', - direction: 'ltr', - }, - ], - direction: 'ltr', - }, - }, - hero: '', - meta: { - title: 'Imprint', - description: null, - }, - slug: 'imprint', - _status: 'published', -} diff --git a/src/payload/endpoints/data/resumeAboutMe.ts b/src/payload/endpoints/data/resumeAboutMe.ts deleted file mode 100755 index ac951236..00000000 --- a/src/payload/endpoints/data/resumeAboutMe.ts +++ /dev/null @@ -1,57 +0,0 @@ -export default { - title: 'About Me', - portrait: '', - content: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: "I've always been drawn to technology and programming, which led me to pursue a career in IT. After completing my training as a System Administrator, I felt the pull back to development and haven’t looked back since. For over a decade now, I’ve been working professionally as a developer, focusing predominantly on JavaScript and TypeScript with frameworks like React.js and Next.js.", - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: "Since buying my first vinyl at the age of 11, music and its scenes have always been a big part of my life. I regularly DJ German punk and related genres with a friend at various pubs and venues. My early immersion in jungle and drum'n'bass music sparked a lasting fascination with synthesizers and sound design. Having never learned to play an instrument, I was particularly drawn to modular synthesizers and their ability to generate sound through logical patterns. This fascination ultimately led to the creation of a small modular synthesizer boutique with a community space, which I’ve been co-running with my partner in Köln Mülheim since 2021.", - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - ], - direction: 'ltr', - }, - }, - anchor: 'about-me', - _status: 'published', -} diff --git a/src/payload/endpoints/data/resumeContact.ts b/src/payload/endpoints/data/resumeContact.ts deleted file mode 100755 index a69005b5..00000000 --- a/src/payload/endpoints/data/resumeContact.ts +++ /dev/null @@ -1,44 +0,0 @@ -export default { - title: 'Contact', - anchor: 'contact', - caption: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Whether you’re looking for a skilled TypeScript developer to join your team, want to discuss a potential project, or just want to connect over a shared passion for technology and music, feel free to get in touch. I’m always open to exciting opportunities and interesting conversations.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - ], - direction: 'ltr', - }, - }, - mailButton: { - label: 'Reach Out via Mail', - href: 'mailto:daniel@heene.io', - }, - scheduleButton: { - label: 'Schedule Interview', - href: 'https://cal.com/danielheene/interview', - }, - _status: 'published', -} diff --git a/src/payload/endpoints/data/resumeCustomers.ts b/src/payload/endpoints/data/resumeCustomers.ts deleted file mode 100755 index 239584d4..00000000 --- a/src/payload/endpoints/data/resumeCustomers.ts +++ /dev/null @@ -1,89 +0,0 @@ -export default { - title: 'Customers', - caption: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Here’s a selection of well-known companies I’ve had the pleasure of collaborating with—either through my work at agencies or as a freelancer—on various projects.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - ], - }, - }, - entries: [ - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBkPSJtMzk0LjY5MiAyMDIuMjU2LTE0LjM4LTQyLjM2N2gtMTQuNzg3djgwLjIzaDEzLjM2bC4yMjMtNDcuNTkgMTYuNjM0IDQ3LjU5aDEyLjM0NnYtODAuMjNoLTEzLjE3MXptODQuMDM3IDI1LjQ2OXYtMjEuODYyaDE1LjYwNnYtMTMuMDdoLTE1LjYwNnYtMjAuNTA4aDE4LjQ4VjE1OS44OWgtMzMuMTN2ODAuMjNoMzMuOTE3di0xMi4zOTR6bS0yODMuOTMyIDEyLjM5M2gxNC42NXYtMzMuMzUzaDE1LjY5di0xMy4wN2gtMTUuNjl2LTIxLjQxaDE4LjYzVjE1OS44OWgtMzMuMjc5djgwLjIyOFptOTkuMTIzLTM0LjI1NWgxNS42MDd2LTEzLjA3SDI5My45MnYtMjAuNTA4aDE4LjQ4MlYxNTkuODloLTMzLjEzdjgwLjIzaDMzLjkxOXYtMTIuMzk0aC0xOS4yN3ptNDkuNzk3IDE3LjcyNmMwIDQuMTM2LTIuNzYgNS44NDctNS41MjUgNS44NDdzLTUuNTI1LTEuNzExLTUuNTI1LTUuODQ3di02My43SDMxOC4xNnY2Mi4xNDNjMCAxNC4zNyA4LjY5MyAxOS42NjEgMjAuMDM3IDE5LjY2NCAxMS4zMzItLjAwMyAyMC4wMjctNS4yOTQgMjAuMDI3LTE5LjY2NFYxNTkuODloLTE0LjUwN3pNOTguMDA5IDI1MGg4Ni41MjVWMTUwSDk4LjAwOXptNDUuNi0yMC43aDguNzg4di01MS44MzNoLTguNzg5di04LjkwMWM0LjczMi0yLjAyOSAxMS4zODEtNS4xODQgMTUuNDM5LTguNjc3aDYuNDIyVjIyOS4zaDguNzg3djEwLjgxOGgtMzAuNjVWMjI5LjNabS0zNS4zIDBoOC43OXYtNTEuODMzaC04Ljc5di04LjkwMWM0LjczMi0yLjAyOSAxMS4zOC01LjE4NCAxNS40MzctOC42NzdoNi40MjRWMjI5LjNoOC43ODh2MTAuODE4aC0zMC42NXptMzI2LjQ1Ni02OS40MWgtMTkuMzY5djgwLjIzaDE5LjM2OWMxMy45NzIgMCAyMi4yNDctNi4zNDMgMjIuMjQ3LTIzLjI0NHYtMzMuNzQzYzAtMTYuOS04LjI3NS0yMy4yNDMtMjIuMjQ3LTIzLjI0M203LjYgNTYuOTg2Yy0uMDIgOC41ODctMi4yMTMgMTEuNTI0LTcuMTUgMTEuNTI0aC01LjE3MXYtNTYuNzloNS4xN2M0LjkzNyAwIDcuMTMgMi45MzYgNy4xNSAxMS41MjR6bS0xNjkuMTEtMzEuOTI4di0yLjc5MmMwLTE2LjkwMS04LjI3Ni0yMi4yNjctMjIuMjQ4LTIyLjI2N2gtMTcuNDE0djgwLjIzaDE0LjY1di0zMy4zNTRoMy40OTNsNi44NzIgMzMuMzU0aDE0Ljc2MWwtOC42MzUtMzYuOTg5YzYuNC0zLjE5NiA4LjUyNS0xMC4xNiA4LjUyNS0xOC4xODJtLTE0LjY1LS43MjVjMCA1Ljc0Ni0uNTc0IDExLjE0OS01Ljk4MyAxMS4xNDloLTQuMzgxdi0yMy43NjRoMy4yMTdjNC45NTggMCA3LjE0OSAxLjk4NCA3LjE0OSAxMC42NjF2MS45NTRaIi8+PC9zdmc+', - title: '11FREUNDE', - }, - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBkPSJNMjc1LjUwNiAzMDAuNDJxLS41NzYgMC0xLjMwNS0uMDJjLTcuNi0uMS03LjctLjctNi4zLTIwLjEgMi0yNS4xIDIuMTk4LTI2LjMgNS4xOTgtMjguNSAxLjUtMS4xIDQuMi0yLjQgNi0yLjggMS45LS40IDMuODAxLS43IDQuMzAxLS42czIuOCA0LjcgNS4xIDEwLjJjMi4zIDUuNCA1LjEgMTEuNyA2LjIgMTMuOWwyLjEgNCAxLjItM2MuNi0xLjcgMy4yLTcuNyA1LjctMTMuMyA1LjEtMTEuNCA2LjYtMTIuOCAxMi42LTExLjEgNiAxLjYgNi42IDMuMSA3LjcgMTguNi41IDcuNyAxLjUgMTcuNSAyLjEgMjEuOC42IDQuMi44IDguMy41IDkuMS0uNyAxLjktMTAuOSAxLjktMTIuNS4xLS42LS44LTEuOC03LjEtMi42LTE0LjItLjgtNy0xLjctMTMtMS45LTEzLjItLjUtLjYtNi42IDE1LjItNi42IDE3LjEgMCAyLjctNC40IDYuNy03LjUgNi45LTIuOS4yLTMuMy0uMy05LjEtMTEuOGwtNi4yLTExLjktLjYgMTEuOWMtLjQgNi42LS44IDEzLjEtLjkgMTQuNS0uMTc0IDIuMDEzLS41MDIgMi40MTctMy4xOTQgMi40Mm02NS45NjQtLjU4Yy0yLjEwNy4wMjEtMi44MzUtLjQ3Ny00LjI3LTEuNTQtNC43LTMuNS02LjYtMTAuMi02LjYtMjMuOC0uMS05LjQtLjQtMTIuMy0xLjYtMTMuMi0xLjMtMS4xLTEuMy0xLjUgMC00IDIuMy00LjIgOC43LTcuMiAxOC43LTguOCA0LjgtLjcgMTEuNS0xLjMgMTQuOC0xLjIgNS43LjIgNiAuMyA2LjMgMi44LjIgMS45LS42IDMuNC0zLjIgNS43LTMuNCAzLTUuMiAzLjQtMTcuMSA0LjQtMi45LjMtMyAuNS0zLjMgNS42bC0uMyA1LjQgMi44LS42YzEzLjgtMi43IDE1LjMtMi44IDE2LjgtMS42IDIuMiAxLjkgMS44IDUuNy0uNyA3LjQtMS4zLjgtNS44IDItMTAuMSAyLjctNC4zLjYtOCAxLjUtOC4yIDEuOS0uNS44IDEuMSA2LjkgMi4zIDguNi41LjkgMi42LjkgOC4yLS4xIDguNS0xLjUgMTEtLjggMTEgMyAwIDMuMy0xLjcgNC0xNS4zIDYuMS01LjQzNy43OTYtOC4zNyAxLjIyMS0xMC4yMyAxLjI0bTMxLjc4LS43MjVjLTIuMy4wMTgtMi4yNS00LjkxOC0yLjI1LTIyLjIxNXYtMjIuMWwzLjQtMy40YzMuNi0zLjYgNy42LTQuNSA3LjYtMS43IDAgMS45IDguNSAxMy40IDE2LjEgMjEuN2w1LjQgNS45IDEuMS0xMy42YzEuMi0xNC40IDEuNi0xNS42IDYuOS0xOC45IDQuMy0yLjYgNi0yIDUuOSAyLjItMS4yIDQzLjktMS42IDQ2LjItOC4zIDQ5LTIuNyAxLjEtMy41LjktNy40LTEuMy0yLjMtMS40LTcuOC02LjItMTIuMS0xMC43bC03LjgtOC4yLjMgNy40Yy4zIDkuMS0uMyAxMS4yLTQuNSAxMy44LTEuOTkgMS4yMTctMy4zOCAyLjEwOC00LjM1IDIuMTE1bTcyLjkzNy0xLjQ3OGMtNC44ODcuMDEyLTkuODg2LS44MzctMTMuNDg2LTIuNTM3LTYuMS0zLTEwLjcwMS03LjYtMTAuNzAxLTEwLjcgMC0yLjguOC0yLjkgNS43LS45IDQuNiAxLjkgMTQuNCAxLjkgMTkgMCAzLjMtMS40IDMuNS0xLjcgMi4xLTMuMS0uOC0uOC00LjEtMi4yLTcuMy0zLTguMi0yLjItMTIuNS00LjYtMTYuOC05LjMtNS44LTYuNC02LjEtMTEuMS0xLjEtMTcuMSAyLjktMy4zIDcuMi01LjkgMTEuOS03LjEgNC4zLTEgNS42LTEgOS42LjEgNC42IDEuMyAxMC44IDYuOCAxMS4yIDkuOS4yIDIuNCAwIDIuNS02LjMgMi41LTUuMS4xLTcuMi42LTkuNyAyLjQtNS4xIDMuNy00LjQgNS44IDIuNSA3LjIgMTEuMSAyLjMgMTkuOSA4LjkgMjIuMyAxNi45IDEuNSA1LjItLjMgOC44LTYuMSAxMi4xLTMuMTUgMS43NS03LjkyNSAyLjYyNC0xMi44MTMgMi42MzdtNDQuNTg0LTEuNTc4Yy0zLjU1OS0uMDI2LTcuMDMzLS41NjUtOS41Ny0xLjY1OS0xNS40LTYuNC0xOS4zMDItMjkuOS03LjEwMi00My43IDIuMS0yLjUgNS44MDItNS40IDguMTAyLTYuNiA3LjQtMy42IDE0LjQtMi4zIDIwLjYgMy44IDQuNyA0LjggNC4zIDYuMS0yIDYuMS0xMi40LjEtMjEuODAxIDkuNS0yMS44MDEgMjEuOCAwIDYuNiAzLjEgOS43IDguOSA4LjkgMi4xLS4yIDUuMi0xLjUgNi45LTIuNyAyLjgtMi4xIDMuMS0yLjEgNi0uNiAzLjYgMS45IDcuNCA2LjQgNyA4LjUtLjIuOC0yLjMgMi41LTQuNyAzLjgtMy4wMzggMS41NzQtNy43NTMgMi4zOTEtMTIuMzI5IDIuMzU5bTQ4LjExNC0yLjMwMUM1MzUuODU1IDI5My43MyA1MzUgMjkwLjkgNTM1IDI4Mi44di03LjlsLTYuNy4yOTgtNi44LjMwMS4zIDcuMmMuNCA2LjYuMiA3LjItMiA4LjctMS4zLjgtMy45IDEuNy01LjggMS44LTQuMS40LTQuNy0xLjItNC45LTExLjUtLjEtNi4yLS4zLTYuOS0zLjMtOS42LTMuNC0zLTMuNC02LjEgMC02LjEgMS43IDAgMi0xLjEgMi42LTguNy40LTUuMyAxLjItOS4zIDItMTAuMXMzLjUtMS43IDYtMS45bDQuNi0uNnYyMGw2LjEuN2MzLjQuMyA2LjYuMyA3LjEgMCAuNy0uNC44LTMuNC40LTguMS0uOC04LjkuNC0xMS41IDYuNy0xNC40IDIuMy0xIDQuNC0xLjkgNC43LTEuOSAyLjMgMCAyLjcgMy4yIDMuMyAyNC4ybC42IDIyLjctMi45IDIuNWMtMS42IDEuMy00LjQgMi43LTYuMiAzLjEtLjcxOC4xNzItMS4zNTQuMjYzLTEuOTE1LjI1OE0yODIuNyAyMzhjLTkuNSAwLTE0LjcwMS0zLjItMTQuNzAxLTkuMSAwLTEuOS0uNi0xLjYtNC45IDIuNC03LjUgNy04LjggNy0xNy40LjEtMy45LTMuMi0xNC4xLTEyLjgtMjIuNi0yMS4ybC0xNS40LTE1LjMuNiA2LjhjLjQgMy43LjkgMTAuNCAxLjMgMTQuOWwuNiA4LTMuMSAyLjdjLTUuNiA0LjctMTcuNCA3LTIzLjUgNC43LTEuOC0uNy0zLjctLjUtNi44LjYtNS41IDItMTQuMiAyLjEtMTYuNS4zLS45LS44LTQtNi41LTYuOS0xMi43LTQuNS05LjUtNS43LTExLjItNy42LTExLjEtMS4zIDAtMTQuOCAxLjctMzAuMSAzLjdsLTI3LjkgMy43LTQuMiA3LjVjLTQuNiA4LjMtNi45IDEwLTEzLjcgMTAtOC45IDAtMTguMS00LjktMTkuNS0xMC41LS43LTIuOSAyLjEtOC43IDIzLjEtNDcgMjMuMi00Mi41IDMzLjQtNTkuOSAzNi4zLTYyLjIgNS43LTQuNyAxOS41LTcgMjUuNi00LjIgMiAuOSA2LjEgOSAyMS4zIDQyIDEwLjMgMjIuNCAxOSA0MC4zIDE5LjEgMzkuOC4yLS41LS4xLTExLjYtLjctMjQuNy0uNi0xMy0xLjEtMzAuMS0xLjEtMzggMC0xMy45LjEtMTQuNCAyLjUtMTYuNiAxLjMtMS4zIDQuNi0zIDcuMi0zLjkgNS43LTIgMTcuMi0xLjggMTkuNy4yIDEuNCAxLjEgMS42IDQgMS43IDE4LjUuMSA5LjQuNCAxOC4xLjcgMTkuMy42IDIgMi4yLjMgMTIuNC0xMi41IDEzLjktMTcuNSAxNi4xLTE5LjggMTguOC0yMC43IDMuNC0xLjEgMTEuNiAyLjQgMTcgNy4yIDcuMSA2LjQgNy4zIDggMS4zIDE1LTMuOSA0LjYtMTYgMTkuNy0yNS42IDMyLS43LjkgMS4yIDMuNiA2LjQgOS41IDcuNSA4LjIgMjkuNyAyOC44IDMxLjEgMjguOC41IDAgLjctNy4zLjYtMTYuM2wtLjMtMTYuMi04LjctLjNjLTgtLjMtOC45LS41LTEwLjgtMi45LTMuOC00LjktMS44LTIwLjcgMy4xLTIzLjMgMS0uNiA0LjktMSA4LjctMSA0LjQgMCA3LjMtLjUgNy45LTEuMy42LS42IDEuMy03IDEuNy0xNC4xLjMtNyAxLjEtMTMuNyAxLjctMTQuOCAxLjgtMy40IDEwLjktNi45IDE4LjEtNi45IDMuNSAwIDcuNC40IDguOC45IDUgMS45IDUuMiAyLjkgNC40IDE5LjhsLS43IDE1LjcgMjEuMS0uNyAyMS0uNy43IDguNi43IDguNiAzLjEtNS4zYzEuNi0yLjkgNi44LTkuMSAxMS42LTEzLjggMTQtMTMuOSAyNy4xLTE4LjkgNDQtMTcgMTQuNCAxLjYgMjUuNSA3LjYgMzQgMTguNCAyLjYgMy4zIDUuMyA3IDYgOC4xIDEgMS42IDEuMS0uNS43LTEwLjktLjMtNy42LS4xLTEzLjcuNS0xNC44IDEuMi0yLjMgOS4xLTYuMyAxNC4yLTcuMiA2LjctMS4yIDkuNC41IDIyLjIgMTQuNSA2LjYgNy4yIDE2LjUgMTcuNCAyMiAyMi43bDEwIDkuNi41LTIxLjkuNS0yMS45IDMuMi0yLjJjNi4xLTQuMSAyMy45LTUuNyAyNy44LTIuNC45LjcgMS4zIDkuMiAxLjggMzIuMi4zIDE3LjIgMS4xIDQwLjIgMS44IDUxLjEuOSAxNC44LjkgMjAuNCAwIDIyLjMtMS4zIDMtOC4yIDYuMy0xMy4yIDYuNC02LjMgMC0xOC05LjEtNDEuMS0zMS44LTctNy0xMi45LTEyLjQtMTMuMi0xMi4yLS4yLjMtLjEgOSAuNCAxOS41LjYgMTUuOS41IDE5LjQtLjcgMjEuMy0zLjggNi4xLTI0LjEgMTAuNy0yOS4xIDYuNi0yLTEuNy0yLjMtMy4xLTIuOC0xMi45LS44LTE2LjYtLjktMTYuOS00LjUtMTAuNy0xLjYgMi45LTUuOSA4LjMtOS40IDEyLjEtMTAuNyAxMS4zLTIyLjMgMTYuMS0zOSAxNi4xLTE2LjUgMC0yOC40LTQuOS0zOC41LTE1LjctMy4zLTMuNS02LjktOC04LTEwLjFsLTItMy43LjcgOS44Yy42IDkuMi41IDkuOS0xLjYgMTIuMS01LjcgNi0yMS41IDkuMi0yNy4zIDUuNC0yLjItMS41LTIuNy0yLjctMy42LTEwLjUtLjYtNC44LTEuNi0xNi4yLTIuMi0yNS4zcy0xLjMtMTguNC0xLjYtMjAuN2wtLjUtNC4xLTQuOS0uNC01LS4zdjU2LjdsLTIuOCAyLjhjLTMuNCAzLjQtOC43IDUtMTYuNSA1bTExNC40MTYtMzguMjI1YzMuMjc4LS4wMzcgNi41NTItMS4wMjcgOS4yODMtMy4wNzYgNi42LTUuMSA5LjctMTkuODk5IDUuOC0yNy42OTktMS0yLTMuMi00LjItNS4yLTUuMi03LjgtNC0xOS45LS4zLTI0LjQgNy40LTIuOCA0LjctMi44IDE0LjkgMCAyMC4zIDIuODE4IDUuMzgxIDguNjc0IDguMzQyIDE0LjUxNyA4LjI3NW0tMjkxLjc2Ni0xNC4wNGExIDEgMCAwIDAgLjI0OC0uMDM2YzEtLjMgNy4zLTEuMjk5IDEzLjktMi4xOTlzMTIuNzAyLTEuOSAxMy43MDItMi4zYzEuNC0uNi44OTktMi4yLTMuNzAxLTEyLjEtMi45LTYuMi02LTEyLTYuNy0xMi44LTItMi0zLjMtLjMtMTEuOCAxNi4xLTUuMjUgMTAuMDMyLTYuNzIxIDEzLjI5NS01LjY0OSAxMy4zMzRtMjIyLjAyLTQ4Ljk5M2MtNi41NS4wNDYtMTEuNTk2LTIuMzc5LTE0Ljk3LTcuNDQxLTUuOS04LjgtMy4yMDEtMjAuNyA2LjA5OS0yNi40IDIuMy0xLjUgNS0xLjkwMSAxMS45LTEuOTAxIDguNiAwIDguOS4xIDEyLjEgMy4zIDQuMSA0LjEgNS4yIDkgMy42IDE2LjMtMi40IDEwLjUtNy45IDE1LjYtMTcuNCAxNi4xcS0uNjc1LjAzNy0xLjMzLjA0MiIvPjwvc3ZnPg==', - title: 'Aktion Mensch', - }, - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBkPSJNMTQ5LjUxNyAxNTQuMDE1Yy04LjY2NC0uMDgzLTE3LjA3OCAyLjQxNi0yNC40MDggNy4wODEgMi4yNDkgMS43NSA0LjI0OCAzLjY2NiA1Ljk5OCA1LjgzMmEzNy41IDM3LjUgMCAwIDEgMTguNDEtNC41ODJjMjEuNjYgMCAzNi45ODggMTUuOTExIDM2Ljk4OCAzOC4wNyAwIDIxLjk5My0xNS40MTIgMzcuODIxLTM2Ljk4OCAzNy44MjEtMjEuNDEgMC0zNi43MzgtMTUuNzQ1LTM2LjczOC0zNy44MmE0MC42IDQwLjYgMCAwIDEgNC4wODItMTguMjQ0IDIzLjEgMjMuMSAwIDAgMC01Ljk5OC02LjQxNWMtNC41ODEgNy40MTQtNi45MTQgMTUuOTExLTYuOTE0IDI0LjY1OCAwIDI2LjgyNSAxOS4xNiA0Ni40MDIgNDUuNjUxIDQ2LjQwMiAyNi4yNDIgMCA0NS45MDItMTkuOTEgNDUuOTAyLTQ2LjQwMiAwLTI2LjQ5LTE5Ljc0NC00Ni40LTQ1Ljk4NS00Ni40bTExMy40NjIgNTYuMzk4YzAgMy43NDktLjUgNy40OTgtMS40MTYgMTEuMDgtMy4xNjYgMTAuNjYzLTExLjk5NiAxNi42Ni0yMy44MjUgMTYuNjYtMTEuNzQ2IDAtMjAuNTc3LTUuOTk3LTIzLjc0Mi0xNi42Ni0xLTMuNTgyLTEuNDE3LTcuMzMxLTEuNDE3LTExLjA4di01NC42NDhoLTguODN2NTUuNTY1YzAgNC42NjUuNjY2IDkuMzMgMS45MTYgMTMuODI4IDQuMzMyIDEzLjU3OSAxNS40OTUgMjEuNjYgMzIuMjQgMjEuNjYgMTYuNjYgMCAyNy43NC04LjMzIDMyLjIzOS0yMS45MSAxLjE2Ni0zLjY2NSAxLjgzMi05LjI0NyAxLjgzMi0xMy44Mjh2LTU1LjMxNWgtOC44M3ptLTE1NC41MzIgMjIuNzQzYy0yLjQxNSAxLjA4My00Ljk5OCAxLjgzMi03LjU4IDIuMzMyLTQuNjY1LjkxNi05LjQxNCAxLjI1LTE0LjI0NiAxLjE2Nkg1OS43MTR2LTcyLjY0MmgyNi45OWM0Ljc1LS4wODMgOS40OTguMzMzIDE0LjI0NiAxLjE2NiAxNy4wNzggMy42NjYgMjYuNDkxIDE1Ljk5NSAyNi40OTEgMzUuMjM4YTQ0LjQgNDQuNCAwIDAgMS0zLjY2NSAxOC4yNDRjMS41ODIgMi41ODMgMy41ODIgNC44MzIgNS44MzEgNi43NDggNC4zMzItNy4wOCA2LjY2NS0xNS42NjEgNi42NjUtMjQuOTkyIDAtMjMuMjQyLTEyLjI0Ni0zOC41Ny0zMy4xNTYtNDMuMTUyLTQuOTk4LTEtMTAuMDgtMS41LTE1LjE2Mi0xLjQxNkg1MC44djg5LjEzN2gzNy4xNTRjNS4wODIuMDgzIDEwLjE2NC0uMzMzIDE1LjE2Mi0xLjMzMyAzLjkxNS0uODMzIDcuNjY0LTIuMTY2IDExLjI0Ni00LjA4Mi0yLjMzMi0xLjc1LTQuMzMyLTMuOTk5LTUuOTE1LTYuNDE0bTQyMy4zNi0zNS45ODgtOS40MTQtNC41ODJjLTcuOTk4LTMuOTE2LTEyLjQ5Ni04LjY2NC0xMi40OTYtMTYuMTYyIDAtOC4zMyA1Ljc0OC0xNC4zMjggMTQuNzQ1LTE0LjMyOCA5LjI0NyAwIDE0LjQ5NSA2LjQ5OCAxNS45MTEgMTYuODI4aDguMzMxYy0xLjU4My0xNy4yNDUtMTEuNTgtMjQuOTA5LTI0LjI0Mi0yNC45MDktMTMuOTEyIDAtMjMuNTc1IDEwLjA4LTIzLjU3NSAyMi44MjYgMCAxMS42NjMgNy4wOCAxOS4wNzcgMTguMTYgMjQuMjQybDkuNDk3IDQuNDE1YzYuNzQ4IDMuMTY2IDEyLjkxMiA4LjI0NyAxMi45MTIgMTcuMzI4IDAgOS4xNjMtNi40OTcgMTUuNDExLTE2LjE2IDE1LjQxMS0xMC40MTQgMC0xNy45OTUtNS45OTgtMTkuNTc4LTIwLjI0M2gtOC44M2MxLjQxNiAxOS42NiAxMi42NjIgMjguODI0IDI4LjMyNCAyOC44MjQgMTUuMjQ1IDAgMjUuNDA4LTEwLjE2NCAyNS40MDgtMjQuNDA5LS4xNjctMTQuMTYyLTkuNDE0LTIwLjU3Ni0xOC45OTQtMjUuMjQxbS03Ny42NDEtNDEuMzItMzQuNTcyIDg5LjEzN2g5LjkxM2wxMC41OC0yOC4zMjRoMzYuNzM4bDEwLjY2MyAyOC4zMjRoMTAuMTYzbC0zNC42NTUtODkuMTM3em0xOS41NzYgNTIuNDgzaC0zMC40OWwxMC4zMy0yNy40MDhjMS44MzMtNC44MzIgMy40MTYtOS42NjMgNC45MTUtMTQuNDk1IDEuNTgzIDQuODMyIDMuMjUgOS42NjMgNS4wODIgMTQuNDk1em0tODcuNDctNTIuNDgzaC04Ljgzdjg5LjEzN2gzNS43MzdsMy40OTktOC4zM2gtMzAuNDA2em0tNjkuMzEgNDguMjM0djguMzNoNDIuMDY5Yy0zLjI1IDE1LjQ5NS0xNi4xNjIgMjUuODI1LTMzLjI0IDI1LjgyNS0yMS42NTkgMC0zNi42NTQtMTUuODI4LTM2LjY1NC0zNy45MDQgMC0yMS45OTIgMTUuMjQ1LTM3LjkwNCAzNi42NTUtMzcuOTA0IDE0LjMyOCAwIDI2LjA3NCA3LjQxNCAzMS4zMjMgMjAuMjQzaDkuNDk2Yy01LjQ5OC0xNy41NzctMjEuNDkyLTI4LjU3My00MC44Mi0yOC41NzMtMjYuMDc0IDAtNDUuNDg0IDE5LjkxLTQ1LjQ4NCA0Ni4zMTcgMCAyNy4xNTggMTguNzQ0IDQ2LjU2OCA0NS40ODUgNDYuNTY4IDI1LjMyNSAwIDQzLjQwMi0xOC4yNDQgNDMuMTUyLTQyLjczNXoiLz48L3N2Zz4=', - title: 'DOUGLAS', - }, - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBkPSJNNTAgMjAwdjM2aDg1di0xOUg4OHYtN2g0N3YtMTdIODh2LTdoNDd2LTIySDUwem05NC0uMVYyMzZoMzMuNWMyMC43IDAgMzUuNC0uNCAzOC43LTEuMSAxOC4yLTMuOCAyOC41LTE2LjQgMjkuNi0zNi4xLjgtMTUuOC00LjUtMjUuNi0xNy0zMS40bC02LjMtMi45LTM5LjItLjMtMzkuMy0uM3ptNTMuMi0xMC45YzUuNCAxLjUgNy44IDUuMSA3LjggMTEuNiAwIDQuOC0uNCA1LjktMy40IDkuMi0zLjMgMy42LTMuNiAzLjctMTEuNSA0bC04LjEuNFYxODhoNS44YzMuMSAwIDcuNC41IDkuNCAxbTUzLjggMTF2MzZoODUuMWwtLjMtOS4yLS4zLTkuMy0yMy4yLS4zLTIzLjMtLjJ2LTdsMjMuMy0uMiAyMy4yLS4zLjMtOC4zLjMtOC4ySDI4OXYtN2wyMy4zLS4yIDIzLjItLjMuMy0xMC44LjMtMTAuN0gyNTF6bTk0IDB2MzZoMzcuOWwuMy0xMS41LjMtMTEuNiA4LjkgMTEuNiA4LjkgMTEuNSAzOS41LS4yIDM5LjUtLjMgMS4xLTQgMS4yLTRoMjQuN2wxLjUgNC4yIDEuNCA0LjNoMzkuNmwtNy40LTIyLjhjLTQuMS0xMi41LTkuMy0yOC43LTExLjYtMzZsLTQuMS0xMy4yaC02MS4yTDQ1NCAxOTguNWMtNi4zIDE5LTExLjggMzQuNC0xMi4xIDM0LjMtLjQtLjItNi40LTcuNC0xMy40LTE2LjEtMTEuMS0xMy45LTEyLjUtMTYtMTEuMy0xNy41LjctLjkgNy4yLTguNyAxNC4zLTE3LjIgNy4yLTguNSAxMy40LTE2LjEgMTMuOS0xNi44LjYtLjktNC0xLjItMjEuNy0xLjJoLTIyLjRsLTkuMSAxMy43LTkuMiAxMy44VjE2NGgtMzh6bTE1My40LTUuOGMxLjUgNS40IDIuOSAxMC41IDMuMiAxMS4zLjUgMS4yLS42IDEuNS02LjYgMS41LTYuMyAwLTcuMS0uMi02LjYtMS44LjMtLjkgMS43LTYuMyAzLjItMTIgMS41LTUuNiAzLjEtOS45IDMuNS05LjVzMS45IDUuMiAzLjMgMTAuNSIvPjwvc3ZnPg==', - title: 'EDEKA', - }, - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBkPSJNNDA2IDEzN3YxMC45bC02LjcuMy02LjguM3YxN2w2LjguMyA2LjcuM3YyNy40YzAgMjUgLjIgMjcuOSAyIDMyLjggMy41IDkuNCAxMC4yIDEzLjggMjIgMTQuNSA0LjIuMiAxMC4yLS4xIDEzLjQtLjhsNS43LTEuMi0uNS0zLjZjLS4zLTIuMS0uOC02LjEtMS4yLTlsLS42LTUuMy00LjQuN2MtNS40LjgtOS43LS44LTExLjMtNC4yLS43LTEuNi0xLjEtMTAuOS0xLjEtMjYuOVYxNjZoMTZ2LTE4aC0xNnYtMjJoLTI0em03OS4xIDEwLjVjLTE0LjkgMy4zLTIzLjYgMTAuNi0yNy4yIDIyLjctMS45IDYuMS0yIDguNy0xLjcgMjUuNS40IDE2LjguNyAxOS40IDIuOCAyNC43IDMgNy44IDkuNyAxNC41IDE3LjYgMTcuNyA1LjUgMi4yIDcuMiAyLjQgMjQuOSAyLjQgMTUuNyAwIDE5LjktLjMgMjQuNS0xLjggMTAuNS0zLjUgMTYuOC05LjYgMjAuNi0yMC4yIDIuNi03LjQgMy4yLTM0LjcgMS00NC45LTMtMTMuMi05LjctMjAuNi0yMi41LTI0LjctOC43LTIuOC0zMC41LTMuNi00MC0xLjRtMzUuNCAyMS4xYzIuOSAxLjQgNC43IDMuNCA2LjUgNyAyLjMgNC41IDIuNSA2IDIuNSAxOC40IDAgMTYuMy0xLjYgMjEtOC44IDI1LjEtMy45IDIuMi01LjIgMi40LTE4LjIgMi40LTE2LjcgMC0yMC40LTEuMy0yNC41LTguNi0yLjEtMy44LTIuNS01LjktMi44LTE2LjUtLjctMTkuMiAyLjQtMjYuMiAxMi44LTI5LjMgMS45LS41IDkuMS0uOSAxNi0uOCAxMC40LjIgMTMuMi42IDE2LjUgMi4zTTc3LjMgMTQ4LjhjLTcgMi41LTEyLjMgNi4yLTE2LjYgMTEuNC03LjYgOS41LTEwLjcgMTkuMy0xMC43IDM0LjQgMCAxMS4yIDEuOSAxOS4xIDYuMyAyNi43IDMuOSA2LjYgMTIuOCAxNC4yIDE5LjUgMTYuNyA3LjIgMi44IDE5LjUgMy42IDI4LjkgMiA3LjUtMS4yIDIxLTcgMjEuOS05LjMuNC0xLjItNS0xNC43LTUuOS0xNC43LS4zIDAtMy4xIDEuMi02LjMgMi42LTguMyAzLjctMjIuMiA0LjUtMjcuOSAxLjYtNi4xLTMuMS05LjYtOC0xMS0xNS41bC0uNy0zLjdoMjcuMWMyNC4yIDAgMjcuMi0uMiAyNy44LTEuNiAxLjItMy4xLTEuNC0yNC43LTMuNi0zMC42LTMuMS03LjktOS41LTE0LjgtMTcuMy0xOC4zLTguMy0zLjgtMjMuMy00LjYtMzEuNS0xLjdtMjIuOCAxOS44YzMgMi42IDQuOSA3LjUgNC45IDEyLjR2NEg3NC44bC43LTMuM2MxLjItNS43IDQuNy0xMS44IDcuOS0xMy45IDQuMS0yLjUgMTMuNS0yLjEgMTYuNy44bTg3LjQtMTguOGMtMy4zIDEuNi03LjQgNC41LTkuMiA2LjVsLTMuMSAzLjYtLjctNi0uNy01LjlIMTM4djcuNWMwIDguMy0uNyA3LjUgOC41IDkuM2w0IC44LjMgMjguMi4yIDI4LjEtMy43IDFjLTIuMS41LTQuNyAxLjEtNS44IDEuMy0xLjguMy0yIDEuMi0yLjMgNy42bC0uMyA3LjJIMTg2di0xNC44bC00LjctLjktNC44LS44LS4zLTI1LjItLjItMjUuMSAzLTIuNmM1LjQtNC41IDE2LTQuOCAyMC42LS41IDMuOCAzLjUgNC40IDcuOSA0LjQgMzEuMXYyMS43bC00LjcgMS4zLTQuOCAxLjQtLjMgNy4yLS4zIDcuMkgyMzh2LTE0LjhsLTMuNy0uN2MtMi4xLS40LTQuNC0xLjEtNS0xLjctMS0uOC0xLjMtNi44LTEuMy0yNCAwLTI1LjguMS0yNi4zIDcuMy0zMCA1LjQtMi43IDEzLjYtMi4yIDE3LjIgMS4yczQuNSA5LjkgNC41IDMyLjV2MjAuNGwtNC4yIDEuMWMtMi40LjYtNC45IDEuMy01LjUgMS41LS45LjMtMS4zIDIuNy0xLjMgNy41djdoNDd2LTE0LjhsLTQuOC0uN2MtMi42LS4zLTUuMy0uOS01LjktMS4zLS44LS41LTEuMy04LjktMS41LTI2LjctLjUtMjkuNC0xLTMyLTcuOC0zOS44LTUuOC02LjYtMTIuMy05LTIyLjUtOC41LTkuNy42LTE0LjUgMi44LTIwLjYgOS42bC00LjMgNC44LTMuMS00LjVDMjE4IDE1MC4zIDIxMSAxNDcgMjAxLjEgMTQ3Yy02LjMgMC04LjcuNS0xMy42IDIuOE0zNDEgMTQ5Yy0yLjUgMS4yLTYuMSAzLjctOC4xIDUuNmwtMy42IDMuNS0uNy01LjEtLjctNS0xNy43LjItMTcuNy4zLS4zIDYuM2MtLjIgMy42LjIgNi45LjggNy43LjYuNyAzLjQgMS42IDYuMyAyczUuNSAxLjMgNS45IDEuOS44IDIxIC44IDQ1LjNjMCA0OS43LjcgNDUuNC03LjcgNDYuOGwtNC4zLjdWMjc0aDQ4LjFsLS4zLTcuMmMtLjMtOCAuNi03LTktOS4ybC0yLjgtLjZ2LTI2LjRsMy4zIDMuMWM1LjggNS42IDkuMyA2LjggMTkuMiA2LjggNy44IDAgOS43LS40IDE0LjctMi44IDkuMi00LjUgMTUuOC0xMy45IDE4LjgtMjYuNyAxLjgtNy43IDEuNi0yNi4xLS40LTM0LTMuMy0xMi45LTEwLTIyLjYtMTguOC0yNy4xLTYuMy0zLjMtMTkuNi0zLjgtMjUuOC0uOW0xMS42IDE4LjZjNyAzLjMgMTAuOSAxNSAxMC4yIDMwLjQtLjUgMTAuNS0yLjcgMTYuOC03LjIgMjEtMy41IDMuMi0xMy42IDQuMS0xOC41IDEuNi03LjItMy44LTcuMS0zLjQtNy4xLTI2IDAtMTkuMy4xLTIwLjUgMi4yLTIzLjEgNC4yLTUuMyAxMy42LTcuMSAyMC40LTMuOSIvPjwvc3ZnPg==', - title: 'Empto', - }, - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBkPSJNMjQ3LjA5IDM0Ni41OTdjLTUuMzU2LjAzMy0xMC43Mi0xLjYxLTEzLjY4OS00LjY5OC0yLjktMy0yLjkwMS0zLjEtMy4yMDEtMTcuNi0uMy0xMy4zLS40OTktMTQuNi0yLjI5OS0xNS0xLjMtLjQtMS45LTEuNC0xLjktMy40di0yLjg5OGgxOXYyLjg5OGMwIDIuMS0uNiAzLTIuMSAzLjQtMiAuNS0yLjEwMSAxLjEtMS43MDEgMTMgLjIgMTAuNi42IDEyLjggMi4yMDEgMTQuNiAyLjMgMi41IDcuMTk4IDIuOCAxMC4zOTguNSAyLjEtMS40IDIuMjAyLTIuMiAyLjIwMi0xNC41IDAtMTAuNi0uMy0xMy4xLTEuNS0xMy41LS45LS40LTEuNS0xLjktMS41LTMuNXYtMi44OThoMTR2Mi44OThjMCAxLjYtLjYgMy4xLTEuNSAzLjUtMS4yLjQtMS41IDIuODAxLTEuNSAxMi44MDEgMCAxMy43LTEuNjAyIDE5LTYuNzAyIDIxLjktMi44ODQgMS42NjYtNi41NDQgMi40NzQtMTAuMjA5IDIuNDk3TTE4NSAzNDYuM2MtMTIgMC0xOC03LjEtMTgtMjEuNiAwLTExLjUgNC0xNy44IDEzLjYtMjEuMiA1LjItMS45IDcuNS0xLjggMTIuNC4xIDMuMSAxLjMgNC40IDEuNCA1LjMuNS42LS42IDIuMS0xLjEgMy40LTEuMSAyLjIgMCAyLjMuNCAyLjMgNi41djcuMmMwIC41LTEuMS45LTIuNCAxLjEtMi4xLjMtMi44LS4zLTQtMy4xLTIuNy02LjYtOS4yLTguNy0xNC4xLTQuNS01IDQuNS01LjkgMjEuNS0xLjQgMjcuMiAzLjggNC45IDExLjkgMi41IDExLjktMy40IDAtMi4xLS41OTktMi45LTIuNTk5LTMuNHMtMi41MDEtMS4yLTIuMjAxLTMuNGwuMy0yLjdoOS41YzkuMyAwIDkuNSAwIDkuOCAyLjQuMiAxLjQtLjMgMy0xLjIgMy42LTEgLjgtMS42IDMuMy0xLjggOC4xLS4zIDYuNC0uNSA2LjktMi42IDcuMi0xLjMuMi0zLjItLjQtNC4yLTEuMy0xLjctMS41LTItMS41LTUuMi4xLTEuOSAxLTUuNSAxLjctOC44IDEuN20xMTgtLjItOS4yLS4zLTkuMy0uMy0uMy0yLjhjLS4zLTIuMi4xMDEtMyAxLjcwMS0zLjQgMi0uNSAyLjEtMS4yIDIuMS0xNC45IDAtMTMuMy0uMS0xNC40LTItMTUuNHMtMi43MDEtNC0xLjMwMS01LjNjLjMtLjQgNC42LS43IDkuNS0uN2g4Ljh2M3EwIDMtMS41IDNjLTEuMyAwLTEuNSAyLjMtMS41IDE0LjkgMCAxMi4zLjMgMTUgMS41IDE1LjUuOS4zIDEuNSAxLjggMS41IDMuNnptMzMuNTc3LS4yMThhODAgODAgMCAwIDEtNC4wNzYtLjA4MmMtNy45LS4zLTguMDAxLS4zLTguMzAxLTMuMS0uMy0yLjIuMS0zIDEuNzAxLTMuNCAyLS41IDIuMS0xLjIgMi4xLTE1LjMgMC0xMy45LS4xLTE0LjgtMi0xNS4zcy0yLjcwMS0zLjYtMS4zMDEtNWMuMy0uNCA1LjctLjcgMTEuOS0uNyAxNy43IDAgMjUuNyA0IDI4LjUgMTQuMyAyLjQgOC45LS43IDE4LjktNy4zIDIzLjctNC4yIDMuMDYzLTExLjkyMiA0LjgyNC0yMS4yMjMgNC44ODJNMzk4IDM0NS41Yy0xNy4zIDAtMTcuNTAxLS4wMDEtMTcuODAxLTIuMjAxLS4yLTEuNC40LTIuNyAxLjcwMS0zLjUgMi0xLjIgMi4xLTIuMiAyLjEtMTUuNSAwLTEzLjItLjEtMTQuMy0yLTE1LjNzLTIuNzAxLTQtMS4zMDEtNS4zYy4zLS40IDguMi0uNyAxNy41LS43SDQxNXY3LjZjMCA3LjItLjEgNy41LTIuMiA3LjItMS4yLS4yLTIuNy0xLjMtMy4zLTIuNC0yLjItNC41LTMuNTk5LTUuNC04LjU5OS01LjRoLTQuOXY2LjFjMCA1LjIuMTk4IDYgMS43OTggNS43LjktLjIgMi40MDItMS44IDMuMjAyLTMuNSAxLTIuMiAyLjE5OC0zLjMgMy43OTgtMy4zIDIuMSAwIDIuMjAyLjMgMi4yMDIgOXMtLjEwMiA5LTIuMjAyIDljLTEuNiAwLTIuNzk4LTEuMS0zLjc5OC0zLjMtLjgtMS43LTIuMzAyLTMuMy0zLjIwMi0zLjUtMS42LS4zLTEuNzk4LjUtMS43OTggNi4ydjYuNmg0Ljc5OGM1LjIgMCA4LjMwMi0yLjIgOS43MDItNi44LjQtMS41IDEuNC0yLjIgMy4xLTIuMiAyLjUgMCAyLjQ5OC4xIDIuMTk4IDcuN2wtLjI5OCA3Ljh6bS01OC02LjVoMy40YzIuMiAwIDQuNDk5LS45IDYuMjk5LTIuNCAyLjctMi4zIDIuOC0yLjgwMSAyLjgtMTEuOTAxIDAtOC43LS4yLTkuOC0yLjQtMTIuMS0xLjgtMS45LTMuNS0yLjYtNi4zLTIuNkgzNDB6bS0xOTIuOC03LjUtMi44LTIuN2MtNC44LTQuNS0xNi43LTguNy0yOS0xMC4zLTIuOC0uMy0xNC45LS43LTI3LS45LTE5LjctLjItMjIuNC0uNC0yNi40LTIuMy03LjktMy42LTEyLTEwLTExLjktMTguMyAwLTIuNC4wOTgtMi40IDEuMTk4LS41LjcgMS4xIDIuNiAzLjQgNC40IDUuMSA1IDQuOSA5LjgwMiA1LjcgMzMuMzAyIDQuOSAxNy45LS42IDIxLjgtLjQgMzEuMSAxLjMgMTcuNyAzLjMgMjUuNzk4IDguOSAyNi42OTggMTguNHptMjkxLjE4LTEuMjQ4Yy0uMzAyLS4wMTUtLjQ1OS0uMzQ0LS41OC0uOTUzLS43LTMuMSAxLjItOS43IDMuNS0xMi4xIDMuNS0zLjggMTMuNi03LjggMjMuNy05LjYgNy42LTEuNCAxNC41LTEuNiAzMi41LTEuNCAyMi41LjMgMjMuMS4yIDI3LjgtMi4xIDMuNC0xLjYgNS40LTMuNCA2LjUtNS45bDEuNy0zLjUuMyA0LjhjLjQgNi41LTIuOSAxMS40LTEwLjEgMTUtNS40IDIuNi01LjkgMi42LTI5Ljc5OSAzLTI1LjUuNC0zMi42MDEgMS4zLTQ0LjIwMSA1LjYtMy4yIDEuMi03LjEgMy41LTguNyA1LjEtMS40MjQgMS40MjUtMi4xOCAyLjA3NC0yLjYyIDIuMDUzbS0yOTAuNzg2LTQ5LjM0NGMtMTAuOTA2LjAzMS0yMC4yNDctNC42MDQtMjUuNTkzLTEyLjgwOS0zLjItNS4xLTYtMTUuNS02LTIyLjd2LTQuMWwtOC42LS43Yy00LjgtLjMtOC44LS41LTktLjQtLjEuMi0uOSA1LjctMS44IDEyLjItMi41IDE5LjQtNy40MDIgMjYuMy0xOS44MDIgMjguMS0xMC43IDEuNi0yMS43OTgtNS4yLTIxLjc5OC0xMy40di0zLjVsNCA0LjJjMy42IDMuNyA0LjYgNC4yIDguNiA0LjIgMy45IDAgNC43LS40IDYuMy0zLjEgMy00LjkgNC4zLTE0LjMgOC42LTYwLjkuOC05LjEgMi0xOS41IDIuNS0yMy4yIDEuNy0xMS4yIDEuNTk4LTExLjQtMy4yMDItMTIuMi0xMS4yLTEuOC0yMC44LTkuNC0yMy41LTE4LjUtMi45LTEwLS4xOTgtMjAuMiA2LjYwMi0yNC43IDYtNCAxMS41LTQuMiAxOS0uOSAxMC4yIDQuNiAxNy41IDE0LjUgMjAuMiAyNy4yIDEuMyA2LjUuODk5IDYuNSAyMi4wOTkgMi4zIDIzLjgtNC42IDQwLjQtNi4zIDYwLjMtNi40IDkuOS0uMSAxOS41LjIgMjEuMy42bDMuMi43VjE0NmMwLTM1LjMgMTgtNjUuMSA0OS4zLTgxLjUgMTAuNC01LjQgMTUuMy03LjIgMjQuNy05czMwLjctMS4zIDQwLjUuOWM4LjcgMiAyNS43IDEwLjIgMzIuNyAxNS45IDIuOSAyLjMgNi44IDUuMyA4LjcwMSA2LjYgNC44IDMuNCAxNC44IDE3LjIgMTkuMiAyNi42IDUuMiAxMS4xIDcuOTk5IDIyLjkgOC41OTkgMzYuMWwuNiAxMS4yIDMuNjAxLTEuMmM1LjUtMS43IDM3LjQtMS4yIDUzLjIuOCA3LjUuOSAxOSAyLjggMjUuNSA0LjIgMjAgNC4yIDE4LjEgNC4zIDE4LjktLjcgMi45LTE3LjQgMTcuOC0zMS4zIDMzLjUtMzEuMyAxMi43IDAgMjAgNy4zIDIwIDIwIDAgMTYuMS0xMyAyNi45LTM0LjUgMjguN2wtMyAuMi0xLjIwMiAxMmMtLjcgNi42LTEuNjk5IDE2LjUtMi4xOTkgMjItLjYgNS41LTEuOSAxOS0zLjEgMzAtMy4xIDI4LjUtMi4xIDM0LjUgNS44IDM0LjUgMi43IDAgNC4yLS44IDcuMS0zLjggMi0yIDQuMS00LjYgNC44LTUuNyAxLjEtMS44IDEuMi0xLjggMS4yIDEgLjEgNy01LjMgMTQuMi0xMi42IDE2LjYtNy42IDIuNS0yMS4zOTktMS42LTI0LjM5OS03LjItMS4xLTIuMS0xLjEtMi4xLTQuMyAxLTguNyA4LjQtMjUuNSA3LjUtMzEuMi0xLjYtMS0xLjUtMS45LTMtMi0zLjItLjItLjItMS43IDEuMy0zLjUgMy4zLTUuNyA2LjUtMTIuODAyIDguNi0yMi42MDIgNi42LTQuOC0xLTYuNTk4LTIuMS0xMC4zOTgtNS45LTYuMy02LjItNy40LTEwLjMtNy40LTI3Ljd2LTE0LjFsLTQuNiAxLjVjLTQuNiAxLjUtNC42IDEuNS04LjQgMTEuMS03LjEgMTguMS0xNS4zIDI5LjctMjMuOSAzMy43LTUuNyAyLjctMTUuMSAzLjItMjIuMSAxLjMtNS4xLTEuNC0xMS42LTgtMTMuNC0xMy43bC0xLjQwMS00LjMtMi4yOTkgNC43Yy00LjcgOS44LTEyLjIgMTQuNC0yMy40IDE0LjQtNi45IDAtMTUuMjAyLTMuOC0xNy43MDItOC4xLTEtMS42LTIuMDk4LTIuOS0yLjM5OC0yLjktLjQgMC0xLjggMS40LTMgMy4xLTEuMiAxLjgtNC42MDEgNC4zLTcuNzAxIDUuNy00LjkgMi4yLTYuNCAyLjQtMTQuMiAyLTEzLjctLjgtMTkuNC01LjEtMjAuNy0xNS41LS41LTQuNC42LTEzLjcgNS41LTQ5LjQgMS02LjkgMS42LTEzLjEgMS40LTEzLjgtLjItLjYtMS40LTEuMS0yLjctMS4xLTMuNiAwLTUuNS0xLTUuNS0zIDAtNCAxLjEtNSA1LjUtNWg0LjJsMS4zLTkuM2MuNy01IDEuNy05LjggMi4yLTEwLjUuNi0uNyAzLjUtMS4yIDcuMy0xLjIgOS44IDAgMTAuOTAxIDIuNiA3LjkwMSAxNy44bC0uNjAyIDMuMSA4LjgwMS4zYzguNC4zIDguOS40IDkuMiAyLjYuNiA0LjEtMS40IDUuMi05LjggNS4yLTkuMiAwLTkuNzk5LjQtMTEuMDk5IDkuMi03LjYgNTEuNC03LjIgNDguMS02LjQgNTQuMSAxIDcuMSAzLjggOS43IDEwLjUgOS43IDYuMyAwIDEwLjItMS45IDEzLTYuNSAyLjEtMy40IDQuOS0xNSA2LjktMjguNS41LTMuNiAxLjktMTIuNyAzLTIwLjMgMS4yLTcuNiAyLjEtMTYuNCAyLjEtMTkuNiAwLTMuMS40OTktNi4yIDEuMTk5LTYuOSAxLjktMS45IDE0LjMtMS42IDE1LjkuNSAxLjkgMi4yIDEuNSAxMy4zLTEgMzAuNC0zLjUgMjMuMi00LjcgNDAtMy4xOTkgNDQuOCAyLjEgNy4yIDkuMyA3LjcgMTYuMSAxLjIgNi41LTYuMiA3LjA5OC0xMC4xIDYuNzk4LTQzLjktLjMtMjguNy0uMy0yOS4yIDEuOS0zMS4zIDEuNC0xLjQgMy44LTIuMyA3LTIuNiA0LjItLjQgNS40MDItLjEgNy43MDIgMS45IDQgMy40IDQuNiA4LjkgMy41IDI5LjktMSAxNy45LS4xIDM0LjYgMi4yIDQzLjEgMS4yIDQuNSA0Ljg5OSA4LjggNy41OTkgOC44IDIuMSAwIDYtMi41IDguNi01LjUgMy45LTQuNiAxMy43LTI4LjcgMTMuNy0zMy45IDAtLjgtMS4zLTEuOS0yLjktMi41LTcuNC0zLjEtMTMuMi0xMi45LTEzLjktMjMuNi0uOS0xNC42IDUuMy0yMi44IDE3LjMtMjIuOCA4LjYgMCAxNS4zIDUuMiAxNy42IDEzLjYgMS40IDUuMSAxLjQgMTUuNyAwIDIxLjctMS42IDYuNy0xLjYgNi43IDMuMSA2LjEgMy4zLS41IDQuNC0xLjEgNC42LTIuNi42LTMuOSA0LjUtMTUgNi44LTE5LjYgNS0xMCAxNi4zMDEtMTYuOSAyNy4zMDEtMTYuOSA1LjMgMCAxMi4zOTkgMyAxNC4yOTkgNS45IDEuMiAyIDEuMyAxLjkgMy44LTEgNC42LTUuNSAyMS03IDIxLTEuOSAwIDEuMS0xIDItMyAyLjMtMi41LjYtMy4xIDEuMy00LjQgNS45LTEuNyA1LjgtNi42IDUwLjYtNi42IDU5LjkgMCAzLjIuNyA3LjcgMS42IDkuOSAxLjQgMy41IDIgNCA0LjkgNCAxLjggMCA0LjQtLjkgNS43LTIgNS4zLTQuMSA1LjctNi4xIDEwLjgtNTUgMS4xLTEwLjcgMi41LTIzLjEgMy0yNy40LjYtNC40IDEtOS42IDEtMTEuNyAwLTMuNi0uMi0zLjktMy43LTQuOC0yLjEtLjYtNy44LTEuNy0xMi44LTIuNi0zOC40LTYuNS03Ny4xLTcuOS04Ni41LTNsLTMuMiAxLjcuNjAxLTMuOWMxLjctMTAuNCAxLjgtMjguMS4xLTM2LjQtNi4zLTMxLjMtMjcuOTAyLTU0LjgtNjAuMjAyLTY1LjUtOC4zLTIuNy05Ljc5OC0yLjktMjUuMjk4LTIuOS0xNS40IDAtMTcgLjItMjUgMi44LTExIDMuNy0xOS4xIDcuNy0yNi41IDEzLjItMy4zIDIuNC03LjAwMSA1LjEtOC4zMDEgNi00LjUgMy4zLTE0LjI5OSAxNi44LTE4Ljc5OSAyNi03LjYgMTUuOC0xMC4zIDM1LjktNi45IDUxLjUgMiA5LjIgMi4xOTggOC45LTQuMjAyIDYuNy01LjMtMS43LTcuNjk4LTEuOS0yNi4yOTgtMS40LTExLjMuMy0yNi4xIDEuMy0zMyAyLjEtMTYuOSAyLjEtMzIuNyA0LjUtMzcuNSA1LjYtMi4yLjUtNS40IDEtNy4xIDFzLTMuNjAyLjYtNC4xMDIgMS4yYy0uNi43LTEuOTk5IDEyLjEtMy4xOTkgMjUuM3MtMi4zOTkgMjUuMi0yLjY5OSAyNi42Yy0uNiAyLjYtLjUgMi42IDguMSAzLjcgNC44LjcgOS4xLjkgOS42LjZzLjktMS42LjktMi44YzAtNC41IDUuMDk4LTIwLjEgOC4yOTgtMjUuNSA2LTEwLjEgMTYuMi0xNSAyOC45LTEzLjggMTEuNCAxIDE2LjkwMiA3LjMgMTYuNzAyIDE5LjQtLjEgNy45LTEuMiAxMS41LTUuNSAxNy41LTQuMSA1LjgtMTAuMSA5LjctMTkuOCAxM2wtOC4xIDIuNy4xIDguOGMuMSAxMC4yIDIuNjk5IDE3LjcgNy41OTkgMjEuOCA0LjUgMy44IDEyLjIgMi45IDIwLTIuMiAzLjctMi41IDMuOC0yLjcgMy44LTguOSAwLTUuMi40LTYuNyAyLjUtOS4yIDQuMy01LjIgMTEuOC01LjQgMTcuNS0uNSAyLjUgMiAzIDMuMiAzIDYuOCAwIDUuMy0xLjUgNy03IDcuOS0zLjEuNS00LjEgMS0zLjggMi4zLjkgNC45IDE1LjQwMSA4IDIxLjcwMSA0LjYgNS41LTIuOSA3LjYtNi41IDcuNi0xMy4xIDAtNy44LTIuNjAxLTExLjMtMTUuODAxLTIxLjJzLTE2LjMtMTQuNC0xNi0yMy42Yy40LTE0LjcgOC44LTIzLjIgMjUuMy0yNS42IDE4LjktMi44IDMyLjEgNSAzMi4zIDE5LjEuMSA2LjgtMS45IDEwLjktNi4xIDEyLjYtNC42IDItOC4wOTkgMS45LTExLjc5OS0uNC0zLjUtMi4xLTQuNDAxLTUtMy4yMDEtOS44IDEtNCA0LjItNi4zIDguNS02LjMgNC4xIDAgNC40LTIuNS44LTYuNC0zLjEtMy4zLTYuNC00LjYtMTIuMi00LjYtMTEuNiAwLTE3LjggMTEuNC0xMi4zIDIyLjQgMS42IDMuMSA1IDYuMyAxNCAxMi44IDE0LjMgMTAuNSAxNy4zIDE0LjYgMTcuOCAyNC45LjMgNS4xLS4xIDcuNy0xLjggMTEuNy00LjYgMTAuNy0xNC4yIDE1LjUtMzEgMTUuNS0xMS43LjEtMTkuNy0yLjItMjQtNi44LTIuOS0zLjEtNC4xLTMuMS02LjktLjEtMy4zIDMuNS0xMS42OTkgNi44LTE4LjY5OSA3LjRxLTEuNDE4LjEwNS0yLjgwNy4xMDltMjg4LjcwNS03Ljk0YzMuOS4wNDUgOC4zNDQtMy43OTkgMTAuMjAyLTEwLjI2OSAxLjYtNS44IDUuNS00MS4zIDUuNS01MC43IDAtNy42LTEuNi0xNC4yLTQuMS0xNi45cy04LjkwMS0yLjktMTEuMjAxLS4zYy0yLjcgMy00LjUgOS40LTYuNiAyMy45LTMuOSAyNi44LTMuNyA0MS4zLjcgNTAuMyAxLjI5MyAyLjY5NiAzLjMxMiAzLjk0NCA1LjUgMy45N00xMzcuOCAyMzEuOWwzLjgwMS0uNWMxNS41LTIuMiAyMy40LTEwLjI5OCAyMy40LTIzLjg5OCAwLTUuNS0yLjc5OS0xMC41MDItNi41OTktMTIuMTAyLTQuMi0xLjgtNC4yLTEuOC04LjQuNC01LjkgMi45LTkuNiAxMi40MDEtMTEuNiAyOS45MDF6bTI0NS4wMzYtNS41N2MxLjA0OC4wMjYgMS4zNzUtLjk2NiAyLjE2Ni00LjEyOS43LTIuNiAxLjQ5OC04LjggMS43OTgtMTMuOWwuNS05LjItMy42LTMuNmMtMS45LTEuOS00LjA5OC0zLjUtNC43OTgtMy40LTIuNS4xLTUuNCAxLjYtNy40IDMuOC0yLjQgMi43LTMuMyAxMy4yLTEuNSAxOC41IDEuMyA0LjEgNy4xOTkgMTAuMSAxMS4xOTkgMTEuNS43MDMuMjUyIDEuMjI0LjQxOSAxLjYzNS40MjltLTc2LjU5Ni00NS41OGMtMi4yNzguMDQ3LTQuNjcyLS44MjUtNi44MzgtMi44NS0zLjQtMy4yLTMuNDAyLTExLjYtLjEwMi0xNC42IDEuMi0xLjEgMi45MDItMi4yOTkgMy43MDItMi41OTkgNS41LTIgMTEuNi44IDEyLjYgNS43IDEuNTA5IDguMTIxLTMuNTQyIDE0LjIzLTkuMzYyIDE0LjM0OU04NC45NyAxNjIuNzAzYzEuMDAyLjAxNSAxLjc1Ni0uMDc4IDIuMTMxLS4zMDMgMS44LTEuMS40LTE1LjM5OS0yLjEtMjEuMjk5LTEuMi0yLjctMy4yLTUuOS00LjUtNy4xLTMuMS0yLjktMTAuMi0zLjctMTMuMy0xLjUtOCA1LjgtNy4xIDIwLjMgMS42IDI2LjIgMi44NDMgMS44NjkgMTEuODI4IDMuOTM2IDE2LjE3IDQuMDAybTQyOC43My0xLjcwMWg0LjVjOS42IDAgMjAuNjAxLTUuNDAxIDI0LjkwMS0xMi4zMDEgMi43LTQuMyAyLjEtMTEtMS40LTE0LjQtMy0zLjEtOS44LTQtMTQuMi0xLjktNi4zIDIuOC0xMi4yIDEzLjQtMTMuMyAyMy44eiIvPjwvc3ZnPg==', - title: 'Festivalguide', - }, - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBkPSJNMzY0IDI2N2MtMS4yIDAtLjgtLjcgMTQuOS0zMi41IDYuOC0xMy43IDEyLjctMjYgMTMuMi0yNy4zLjgtMi4xLjctMi4yLTUuMS0yLjJoLTZ2LTU5aDMzdjExaC0yMHYxMmgxNy4xbDkuMS0xOC43YzUuMS0xMC4zIDkuNC0xOC4xIDkuNi0xNy40cy02LjIgMTQuNS0xNC4yIDMwLjhjLTggMTYuMi0xNC42IDI5LjctMTQuNiAyOS45czIuNS40IDUuNS40YzMuMSAwIDUuNS41IDUuNSAxIDAgLjYtMi45IDYuOC02LjUgMTRsLTYuNSAxMi45IDguNSAxNS4xYzQuNyA4LjMgOC41IDE1LjMgOC41IDE1LjUgMCAuMy0zLjMuNS03LjMuNWgtNy4zbC03LjUtMTMuMy03LjQtMTMuMi0uMyAxMy4yLS4zIDEzLjItNy4yLjMtNy4yLjMtMy4zIDYuN2MtMS43IDMuOC0zLjYgNi44LTQuMiA2LjhtNzUuNS0xMy41Yy03LjIgMC0xMS41LTIuMi0xNi4yLTguMy0zLjktNS4yLTUuMy05LjUtNi0xOC44LTEuMi0xNS4xIDQuNS0yNy40IDE0LjctMzEuOCA3LTMgMTUuNS0xLjMgMjEuMyA0LjIgMTAuNCA5LjkgMTEuNyAzNC4yIDIuNCA0Ni40LTQuNyA2LjEtOSA4LjMtMTYuMiA4LjNtMzAuNS0uNXYtNTloMTN2NDhoMjB2MTF6bTM5IDB2LTU5LjFsNi4yLjMgNi4yLjMgNy41IDE1IDcuNiAxNSAuMy0xNS4zLjMtMTUuMkg1NDl2NTloLTExbC03LjctMTUuNWMtNC4zLTguNS04LjEtMTUuNS04LjUtMTUuNS0uNSAwLS44IDctLjggMTUuNVYyNTN6bS02OS41LTExLjVjMy4zIDAgNC4yLS41IDUuOC0zLjMgMy45LTYuNiAzLjUtMjUuNS0uNi0zMC40LTMuMy0zLjktNi4yLTQuNC05LjEtMS41LTMuNSAzLjUtNC45IDkuOC00LjQgMTkuOC41IDExLjQgMi43IDE1LjQgOC4zIDE1LjRtLTIxNS4yNTgtMzUuNTgyYy0yLjc3Mi0uMDIzLTUuNTU3LS44MTUtOC45NDEtMi40MThMMjEwIDIwMS4xdi02LjZjMC02LjYuNy03LjggMy4xLTQuOSAzLjEgMy44IDEwLjMgNS42IDEyLjcgMy4yIDIuNy0yLjcgMS4zLTYuNC01LjQtMTMuOS05LjktMTEuMS0xMi4yLTE3LjYtOS4xLTI1LjIgMS43LTMuOSAzLjUtNS41IDguNC03LjMgNC4zLTEuNiAxMi4zLTEuMyAxNi42LjcgMi40IDEuMSAyLjcgMS43IDIuNyA2LjYgMCAyLjktLjIgNS4zLS41IDUuM3MtMi4yLS43LTQuMi0xLjVjLTUuMy0yLjItMTAtMi0xMC44LjVzLjYgNC43IDcuMiAxMS45YzcuNyA4LjUgOS41IDExLjYgMTAuMSAxNyAuOCA4LjgtMy4xIDE1LjQtMTAuNyAxOC0yLjA3Mi42OTEtMy45NjEgMS4wMzQtNS44NTggMS4wMThNODkgMjA1LjFWMTQ2aDE0bC0uMiAyOS4yLS4zIDI5LjMtNi43LjN6bTEwMCAwLS4yLTE3LjgtLjMtMTcuOC01LjEgOS41Yy0yLjggNS4yLTUuNyA5LjYtNi41IDkuOC0uOS4xLTMuMy0zLjMtNi40LTlsLTUtOS4zLS4zIDE3LjItLjIgMTcuM2gtMTN2LTU5LjFsNi4zLjMgNi4yLjMgNiAxMS4yYzMuMyA2LjIgNi4zIDEwLjkgNi42IDEwLjUuNC0uNCAzLjMtNS42IDYuNS0xMS41bDUuOC0xMC44IDYgLjMgNi4xLjN2NThsLTYuMi4zem0tNzYtLjF2LTU5aDEzdjQ4aDIwdjExem0xNTAuNyAwYy0xMC4xIDAtMTguNi0uMi0xOC45LS41czMuOS0xMSA5LjItMjMuOGw5LjgtMjMuMi04LjktLjMtOC45LS4zdi00LjhjMC0yLjYuMy01LjEuNy01LjQgMS0xIDM1LjMtLjggMzUuMy4yIDAgLjQtMS40IDQuMS0zLjEgOC4yLTcuNiAxOC4yLTE1LjkgMzguMi0xNS45IDM4LjYgMCAuMSA0LjMuMyA5LjUuM2g5LjV2MTF6bTI1LjMgMHYtNTloMzN2MTFoLTIwdjEyaDE4djExaC0xOHYxNGgyMHYxMXptNDIgMHYtNTkuMWw2LjEuMyA2LjEuMyA3LjcgMTUgNy42IDE0LjkuMy0xNS4yLjMtMTUuMkgzNzF2NTloLTExbC04LjItMTYuMy04LjMtMTYuMi0uMyAxNi4yLS4yIDE2LjN6bS0yODAuNS0uNS0uMy0yOS4zTDUwIDE0NmgzMHYxMUg2NC4ybC0uNCA2LS4zIDZIODB2MTAuOWwtOC4xLjMtOC4xLjMtLjEgMTItLjIgMTJ6TTM5Ni40IDE5NGMyIDAgMy0xLjIgNS41LTYuNiAxLjctMy42IDMuMS02LjggMy4xLTdzLTIuNS0uNC01LjUtLjRIMzk0djdjMCA2LjcuMSA3IDIuNCA3bTUwLjA1LTYuNTE0Yy0xLjM3Mi4wMDgtMi43NS0uNTc0LTMuNjUtMS44ODYtMS4yLTEuNy0uOS01LjEuNC02LjQuNy0uNyAyLjEtMS4yIDMuMy0xLjIgMi45IDAgNC41IDEuOSA0LjUgNS4yIDAgMi42MjQtMi4yNjYgNC4yNzQtNC41NSA0LjI4Nm0tMTQuMTUtLjYyOWE4IDggMCAwIDEtLjktLjA1NmMtMy40LS40LTQuOC0zLjcwMS0yLjgtNi43MDEgMi43LTMuOCA4LjQtMi4yIDguNCAyLjUgMCAyLjYyOC0xLjg4OSA0LjI3LTQuNyA0LjI1NyIvPjwvc3ZnPg==', - title: 'Filmszene Köln', - }, - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBkPSJNMTY0LjUgMTY3LjRjLTguOCAyLTEyLjggMy45LTE3LjggOC41LTYuNyA2LjItOS4xIDEyLjUtOS4yIDI0LjEgMCA3LjkuNCAxMC40IDIuNCAxNC43IDYgMTMuNCAyMSAyMC4zIDQxLjQgMTkgNS4xLS4zIDExLjYtMS4xIDE0LjUtMS43bDUuMi0xLjJWMTk1aC0yOHYxMmgxMXY2LjRjMCA3LjEtLjUgNy42LTYuOCA3LjYtOC4zIDAtMTYuNC00LjUtMTkuNi0xMC45LTQuMS03LjktMi4zLTE5LjYgMy45LTI1IDcuOC02LjggMjIuOC03LjkgMzUuOC0yLjYgMS41LjYgMS43IDAgMS43LTYuM3YtNy4xbC0zLjctMS4xYy02LTEuOC0yMy45LTIuMi0zMC44LS42TTUxIDIwMHYzM2g2N3YtNjZINTF6bTE2NCAwdjMzaDQ4di0xMmgtMzB2LTE1aDI3di0xM2gtMjd2LTEyLjlsMTQuOC0uMyAxNC43LS4zdi0xMmwtMjMuNy0uMy0yMy44LS4yem02MiAwdjMzLjJsMTguOC0uNGMxOC0uMyAxOC45LS40IDI0LjMtMyA3LjUtMy43IDEwLjMtOC42IDkuNy0xNi45LS41LTYuOS0zLTEwLjMtOS0xMi4xbC0zLjgtMS4xIDMuMS0xLjVjNS4yLTIuNiA4LjMtNy43IDguMy0xMy42IDAtNy0yLjYtMTEuMy04LjktMTQuNi00LjctMi40LTUuOS0yLjUtMjMuNy0yLjlsLTE4LjgtLjN6bTMxLjgtMTguNGMzLjEgMi4yIDIuOSA2LjctLjQgOS4zLTIgMS42LTQuMSAyLjEtOC41IDIuMUgyOTR2LTEzaDYuM2M0IDAgNyAuNSA4LjUgMS42bS0uMyAyNC44YzMuOSAxLjcgNS40IDUuMyAzLjkgOS41LTEuMSAzLjEtNS44IDUtMTIuNiA1bC00LjguMXYtMTZoNWMyLjggMCA2LjYuNiA4LjUgMS40TTM0MyAyMDB2MzNoNDh2LTEyaC0zMHYtMTVoMjd2LTEzaC0yN3YtMTNoMjl2LTEzaC00N3ptNjItNi44YzAgMTQuNS0uMyAyOS4zLS43IDMzbC0uNiA2LjhINDIydi0yNmg0LjFjNi4xIDAgOC45IDMuNCAxMyAxNS44bDMuMyAxMC4yaDguOGM0LjggMCA4LjgtLjQgOC44LS45IDAtMS41LTguOS0yNS45LTEwLjItMjguMS0uNy0xLjEtMi4xLTIuMy0zLjItMi42LTEuNi0uNS0xLjItMSAxLjktMi44IDQuOC0yLjcgNy41LTYuMyA4LjQtMTEuMiAxLjUtOC44LTEuNi0xNC45LTkuNC0xOC41LTMuNC0xLjYtNi43LTEuOS0yMy4yLTEuOUg0MDV6bTMyLjUtMTAuN2MyLjggMi43IDMgNC4yIDEuNCA3LjktMS40IDMtNS41IDQuNi0xMiA0LjZINDIydi0xNWg2LjVjNS43IDAgNi45LjMgOSAyLjVNNDcxIDIwMHYzM2gxOHYtNjZoLTE4em0yOC0yNi41djYuNWgxNnY1My4xbDguOC0uMyA4LjctLjMuMy0yNi4zLjItMjYuMmgxNnYtMTNoLTUweiIvPjwvc3ZnPg==', - title: 'GEBERIT', - }, - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBkPSJNNDg0Ljg2IDI2My4zMDRjLTExLjY0NS0uMDE0LTE5LjIwMS0xLjc3My0yOS43Ni03LjAwNC0xOC4zLTguOS0zNC4xLTMyLjItMzQuMS01MC4yVjIwMmgzNGwuNiAyLjcwMmM0LjEgMTkuNCAyMS43IDI5Ljc5OSAzOS43IDIzLjY5OSA2LjEtMi4xIDEzLjItOC40MDEgMTYuNC0xNC44MDEgMi4yLTQuMiAyLjctNi40IDIuNy0xMi42IDAtOS0yLjgtMTUuNS05LjQtMjEuNC03LjMtNi42LTkuMi03LTMxLjUtNy42bC0yMC0uNS0uMy0xNS41Yy0uMS04LjUgMC0xNi4wOTguMy0xNi43OTguNC0xLjIgNC4xLTEuNCAyMS44LTEgMTkuNC41IDIxLjkuNyAyOS4yIDMuMSAxMC40IDMuNCAxOC41IDguMyAyNi4zIDE2IDcuNyA3LjYgMTIuMiAxNC42OTggMTUuOCAyNS4xOTggMy45IDExLjQgMy45IDI1LjYgMCAzNy0zLjYgMTAuNS04LjEgMTcuNjAyLTE1LjggMjUuMjAyLTEyLjggMTIuNS0yNy4xIDE4LjUtNDQuOCAxOC42cS0uNTc3LjAwNC0xLjE0LjAwM00zMjEgMjUyYy0yOCAwLTQwLjUtMy40OTgtNTAuNy0xNC4yOTgtMTAuNC0xMS0xNC4xLTIzLjEtMTUtNDkuNUwyNTQuNyAxNzFIMjMxdi0zM2gxMDh2MzNoLTQ3djEyLjNjMCAxOS45IDMuNiAyOS40IDEyLjkgMzMuOSA0IDIgNi41IDIuMyAxOS40IDIuNmwxNC43LjRWMjUyem0zMi44IDAgLjUtMzEuNjk5Yy40LTM0LjggMS0zOC44IDYuNy01MC45IDguMS0xNi44IDIzLTI3LjQgNDIuNS0zMC4zIDMuMy0uNSAxMy4xLS45MDEgMjEuOC0xbDE1LjctLjF2MzIuOGwtMTUuMi40Yy0xMy4zLjMtMTUuOC42LTE5LjMgMi41LTUuNSAyLjktOC45IDYuOC0xMi4yIDEzLjhsLTIuOCA2LS41IDI5LS41IDI5LTE4LjMuM3pNNTAgMjUxdi01NS43OThjMC0zMC43LjMtNTYuMi43LTU2LjUuMy0uNCA4LjctLjcwMiAxOC41LS43MDJIODd2MTEzem01MyAwVjEzNy44bDM4LjMuNGMzMiAuNCAzOS4yLjcgNDQuMiAyLjIgMTUuNCA0LjMgMjcuNSAxMy40IDMzLjggMjUuNCA2LjIgMTEuNyA2LjcgMTUuNyA2LjcgNTIuNFYyNTFoLTM1LjlsLS4zLTMxLjMtLjMtMzEuMi0zLjEtNS40MDFjLTIuMy00LjItNC4zLTYuMi04LjUtOC41LTUuMy0zLjEtNS42LTMuMS0yMi4xLTMuNUwxMzkgMTcwLjhWMjUxeiIvPjwvc3ZnPg==', - title: 'INTRO Magazin', - }, - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBkPSJNMTQ1LjU0NSAyNTguODc0Yy01LjIuMDAzLTExLjE5MS0uMDI3LTE4LjE0NC0uMDc0bC00MC0uMy03LjYwMi0zLjdjLTEyLjktNi40LTIzLjU5OC0yMC0yNy4zOTgtMzQuOS0xLjQtNS4yLTEuNS05LTEtMjAuNCAxLjEtMjEuOCA0LjItMzEuNyAxMy42LTQyLjYgNi41LTcuNiAxOS4xLTE0LjcgMjktMTYuMiAxLjQtLjIgMjAuMS0uNSA0MS41LS41IDMwLjQtLjEgNDAuNDk4LjIgNDUuNzk4IDEuMyAyMyA0LjggMzUuOTAxIDIxLjggMzUuODAxIDQ3LjItLjEgMzUuNS05IDU1LjEtMjkuNCA2NC45LTkuMDI4IDQuMzA0LTE0LjA3IDUuMjYtNDIuMTU1IDUuMjc0TTIxOC43IDI1OGwuNy02LjFjLjMtMy40LjYtNy41OTguNi05LjI5OCAwLTIuOS44LTMuNiAxMy0xMSAxMS41LTcgMTMtOC4yIDEzLjQtMTEgLjUtMy4zIDIuNi00MC44MDEgMi42LTQ2LjMwMSAwLTMuMi0uMy0zLjQtMTIuNi05LjMtMTEuNi01LjUtMTIuNi02LjItMTItOC4yLjMtMS4zLjYtNS4xLjYtOC42VjE0Mmw3OS4zLjIgNzkuMi4zIDUgMi4zYzYgMi44IDExLjkgOC4zIDE0LjcgMTMuNyAyLjkgNS42IDMuNiAxNi43IDEuNCAyMy4zLTEuOSA1LjYtOC4yIDEzLjQtMTIuOCAxNS44bC0zIDEuNiAyLjggMS40YzEzLjIgNi44IDE4LjMgMjQuMiAxMS40IDM4LjItNC43IDkuMy0xMS44IDE0LjYtMjMuNyAxNy43LTQuOCAxLjMtMTcuNyAxLjUtODMuMiAxLjV6bTE5Ny4zLTF2LTcuMzk4YzAtNC4xLjQtOC41MDEuOS05LjgwMS42LTEuNiA1LjMtNC43IDE1LjQtMTAuMmwxNC41LTcuOS42LTcuNmMuMy00LjIuOC0xMyAxLjEtMTkuNnMuOC0xMy40IDEuMS0xNS4ybC41LTMuMS0xNS03LjgtMTQuOS03LjguNS03LjVjLjItNC4yLjYtOC4yLjktOC45LjMtLjkgMTMuOS0xLjIgNjMuOS0xLjJINTQ5djIuMmMwIDEuMy0uMyA1LjQtLjcgOS4xbC0uNiA2LjktMTQuMyA3LjEtMTQuMiA3LjEtLjYgNGMtLjMgMi4zLS44IDExLjctMS4xIDIxLjEtLjQgOS4zLS45IDE3LjctMS4xIDE4LjYtLjMgMS4yIDMuMSA0IDEzLjEgMTAuNGwxMy41IDguOHY3LjhjMCA0LjItLjMgOC40LS42IDkuMy0uNiAxLjQtNy4xIDEuNi02My41IDEuNnptLTI4NC41LTI4YzUuMSAwIDYtLjI5OSA4LjktMy4yOTkgMy44LTMuOCA0LTQuNCA1LjctMzIuMyAxLjMtMjAuOS45LTIzLjYtNC4xLTI2LjEtMy4yLTEuNi05LjgtMS42LTEyLjkgMC01LjMgMi42LTYuMSA1LjktNy42IDMwLjItMS44IDMwLjItMS40IDMxLjUgMTAgMzEuNW0xNzkuNS0zaDEwLjRjMTEuOSAwIDE0LjMtMS4xIDE1LjItNyAuNC0yLjcuMS00LjE5OS0xLjYtNi4yOTktMi4xLTIuNi0yLjQtMi43LTEyLjQtMi43LTUuNiAwLTEwLjYuMy0xMC45LjctLjQuMy0uNyAzLjktLjcgOHptMjI5LjQ2NS02LjI0MmMtLjM2Mi4wMDgtMS4wNC0uODQ0LTEuNTY0LTIuMTU2LTEuNS0zLjItMi42MDEtMy4zLTMuMjAxLS40LS4yIDEuMy0uNS0uMS0uNi0zLS4xLTQuOSAwLTUuMjAyIDIuNC01LjIwMiAyLjkgMCA0LjMgMi40IDIuNSA0LjQtLjkgMS4xLS45IDIgMCAzLjYuNiAxLjIuOSAyLjQwMS42IDIuNzAxYS4yLjIgMCAwIDEtLjEzNS4wNTdtLTUuOTQ3LTIuMzdjLS4xMjQtLjA2NS0uMjE5LTEuMzI1LS4yMTktMy4zODggMC0zIC4yLTQuMjk5LjQtMi43OTkuMiAxLjYuMiA0IDAgNS41LS4wNjIuNS0uMTI1LjcxOC0uMTguNjg4bTIuNTc2LTMuNjRjLjY2Ny0uMDExIDEuNDQtLjcxOCAxLjcwNS0yLjA0Ny4yLTEtLjI5OS0xLjctMS4xOTktMS43LTEgMC0xLjYuOS0xLjYgMi4xIDAgMS4xMjYuNTA2IDEuNjU3IDEuMDk0IDEuNjQ3TTMxMyAxODRoMTAuMWM1LjUgMCAxMC45LS41IDEyLTEuMSA0LjYtMi40IDQuMi0xMC40OTgtLjctMTIuNzk4LTEuNC0uNi02LjUtMS4xMDItMTEuMy0xLjEwMi0xMC4xIDAtMTAuMS0uMDk5LTEwLjEgOS43MDF6Ii8+PC9zdmc+', - title: 'OBI', - }, - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBkPSJNMzI5LjEwNyAyNzEuODE3Yy0xMS44ODUtMS41OTEtMjEuNzIxLTkuMS0yNS4wNjUtMTkuMTM0LTIuODA5LTguNDMtMS4xNTItMTQuOTQ1IDMuOTQ3LTE1LjUyIDIuMzA2LS4yNiAzLjgwMy4xNTYgNS4yNDIgMS40NTYgMS40NzQgMS4zMzIgMS44NTcgMi4zMjIgMi4xOCA1LjYzNi45NDggOS43MDQgOC4xMDYgMTYuMjE4IDE3LjgyMyAxNi4yMTggMy41MDUgMCA1LjY4OS0uNDc0IDguNjQtMS44NzQgNS43MTEtMi43MSA4LjczNC03Ljg3MSA4LjM5NC0xNC4zMjgtLjIyOC00LjMyMi0yLjAyMS03LjYxNi01LjYyLTEwLjMyMi0yLjgxMy0yLjExNC02LjY5Mi0zLjg4Ny0xNC4wMDMtNi40MDItMTAuMTE3LTMuNDgtMTQuNzA2LTUuNzEtMTkuMDE4LTkuMjQtOC4wMTctNi41NjctMTEuMDU0LTE4LjYzMS03LjUxNy0yOS44NyAxLjUwOS00Ljc5NSAzLjUxMS04LjA4MSA3LjE5NS0xMS44MDkgNS40OTctNS41NiAxMi42NTItOC40MiAyMS4wNDctOC40MSAxNS4xNDguMDE2IDI3LjQzNyA5LjQxMSAzMC4yMDkgMjMuMDkxLjQzMiAyLjEzMi41MiAzLjc0NS4zNzQgNi44MTMtLjMwMSA2LjMyNS0xLjg2MyAxMC44NDgtNC43MzcgMTMuNzIzLTMuMjMgMy4yMy04LjE4OCAyLjY1OC0xMC4xMi0xLjE2OS0uOTY0LTEuOTA3LS45NC0zLjA0Ni4xMi01LjUyNSAxLjU4MS0zLjY5NyAyLjEzNi01Ljg0IDIuMTM2LTguMjU1IDAtNC42MzktMS41NTUtOC41Mi00Ljc0LTExLjgzOC0yLjMzNS0yLjQzMS00Ljk0MS0zLjkxLTguNDk2LTQuODE5LTkuMTQxLTIuMzM3LTE3Ljk5MyAyLjMwMi0yMC44OTIgMTAuOTUtMS4wMyAzLjA3My0xLjAzMyA3LjczNi0uMDA4IDEwLjYxOS45NjMgMi43MDUgMi43NTggNS4yMjYgNS4wMTggNy4wNDkgMi41NDcgMi4wNTMgOC4xNzUgNC43NjcgMTQuNDA5IDYuOTQ4IDEwLjA3IDMuNTIzIDEzLjQ4MyA1LjExNSAxNy43NjQgOC4yODggNC4zNzggMy4yNDUgNy4wMjQgNi45OTYgOC42OTQgMTIuMzI0LjY3NCAyLjE1Ljc4MiAzLjE5Ljc4NCA3LjUwOSAwIDQuMjE4LS4xMTkgNS40MjgtLjc1NCA3LjYyMS0yLjk3NCAxMC4yNjEtMTAuOTE3IDE3LjQ2NS0yMS44MTYgMTkuNzg1LTIuOTY1LjYzMi04LjM1Ljg2NC0xMS4xOS40ODRabS0xMzIuMzQzLTQ0Ljc4M2MtMTIuMDM4LTEuODk5LTIxLjE4OC05LjUyNi0yMy45OS0xOS45OTYtLjg5LTMuMzI1LS45NjItOS4yNDMtLjE1NS0xMi41NSAxLjE4LTQuODI5IDQuMDI4LTkuMDAxIDYuNzYtOS45MDMgMi4zMTEtLjc2MyA1LjM1Ni4yNzcgNi44NzggMi4zNDkgMS4xODUgMS42MTQgMS4xNDQgMy41MzEtLjE0NyA2Ljg1NS0xLjQ0MSAzLjcwOS0xLjcyMyA1LjY3Ni0xLjI0MyA4LjY3OS45NzUgNi4xMDUgNS4zMDcgMTAuODA4IDExLjY3OCAxMi42OCAyLjU1Ni43NSA3LjQzOC43MDQgMTAuMDEtLjA5NiA5LjAxMy0yLjgwNiAxMy4wMzUtMTIuNTI3IDguNjM0LTIwLjg3NS0yLjE2Mi00LjEwMi03LjA3LTcuMjQ0LTE3LjA5Mi0xMC45NC0xMC43MS0zLjk1LTE0LjY5NC02LjE0Mi0xOS4wOTYtMTAuNTEtMy40NDItMy40MTQtNS4wNy02LjE0NS02LjIxMy0xMC40MjktLjk5Mi0zLjcxMS0uOTkyLTEwLjI0MyAwLTEzLjk3MiAyLjAzOC03LjY2NCA3LjExMS0xMy44NTYgMTQuMjM3LTE3LjM3NiA0LjMwOC0yLjEyOSA4LjAyMy0yLjk1OCAxMy4yMi0yLjk1IDguOTkuMDEyIDE1LjcxNCAyLjY5NCAyMS41NjMgOC41OTYgNC42MTkgNC42NjEgNi43ODMgOS4wOTQgNy40OTQgMTUuMzU1LjY5MiA2LjA5NC0xLjU3OCA5LjE2Mi02LjU0NiA4Ljg0Ni0zLjIwNy0uMjA0LTUuMjQ1LTIuMTAxLTUuNjE0LTUuMjI2LS42NTctNS41NTItMS44NjctOC40Ny00LjY3NC0xMS4yNzgtNS40NzMtNS40NzQtMTQuOS02LjQ0NC0yMS40NTQtMi4yMDgtNi43IDQuMzMtOC40NTYgMTQuMjM3LTMuNjQxIDIwLjU0MiAyLjUwNyAzLjI4NSA2Ljc1MyA1LjcwNSAxNi43OTMgOS41NzMgNy43OCAyLjk5OCAxMC41NDYgNC4yODkgMTMuOTggNi41MjcgNS4wMzkgMy4yODUgOC4zMzcgNy4yNzIgMTAuMDE1IDEyLjEwNiAzLjczMSAxMC43NTIuMzIgMjMuMTg3LTguMjg2IDMwLjIwNS0yLjYzOCAyLjE1LTcuMzIyIDQuNDgtMTAuNzcyIDUuMzU3LTMuMDkuNzg2LTkuMzU1IDEuMTEtMTIuMzQuNjRabTY0LjM5Ny0uMDM2Yy05LjMwMy0xLjMzNC0xOC4yOTktOC4wODgtMjIuMjk3LTE2Ljc0LTEuOTkyLTQuMzEzLTIuNjQ4LTcuNDc0LTIuNjItMTIuNjI3LjAzLTUuMzczLjY4NS04LjI4NyAyLjg5NC0xMi44NyAyLjkxLTYuMDM1IDcuNTUyLTEwLjYxIDEzLjc1NS0xMy41NTUgNC40NDctMi4xMSA2LjgzMy0yLjY4MyAxMi4wMzQtMi44OTMgNi43NDEtLjI3MSAxMS44NzguOTI3IDE3LjAwNCAzLjk2NiAyLjUzNiAxLjUwNCA2LjYyNSA1LjIxNyA4LjM4NSA3LjYxNCAxLjgxMiAyLjQ2OSAzLjg0OSA2Ljg2NSA0Ljc5MiAxMC4zNDMuODY1IDMuMTkuODczIDMuMzMyLjk5NSAxNy41NjYuMTEgMTIuODIuMDY0IDE0LjUwNi0uNDM4IDE1LjgxOS0xLjc3NiA0LjY1MS05LjIwOCA0Ljk0NS0xMS40OTkuNDU0LS41ODUtMS4xNDYtLjY0NS0yLjMxMy0uNzc2LTE0LjkzLS4xMTktMTEuNDIyLS4yMzUtMTQuMDQyLS43MDQtMTUuODMtMS40Mi01LjQxMy00Ljc0MS05Ljc5NC05LjAyNC0xMS45MDItMTAuMzA0LTUuMDctMjIuMjQ0IDEuMTQ1LTI0LjQ2MSAxMi43MzQtLjYwNiAzLjE2Ni0uNjAzIDQuMzguMDIgNy4zMjhhMTguMDMgMTguMDMgMCAwIDAgNC4zNzUgOC41MDJjNC40MDMgNC43NTYgOS4xOSA2LjIzMiAxNi4zNjMgNS4wNDcgMy40NTctLjU3IDQuODI4LS4zMDQgNi40NjYgMS4yNTggMy40NjIgMy4zMDEgMi4xNDggNy44OC0yLjc5MSA5LjcyOC0zLjQ5IDEuMzA2LTcuODUgMS42NTEtMTIuNDczLjk4OG0xMzQuNTcuMDI0Yy0xMC41NjUtMS41NS0xOS40MzUtOC4xMjctMjMuNzI3LTE3LjU5NC0zLjI2Ny03LjIwNC0zLjE5Ni0xNi42NjUuMTgtMjMuOTcxIDMuNjg2LTcuOTc4IDEwLjU0NS0xMy44MzIgMTkuMDk3LTE2LjI5NyAzLjYzMi0xLjA0NyAxMi4wMTUtMS4xMiAxNS44NzgtLjE0IDEyLjc3NSAzLjI0NCAyMS4wNiAxMi45MzYgMjEuMTc1IDI0Ljc2OC4wMjggMi43MjYtLjA2MyAzLjE3Ni0uOTUgNC43OTYtLjU5IDEuMDc2LTEuNTM5IDIuMTczLTIuMzg1IDIuNzU1LTIuNTY1IDEuNzY1LTQuMjE5IDEuOTc2LTE1LjUgMS45NzYtOS45NCAwLTEwLjI2Mi0uMDItMTEuNjkzLS43NTItMS45NjktMS4wMDctMi43Ni0yLjE3NC0yLjkzMy00LjMzMi0uMTE2LTEuNDUzLS4wMDItMS45NzIuNjQtMi45MDggMS43My0yLjUyIDEuNzIzLTIuNTIgMTEuMDI4LTIuNzA1IDcuODctLjE1NyA4LjM5LS4yMDcgOC44NTMtLjgzNiAxLjAxNS0xLjM3OC0uMzYtNC45NjItMi44NjQtNy40NjYtMy4wNS0zLjA1LTcuNTAxLTQuNzQxLTEyLjQ0LTQuNzI3LTUuMTkzLjAxNi04Ljc5OSAxLjQ4LTEyLjMxOSA1LjAwNC03LjIzIDcuMjM4LTcuMzc4IDE4LjU5Ni0uMzM0IDI1Ljc3NyAzLjU5NiAzLjY2NiA3LjYzOCA1LjMxMiAxMy4wNDMgNS4zMTIgNS4zNiAwIDcuNTA4LS43MjggMTUuODctNS4zODQgNy4zMjYtNC4wNzcgMTIuOTczIDMuNDcyIDYuODY5IDkuMTgyLTYuMTg0IDUuNzgzLTE3Ljc4IDguOTY1LTI3LjQ4OCA3LjU0MVoiLz48L3N2Zz4=', - title: 'Sage', - }, - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNTAuNjI0IDIwNy4yNjZjLS42NTMtMy4zNjUtMi42MDItNS4yOTItNS4zNDUtNS4yOTItLjQwOCAwLS44MzMuMDQ0LTEuMjY3LjEyMy0xLjkxOS4zNzctMy45NDcgMS45MjgtNS4yOTggNC4wNjMtMS42MTYgMi41NDgtMi4xNjYgNS43MjMtMS41NDEgOC45MzguMzEgMS41OTggMS40NDUgNS4zMDQgNS4yOTEgNS4zMDQuNDIgMCAuODY1LS4wNDIgMS4zMi0uMTMzIDQuMzQzLS44NDMgOC4xOS02LjA2IDYuODQtMTMuMDAzbTU0LjIxNS00LjU3My0uMDAzLS4yMTQtLjU2Ni4xMDdjLTEuNTE5LjI5OC05LjA1NSAxLjk5NS04LjIwNyA2LjM1OS4xOTMuOTk2Ljg5NyAxLjUyNCAyLjA0IDEuNTI0cS40MjktLjAwMi45MjYtLjA5NWMzLjE0NS0uNjE0IDUuODIxLTQuNzM2IDUuODEtNy42ODFtMTAyLjM3LTU5LjAxMi0xLjIxMyAzOS4yMTItMTEuOTU5IDIuMzIzLTEuMjE3LTM4LjczOVptLTE4Ljc5NyAzNC4yOTN2MjUuMjk4bC0xMy44NCAyLjY5MS4wMzctMjMuMzZjLS4wMjQtLjgyLS4xLTEuNjM1LS4yMDItMi4xNi0uMzg2LTEuOTgtMS4zNzgtMi41ODEtMy40Mi0yLjE4LTQuOTkyLjk3My03LjkyNyA2Ljg2My03Ljg5MSAxMS45OTdsLjAyNCAxNy45MjctMTMuODM5IDIuNjkzdi02LjMxN2MtLjUxIDEuNDU3LTEuMjY1IDIuODQ4LTIuMzg0IDQuMDk3LTIuNTQ3IDIuODUzLTYuNDI5IDQuODUzLTExLjI0IDUuNzg2LTEuNi4zMTUtMy4yNTEuNDY3LTQuOTE2LjQ2Ny02LjM1MyAwLTExLjA5LTIuMjM2LTEyLjIxOC0yLjgybC4wMTIgNC43NjMtMTIuNzMzIDIuNDc1LS4wMDMtMy4wMTNjLS4wMDMtLjE4LS4wMDMtLjM1My4wMDMtLjUzLTEuNDYgMi4wNTktNC41IDUuMzM4LTkuNDgzIDYuMzA0YTE0LjUgMTQuNSAwIDAgMS0yLjgxNi4yNzdjLTMuODEgMC04LjEzMS0xLjYxNi0xMC4wNzMtNS45bC4wMDcgNy4zMDMtLjM1OC4xMjRjLS4wNy4wMjItMS43MS41Ny0zLjQ5OC45MTYtMS40Ny4yODItMi44NTQuNDI3LTQuMTE3LjQyNy01Ljg2OCAwLTkuNDI5LTMuMDI5LTEwLjU5LTktLjIxNi0xLjExNC0uMjY0LTIuNC0uMzAxLTMuNjgtLjUwOCAzLjM5Ny0xLjY0MyA2LjY0LTMuNDg2IDkuNTEyLTMuMTk4IDQuOTg5LTguMDkyIDguNDQ1LTEzLjQyMiA5LjQ4LTMuODQzLjc0NC03LjU1MS4xNjMtMTAuNDI4LTEuNjQzYTQ4IDQ4IDAgMCAxIC4wNTcgMi40NjJsLjA0IDE1LjYxNS0xMy43NjUgMi42ODItLjAzLTIxLjU3NGMtLjUxIDEuNDE3LTEuMjU0IDIuNzc0LTIuMzQ2IDQuMDA4LTIuNTQzIDIuODQ3LTYuNDMgNC44NDgtMTEuMjQgNS43OC0xLjYuMzE0LTMuMjUyLjQ3LTQuOTEyLjQ3LTcuMTU0IDAtMTIuMjgtMi44NDUtMTIuNDk0LTIuOTdsLS40MzctLjI1MSA1LjIzOC0xMC4zNzYuNDc4LjI3MmMuMDMxLjAxNyAzLjA3NyAxLjczNSA3LjE3NCAxLjczNS45MjcgMCAxLjg0OS0uMDg1IDIuNzQxLS4yNTggMS43ODQtLjM0OCAzLjUyNy0xLjIzNiAzLjM1NS0yLjExOS0uMTctLjg3NS0yLjMwNy0xLjM3Ny00LjU3LTEuOTAzLTQuNzgxLTEuMTE4LTEyLjAwNi0yLjgxNi0xMy40NzctMTAuMzk0LS43MDYtMy42MjQuNDc3LTcuMzA5IDMuMzI3LTEwLjM2NyAyLjYzLTIuODE4IDYuNTE3LTQuODk2IDEwLjY2LTUuNzA0IDEuODEzLS4zNTEgMy42NC0uNTMgNS40My0uNTMgNi4xNjcgMCA5Ljk2IDIuMDc2IDEwLjExOCAyLjE2NGwuMzk4LjIxNy00LjE1OSAxMC43ODItLjUyNy0uMjk5Yy0uMDIyLS4wMTEtMi4yNzYtMS4yNjQtNS44OC0xLjI2NC0xLjA0MiAwLTIuMTA4LjEwNy0zLjE3LjMxLTEuNzQyLjM0Mi0zLjUxNSAxLjI2OC0zLjM0IDIuMTkxLjEzLjY2MiAyLjE2OSAxLjExOCA0LjEzOSAxLjU1NSA0LjU4NCAxLjAzNSAxMS4yODEgMi42MTMgMTMuNDgyIDkuMTI0bC0uMDMzLTI2LjUyNyAxMi41ODItMi40NDcuMDA1IDIuNjNjLjAwMy4yMjggMCAuNDU2LS4wMDguNjc1IDIuMjY1LTMuMTEzIDUuODAzLTUuMzU2IDkuNzg0LTYuMTI1IDEuMTc2LS4yMyAyLjM0LS4zNDYgMy40Ni0uMzQ2IDcuNjg5IDAgMTMuMzI5IDUuNDA1IDE1LjA5IDE0LjQ2Ni4wNDIuMjE5LjAyOC40MzkuMDY3LjY2M2wtLjAwOC0zMi44MzIgMTMuODM5LTIuNjg3LjAzMiAzOC42OTNjLS4wMzUgMS4wMTkuMDY3IDIuMjcuMTgzIDIuODYuMjYzIDEuMzU0IDEuMTEyIDEuNzc1IDIuNzQ2IDEuNDY2LjQ5LS4xMDEuODc0LS4xOTYgMS4xNS0uMjcuMDIzLTQuMjk3IDIuMjktOC4xOTcgNi43MTYtMTEuMzggNS41NjUtNC4wMDMgMTIuNzAyLTUuNzA3IDE1LjUxMS02LjI1bC4wNy0uMDE2YTEzIDEzIDAgMCAwLS4wODgtLjkwNmMtLjQwNi0yLjA4My0xLjkwNi0yLjcwNS00Ljg3MS0yLjEyNS00LjYyLjg5NC0xMC4wNSA1LjQ1NS0xMC4xMDUgNS41bC0uNTA1LjQyOC01LjA5NC0xMC4wNDguMzI3LS4yNjRjLjI4OC0uMjQgNy4yMTUtNS44NDQgMTUuNjc5LTcuNDg5YTI0LjQgMjQuNCAwIDAgMSA0LjY2Mi0uNDZjNC4yNzEgMCAxMS42OSAxLjMwOCAxMy4zOTQgMTAuMDY5LjIgMS4wMzIuMzIgMi4yOS4zNiAzLjg1NWwuMDQ2IDE3LjkxMiA0LjUzNS04Ljk5NS40OC4yNzVjLjAzMi4wMTggMy4wNzIgMS43MzcgNy4xNzEgMS43MzcuOTI2IDAgMS44NS0uMDg0IDIuNzQyLS4yNjUgMS43ODItLjM0MyAzLjUyNy0xLjIzIDMuMzU0LTIuMTEtLjE3LS44NzctMi4zMDYtMS4zNzctNC41NzItMS45MDgtNC43ODEtMS4xMjEtMTItMi44MTItMTMuNDc2LTEwLjM5Ny0uNzAyLTMuNjIzLjQ3OS03LjMwNiAzLjMzLTEwLjM2IDIuNjI3LTIuODIgNi41MTItNC44OTggMTAuNjU4LTUuNzAyYTI4IDI4IDAgMCAxIDUuNDMtLjUzNWM2LjE2NiAwIDkuOTYzIDIuMDc1IDEwLjEyIDIuMTY1bC4zOTcuMjIxLTQuMTYgMTAuNzc2LS41MjctLjI5N2MtLjAyNC0uMDEzLTIuMjc4LTEuMjY0LTUuODgtMS4yNjQtMS4wNDEgMC0yLjEwOC4xMDUtMy4xNjguMzEyLTEuNzQ1LjMzNy0zLjUyIDEuMjczLTMuMzQxIDIuMTg4LjEzLjY2IDIuMTY1IDEuMTE2IDQuMTM4IDEuNTU4IDQuNjIxIDEuMDM4IDExLjM4NSAyLjYzNSAxMy41MzIgOS4yOHYtNDIuMDVsMTMuODQtMi42OTItLjAwNSAxNy45OGMwIC40NzQtLjAwNy45MTktLjAxNSAxLjMxMyAyLjExLTMuMzA3IDYuMTM3LTYuMDUyIDEwLjMxLTYuODYzYTE5LjcgMTkuNyAwIDAgMSAzLjcyNy0uMzhjNC4xNzggMCA5LjQ3OCAxLjYwNSAxMC45NiA5LjI2LjI2OCAxLjM2OC4zMSAyLjkzLjMxNCA0LjQxNm01LjM2NyAxMS42NzQgMTIuNzM3LTIuNDcuMDExIDEyLjU3NC0xMi43MzMgMi40NzRaTTQyNiAyMzEuNzM4VjEyMC44OTRsLTYuNzkzIDEuMjctMjQxLjQxNyA0NS4yMjItNC42NzguODc2djExMC44NDZsNi43OTEtMS4yNyAyNDEuNDItNDUuMjJaIi8+PC9zdmc+', - title: 'Splash!', - }, - { - logo: 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNDAwIj48cGF0aCBkPSJNMjI2LjI3MSAyNTVjLTQuNTc5LS4wMTYtOS4zNzUtMS45Mi0xMS42NzEtNS4yLTQtNS43LS40LTEzLjggNi4xLTEzLjggNi4xIDAgOS42IDYuOCA1LjYgMTEuMi0yLjEgMi40LTEuMSAzLjIgMi40IDIuMSAyLjEtLjYgMy42LTIuNSA2LTcuMyAxLjgtMy42IDMuMy03LjIgMy4zLTguMiAwLTEuOC0xNi45LTQ2LjgtMTkuNS01MS44LTEtMi0yLjYtMy4zLTQuNS0zLjctMi45LS41LTQtMi45LTIuMy00LjcuNC0uMyA2LjgtLjUgMTQuMi0uNCAxMy4yLjMgMTMuNi40IDEzLjkgMi41LjMgMS45LS4xIDIuMy0yLjYgMi4zLTUuOSAwLTUuOCAxLjUuOCAxOC43IDMuNCA4LjcgNi40IDE2LjEgNi44IDE2LjUuOS45IDExLjItMjcuOSAxMS4yLTMxLjMgMC0yLjgtMS42LTMuOS01LjYtMy45LTEuOSAwLTIuNC0uNS0yLjQtMi41VjE3M2gxMWMxMC45IDAgMTEgMCAxMSAyLjQgMCAxLjctLjcgMi42LTIuMyAzLTIuOS43LTMuMSAxLTE2LjYgMzcuMy0xMS4xIDI5LjktMTMuNSAzNC45LTE4LjIgMzcuNy0xLjg5IDEuMS00LjIzIDEuNjEtNi42MjkgMS42bS00Mi40MzctMjEuMDRjLTYuMDMuMDA0LTEyLjE0Ny0xLjYzMS0xNi44MzQtNC45Ni0zLjctMi42LTQuOC0yLjUtNS42LjUtLjUgMS45LTEuMyAyLjUtMy41IDIuNUgxNTV2LTMxaDIuOWMyLjUgMCAzIC41IDMuNiAzLjYuOSA1LjMgNC43IDEzLjQgOC4xIDE3LjMgNy41IDguOSAyMS4yIDkuMiAyNi42LjcgMS41LTIuNSAxLjgtNC41IDEuNi0xMC0uNC02LjUtLjYtNy00LjQtMTAuNi0yLjgtMi42LTYuOC00LjctMTMuNC03LjEtMTguMS02LjQtMjMuNS0xMi40LTIzLjUtMjYgMC02LjcuNC04LjEgMy0xMi40IDMuNC01LjUgNi40LTggMTIuMS0xMCA3LjMtMi42IDE2LjktMS4xIDIzLjcgMy43IDEuNiAxLjEgMyAxLjkgMy4xIDEuNy4yLS4yLjktMS40IDEuNS0yLjcuNi0xLjIgMi4xLTIuMiAzLjEtMi4yIDEuOSAwIDIgLjggMiAxNC41IDAgMTMuOC0uMSAxNC41LTIgMTQuNS0xLjUgMC0yLjMtMS4yLTMuNS01LjMtMi4yLTcuNy03LjQtMTUuNy0xMS41LTE3LjktMS45LTEtNS41LTEuOC04LjItMS44LTguNyAwLTE0LjMgNy44LTExLjggMTYuOCAxLjQgNS40IDYuMSA4LjkgMTcuMyAxMy4yIDE5LjQgNy40IDI1LjcgMTQuOCAyNC40IDI5LjEtLjUgNi00LjEgMTQuMS03LjkgMTcuNi00LjQwOSA0LjE0NC0xMS4xMzIgNi4yNTUtMTcuOTY2IDYuMjZtMjAzLjE1LS4wNjdjLTcuMjMuMDYxLTEyLjI2Mi0yLjI0Ny0xNi44ODQtNy41OTMtNS41LTYuMi03LjUtMTIuNy03LjQtMjMuOC4xLTE0LjIgNS42LTI1LjEgMTQuNy0yOS4xIDQuOC0yLjEgMTQuMi0xLjcgMTkuMi43IDcuMiAzLjQgMTIuMiAxMi40IDEzLjggMjQuMWwuNiA0LjhoLTM1LjJsLjcgNi43YzEuNCAxMi44IDUuMiAxOC4zIDEyLjkgMTguMyA1LjQgMCA5LjgtMi44IDEzLjEtOC40IDMtNSAzLjMtNS4yIDYtMy4zIDEuNyAxLjMgMS42IDEuNy0xLjggNi44LTUuMSA3LjUtOS40IDEwLjItMTcuNCAxMC43cS0xLjE5NC4wODQtMi4zMTYuMDkzbS00NS44Ny0uMzE2Yy0zLjMwMy0uMDMyLTYuNTQtLjY1OC04LjQxNS0xLjg3Ny01LjktMy44LTYuMTk5LTUuMS02LjY5OS0yOS43bC0uNS0yMi41LTQuMi0uM2MtMy43LS4zLTQuMy0uNi00LjMtMi42IDAtMS43IDEuMS0yLjggNS4xLTQuNSA1LjgtMi43IDguMi02IDkuOS0xMy41LjYtMi44IDEuMy01LjcgMS41LTYuNC4zLS42IDEuNC0xLjIgMi41LTEuMiAxLjkgMCAyIC42IDIgMTF2MTFoMTd2NmgtMTd2MjEuMmMwIDIyLjIuNiAyNS45IDQuNCAyNi42IDUuNiAxLjEgOC42LTIuNiA4LjYtMTAuOCAwLTQuOS4xLTUgMy01IDMgMCAzIDAgMyA1LjcgMCA2LjctMi4xIDExLjctNi4zIDE0LjctMi4wMiAxLjQ4Ny01Ljg0NSAyLjIxMy05LjU4NyAyLjE3N00yOTQgMjMzLjM5OWMtNS4zIDAtNy41LS40OTktMTEuNC0yLjY5OS0yLjctMS41LTUtMi43LTUuMS0yLjctLjIgMC0uNS45LS44IDItLjMgMS4yLTEuNCAyLTIuNiAyLTIgMC0yLjEtLjUtMi4xLTExIDAtMTAuMi4xLTExIDEuOS0xMSAxLjQgMCAyLjcgMS42IDQuNiA1LjcgMy4zIDcuMyA2LjkgMTEuMSAxMS44IDEyLjQgNy4xIDEuOSAxMi43LTEuOCAxMi43LTguNnMtLjgtNy40LTE5LjItMTUuMmMtMTEuNC00LjgtMTQuOS0xOC40LTYuOC0yNi44IDEuNy0xLjggNC42LTMuNyA2LjMtNC4zIDUuOC0yIDE0LjQtLjYgMjEuOCAzLjUuNC4yLjktLjUgMS4yLTEuN3MxLjMtMiAyLjYtMmMyIDAgMi4xLjUgMi4xIDEwIDAgOS43LS4xIDEwLTIuMyAxMC0xLjggMC0yLjYtMS00LTQuOS0yLjQtNi45LTcuNC0xMS4xLTEzLjItMTEuMS0zLjUgMC00LjguNS02LjQgMi42LTQuOCA2LjItMS4yIDExLjUgMTAuMiAxNS4zIDEzLjYgNC42IDE4LjcgMTAgMTguNyAyMC4yIDAgMTEtNy45IDE4LjMtMjAgMTguM20yMzYgMGMtNS4zIDAtNy41LS40OTktMTEuNC0yLjY5OS0yLjctMS41LTUtMi43LTUuMS0yLjctLjIgMC0uNS45LS44IDItLjMgMS4yLTEuNCAyLTIuNiAyLTIgMC0yLjEtLjUtMi4xLTExIDAtMTAuMi4xLTExIDEuOS0xMSAxLjQgMCAyLjcgMS42IDQuNiA1LjcgMy4zIDcuMyA2LjkgMTEuMSAxMS43IDEyLjMgNC44IDEuMyA4LjMuNCAxMC44LTIuNyAyLjQtMyAyLjYtOSAuNS0xMi0uOC0xLjEtNS45LTQtMTEuNC02LjMtMTQuOC02LjItMTkuOC0xMi45LTE3LjItMjIuOCAxLjItNC4zIDYuMS05LjQgMTAuNi0xMS4xIDUuNC0xLjkgMTQuMi0uNSAyMS42IDMuNi40LjIuOS0uNSAxLjItMS43czEuMy0yIDIuNi0yYzIgMCAyLjEuNSAyLjEgMTAgMCA5LjctLjEgMTAtMi4zIDEwLTEuOCAwLTIuNi0xLTQtNC45LTIuNC02LjgtNy40LTExLjEtMTIuOS0xMS4xLTUuMyAwLTguOCAzLTguOCA3LjYgMCA0LjIgMy45IDcuNSAxMi4zIDEwLjMgMTMuNCA0LjUgMTguNyAxMC4xIDE4LjcgMTkuNyAwIDExLjQtNy44IDE4LjgtMjAgMTguOG0tNDY2LTEuMzk4di0zYzAtMi44LjItMyA0LjEtMyAzLjEgMCA0LjctLjYgNy0yLjlMNzggMjIwLjJ2LTY3LjVsLTQuNi43Yy0xMC4xIDEuMy0xNi42IDcuOC0xOCAxNy44LS42IDQuMi0xIDQuOC0zIDQuOEg1MHYtMjloNzF2MjloLTIuNWMtMi4yIDAtMi41LS40LTIuNS0zLjUgMC00LjUtMi40LTEwLjItNS43LTEzLjctMi45LTMtMTEtNi4xLTE0LjUtNS42bC0yLjMuMy0uMyAyOS41Yy0uMiAxNi4yIDAgMzEuNC4zIDMzLjcuOSA2LjEgMy4zIDguNiA5LjEgOS4yIDQuNC41IDQuOS45IDUuMiAzLjNsLjMgMi44em0zNjQuNSAwYy0xMy44IDAtMTQuNS0uMS0xNC41LTIgMC0xLjIuNy0yIDEuOC0yIDEgMCAyLjgtLjcwMiA0LTEuNjAyIDIuMi0xLjUgMi4yLTEuODk5IDIuMi0yMy43OTkgMC0yMy44LS4xLTI0LjEtNS0yNC44LTEuNy0uMi0yLjYtMS0yLjgtMi42LS4zLTIuMi0uMS0yLjIgOS43LTIuMkg0MzR2Ni40bDIuOC0yLjdjMS41LTEuNCAzLjgtMy4xIDUuMi0zLjYgNi0yLjYgMTcuMi43IDIwIDUuOC44IDEuNyAxLjMgMS41IDQuOS0yIDguMS03LjYgMjItNS45IDI2LjQgMy40IDEuNCAyLjkgMS43IDYuOSAxLjcgMjMuMiAwIDExLjEuNCAyMC40IDEgMjEuNS41IDEgMi4zIDIuMSA0IDIuNSAyLjEuNSAzIDEuMyAzIDIuNiAwIDEuNy0uOCAxLjktOS45IDEuOWgtOS45bC0uNC0yMy44Yy0uMy0yMC45LS41LTI0LjEtMi4xLTI2LjYtMS42LTIuMy0yLjQtMi43LTUuOS0yLjQtNC44LjMtNy40IDMuMS04LjggOS40LTEuMyA1LjMtMS4yIDM0LjEgMCAzNi40LjUgMSAyLjMgMi4xIDQgMi41IDIuMS41IDMgMS4zIDMgMi42IDAgMS44LS44IDEuOS0xMC41IDEuOUg0NTJ2LTI0LjVjMC0yMy4yLS4xLTI0LjYtMi0yNi41LTIuOC0yLjgtOC4xLTIuNi0xMC44LjMtMy41IDMuNy00LjIgOC00LjIgMjYuNCAwIDE2LjYuMSAxNy4yIDIuMiAxOC43IDEuMi45IDMgMS42IDQgMS42IDEuMSAwIDEuOC44IDEuOCAyIDAgMS45LS43IDItMTQuNSAyTTUwIDIwM3YtMTdoMTd2MTd6bTU0IDB2LTcuOGMwLTQuMy4zLTguMi43LTguNS4zLS40IDQuMi0uNyA4LjUtLjdoNy44djE3em0yOTMuMy00LjktLjctNS42Yy0uOC02LjktMy4zLTEzLjMtNS43LTE0LjUtNy0zLjgtMTMuNSAzLTE0LjEgMTVsLS4zIDQuNSAxMC40LjI5OXptMTQ3LjMzLTI1LjIyYTIuNCAyLjQgMCAwIDEtLjgyOC0uMThjLS44LS4zLS41LS42LjYtLjYgMS4xLS4xIDEuNjk4LjIgMS4yOTguNS0uMTg3LjE4OC0uNjEuMjk3LTEuMDcuMjhtLTMxOS41NDEtLjAzYy0yLjUzOCAwLTUuMDM5LS4wNS02Ljg4OS0uMTUtMy43LS4yLS4zOTktLjMgNy4zMDEtLjNzMTAuNy4yIDYuNy4zYy0yIC4xLTQuNTc1LjE1LTcuMTEyLjE1bTMzLjkyNCAwYy0yLjA4OCAwLTQuMTYxLS4wNS01LjcxMS0uMTUtMy4yLS4yLS42MDEtLjMgNS42OTktLjNzOC45LjEgNS44LjNjLTEuNi4xLTMuNy4xNS01Ljc4OC4xNW01MCAwYy0uNDYzIDAtLjkxMS0uMDUtMS4yMTEtLjE1LS43LS4zLS4yMDEtLjUgMS4xOTktLjVzMS45LjIgMS4zLjVjLS4zNS4xLS44MjYuMTUtMS4yODguMTVtMzggMGMtMS41MzggMC0zLjA2MS0uMDUtNC4yMTEtLjE1LTIuNC0uMi0uNTAxLS40IDQuMTk5LS40czYuNi4yIDQuMy40Yy0xLjIuMS0yLjc1LjE1LTQuMjg4LjE1Ii8+PC9zdmc+', - title: 'T-Systems', - }, - ], - anchor: 'customers', - _status: 'published', -} diff --git a/src/payload/endpoints/data/resumeExperience.ts b/src/payload/endpoints/data/resumeExperience.ts deleted file mode 100755 index 69146fde..00000000 --- a/src/payload/endpoints/data/resumeExperience.ts +++ /dev/null @@ -1,945 +0,0 @@ -export default { - title: 'Experience', - caption: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Over the past 10+ years, I’ve refined my skills across diverse development environments. My primary focus has been on building scalable, high-performing, and user-friendly web applications using React.js and Next.js. I thrive in collaborative teams and am equally comfortable leading projects or contributing within an agile setup.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Since I was developing UI libraries based on atomic design principles even before the rise of modern JavaScript libraries, I often took on the role of Frontend Lead. In this position, I served as the key point of contact between clients, design teams, and developers.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Additionally, my background in system administration gives me a unique perspective, allowing me to bridge the gap between operations and software engineering with ease. I also enjoy supporting beginners or junior developers, sharing my knowledge and experiences to help them grow in their careers.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - ], - direction: 'ltr', - }, - }, - entries: [ - { - id: '1', - title: 'Senior TypeScript Engineer', - employer: 'Freelance', - startDate: '2022-01-01T12:00:00.000Z', - endDate: null, - richText: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - tag: 'ul', - type: 'list', - start: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'listitem', - value: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Supported development teams in adopting and building expertise in a React.js / Next.js tech stack.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 2, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Mentored apprentices and junior developers in an agency with limited resources for training.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 3, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Designed and developed a job-queue-based application to fetch, aggregate, and push thousands of daily invoices from a billing software API into an ERP system.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - listType: 'bullet', - direction: 'ltr', - }, - ], - direction: 'ltr', - }, - }, - technologies: [ - { - id: 'react-js', - label: 'React.js', - }, - { - id: 'next-js', - label: 'Next.js', - }, - { - id: 'graph-ql', - label: 'GraphQL', - }, - { - id: 'node-js', - label: 'Node.js', - }, - { - id: 'express', - label: 'Express', - }, - { - id: 'bull-mq', - label: 'BullMQ', - }, - { - id: 'kubernetes', - label: 'Kubernetes', - }, - { - id: 'type-script', - label: 'TypeScript', - }, - { - id: 'redis', - label: 'Redis', - }, - { - id: 'puppeteer', - label: 'Puppeteer', - }, - ], - }, - { - id: '2', - title: 'Co-Founder ', - employer: 'Mülheim Modular UG', - startDate: '2021-05-01T12:00:00.000Z', - endDate: null, - richText: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - tag: 'ul', - type: 'list', - start: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'listitem', - value: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Developed commerce solutions using a headless SaaS approach and serverless infrastructure with Cloudflare.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 2, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Built microservices to extract data from Shopify and handle custom hooks.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - listType: 'bullet', - direction: 'ltr', - }, - ], - direction: 'ltr', - }, - }, - technologies: [ - { - id: 'shopify', - label: 'Shopify', - }, - { - id: 'cloudflare', - label: 'Cloudflare', - }, - { - id: 'vercel', - label: 'Vercel', - }, - { - id: 'serverless-functions', - label: 'ServerlessFunctions', - }, - ], - }, - { - id: '3', - title: 'Senior JavaScript Developer', - employer: 'TWT Interactive GmbH', - startDate: '2020-10-01T12:00:00.000Z', - endDate: '2021-10-01T12:00:00.000Z', - richText: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - tag: 'ul', - type: 'list', - start: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'listitem', - value: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Led development for a model-driven React app enabling clients to define backend structures dynamically.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 2, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Built custom UI libraries for various clients using React, Emotion, and Tailwind.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 3, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Provided internal coaching on modern JavaScript libraries, frameworks, and TypeScript.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - listType: 'bullet', - direction: 'ltr', - }, - ], - direction: 'ltr', - }, - }, - technologies: [ - { - id: 'react-js', - label: 'React.js', - }, - { - id: 'type-script', - label: 'TypeScript', - }, - { - id: 'emotion', - label: 'Emotion', - }, - { - id: 'styled-components', - label: 'StyledComponents', - }, - { - id: 'styled-system', - label: 'StyledSystem', - }, - { - id: 'next-js', - label: 'Next.js', - }, - { - id: 'node-js', - label: 'Node.js', - }, - { - id: 'serverless-function', - label: 'ServerlessFunction', - }, - { - id: 'cypress-io', - label: 'Cypress.io', - }, - { - id: 'testing-library', - label: 'TestingLibrary', - }, - ], - }, - { - id: '4', - title: 'Frontend Developer', - employer: 'Ambient Innovation GmbH', - startDate: '2018-09-01T12:00:00.000Z', - endDate: '2020-09-01T12:00:00.000Z', - richText: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - tag: 'ul', - type: 'list', - start: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'listitem', - value: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Acted as Frontend Lead and primary point of contact for product owners in agile React.js and Next.js projects.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 2, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Mentored computer science students at the University of Cologne through practical projects.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 3, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Contributed frontend-related topics to company-wide OpenSpaces.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - listType: 'bullet', - direction: 'ltr', - }, - ], - direction: 'ltr', - }, - }, - technologies: [ - { - id: 'react-js', - label: 'React.js', - }, - { - id: 'type-script', - label: 'TypeScript', - }, - { - id: 'next-js', - label: 'Next.js', - }, - { - id: 'emotion', - label: 'Emotion', - }, - { - id: 'styled-components', - label: 'StyledComponents', - }, - { - id: 'cypress-io', - label: 'Cypress.io', - }, - { - id: 'rancher', - label: 'Rancher', - }, - { - id: 'docker', - label: 'Docker', - }, - { - id: 'kubernetes', - label: 'Kubernetes', - }, - { - id: 'java-script', - label: 'JavaScript', - }, - { - id: 'enzyme', - label: 'Enzyme', - }, - { - id: 'testing-library', - label: 'TestingLibrary', - }, - ], - }, - { - id: '5', - title: 'Frontend Developer ', - employer: 'd-SIRE GmbH & Co. KG', - startDate: '2016-10-01T12:00:00.000Z', - endDate: '2018-09-01T12:00:00.000Z', - richText: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - tag: 'ul', - type: 'list', - start: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'listitem', - value: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Developed patterns following atomic design principles using PatternLab.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 2, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Built an Angular.js-based dynamic planner for garden and terrace projects.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 3, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Assisted in optimizing internal structures and spreading awareness for efficient processes.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - listType: 'bullet', - direction: 'ltr', - }, - ], - direction: 'ltr', - }, - }, - technologies: [ - { - id: 'patternlab', - label: 'Patternlab', - }, - { - id: 'storybook', - label: 'Storybook', - }, - { - id: 'react-js', - label: 'React.js', - }, - { - id: 'java-script', - label: 'JavaScript', - }, - { - id: 'angular-js', - label: 'AngularJS', - }, - { - id: 'cypress-io', - label: 'Cypress.io', - }, - { - id: 'grunt', - label: 'Grunt', - }, - { - id: 'gulp', - label: 'Gulp', - }, - { - id: 'webpack', - label: 'Webpack', - }, - { - id: 'vagrant', - label: 'Vagrant', - }, - { - id: 'enzyme', - label: 'Enzyme', - }, - ], - }, - { - id: '6', - title: 'Web Developer', - employer: 'Moebelconcept24.de', - startDate: '2016-02-01T12:00:00.000Z', - endDate: '2016-10-01T12:00:00.000Z', - richText: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - tag: 'ul', - type: 'list', - start: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'listitem', - value: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Created templates for in-house and external shop projects using HTML5, CSS3, JavaScript/jQuery, and PHP.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 2, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Introduced Git + GitLab and DevOps workflows into the company.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 3, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Established development processes for better team collaboration.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - listType: 'bullet', - direction: 'ltr', - }, - ], - direction: 'ltr', - }, - }, - technologies: [ - { - id: 'php', - label: 'PHP', - }, - { - id: 'css', - label: 'CSS', - }, - { - id: 'java-script', - label: 'JavaScript', - }, - { - id: 'grunt', - label: 'Grunt', - }, - { - id: 'gulp', - label: 'Gulp', - }, - { - id: 'git', - label: 'Git', - }, - ], - }, - { - id: '7', - title: 'IT Administration', - employer: 'Intro GmbH & Co. KG / Intro Verlag', - startDate: '2013-08-01T12:00:00.000Z', - endDate: '2016-01-01T12:00:00.000Z', - richText: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - tag: 'ul', - type: 'list', - start: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'listitem', - value: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Administered multiple Debian servers hosted by Hetzner.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 2, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Planned office cabling for a major office relocation project.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 3, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Supported offices in Cologne and Berlin with over 100 employees.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 4, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Developed a social media insights dashboard.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - listType: 'bullet', - direction: 'ltr', - }, - ], - direction: 'ltr', - }, - }, - technologies: [ - { - id: 'icinga-2', - label: 'Icinga2', - }, - { - id: 'docker', - label: 'Docker', - }, - { - id: 'python', - label: 'Python', - }, - { - id: 'php', - label: 'PHP', - }, - { - id: 'debian', - label: 'Debian', - }, - { - id: 'centos', - label: 'Centos', - }, - { - id: 'varnish', - label: 'Varnish', - }, - { - id: 'j-query', - label: 'jQuery', - }, - ], - }, - ], - anchor: 'experience', - _status: 'published', -} diff --git a/src/payload/endpoints/data/resumeHero.ts b/src/payload/endpoints/data/resumeHero.ts deleted file mode 100755 index 5d05953f..00000000 --- a/src/payload/endpoints/data/resumeHero.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default { - title: 'Hello 👋\nI am Daniel', - background: '', - portrait: '', - _status: 'published', -} diff --git a/src/payload/endpoints/data/resumeProjects.ts b/src/payload/endpoints/data/resumeProjects.ts deleted file mode 100755 index a47b66c9..00000000 --- a/src/payload/endpoints/data/resumeProjects.ts +++ /dev/null @@ -1,509 +0,0 @@ -export default { - title: 'Projects', - - caption: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'This section showcases a handpicked selection of projects that I consider particularly noteworthy—either due to their complexity, impact, or the challenges they presented. While this is only a small snapshot of my work, more projects will be added over time as I continue to refine this portfolio.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - type: 'linebreak', - version: 1, - }, - { - mode: 'normal', - text: ' In the future, I also aim to use this space to document smaller projects, experiments, and ideas, offering deeper insights into my development process and creative problem-solving.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - ], - direction: 'ltr', - }, - }, - entries: [ - { - headline: 'Accessibility Plugin for MediaElement.js', - subline: 'Aktion Mensch', - richText: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Development of a MediaElement.js plugin designed to enhance video accessibility, commissioned and supported by Aktion Mensch, a leading German association promoting inclusion awareness.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Key Features:', - type: 'text', - style: '', - detail: 0, - format: 1, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 1, - }, - { - tag: 'ul', - type: 'list', - start: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'listitem', - value: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Sign Language Integration', - type: 'text', - style: '', - detail: 0, - format: 1, - version: 1, - }, - { - mode: 'normal', - text: ': Adds functionality to include an additional video source for sign language interpretation, allowing users to switch to a sign language video stream for improved understanding.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 2, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Audio Description Integration', - type: 'text', - style: '', - detail: 0, - format: 1, - version: 1, - }, - { - mode: 'normal', - text: ': Incorporates an additional audio source to enable switching to audio descriptions, catering to visually impaired users by providing narrated descriptions of visual content.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 3, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Dynamic Switching', - type: 'text', - style: '', - detail: 0, - format: 1, - version: 1, - }, - { - mode: 'normal', - text: ':', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - mode: 'normal', - text: ' ', - type: 'text', - style: '', - detail: 0, - format: 1, - version: 1, - }, - { - mode: 'normal', - text: 'Facilitates seamless switching between video and audio sources during playback, enabling users to customize their viewing experience according to their accessibility needs.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 4, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Inclusive Consumption', - type: 'text', - style: '', - detail: 0, - format: 1, - version: 1, - }, - { - mode: 'normal', - text: ': Enhances the accessibility of video content by allowing users to engage with videos in the most suitable format for their needs, extending beyond traditional subtitle options.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - listType: 'bullet', - direction: 'ltr', - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Promotion:', - type: 'text', - style: '', - detail: 0, - format: 1, - version: 1, - }, - { - type: 'linebreak', - version: 1, - }, - { - mode: 'normal', - text: "The plugin was showcased on Aktion Mensch's website, highlighting its effectiveness in improving video accessibility. For more details, visit the ", - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - type: 'link', - fields: { - url: 'https://www.aktion-mensch.de/inklusion/barrierefreiheit/barrierefreie-videos-fuer-alle', - newTab: true, - linkType: 'custom', - }, - format: '', - indent: 0, - version: 3, - children: [ - { - mode: 'normal', - text: 'Aktion Mensch website', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - mode: 'normal', - text: '.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - ], - direction: 'ltr', - }, - }, - image: '', - }, - { - headline: 'Implementation of latest React.js Next.js and Payload CMS', - subline: 'Personal Website', - richText: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'After being involved in a Node.js project for the last two years, I wanted to bring myself back up to date with the development of my own website.', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Key Features:', - type: 'text', - style: '', - detail: 0, - format: 1, - version: 1, - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 1, - }, - { - tag: 'ul', - type: 'list', - start: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - type: 'listitem', - value: 1, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Latest Technologies: ', - type: 'text', - style: '', - detail: 0, - format: 1, - version: 1, - }, - { - mode: 'normal', - text: ' the latest versions of React.js, Next.js and PayloadCMS were used for development to work directly with the latest APIs', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 2, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'App Router Strategy: ', - type: 'text', - style: '', - detail: 0, - format: 1, - version: 1, - }, - { - mode: 'normal', - text: 'usage of Next.js App Router with segmented Routes and Caching ', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - { - type: 'listitem', - value: 3, - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Seamless Integrated Backend: ', - type: 'text', - style: '', - detail: 0, - format: 1, - version: 1, - }, - { - mode: 'normal', - text: 'The latest PayloadCMS version was used as the backend for data maintenance, as it integrates seamlessly with Next.js', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - listType: 'bullet', - direction: 'ltr', - }, - { - type: 'paragraph', - format: '', - indent: 0, - version: 1, - children: [ - { - mode: 'normal', - text: 'Please feel free to have a further look on the codebase at ', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - { - type: 'autolink', - fields: { - url: 'https://github.com/danielheene/website', - linkType: 'custom', - }, - format: '', - indent: 0, - version: 2, - children: [ - { - mode: 'normal', - text: 'https://github.com/danielheene/website', - type: 'text', - style: '', - detail: 0, - format: 0, - version: 1, - }, - ], - direction: 'ltr', - }, - ], - direction: 'ltr', - textStyle: '', - textFormat: 0, - }, - ], - direction: 'ltr', - }, - }, - image: '', - }, - ], - anchor: 'projects', - _status: 'published', -} diff --git a/src/payload/endpoints/data/settingsNavigation.ts b/src/payload/endpoints/data/settingsNavigation.ts deleted file mode 100755 index d9424560..00000000 --- a/src/payload/endpoints/data/settingsNavigation.ts +++ /dev/null @@ -1,18 +0,0 @@ -export default { - headerNavItems: [], - footerNavItems: [ - { - link: { - type: 'reference', - newTab: null, - reference: { - relationTo: 'pages', - value: '', - }, - url: null, - label: 'Imprint', - }, - }, - ], - _status: 'published', -} diff --git a/src/payload/endpoints/seed.ts b/src/payload/endpoints/seed.ts deleted file mode 100755 index f2a2dcc0..00000000 --- a/src/payload/endpoints/seed.ts +++ /dev/null @@ -1,322 +0,0 @@ -import { File, type PayloadHandler, PayloadRequest } from 'payload' - -import resumeHeroData from './data/resumeHero' -import resumeAboutMeData from './data/resumeAboutMe' -import resumeProjectsData from './data/resumeProjects' -import resumeExperienceData from './data/resumeExperience' -import resumeCustomersData from './data/resumeCustomers' -import resumeContactData from './data/resumeContact' -import imprintData from './data/imprint' -import settingsNavigationData from './data/settingsNavigation' - -export const seedHandler: PayloadHandler = async (req): Promise => { - const { payload, user } = req - - if (!user) { - return Response.json({ error: 'Unauthorized' }, { status: 401 }) - } - - try { - const fetchFileByURL = createFileFetcher(req) - /** - * RESUME HERO - */ - payload.logger.info('-- Seeding: Resume Hero') - - const { id: resumeHeroBackgroundId } = await payload.create({ - collection: 'media', - data: { - alt: 'Resume Page Hero Section Background', - _status: 'published', - }, - file: await fetchFileByURL({ - src: '/seed/resumeHero-background.webp', - name: 'resume-hero-background.webp', - }), - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' resumeHero background image created') - - const { id: resumeHeroPortraitId } = await payload.create({ - collection: 'media', - data: { - alt: 'Resume Page Hero Section Portrait', - _status: 'published', - }, - file: await fetchFileByURL({ - src: '/seed/resumeHero-portrait.webp', - name: 'resume-hero-portrait.webp', - }), - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' resumeHero portrait image created') - - await payload.updateGlobal({ - slug: 'resumeHero', - data: JSON.parse( - JSON.stringify(resumeHeroData) - .replace(/""/g, String(resumeHeroBackgroundId)) - .replace(/""/g, String(resumeHeroPortraitId)), - ), - depth: 0, - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' resumeHero data updated') - payload.logger.info('') - - /** - * RESUME ABOUT ME - */ - payload.logger.info('-- Seeding: Resume AboutMe') - - const { id: resumeAboutMePortraitId } = await payload.create({ - collection: 'media', - data: { - alt: 'Resume Page About Me Section Portrait', - _status: 'published', - }, - file: await fetchFileByURL({ - src: '/seed/resumeAboutMe-portrait.webp', - name: 'resume-about-me-portrait.webp', - }), - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' resumeAboutMe portrait image created') - - await payload.updateGlobal({ - slug: 'resumeAboutMe', - data: JSON.parse( - JSON.stringify(resumeAboutMeData).replace( - /""/g, - String(resumeAboutMePortraitId), - ), - ), - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' resumeAboutMe data updated') - payload.logger.info('') - - /** - * RESUME EXPERIENCE - */ - payload.logger.info('-- Seeding: Resume Experience') - - await payload.updateGlobal({ - slug: 'resumeExperience', - data: JSON.parse(JSON.stringify(resumeExperienceData)), - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' resumeExperience data updated') - payload.logger.info('') - - /** - * RESUME PROJECTS - */ - payload.logger.info('-- Seeding: Resume Projects') - - const { id: resumeProjectsImage1Id } = await payload.create({ - collection: 'media', - data: { - alt: 'Aktion Mensch download page screenshot', - _status: 'published', - }, - file: await fetchFileByURL({ - src: '/seed/resumeProjects-image1.webp', - name: 'aktion-mensch-screenshot.webp', - }), - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' resumeProjects image1 uploaded') - - const { id: resumeProjectsImage2Id } = await payload.create({ - collection: 'media', - data: { - alt: 'screenshot of the admin dashboard for my portfolio website', - _status: 'published', - }, - file: await fetchFileByURL({ - src: '/seed/resumeProjects-image2.webp', - name: 'personal-website-screenshot.webp', - }), - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' resumeProjects image2 uploaded') - - await payload.updateGlobal({ - slug: 'resumeProjects', - data: JSON.parse( - JSON.stringify(resumeProjectsData) - .replace(/""/g, String(resumeProjectsImage1Id)) - .replace(/""/g, String(resumeProjectsImage2Id)), - ), - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' resumeProjects data updated') - payload.logger.info('') - - /** - * RESUME CUSTOMERS - */ - payload.logger.info('-- Seeding: Resume Customers') - - await payload.updateGlobal({ - slug: 'resumeCustomers', - data: JSON.parse(JSON.stringify(resumeCustomersData)), - context: { - isSeedContext: true, - }, - }) - payload.logger.info(' resumeCustomers data updated') - payload.logger.info('') - - /** - * RESUME CONTACT - */ - payload.logger.info('-- Seeding: Resume Contact') - - await payload.updateGlobal({ - slug: 'resumeContact', - data: JSON.parse(JSON.stringify(resumeContactData)), - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' resumeContact data updated') - payload.logger.info('') - - /** - * PAGES - */ - payload.logger.info('-- Seeding: Pages') - - await payload.delete({ - collection: 'pages', - where: { id: { exists: true } }, - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' previous pages deleted') - - const { id: imprintHeroId } = await payload.create({ - collection: 'media', - data: { - alt: 'Imprint Page Hero Image', - _status: 'published', - }, - file: await fetchFileByURL({ - src: '/seed/imprint-hero.webp', - name: 'imprint-hero.webp', - }), - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' imprint page hero image uploaded') - - const { id: imprintPageId } = await payload.create({ - collection: 'pages', - data: JSON.parse( - JSON.stringify(imprintData).replace(/""/g, String(imprintHeroId)), - ), - context: { - isSeedContext: true, - }, - }) - payload.logger.info(' imprint page data updated') - payload.logger.info('') - - /** - * SETTINGS NAVIGATION - */ - payload.logger.info('-- Seeding: Settings Navigation') - - await payload.updateGlobal({ - slug: 'settingsNavigation', - data: JSON.parse( - JSON.stringify(settingsNavigationData).replace( - /""/g, - String(imprintPageId), - ), - ), - context: { - isSeedContext: true, - }, - }) - - payload.logger.info(' settingsNavigation data updated') - payload.logger.info('') - - return Response.json({ success: true }) - } catch (error: unknown) { - const message = error instanceof Error ? error.message : 'Unknown error' - payload.logger.error(message) - return Response.json({ success: false, error: message }, { status: 500 }) - } -} - -/** - * Factory function to create a file fetcher that retrieves a File from public seed folder - * - * @param {PayloadRequest} req - The payload request containing the URL and headers. - * @returns {function(string): Promise} - Returns a function that fetches a file - * by its name and resolves to a `File` object. - */ -const createFileFetcher = ( - req: PayloadRequest, -): (({ src, name }: { src: string; name: string }) => Promise) => { - const { origin } = new URL(req.url) - const requestInit: RequestInit = { - headers: new Headers(req.headers), - credentials: 'include', - method: 'GET', - } - - return async function ({ src, name }: { src: string; name: string }): Promise { - const url = new URL(src, origin) - const res = await fetch(url, requestInit) - - if (!res.ok) { - throw new Error(`Failed to fetch file from ${url}, status: ${res.status}`) - } - - const data = await res.arrayBuffer() - - return { - name, - data: Buffer.from(data), - mimetype: `image/${url.toString().split('.').pop()}`, - size: data.byteLength, - } - } -} diff --git a/src/payload/fields/hero.ts b/src/payload/fields/hero.ts deleted file mode 100644 index 5fcaec84..00000000 --- a/src/payload/fields/hero.ts +++ /dev/null @@ -1,70 +0,0 @@ -import type { Field } from 'payload' - -import { - FixedToolbarFeature, - HeadingFeature, - InlineToolbarFeature, - lexicalEditor, -} from '@payloadcms/richtext-lexical' - -import { linkGroup } from './linkGroup' - -export const hero: Field = { - name: 'hero', - type: 'group', - fields: [ - { - name: 'type', - type: 'select', - defaultValue: 'lowImpact', - label: 'Type', - options: [ - { - label: 'None', - value: 'none', - }, - { - label: 'High Impact', - value: 'highImpact', - }, - { - label: 'Medium Impact', - value: 'mediumImpact', - }, - { - label: 'Low Impact', - value: 'lowImpact', - }, - ], - required: true, - }, - { - name: 'richText', - type: 'richText', - editor: lexicalEditor({ - features: ({ rootFeatures }) => [ - ...rootFeatures, - HeadingFeature({ enabledHeadingSizes: ['h2', 'h3', 'h4'] }), - FixedToolbarFeature(), - InlineToolbarFeature(), - ], - }), - label: false, - }, - linkGroup({ - overrides: { - maxRows: 2, - }, - }), - { - name: 'media', - type: 'upload', - admin: { - condition: (_, { type } = {}) => ['highImpact', 'mediumImpact'].includes(type), - }, - relationTo: 'media', - required: true, - }, - ], - label: false, -} diff --git a/src/payload/fields/link.ts b/src/payload/fields/link.ts deleted file mode 100644 index a3c0ed92..00000000 --- a/src/payload/fields/link.ts +++ /dev/null @@ -1,142 +0,0 @@ -import type { Field } from 'payload' - -import deepMerge from '../utilities/deepMerge' - -export type LinkAppearances = 'default' | 'outline' - -export const appearanceOptions: Record = { - default: { - label: 'Default', - value: 'default', - }, - outline: { - label: 'Outline', - value: 'outline', - }, -} - -type LinkType = (options?: { - appearances?: LinkAppearances[] | false - disableLabel?: boolean - overrides?: Record -}) => Field - -export const link: LinkType = ({ appearances, disableLabel = false, overrides = {} } = {}) => { - const linkResult: Field = { - name: 'link', - type: 'group', - label: false, - admin: { - hideGutter: true, - }, - fields: [ - { - type: 'row', - fields: [ - { - name: 'type', - type: 'radio', - admin: { - layout: 'horizontal', - width: '50%', - }, - defaultValue: 'reference', - options: [ - { - label: 'Internal link', - value: 'reference', - }, - { - label: 'Custom URL', - value: 'custom', - }, - ], - }, - { - name: 'newTab', - type: 'checkbox', - admin: { - style: { - alignSelf: 'flex-end', - }, - width: '50%', - }, - label: 'Open in new tab', - }, - ], - }, - ], - } - - const linkTypes: Field[] = [ - { - name: 'reference', - type: 'relationship', - admin: { - condition: (_, siblingData) => siblingData?.type === 'reference', - }, - label: 'Document to link to', - maxDepth: 1, - relationTo: ['pages', 'blogPosts', 'blogCategories'], - required: true, - }, - { - name: 'url', - type: 'text', - admin: { - condition: (_, siblingData) => siblingData?.type === 'custom', - }, - label: 'Custom URL', - required: true, - }, - ] - - if (!disableLabel) { - linkTypes.map((linkType) => ({ - ...linkType, - admin: { - ...linkType.admin, - label: false, - width: '50%', - }, - })) - - linkResult.fields.push({ - type: 'row', - fields: [ - ...linkTypes, - { - name: 'label', - type: 'text', - admin: { - width: '50%', - }, - label: 'Label', - required: true, - }, - ], - }) - } else { - linkResult.fields = [...linkResult.fields, ...linkTypes] - } - - if (appearances !== false) { - let appearanceOptionsToUse = [appearanceOptions.default, appearanceOptions.outline] - - if (appearances) { - appearanceOptionsToUse = appearances.map((appearance) => appearanceOptions[appearance]) - } - - linkResult.fields.push({ - name: 'appearance', - type: 'select', - admin: { - description: 'Choose how the link should be rendered.', - }, - defaultValue: 'default', - options: appearanceOptionsToUse, - }) - } - - return deepMerge(linkResult, overrides) -} diff --git a/src/payload/fields/linkGroup.ts b/src/payload/fields/linkGroup.ts deleted file mode 100644 index a4134bd3..00000000 --- a/src/payload/fields/linkGroup.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { ArrayField, Field } from 'payload' - -import type { LinkAppearances } from './link' - -import deepMerge from '../utilities/deepMerge' -import { link } from './link' - -type LinkGroupType = (options?: { - appearances?: LinkAppearances[] | false - overrides?: Partial -}) => Field - -export const linkGroup: LinkGroupType = ({ appearances, overrides = {} } = {}) => { - const generatedLinkGroup: Field = { - name: 'links', - type: 'array', - fields: [ - link({ - appearances, - }), - ], - } - - return deepMerge(generatedLinkGroup, overrides) -} diff --git a/src/payload/fields/slug.ts b/src/payload/fields/slug.ts deleted file mode 100644 index 9c33900d..00000000 --- a/src/payload/fields/slug.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { Field } from 'payload' - -import deepMerge from '../utilities/deepMerge' -import formatSlug from '../utilities/formatSlug' - -type Slug = (fieldToUse?: string, overrides?: Partial) => Field - -export const slugField: Slug = (fieldToUse = 'title', overrides = {}) => - deepMerge>( - { - name: 'slug', - type: 'text', - label: 'Slug', - admin: { - position: 'sidebar', - }, - hooks: { - beforeValidate: [formatSlug(fieldToUse)], - }, - index: true, - unique: true, - }, - overrides, - ) diff --git a/src/payload/fields/tagInputField.ts b/src/payload/fields/tagInputField.ts deleted file mode 100644 index 1cb19bfa..00000000 --- a/src/payload/fields/tagInputField.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { JSONField } from 'payload' - -import deepMerge from '../utilities/deepMerge' - -export const tagInputField: (overrides?: Partial) => JSONField = (overrides = {}) => - deepMerge>( - { - name: 'tagInput', - defaultValue: [], - jsonSchema: { - uri: 'a://b/foo.json', // required - fileMatch: ['a://b/foo.json'], // required - schema: { - type: 'array', - items: { - type: 'object', - properties: { - id: { type: 'string' }, - label: { type: 'string' }, - }, - }, - }, - }, - type: 'json', - admin: { - components: { - Field: '/payload/components/TagInputField', - }, - }, - }, - overrides, - ) diff --git a/src/payload/hooks/populatePublishedAt.ts b/src/payload/hooks/populatePublishedAt.ts deleted file mode 100644 index de974f7b..00000000 --- a/src/payload/hooks/populatePublishedAt.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { CollectionBeforeChangeHook } from 'payload' - -export const populatePublishedAt: CollectionBeforeChangeHook = ({ data, operation, req }) => { - if (operation === 'create' || operation === 'update') { - if (req.data && !req.data.publishedAt) { - const now = new Date() - return { - ...data, - publishedAt: now, - } - } - } - - return data -} diff --git a/src/payload/hooks/revalidateRedirects.ts b/src/payload/hooks/revalidateRedirects.ts deleted file mode 100644 index b5cc3ae4..00000000 --- a/src/payload/hooks/revalidateRedirects.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { CollectionAfterChangeHook } from 'payload' - -import { revalidateTag } from 'next/cache' - -export const revalidateRedirects: CollectionAfterChangeHook = ({ doc, req: { payload } }) => { - payload.logger.info(`Revalidating redirects`) - - revalidateTag('redirects') - - return doc -} diff --git a/src/payload/schemas/Blog/Categories.ts b/src/payload/schemas/Blog/Categories.ts deleted file mode 100644 index 6446fec6..00000000 --- a/src/payload/schemas/Blog/Categories.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { anyone } from '../../access/anyone' -import { slugField } from '../../fields/slug' -import { revalidateCategory } from './hooks/revalidateCategory' -import { createCollection } from '@/payload/utilities/schemaHelpers' - -export const Categories = createCollection({ - slug: 'blogCategories', - labels: { - singular: 'Category', - plural: 'Categories', - }, - admin: { - group: 'blog', - }, - access: { - read: anyone, - }, - hooks: { - afterChange: [revalidateCategory], - }, - fields: [ - { - name: 'title', - type: 'text', - required: true, - }, - slugField(), - ], -}) diff --git a/src/payload/schemas/Blog/Posts.ts b/src/payload/schemas/Blog/Posts.ts deleted file mode 100644 index 982c2daa..00000000 --- a/src/payload/schemas/Blog/Posts.ts +++ /dev/null @@ -1,213 +0,0 @@ -import { - BlockquoteFeature, - ChecklistFeature, - FixedToolbarFeature, - HeadingFeature, - HorizontalRuleFeature, - IndentFeature, - InlineCodeFeature, - InlineToolbarFeature, - lexicalEditor, - OrderedListFeature, - UnorderedListFeature, -} from '@payloadcms/richtext-lexical' -import { authenticatedOrPublished } from '../../access/authenticatedOrPublished' -import { slugField } from '../../fields/slug' -import { generatePreviewPath } from '../../utilities/generatePreviewPath' -import { populateAuthors } from './hooks/populateAuthors' -import { revalidatePost } from './hooks/revalidatePost' - -import { - MetaDescriptionField, - MetaImageField, - MetaTitleField, - OverviewField, - PreviewField, -} from '@payloadcms/plugin-seo/fields' -import { createCollection } from '@/payload/utilities/schemaHelpers' - -export const Posts = createCollection({ - slug: 'blogPosts', - labels: { - singular: 'Post', - plural: 'Posts', - }, - admin: { - group: 'blog', - defaultColumns: ['title', 'slug', 'updatedAt'], - livePreview: { - url: ({ data }) => { - const path = generatePreviewPath({ - path: `/posts/${typeof data?.slug === 'string' ? data.slug : ''}`, - }) - return `${process.env.NEXT_PUBLIC_SERVER_URL}${path}` - }, - }, - preview: (doc) => - generatePreviewPath({ path: `/posts/${typeof doc?.slug === 'string' ? doc.slug : ''}` }), - }, - access: { - read: authenticatedOrPublished, - }, - fields: [ - { - name: 'title', - type: 'text', - required: true, - }, - { - type: 'tabs', - tabs: [ - { - fields: [ - { - name: 'content', - type: 'richText', - editor: lexicalEditor({ - features: ({ rootFeatures }) => [ - ...rootFeatures, - FixedToolbarFeature(), - InlineToolbarFeature(), - - HeadingFeature({ enabledHeadingSizes: ['h2', 'h3', 'h4', 'h5', 'h6'] }), - IndentFeature(), - UnorderedListFeature(), - OrderedListFeature(), - ChecklistFeature(), - BlockquoteFeature(), - HorizontalRuleFeature(), - InlineCodeFeature(), - ], - }), - label: false, - }, - ], - label: 'Content', - }, - { - fields: [ - { - name: 'relatedPosts', - type: 'relationship', - admin: { - position: 'sidebar', - }, - filterOptions: ({ id }) => { - return { - id: { - not_in: [id], - }, - } - }, - hasMany: true, - relationTo: 'blogPosts', - }, - { - name: 'categories', - type: 'relationship', - admin: { - position: 'sidebar', - }, - hasMany: true, - relationTo: 'blogCategories', - }, - ], - label: 'Meta', - }, - { - name: 'meta', - label: 'SEO', - fields: [ - OverviewField({ - titlePath: 'meta.title', - descriptionPath: 'meta.description', - imagePath: 'meta.image', - }), - MetaTitleField({ - // hasGenerateFn: true, - }), - MetaImageField({ - relationTo: 'media', - }), - - MetaDescriptionField({}), - PreviewField({ - // if the `generateUrl` function is configured - // hasGenerateFn: true, - - // field paths to match the target field for data - titlePath: 'meta.title', - descriptionPath: 'meta.description', - }), - ], - }, - ], - }, - { - name: 'publishedAt', - type: 'date', - admin: { - date: { - pickerAppearance: 'dayAndTime', - }, - position: 'sidebar', - }, - hooks: { - beforeChange: [ - ({ siblingData, value }) => { - if (siblingData._status === 'published' && !value) { - return new Date() - } - return value - }, - ], - }, - }, - { - name: 'authors', - type: 'relationship', - admin: { - position: 'sidebar', - }, - hasMany: true, - relationTo: 'users', - }, - // This field is only used to populate the user data via the `populateAuthors` hook - // This is because the `user` collection has access control locked to protect user privacy - // GraphQL will also not return mutated user data that differs from the underlying schema - { - name: 'populatedAuthors', - type: 'array', - access: { - update: () => false, - }, - admin: { - disabled: true, - readOnly: true, - }, - fields: [ - { - name: 'id', - type: 'text', - }, - { - name: 'name', - type: 'text', - }, - ], - }, - slugField(), - ], - hooks: { - afterChange: [revalidatePost], - afterRead: [populateAuthors], - }, - versions: { - drafts: { - autosave: { - interval: 100, // We set this interval for optimal live preview - }, - }, - maxPerDoc: 50, - }, -}) diff --git a/src/payload/schemas/Blog/Tags.ts b/src/payload/schemas/Blog/Tags.ts deleted file mode 100644 index ec7a38f3..00000000 --- a/src/payload/schemas/Blog/Tags.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { anyone } from '../../access/anyone' -import { slugField } from '../../fields/slug' -import { revalidateTag } from './hooks/revalidateTag' -import { createCollection } from '@/payload/utilities/schemaHelpers' - -export const Tags = createCollection({ - slug: 'blogTags', - labels: { - singular: 'Tag', - plural: 'Tags', - }, - admin: { - group: 'blog', - }, - access: { - read: anyone, - }, - hooks: { - afterChange: [revalidateTag], - }, - fields: [ - { - name: 'title', - type: 'text', - required: true, - }, - slugField(), - ], -}) diff --git a/src/payload/schemas/Blog/hooks/populateAuthors.ts b/src/payload/schemas/Blog/hooks/populateAuthors.ts deleted file mode 100644 index 0472da0d..00000000 --- a/src/payload/schemas/Blog/hooks/populateAuthors.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { CollectionAfterReadHook } from 'payload' - -// The `user` collection has access control locked so that users are not publicly accessible -// This means that we need to populate the authors manually here to protect user privacy -// GraphQL will not return mutated user data that differs from the underlying schema -// So we use an alternative `populatedAuthors` field to populate the user data, hidden from the admin UI -export const populateAuthors: CollectionAfterReadHook = async ({ doc, req, req: { payload } }) => { - if (doc?.authors) { - const authorDocs = [] - - for (const author of doc.authors) { - const authorDoc = await payload.findByID({ - id: typeof author === 'object' ? author?.id : author, - collection: 'users', - depth: 1, - req, - }) - - authorDocs.push(authorDoc) - } - - doc.populatedAuthors = authorDocs.map((authorDoc) => ({ - id: authorDoc.id, - name: authorDoc.name, - })) - } - - return doc -} diff --git a/src/payload/schemas/Blog/hooks/revalidateCategory.ts b/src/payload/schemas/Blog/hooks/revalidateCategory.ts deleted file mode 100644 index 440ad4f7..00000000 --- a/src/payload/schemas/Blog/hooks/revalidateCategory.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { CollectionAfterChangeHook } from 'payload' - -import { revalidatePath } from 'next/cache' - -import type { BlogCategory } from '@payload-types' - -export const revalidateCategory: CollectionAfterChangeHook = ({ - doc, - req: { payload }, -}) => { - const path = `/category/${doc.slug}` - payload.logger.info(`Revalidating page at path: ${path}`) - - revalidatePath(path) - - return doc -} diff --git a/src/payload/schemas/Blog/hooks/revalidatePost.ts b/src/payload/schemas/Blog/hooks/revalidatePost.ts deleted file mode 100644 index d2ef68d0..00000000 --- a/src/payload/schemas/Blog/hooks/revalidatePost.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { CollectionAfterChangeHook } from 'payload' - -import { revalidatePath } from 'next/cache' - -import type { BlogPost } from '@payload-types' - -export const revalidatePost: CollectionAfterChangeHook = ({ - doc, - previousDoc, - req: { payload }, -}) => { - if (doc._status === 'published') { - const path = `/posts/${doc.slug}` - - payload.logger.info(`Revalidating post at path: ${path}`) - - revalidatePath(path) - } - - // If the post was previously published, we need to revalidate the old path - if (previousDoc._status === 'published' && doc._status !== 'published') { - const oldPath = `/posts/${previousDoc.slug}` - - payload.logger.info(`Revalidating old post at path: ${oldPath}`) - - revalidatePath(oldPath) - } - - return doc -} diff --git a/src/payload/schemas/Blog/hooks/revalidateTag.ts b/src/payload/schemas/Blog/hooks/revalidateTag.ts deleted file mode 100644 index c06e94ba..00000000 --- a/src/payload/schemas/Blog/hooks/revalidateTag.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { CollectionAfterChangeHook } from 'payload' - -import { revalidatePath } from 'next/cache' - -import type { BlogTag } from '@payload-types' - -export const revalidateTag: CollectionAfterChangeHook = ({ doc, req: { payload } }) => { - const path = `/tag/${doc.slug}` - payload.logger.info(`Revalidating page at path: ${path}`) - - revalidatePath(path) - - return doc -} diff --git a/src/payload/schemas/Blog/index.ts b/src/payload/schemas/Blog/index.ts deleted file mode 100644 index 7389117f..00000000 --- a/src/payload/schemas/Blog/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createSchemaGroup } from '@/payload/utilities/schemaHelpers' - -import { Categories } from './Categories' -import { Tags } from './Tags' -import { Posts } from './Posts' - -export const Blog = createSchemaGroup('blog', [Categories, Tags, Posts]) diff --git a/src/payload/schemas/General/Media.ts b/src/payload/schemas/General/Media.ts deleted file mode 100644 index 6d1fc6f4..00000000 --- a/src/payload/schemas/General/Media.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { anyone } from '@/payload/access/anyone' -import { createCollection } from '@/payload/utilities/schemaHelpers' -import sharp from 'sharp' - -export const Media = createCollection({ - slug: 'media', - labels: { - singular: 'Media Asset', - plural: 'Media Assets', - }, - admin: { - group: 'general', - defaultColumns: ['filename', 'type', 'extension', 'updatedAt'], - components: { - Description: false, - }, - }, - access: { - read: anyone, - }, - upload: { - disableLocalStorage: true, - withMetadata: false, - }, - fields: [ - { - name: 'alt', - type: 'text', - }, - { - name: 'blurDataURL', - type: 'text', - admin: { - hidden: true, - }, - }, - { - name: 'type', - type: 'text', - admin: { - hidden: true, - }, - hooks: { - beforeValidate: [async ({ data: { mimeType } }) => mimeType?.split('/')?.[0]], - }, - }, - { - name: 'extension', - type: 'text', - admin: { - hidden: true, - }, - hooks: { - beforeValidate: [async ({ data: { mimeType } }) => mimeType?.split('/')?.[1]], - }, - }, - ], - hooks: { - beforeChange: [ - async ({ data, req }) => { - if (!req.file || !data.mimeType.startsWith('image')) return data - - const resizedImageBuffer = await sharp(req.file.data) - .resize({ - width: 10, - height: 10, - fit: 'inside', - }) - .toBuffer() - - return { - ...data, - blurDataURL: `data:${data.mimeType};base64,${resizedImageBuffer.toString('base64')}`, - } - }, - ], - }, -}) diff --git a/src/payload/schemas/General/Pages.ts b/src/payload/schemas/General/Pages.ts deleted file mode 100644 index 043c3cef..00000000 --- a/src/payload/schemas/General/Pages.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { authenticated } from '../../access/authenticated' -import { authenticatedOrPublished } from '../../access/authenticatedOrPublished' -import { slugField } from '../../fields/slug' -import { populatePublishedAt } from '../../hooks/populatePublishedAt' -import { generatePreviewPath } from '../../utilities/generatePreviewPath' -import { revalidatePage } from './hooks/revalidatePage' - -import { - MetaDescriptionField, - MetaImageField, - MetaTitleField, - OverviewField, - PreviewField, -} from '@payloadcms/plugin-seo/fields' -import { createCollection } from '@/payload/utilities/schemaHelpers' -import { - BoldFeature, - FixedToolbarFeature, - HeadingFeature, - ItalicFeature, - lexicalEditor, - LinkFeature, - OrderedListFeature, - ParagraphFeature, - UnderlineFeature, - UnorderedListFeature, -} from '@payloadcms/richtext-lexical' - -export const Pages = createCollection({ - slug: 'pages', - access: { - create: authenticated, - delete: authenticated, - read: authenticatedOrPublished, - update: authenticated, - }, - admin: { - group: 'general', - defaultColumns: ['title', 'slug', 'updatedAt'], - livePreview: { - url: ({ data }) => { - const path = generatePreviewPath({ - path: `/${typeof data?.slug === 'string' ? data.slug : ''}`, - }) - return `${process.env.NEXT_PUBLIC_SERVER_URL}${path}` - }, - }, - preview: (doc) => - generatePreviewPath({ path: `/${typeof doc?.slug === 'string' ? doc.slug : ''}` }), - useAsTitle: 'title', - }, - fields: [ - { - name: 'title', - type: 'text', - required: true, - }, - { - type: 'tabs', - tabs: [ - { - fields: [ - { - name: 'hero', - type: 'upload', - relationTo: 'media', - filterOptions: { - mimeType: { contains: 'image' }, - }, - admin: { - className: 'hero-image', - }, - }, - { - name: 'content', - type: 'richText', - editor: lexicalEditor({ - features: ({ rootFeatures }) => [ - ...rootFeatures, - HeadingFeature({ enabledHeadingSizes: ['h2', 'h3', 'h4'] }), - ItalicFeature(), - BoldFeature(), - UnderlineFeature(), - OrderedListFeature(), - UnorderedListFeature(), - ParagraphFeature(), - LinkFeature(), - FixedToolbarFeature(), - ], - }), - label: false, - }, - ], - label: 'Content', - }, - { - name: 'meta', - label: 'SEO', - fields: [ - OverviewField({ - titlePath: 'title', - descriptionPath: 'content', - imagePath: 'hero', - }), - MetaTitleField({ - // hasGenerateFn: true, - }), - MetaImageField({ - // hasGenerateFn: true, - relationTo: 'media', - }), - MetaDescriptionField({}), - PreviewField({ - // if the `generateUrl` function is configured - // hasGenerateFn: true, - - // field paths to match the target field for data - titlePath: 'meta.title', - descriptionPath: 'meta.description', - }), - ], - }, - ], - }, - { - name: 'publishedAt', - type: 'date', - admin: { - position: 'sidebar', - }, - }, - slugField(), - ], - hooks: { - afterChange: [revalidatePage], - beforeChange: [populatePublishedAt], - }, - versions: { - drafts: { - autosave: { - interval: 100, // We set this interval for optimal live preview - }, - }, - maxPerDoc: 50, - }, -}) diff --git a/src/payload/schemas/General/Users.ts b/src/payload/schemas/General/Users.ts deleted file mode 100644 index 0d47ac80..00000000 --- a/src/payload/schemas/General/Users.ts +++ /dev/null @@ -1,30 +0,0 @@ -import * as duration from 'duration-fns' -import { loginAfterCreate } from './hooks/loginAfterCreate' -import { seedAfterLogin } from './hooks/seedAfterLogin' -import { createCollection } from '@/payload/utilities/schemaHelpers' - -export const Users = createCollection({ - slug: 'users', - admin: { - group: 'general', - defaultColumns: ['name', 'email'], - useAsTitle: 'name', - }, - fields: [ - { - name: 'name', - type: 'text', - }, - ], - hooks: { - afterChange: [loginAfterCreate], - afterLogin: [seedAfterLogin], - }, - auth: { - tokenExpiration: duration.toSeconds({ days: 7 }), - maxLoginAttempts: 5, - lockTime: duration.toMilliseconds({ minutes: 5 }), - }, - timestamps: true, - versions: false, -}) diff --git a/src/payload/schemas/General/hooks/seedAfterLogin.ts b/src/payload/schemas/General/hooks/seedAfterLogin.ts deleted file mode 100644 index 48b8fde7..00000000 --- a/src/payload/schemas/General/hooks/seedAfterLogin.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { CollectionAfterLoginHook } from 'payload' -import * as process from 'node:process' -import { differenceInHours } from 'date-fns' - -type SeedResponse = - | { - success: true - error: never - } - | { - success: false - error: string - } - -export const seedAfterLogin: CollectionAfterLoginHook = async ({ req, user }) => { - const { docs: users } = await req.payload.find({ collection: 'users' }) - if ( - users.length === 1 && - users[0].email === user.email && - differenceInHours(Date.now(), Date.parse(users[0].createdAt)) - ) { - try { - const { success, error } = await fetch( - new URL('/api/seed', process.env.PAYLOAD_PUBLIC_SERVER_URL), - { - headers: { - Authorization: `JWT ${user.token}`, - }, - }, - ).then((res) => res.json() as Promise) - - if (success) req.payload.logger.info('Seeding data was successful.') - if (error) req.payload.logger.error(error) - } catch (error: unknown) { - const message = error instanceof Error ? error.message : 'Unknown error' - req.payload.logger.error(error, message) - } - } -} diff --git a/src/payload/schemas/General/index.ts b/src/payload/schemas/General/index.ts deleted file mode 100644 index e396c46c..00000000 --- a/src/payload/schemas/General/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Media } from './Media' -import { Pages } from './Pages' -import { Users } from './Users' -import { createSchemaGroup } from '@/payload/utilities/schemaHelpers' - -export const General = createSchemaGroup('general', [Media, Pages, Users], false) diff --git a/src/payload/schemas/Resume/AboutMe.ts b/src/payload/schemas/Resume/AboutMe.ts deleted file mode 100644 index 4ef2cbaf..00000000 --- a/src/payload/schemas/Resume/AboutMe.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { anyone } from '@/payload/access/anyone' -import { CaptionField, SLUG, TitleField } from './_shared' -import { revalidateAboutMe } from './hooks/revalidateAboutMe' -import { createGlobal } from '@/payload/utilities/schemaHelpers' - -export const AboutMe = createGlobal({ - slug: SLUG.ABOUT_ME, - label: 'About Me', - access: { - read: anyone, - }, - hooks: { - afterChange: [revalidateAboutMe], - }, - fields: [ - { - type: 'row', - admin: { - className: 'about-me', - }, - fields: [ - { - name: 'portrait', - type: 'upload', - label: false, - relationTo: 'media', - filterOptions: { - mimeType: { contains: 'image' }, - }, - admin: { - className: 'about-me__image', - }, - }, - ], - }, - { - ...TitleField, - }, - { - ...CaptionField, - name: 'content', - }, - { - name: 'anchor', - label: 'Scroll Anchor', - type: 'text', - admin: { - position: 'sidebar', - }, - }, - ], -}) diff --git a/src/payload/schemas/Resume/Contact.ts b/src/payload/schemas/Resume/Contact.ts deleted file mode 100644 index dc8700f0..00000000 --- a/src/payload/schemas/Resume/Contact.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { anyone } from '@/payload/access/anyone' -import { IntroTab, SLUG } from './_shared' -import { createGlobal } from '@/payload/utilities/schemaHelpers' -import { revalidateContact } from '@/payload/schemas/Resume/hooks/revalidateContact' - -export const Contact = createGlobal({ - slug: SLUG.CONTACT, - label: 'Contact', - access: { - read: anyone, - }, - hooks: { - afterChange: [revalidateContact], - }, - fields: [ - { - type: 'tabs', - tabs: [ - IntroTab, - { - label: 'Buttons', - fields: [ - { - type: 'group', - name: 'mailButton', - admin: { - className: 'contact-button', - }, - fields: [ - { - name: 'label', - type: 'text', - label: null, - admin: { - placeholder: 'Button Label', - className: 'contact-button__field', - }, - }, - { - name: 'href', - type: 'text', - label: null, - admin: { - placeholder: 'Link Href', - className: 'contact-button__field', - }, - }, - ], - }, - ], - }, - ], - }, - { - name: 'anchor', - label: 'Scroll Anchor', - type: 'text', - admin: { - position: 'sidebar', - }, - }, - ], -}) diff --git a/src/payload/schemas/Resume/Customers.ts b/src/payload/schemas/Resume/Customers.ts deleted file mode 100755 index 2b7a81b1..00000000 --- a/src/payload/schemas/Resume/Customers.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { anyone } from '@/payload/access/anyone' -import { IntroTab, SLUG } from './_shared' -import { revalidateCustomers } from './hooks/revalidateCustomers' -import { createGlobal } from '@/payload/utilities/schemaHelpers' - -export const Customers = createGlobal({ - slug: SLUG.CUSTOMERS, - label: 'Customers', - access: { - read: anyone, - }, - hooks: { - afterChange: [revalidateCustomers], - }, - fields: [ - { - type: 'tabs', - tabs: [ - IntroTab, - { - label: 'Customers', - fields: [ - { - label: 'Customer', - name: 'entries', - type: 'array', - admin: { - isSortable: true, - initCollapsed: false, - className: 'customers', - components: { - Label: false, - RowLabel: '/payload/components/CustomersRowLabel', - }, - }, - fields: [ - { - name: 'logo', - type: 'text', - label: false, - admin: { - className: 'customer__logo', - components: { - Field: '/payload/components/CustomerLogoField', - }, - }, - }, - { - name: 'title', - type: 'text', - label: false, - admin: { - placeholder: 'Title', - className: 'customer__title', - }, - }, - ], - }, - ], - }, - ], - }, - { - name: 'anchor', - label: 'Scroll Anchor', - type: 'text', - admin: { - position: 'sidebar', - }, - }, - ], -}) diff --git a/src/payload/schemas/Resume/Experience.ts b/src/payload/schemas/Resume/Experience.ts deleted file mode 100755 index e24f6760..00000000 --- a/src/payload/schemas/Resume/Experience.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { anyone } from '@/payload/access/anyone' -import { lexicalEditor } from '@payloadcms/richtext-lexical' -import { tagInputField } from '@/payload/fields/tagInputField' -import { IntroTab, SLUG } from './_shared' -import { createGlobal } from '@/payload/utilities/schemaHelpers' -import { GlobalData } from '@custom-types' -import { sortEntriesByStartDate } from './hooks/sortEntriesByStartDate' -import { revalidateExperience } from './hooks/revalidateExperience' -import { calculateSkillSummary } from './hooks/calculateSkillSummary' - -export const Experience = createGlobal({ - slug: SLUG.EXPERIENCE, - label: 'Experience', - access: { - read: anyone, - }, - hooks: { - beforeChange: [sortEntriesByStartDate], - afterChange: [calculateSkillSummary, revalidateExperience], - }, - fields: [ - { - type: 'tabs', - tabs: [ - IntroTab, - { - label: 'Experiences', - fields: [ - { - label: 'Entry', - name: 'entries', - type: 'array', - defaultValue: [], - hooks: { - beforeChange: [ - async ({ value, context }) => { - if (context.withoutHooks) return - - const entries: GlobalData<'resumeExperience'>['entries'] = Array.isArray(value) - ? value - : [] - - return entries - .sort((a, b) => Date.parse(b.startDate) - Date.parse(a.startDate)) - .map((data, index) => Object.assign(data, { id: index + 1 })) - }, - ], - }, - admin: { - isSortable: false, - initCollapsed: false, - className: 'experience', - components: { - Label: false, - RowLabel: '/payload/components/ExperienceRowLabel', - }, - }, - fields: [ - { - type: 'row', - admin: { - className: 'experience__row', - }, - fields: [ - { - name: 'title', - type: 'text', - required: true, - admin: { - style: { gridArea: 'title' }, - }, - }, - { - name: 'employer', - type: 'text', - required: true, - admin: { - style: { gridArea: 'employer' }, - }, - }, - { - name: 'startDate', - type: 'date', - required: true, - admin: { - style: { gridArea: 'startDate' }, - date: { - pickerAppearance: 'monthOnly', - displayFormat: 'MM/yyyy', - }, - }, - }, - { - name: 'endDate', - type: 'date', - admin: { - style: { gridArea: 'endDate' }, - date: { - pickerAppearance: 'monthOnly', - displayFormat: 'MM/yyyy', - }, - }, - }, - ], - }, - { - name: 'richText', - type: 'richText', - editor: lexicalEditor({ - features: ({ rootFeatures }) => [...rootFeatures], - }), - label: false, - }, - tagInputField({ - name: 'technologies', - }), - ], - }, - ], - }, - ], - }, - { - name: 'anchor', - label: 'Scroll Anchor', - type: 'text', - admin: { - position: 'sidebar', - }, - }, - { - name: 'skillSummary', - label: 'Skill Summary', - type: 'json', - admin: { - position: 'sidebar', - }, - }, - ], -}) diff --git a/src/payload/schemas/Resume/Hero.ts b/src/payload/schemas/Resume/Hero.ts deleted file mode 100644 index 1b8cac3d..00000000 --- a/src/payload/schemas/Resume/Hero.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { anyone } from '@/payload/access/anyone' -import { CaptionField, SLUG } from './_shared' -import { createGlobal } from '@/payload/utilities/schemaHelpers' -import { revalidateHero } from '@/payload/schemas/Resume/hooks/revalidateHero' - -export const Hero = createGlobal({ - slug: SLUG.HERO, - label: 'Hero', - access: { - read: anyone, - }, - hooks: { - afterChange: [revalidateHero], - }, - fields: [ - { - type: 'row', - admin: { - className: 'hero', - }, - fields: [ - { - name: 'background', - type: 'upload', - relationTo: 'media', - filterOptions: { - mimeType: { contains: 'image' }, - }, - admin: { - className: 'hero__image', - }, - }, - { - name: 'portrait', - type: 'upload', - relationTo: 'media', - filterOptions: { - mimeType: { contains: 'image' }, - }, - admin: { - className: 'hero__image', - }, - }, - ], - }, - { - name: 'title', - type: 'textarea', - label: false, - admin: { - placeholder: 'Title', - }, - }, - { - ...CaptionField, - }, - ], -}) diff --git a/src/payload/schemas/Resume/Projects.ts b/src/payload/schemas/Resume/Projects.ts deleted file mode 100755 index 50cd9e1d..00000000 --- a/src/payload/schemas/Resume/Projects.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { anyone } from '@/payload/access/anyone' -import { IntroTab, SLUG } from './_shared' -import { revalidateProjects } from './hooks/revalidateProjects' -import { createGlobal } from '@/payload/utilities/schemaHelpers' -import { - BoldFeature, - FixedToolbarFeature, - ItalicFeature, - lexicalEditor, - LinkFeature, - OrderedListFeature, - ParagraphFeature, - UnderlineFeature, - UnorderedListFeature, -} from '@payloadcms/richtext-lexical' - -export const Projects = createGlobal({ - slug: SLUG.PROJECTS, - label: 'Projects', - access: { - read: anyone, - }, - hooks: { - afterChange: [revalidateProjects], - }, - fields: [ - { - type: 'tabs', - tabs: [ - IntroTab, - { - label: 'Projects', - fields: [ - { - label: 'Project', - name: 'entries', - type: 'array', - admin: { - isSortable: true, - initCollapsed: false, - className: 'projects', - components: { - Label: false, - }, - }, - fields: [ - { - type: 'row', - admin: { - className: 'projects__row', - }, - fields: [ - { - name: 'headline', - type: 'text', - required: true, - admin: { - style: { gridArea: 'headline' }, - }, - }, - { - name: 'subline', - type: 'text', - required: true, - admin: { - style: { gridArea: 'subline' }, - }, - }, - { - name: 'richText', - type: 'richText', - editor: lexicalEditor({ - features: [ - ItalicFeature(), - BoldFeature(), - UnderlineFeature(), - OrderedListFeature(), - UnorderedListFeature(), - ParagraphFeature(), - LinkFeature(), - FixedToolbarFeature({ disableIfParentHasFixedToolbar: true }), - ], - }), - label: false, - admin: { - style: { gridArea: 'richtext' }, - }, - }, - { - name: 'image', - type: 'upload', - relationTo: 'media', - filterOptions: { - mimeType: { contains: 'image' }, - }, - admin: { - style: { gridArea: 'image' }, - }, - }, - ], - }, - ], - }, - ], - }, - ], - }, - { - name: 'anchor', - label: 'Scroll Anchor', - type: 'text', - admin: { - position: 'sidebar', - }, - }, - ], -}) diff --git a/src/payload/schemas/Resume/_shared.ts b/src/payload/schemas/Resume/_shared.ts deleted file mode 100644 index 95fbe217..00000000 --- a/src/payload/schemas/Resume/_shared.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { - BlockquoteFeature, - BoldFeature, - FixedToolbarFeature, - HorizontalRuleFeature, - IndentFeature, - InlineCodeFeature, - ItalicFeature, - lexicalEditor, - LinkFeature, - OrderedListFeature, - ParagraphFeature, - UnderlineFeature, - UnorderedListFeature, -} from '@payloadcms/richtext-lexical' -import { Field, RichTextField, Tab } from 'payload' - -export const SLUG = { - HERO: 'resumeHero', - ABOUT_ME: 'resumeAboutMe', - CUSTOMERS: 'resumeCustomers', - EXPERIENCE: 'resumeExperience', - PROJECTS: 'resumeProjects', - CONTACT: 'resumeContact', -} - -export const TitleField: Field = { - name: 'title', - type: 'text', - label: false, - admin: { - placeholder: 'Title', - }, -} - -export const CaptionField: RichTextField = { - name: 'caption', - type: 'richText', - label: false, - editor: lexicalEditor({ - features: [ - ItalicFeature(), - BoldFeature(), - UnderlineFeature(), - OrderedListFeature(), - UnorderedListFeature(), - ParagraphFeature(), - BlockquoteFeature(), - LinkFeature(), - HorizontalRuleFeature(), - IndentFeature(), - InlineCodeFeature(), - FixedToolbarFeature({ disableIfParentHasFixedToolbar: true }), - ], - }), -} - -export const IntroTab: Tab = { - label: 'Intro', - fields: [TitleField, CaptionField], -} diff --git a/src/payload/schemas/Resume/hooks/calculateSkillSummary.ts b/src/payload/schemas/Resume/hooks/calculateSkillSummary.ts deleted file mode 100644 index 972aac0b..00000000 --- a/src/payload/schemas/Resume/hooks/calculateSkillSummary.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { differenceInMonths } from 'date-fns' -import { GlobalAfterChangeHook, GlobalSlug } from 'payload' - -export const calculateSkillSummary: GlobalAfterChangeHook = async (props) => { - const { req, global, doc, context } = props - if (context.triggerAfterChange === false) return - - const summed: Record = doc.entries.reduce( - (prevValue, { startDate, endDate, technologies }) => { - const months = differenceInMonths( - endDate ? Date.parse(endDate) : Date.now(), - Date.parse(startDate), - ) - - technologies.forEach(({ id, label }) => { - prevValue[id] = prevValue[id] || { label, time: 0 } - prevValue[id].time += months - }) - - return prevValue - }, - {}, - ) - - const sorted = Object.fromEntries( - Object.entries(summed) - .sort(([_ka, { time: aTime }], [_kb, { time: bTime }]) => bTime - aTime) - .slice(0, 5), - ) - - try { - await req.payload.updateGlobal({ - slug: global.slug as GlobalSlug, - data: { - ...doc, - skillSummary: JSON.stringify(sorted), - }, - context: { - triggerAfterChange: false, - }, - req, - }) - } catch (e) { - req.payload.logger.error(e) - } -} diff --git a/src/payload/schemas/Resume/hooks/revalidateAboutMe.ts b/src/payload/schemas/Resume/hooks/revalidateAboutMe.ts deleted file mode 100644 index 2d4e2d6e..00000000 --- a/src/payload/schemas/Resume/hooks/revalidateAboutMe.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { GlobalAfterChangeHook } from 'payload' - -import { revalidateTag } from 'next/cache' -import { snakeCase } from 'lodash-es' -import { SLUG } from '../_shared' - -export const revalidateAboutMe: GlobalAfterChangeHook = ({ - doc, - req: { payload }, - context: { isSeedContext }, -}) => { - if (doc._status !== 'published') return - if (!isSeedContext) payload.logger.info(`Revalidating AboutMe Section`) - - revalidateTag(snakeCase(SLUG.ABOUT_ME)) -} diff --git a/src/payload/schemas/Resume/hooks/revalidateContact.ts b/src/payload/schemas/Resume/hooks/revalidateContact.ts deleted file mode 100644 index 2e69450e..00000000 --- a/src/payload/schemas/Resume/hooks/revalidateContact.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { GlobalAfterChangeHook } from 'payload' - -import { revalidateTag } from 'next/cache' -import { snakeCase } from 'lodash-es' -import { SLUG } from '../_shared' - -export const revalidateContact: GlobalAfterChangeHook = ({ - doc, - req: { payload }, - context: { isSeedContext }, -}) => { - if (doc._status !== 'published') return - if (!isSeedContext) payload.logger.info(`Revalidating Contact Section`) - - revalidateTag(snakeCase(SLUG.CONTACT)) -} diff --git a/src/payload/schemas/Resume/hooks/revalidateCustomers.ts b/src/payload/schemas/Resume/hooks/revalidateCustomers.ts deleted file mode 100644 index dc42a81e..00000000 --- a/src/payload/schemas/Resume/hooks/revalidateCustomers.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { GlobalAfterChangeHook } from 'payload' - -import { revalidateTag } from 'next/cache' -import { snakeCase } from 'lodash-es' -import { SLUG } from '../_shared' - -export const revalidateCustomers: GlobalAfterChangeHook = ({ - doc, - req: { payload }, - context: { isSeedContext }, -}) => { - if (doc._status !== 'published') return - if (!isSeedContext) payload.logger.info(`Revalidating Customers Section`) - - revalidateTag(snakeCase(SLUG.CUSTOMERS)) -} diff --git a/src/payload/schemas/Resume/hooks/revalidateExperience.ts b/src/payload/schemas/Resume/hooks/revalidateExperience.ts deleted file mode 100644 index 06b2e6cc..00000000 --- a/src/payload/schemas/Resume/hooks/revalidateExperience.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { GlobalAfterChangeHook } from 'payload' - -import { revalidateTag } from 'next/cache' -import { snakeCase } from 'lodash-es' -import { SLUG } from '../_shared' - -export const revalidateExperience: GlobalAfterChangeHook = ({ - doc, - req: { payload }, - context: { isSeedContext }, -}) => { - if (doc._status !== 'published') return - if (!isSeedContext) payload.logger.info(`Revalidating Experience Section`) - - revalidateTag(snakeCase(SLUG.EXPERIENCE)) -} diff --git a/src/payload/schemas/Resume/hooks/revalidateHero.ts b/src/payload/schemas/Resume/hooks/revalidateHero.ts deleted file mode 100644 index d1ffaa54..00000000 --- a/src/payload/schemas/Resume/hooks/revalidateHero.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { GlobalAfterChangeHook } from 'payload' - -import { revalidateTag } from 'next/cache' -import { snakeCase } from 'lodash-es' -import { SLUG } from '../_shared' - -export const revalidateHero: GlobalAfterChangeHook = ({ - doc, - req: { payload }, - context: { isSeedContext }, -}) => { - if (doc._status !== 'published') return - if (!isSeedContext) payload.logger.info(`Revalidating Hero Section`) - - revalidateTag(snakeCase(SLUG.HERO)) -} diff --git a/src/payload/schemas/Resume/hooks/revalidateProjects.ts b/src/payload/schemas/Resume/hooks/revalidateProjects.ts deleted file mode 100644 index f4e5c239..00000000 --- a/src/payload/schemas/Resume/hooks/revalidateProjects.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { GlobalAfterChangeHook } from 'payload' - -import { revalidateTag } from 'next/cache' -import { snakeCase } from 'lodash-es' -import { SLUG } from '../_shared' - -export const revalidateProjects: GlobalAfterChangeHook = ({ - doc, - req: { payload }, - context: { isSeedContext }, -}) => { - if (doc._status !== 'published') return - if (isSeedContext) payload.logger.info(`Revalidating Projects Section`) - - revalidateTag(snakeCase(SLUG.PROJECTS)) -} diff --git a/src/payload/schemas/Resume/hooks/sortEntriesByStartDate.ts b/src/payload/schemas/Resume/hooks/sortEntriesByStartDate.ts deleted file mode 100644 index e3fca2c8..00000000 --- a/src/payload/schemas/Resume/hooks/sortEntriesByStartDate.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { GlobalBeforeChangeHook } from 'payload' -import { ResumeExperience } from '@payload-types' - -export const sortEntriesByStartDate: GlobalBeforeChangeHook = async ({ - data, -}: { - data: ResumeExperience -}) => { - const entries = Array.isArray(data.entries) ? data.entries : [] - return { - ...data, - entries: entries - .sort((a, b) => { - return Date.parse(b.startDate) - Date.parse(a.startDate) - }) - .map((data, index) => ({ - ...data, - id: index + 1, - })), - } -} diff --git a/src/payload/schemas/Resume/index.ts b/src/payload/schemas/Resume/index.ts deleted file mode 100644 index f53cf8b7..00000000 --- a/src/payload/schemas/Resume/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { AboutMe } from './AboutMe' -import { Experience } from './Experience' -import { Projects } from './Projects' -import { Customers } from './Customers' -import { Hero } from './Hero' -import { Contact } from './Contact' -import { createSchemaGroup } from '@/payload/utilities/schemaHelpers' - -export const Resume = createSchemaGroup('resume', [ - Hero, - AboutMe, - Experience, - Projects, - Customers, - Contact, -]) diff --git a/src/payload/schemas/Settings/Meta.ts b/src/payload/schemas/Settings/Meta.ts deleted file mode 100644 index bf4278ea..00000000 --- a/src/payload/schemas/Settings/Meta.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { anyone } from '@/payload/access/anyone' -import { tagInputField } from '@/payload/fields/tagInputField' -import { revalidateMeta } from '@/payload/schemas/Settings/hooks/revalidateMeta' -import { createGlobal } from '@/payload/utilities/schemaHelpers' - -export const Meta = createGlobal({ - slug: 'settingsMeta', - label: 'Meta', - access: { - read: anyone, - }, - hooks: { - afterChange: [revalidateMeta], - }, - fields: [ - { - name: 'siteName', - type: 'text', - }, - { - name: 'titleTemplate', - type: 'text', - admin: { - placeholder: '{{title}} | {{siteName}}', - }, - }, - { - name: 'fallbackTitle', - type: 'text', - }, - { - name: 'fallbackDescription', - type: 'textarea', - }, - { - name: 'fallbackImage', - type: 'upload', - relationTo: 'media', - filterOptions: { - mimeType: { contains: 'image' }, - }, - }, - tagInputField({ name: 'keywords' }), - ], - versions: false, -}) diff --git a/src/payload/schemas/Settings/Navigation.ts b/src/payload/schemas/Settings/Navigation.ts deleted file mode 100644 index 66c9af19..00000000 --- a/src/payload/schemas/Settings/Navigation.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { link } from '../../fields/link' -import { revalidateNavigation } from './hooks/revalidateNavigation' -import { anyone } from '@/payload/access/anyone' -import { createGlobal } from '@/payload/utilities/schemaHelpers' - -export const Navigation = createGlobal({ - slug: 'settingsNavigation', - label: 'Navigation', - access: { - read: anyone, - }, - hooks: { - afterChange: [revalidateNavigation], - }, - fields: [ - { - type: 'tabs', - tabs: [ - { - label: 'Header', - description: 'This will appear within the tab above the fields.', - fields: [ - { - label: 'Header', - name: 'headerNavItems', - type: 'array', - interfaceName: 'HeaderNavItems', - admin: { - components: { - Label: false, - }, - }, - fields: [ - link({ - appearances: false, - }), - ], - maxRows: 6, - }, - ], - }, - { - label: 'Footer', - description: 'This will appear within the tab above the fields.', - fields: [ - { - label: false, - name: 'footerNavItems', - interfaceName: 'FooterNavItems', - type: 'array', - fields: [ - link({ - appearances: false, - }), - ], - maxRows: 6, - }, - ], - }, - ], - }, - ], - versions: false, -}) diff --git a/src/payload/schemas/Settings/_shared.ts b/src/payload/schemas/Settings/_shared.ts deleted file mode 100644 index ebc5980b..00000000 --- a/src/payload/schemas/Settings/_shared.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const SLUG = { - META: 'settingsMeta', - NAVIGATION: 'settingsNavigation', -} diff --git a/src/payload/schemas/Settings/hooks/revalidateMeta.ts b/src/payload/schemas/Settings/hooks/revalidateMeta.ts deleted file mode 100644 index 7a1e7106..00000000 --- a/src/payload/schemas/Settings/hooks/revalidateMeta.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { GlobalAfterChangeHook } from 'payload' - -import { revalidateTag } from 'next/cache' -import { snakeCase } from 'lodash-es' -import { SLUG } from '../_shared' - -export const revalidateMeta: GlobalAfterChangeHook = ({ - doc, - req: { payload }, - context: { isSeedContext }, -}) => { - if (doc._status !== 'published') return - if (!isSeedContext) payload.logger.info(`Revalidating Meta Settings`) - - revalidateTag(snakeCase(SLUG.META)) -} diff --git a/src/payload/schemas/Settings/hooks/revalidateNavigation.ts b/src/payload/schemas/Settings/hooks/revalidateNavigation.ts deleted file mode 100644 index 01922774..00000000 --- a/src/payload/schemas/Settings/hooks/revalidateNavigation.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { GlobalAfterChangeHook } from 'payload' - -import { revalidateTag } from 'next/cache' -import { snakeCase } from 'lodash-es' -import { SLUG } from '../_shared' - -export const revalidateNavigation: GlobalAfterChangeHook = ({ - doc, - req: { payload }, - context: { isSeedContext }, -}) => { - if (doc._status !== 'published') return - if (!isSeedContext) payload.logger.info(`Revalidating Navigation Settings`) - - revalidateTag(snakeCase(SLUG.NAVIGATION)) -} diff --git a/src/payload/schemas/Settings/index.ts b/src/payload/schemas/Settings/index.ts deleted file mode 100644 index 313b8228..00000000 --- a/src/payload/schemas/Settings/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Navigation } from './Navigation' -import { Meta } from './Meta' -import { createSchemaGroup } from '@/payload/utilities/schemaHelpers' - -export const Settings = createSchemaGroup('settings', [Navigation, Meta]) diff --git a/src/payload/schemas/index.ts b/src/payload/schemas/index.ts deleted file mode 100644 index 72336fe4..00000000 --- a/src/payload/schemas/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { Resume } from './Resume' -export { Blog } from './Blog' -export { General } from './General' -export { Settings } from './Settings' diff --git a/src/payload/utilities/deepMerge.ts b/src/payload/utilities/deepMerge.ts deleted file mode 100644 index 77397ffd..00000000 --- a/src/payload/utilities/deepMerge.ts +++ /dev/null @@ -1,34 +0,0 @@ -// @ts-nocheck - -/** - * Simple object check. - * @param item - * @returns {boolean} - */ -export function isObject(item: unknown): boolean { - return item && typeof item === 'object' && !Array.isArray(item) -} - -/** - * Deep merge two objects. - * @param target - * @param source - */ -export default function deepMerge(target: T, source: R): T { - const output = { ...target } - if (isObject(target) && isObject(source)) { - Object.keys(source).forEach((key) => { - if (isObject(source[key])) { - if (!(key in target)) { - Object.assign(output, { [key]: source[key] }) - } else { - output[key] = deepMerge(target[key], source[key]) - } - } else { - Object.assign(output, { [key]: source[key] }) - } - }) - } - - return output -} diff --git a/src/payload/utilities/formatSlug.ts b/src/payload/utilities/formatSlug.ts deleted file mode 100644 index 43190f88..00000000 --- a/src/payload/utilities/formatSlug.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { FieldHook } from 'payload' - -const format = (val: string): string => - val - .replace(/ /g, '-') - .replace(/[^\w-]+/g, '') - .toLowerCase() - -const formatSlug = - (fallback: string): FieldHook => - ({ data, operation, originalDoc, value }) => { - if (typeof value === 'string') { - return format(value) - } - - if (operation === 'create') { - const fallbackData = data?.[fallback] || originalDoc?.[fallback] - - if (fallbackData && typeof fallbackData === 'string') { - return format(fallbackData) - } - } - - return value - } - -export default formatSlug diff --git a/src/payload/utilities/generatePreviewPath.ts b/src/payload/utilities/generatePreviewPath.ts deleted file mode 100644 index 6217f810..00000000 --- a/src/payload/utilities/generatePreviewPath.ts +++ /dev/null @@ -1 +0,0 @@ -export const generatePreviewPath = ({ path }) => `/next/preview?path=${encodeURIComponent(path)}` diff --git a/src/payload/utilities/schemaHelpers.ts b/src/payload/utilities/schemaHelpers.ts deleted file mode 100644 index 389ffac9..00000000 --- a/src/payload/utilities/schemaHelpers.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { CollectionConfig, GlobalConfig } from 'payload' -import { lowerCase, merge } from 'lodash-es' - -export const createCollection = ( - config: CollectionConfig, -): CollectionConfig & { - custom: CollectionConfig['custom'] & { type: 'collection' } -} => ({ - ...config, - versions: merge( - { - drafts: true, - maxPerDoc: 10, - }, - config.versions || {}, - ) as CollectionConfig['versions'], - custom: { - ...config.custom, - type: 'collection', - }, -}) - -export const resolveCollections = async (order?: string[]) => { - const schemas = await import('./../schemas').then((m) => - Object.values(m).reduce((prev, curr) => [...prev, ...curr], []), - ) - - const collections = schemas - .filter((schema) => schema?.custom?.type === 'collection' || 'labels' in schema) - .sort((a, b) => { - const aPos = order.indexOf(a.custom.group) - const bPos = order.indexOf(b.custom.group) - - if (aPos === -1 && bPos === -1) return 0 - if (aPos === -1) return 1 - if (bPos === -1) return -1 - return aPos - bPos - }) as CollectionConfig[] - - return collections -} - -export const createGlobal = ( - config: GlobalConfig, -): GlobalConfig & { - custom: GlobalConfig['custom'] & { type: 'global' } -} => ({ - ...config, - versions: merge( - { - drafts: true, - max: 10, - }, - config.versions || {}, - ) as GlobalConfig['versions'], - custom: { - ...config.custom, - type: 'global', - }, -}) - -export const resolveGlobals = async (order?: string[]) => { - const schemas = await import('./../schemas').then((m) => - Object.values(m).reduce((prev, curr) => [...prev, ...curr], []), - ) - - const globals = schemas - .filter((schema) => schema?.custom?.type === 'global') - .sort((a, b) => { - const aPos = order.indexOf(a.custom.group) - const bPos = order.indexOf(b.custom.group) - - if (aPos === -1 && bPos === -1) return 0 - if (aPos === -1) return 1 - if (bPos === -1) return -1 - return aPos - bPos - }) as GlobalConfig[] - - return globals -} - -export const createSchemaGroup = ( - name: string, - schemas: (CollectionConfig | GlobalConfig)[], - forceGroupPrefixInSlug: boolean = true, -): (CollectionConfig | GlobalConfig)[] => { - const schemaGroup = lowerCase(name) - - const dummys = [ - { - type: 'collection', - slug: `${schemaGroup}DummyCollection`, - admin: { hidden: true }, - custom: { type: 'collection' }, - fields: [], - } as CollectionConfig, - { - type: 'global', - slug: `${schemaGroup}DummyGlobal`, - admin: { hidden: true }, - custom: { type: 'global' }, - fields: [], - } as GlobalConfig, - ] - - return [...dummys, ...schemas].map((currentValue) => { - if (forceGroupPrefixInSlug && !lowerCase(currentValue.slug).startsWith(schemaGroup)) { - throw new Error(`Schema "${currentValue.slug}" does not start with "${schemaGroup}"`) - } - - return { - ...currentValue, - admin: { - ...currentValue.admin, - group: schemaGroup, - }, - custom: { - ...currentValue.custom, - group: schemaGroup, - }, - } - }) -} diff --git a/src/pdf/components/BulletPoint.tsx b/src/pdf/components/BulletPoint.tsx new file mode 100644 index 00000000..42b02ee7 --- /dev/null +++ b/src/pdf/components/BulletPoint.tsx @@ -0,0 +1,47 @@ +import type { ReactNode } from 'react' +import { StyleSheet, Text, View } from '@react-pdf/renderer' + +import { colors, textStyles } from '@/pdf/constants' + +const styles = StyleSheet.create({ + container: { + flexDirection: 'row', + justifyContent: 'flex-start', + alignItems: 'center', + marginLeft: 10, + }, + bullet: { + width: 3.5, + height: 3.5, + borderRadius: 3, + backgroundColor: colors.primary, + top: 5, + left: -8, + position: 'absolute', + }, + text: { + flexGrow: 1, + flexShrink: 1, + flexBasis: '50%', + }, +}) + +interface BulletPointProps { + children: ReactNode +} + +export const BulletPoint = ({ children }: BulletPointProps) => { + return ( + + + + {children} + + + ) +} diff --git a/src/pdf/components/Footer.tsx b/src/pdf/components/Footer.tsx new file mode 100644 index 00000000..fd974e9e --- /dev/null +++ b/src/pdf/components/Footer.tsx @@ -0,0 +1,44 @@ +import type { JSX } from 'react' +import { Link, StyleSheet, type Styles, Text, View } from '@react-pdf/renderer' + +import { textStyles } from '@/pdf/constants' +import { DocumentFooter } from '@/pdf/types' + +const style = StyleSheet.create({ + container: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'flex-start', + }, +}) + +type DocumentFooterProps = { + fixed?: boolean + style?: Styles[string] +} & DocumentFooter + +export const Footer = ({ + renderPagination, + generatedNotice, + generatedNoticeUrl, + fixed, + style: styleFromProp = {}, +}: DocumentFooterProps): JSX.Element => ( + + + {generatedNotice} + + + renderPagination(String(pageNumber), String(totalPages)) + } + /> + +) diff --git a/src/pdf/components/Header.tsx b/src/pdf/components/Header.tsx new file mode 100644 index 00000000..cb6b16f3 --- /dev/null +++ b/src/pdf/components/Header.tsx @@ -0,0 +1,71 @@ +import type { JSX } from 'react' +import { Image, Link, StyleSheet, type Styles, Text, View } from '@react-pdf/renderer' + +import { mmToPt, textStyles } from '@/pdf/constants' +import { DocumentHeader } from '@/pdf/types' + +const style = StyleSheet.create({ + container: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + gap: mmToPt(10), + }, + portrait: { + width: mmToPt(15), + height: mmToPt(15), + borderRadius: mmToPt(15), + marginRight: 'auto', + }, + column: { + alignSelf: 'center', + justifySelf: 'flex-end', + flexDirection: 'column', + }, +}) + +type DocumentHeaderProps = { + fixed?: boolean + style?: Styles[string] +} & DocumentHeader + +export const Header = ({ + portraitUrl, + address, + telephone, + email, + website, + github, + fixed, + style: styleFromProp = {}, +}: DocumentHeaderProps): JSX.Element => ( + + + + {address.street} + {address.city} + + + + {telephone.label} + + + {email.label} + + + + + {website.label} + + + {github.label} + + + +) diff --git a/src/pdf/components/Introduction.tsx b/src/pdf/components/Introduction.tsx new file mode 100644 index 00000000..d269b244 --- /dev/null +++ b/src/pdf/components/Introduction.tsx @@ -0,0 +1,8 @@ +import { ReactNode } from 'react' +import { Text } from '@react-pdf/renderer' + +import { textStyles } from '@/pdf/constants' + +export const Introduction = ({ children }: { children: ReactNode }) => ( + {children} +) diff --git a/src/pdf/components/Section/Container.tsx b/src/pdf/components/Section/Container.tsx new file mode 100644 index 00000000..e4e13930 --- /dev/null +++ b/src/pdf/components/Section/Container.tsx @@ -0,0 +1,23 @@ +import type { ReactNode } from 'react' +import { StyleSheet, View } from '@react-pdf/renderer' + +import { sizes } from '@/pdf/constants' + +const styles = StyleSheet.create({ + container: { + flexDirection: 'column', + width: sizes.documentInnerWidth, + rowGap: 7, + }, +}) + +interface ContainerProps { + wrap?: boolean + children: ReactNode +} + +export const Container = ({ wrap = true, children }: ContainerProps) => ( + + {children} + +) diff --git a/src/pdf/components/Section/Headline.tsx b/src/pdf/components/Section/Headline.tsx new file mode 100644 index 00000000..a59b31e7 --- /dev/null +++ b/src/pdf/components/Section/Headline.tsx @@ -0,0 +1,48 @@ +import { StyleSheet, Text, View } from '@react-pdf/renderer' +import type { ExpandedBookmark } from '@react-pdf/types' + +import type { Merge } from 'type-fest' + +import { colors, sizes, textStyles } from '@/pdf/constants' + +const styles = StyleSheet.create({ + container: { + flexDirection: 'row', + alignItems: 'center', + columnGap: '0.3cm', + width: sizes.documentInnerWidth, + }, + line: { + flexGrow: 1, + marginTop: 4, + height: 1.5, + backgroundColor: colors.textHeadline, + }, +}) + +interface HeadlineProps { + children: string + withoutLine?: boolean + bookmark?: + | string + | Merge< + ExpandedBookmark, + { + parent?: number + } + > +} + +export const Headline = ({ children, withoutLine, bookmark }: HeadlineProps) => ( + + + {children} + + {!withoutLine && } + +) diff --git a/src/pdf/components/Section/index.ts b/src/pdf/components/Section/index.ts new file mode 100644 index 00000000..e63ff285 --- /dev/null +++ b/src/pdf/components/Section/index.ts @@ -0,0 +1,7 @@ +import { Container } from './Container' +import { Headline } from './Headline' + +export const Section = { + Container, + Headline, +} diff --git a/src/pdf/components/SkillEntry.tsx b/src/pdf/components/SkillEntry.tsx new file mode 100644 index 00000000..340a1662 --- /dev/null +++ b/src/pdf/components/SkillEntry.tsx @@ -0,0 +1,8 @@ +import type { SerializedEditorState } from '@payloadcms/richtext-lexical/lexical' + +import { BulletPoint } from '@/pdf/components/BulletPoint' +import { lexicalToJSX } from '@/pdf/lib/lexicalToJSX' + +export const SkillEntry = ({ content }: { content: SerializedEditorState }) => ( + {lexicalToJSX(content)} +) diff --git a/src/pdf/components/WorkExperience/Entry.tsx b/src/pdf/components/WorkExperience/Entry.tsx new file mode 100644 index 00000000..3ebaf18f --- /dev/null +++ b/src/pdf/components/WorkExperience/Entry.tsx @@ -0,0 +1,15 @@ +import { ReactNode } from 'react' +import { StyleSheet, View } from '@react-pdf/renderer' + +const styles = StyleSheet.create({ + container: { + width: '100%', + flexDirection: 'column', + }, +}) + +export const Entry = ({ children }: { children: ReactNode }) => ( + + {children} + +) diff --git a/src/pdf/components/WorkExperience/Header.tsx b/src/pdf/components/WorkExperience/Header.tsx new file mode 100644 index 00000000..b809ca22 --- /dev/null +++ b/src/pdf/components/WorkExperience/Header.tsx @@ -0,0 +1,51 @@ +import { StyleSheet, Text, View } from '@react-pdf/renderer' + +import { sizes, textStyles } from '@/pdf/constants' +import { Bookmark } from '@/pdf/types' + +const styles = StyleSheet.create({ + container: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'flex-start', + marginBottom: 4, + }, + interval: { + width: sizes.columnLeftWidth, + }, + title: { + width: sizes.columnRightWidth, + }, +}) + +export const Header = ({ + title, + interval, + bookmark, +}: { + title: string + interval: string + bookmark?: Bookmark +}) => ( + + + {interval} + + + {title} + + +) diff --git a/src/pdf/components/WorkExperience/TaskList.tsx b/src/pdf/components/WorkExperience/TaskList.tsx new file mode 100644 index 00000000..d5d7c7ae --- /dev/null +++ b/src/pdf/components/WorkExperience/TaskList.tsx @@ -0,0 +1,21 @@ +import { StyleSheet, View } from '@react-pdf/renderer' + +import { BulletPoint } from '@/pdf/components/BulletPoint' +import { sizes } from '@/pdf/constants' + +const styles = StyleSheet.create({ + container: { + flexDirection: 'column', + rowGap: 7.5, + width: sizes.columnRightWidth, + marginLeft: sizes.columnLeftWidth, + }, +}) + +export const TaskList = ({ tasks }: { tasks: string[] }) => ( + + {tasks.map((task, i) => ( + {task} + ))} + +) diff --git a/src/pdf/components/WorkExperience/index.tsx b/src/pdf/components/WorkExperience/index.tsx new file mode 100644 index 00000000..7784a85d --- /dev/null +++ b/src/pdf/components/WorkExperience/index.tsx @@ -0,0 +1,9 @@ +import { Entry } from './Entry' +import { Header } from './Header' +import { TaskList } from './TaskList' + +export const WorkExperience = { + Entry, + Header, + TaskList, +} diff --git a/src/pdf/constants.ts b/src/pdf/constants.ts new file mode 100644 index 00000000..3678d46d --- /dev/null +++ b/src/pdf/constants.ts @@ -0,0 +1,172 @@ +import type { Styles } from '@react-pdf/renderer' + +import { round } from 'lodash-es' + +import { registerFonts } from '@/pdf/fonts' + +const { PPSupplySans, PPSupplyMono, PPFrama } = registerFonts([ + 'PPSupplySans', + 'PPSupplyMono', + 'PPFrama', + 'PPFramaText', +]) + +export const colors = { + primary: '#1D27F2', + white: '#FFFFFF', + gray: { + '50': '#FAFAFA', + '100': '#F5F5F5', + '200': '#E5E5E5', + '300': '#D4D4D4', + '400': '#A1A1A1', + '500': '#737373', + '600': '#525252', + '700': '#404040', + '800': '#262626', + '900': '#171717', + '950': '#0A0A0A', + }, + black: '#000000', + + get textHeader() { + return colors.gray['700'] + }, + get textHeadline() { + return colors.primary + }, + get textIntroduction() { + return colors.gray['900'] + }, + get textBody() { + return colors.gray['900'] + }, + get textJobInterval() { + return colors.gray['500'] + }, + get textJobTitle() { + return colors.gray['700'] + }, + get textFooterNote() { + return colors.gray['500'] + }, + get textFooterPagination() { + return colors.gray['700'] + }, +} + +export const textStyles = { + __body: { + color: colors.textBody, + fontFamily: PPFrama, + fontSize: 10, + lineHeight: 1.4, + letterSpacing: 0.35, + }, + + get header() { + return { + color: colors.textHeader, + fontFamily: PPSupplyMono, + fontSize: 10, + lineHeight: 1.5, + letterSpacing: -0.3, + textDecoration: 'none', + } as Styles[string] + }, + get headline() { + return { + color: colors.textHeadline, + fontFamily: PPSupplySans, + fontSize: 18, + fontWeight: 500, + } as Styles[string] + }, + get introduction() { + return { + color: colors.textIntroduction, + fontFamily: PPFrama, + fontSize: 12, + lineHeight: 1.4, + } + }, + get jobInterval() { + return { + color: colors.textJobInterval, + fontFamily: PPSupplyMono, + fontSize: 10, + } as Styles[string] + }, + get jobTitle() { + return { + color: colors.textJobTitle, + fontFamily: PPSupplySans, + fontSize: 14, + fontWeight: 500, + letterSpacing: 0.3, + } as Styles[string] + }, + get bulletPoint() { + return { + ...this.__body, + } as Styles[string] + }, + get footerNote() { + return { + color: colors.textFooterNote, + fontFamily: PPSupplyMono, + fontSize: 8, + fontWeight: 400, + } as Styles[string] + }, + get footerPagination() { + return { + color: colors.textFooterPagination, + fontFamily: PPSupplyMono, + fontSize: 8, + fontWeight: 500, + } as Styles[string] + }, +} + +export const mmToPt = (mm: number) => round(mm * 2.8346, 4) + +export const sizes = { + documentWidth: mmToPt(210), + get documentInnerWidth() { + return this.documentWidth - this.page.paddingLeft - this.page.paddingRight + }, + + documentHeight: mmToPt(297), + get documentInnerHeight() { + return this.documentHeight - this.page.paddingTop - this.page.paddingBottom + }, + + page: { + paddingTop: mmToPt(15), + paddingRight: mmToPt(15), + paddingBottom: mmToPt(7.5), + paddingLeft: mmToPt(15), + }, + + header: { + paddingBottom: mmToPt(10), + width: '100%', + }, + body: { + rowGap: mmToPt(10), + width: '100%', + }, + footer: { + paddingTop: mmToPt(10), + width: '100%', + }, + + headlinePaddingTop: mmToPt(10), + paragraphRowGap: mmToPt(10), + + columnLeftWidth: mmToPt(45), + get columnRightWidth() { + return this.documentInnerWidth - this.columnLeftWidth + }, +} diff --git a/src/pdf/fonts/index.ts b/src/pdf/fonts/index.ts new file mode 100644 index 00000000..383e6dfa --- /dev/null +++ b/src/pdf/fonts/index.ts @@ -0,0 +1,27 @@ +import { Font } from '@react-pdf/renderer' + +import PPFrama from '@/fonts/pp-frama/pdf' +import PPFramaText from '@/fonts/pp-frama-text/pdf' +import PPSupplyMono from '@/fonts/pp-supply-mono/pdf' +import PPSupplySans from '@/fonts/pp-supply-sans/pdf' + +const fontMap = { + PPFrama: PPFrama, + PPFramaText: PPFramaText, + PPSupplyMono: PPSupplyMono, + PPSupplySans: PPSupplySans, +} + +type FontName = keyof typeof fontMap + +export const registerFonts = (fonts: T) => { + const registeredFonts = {} + + for (const font of fonts) { + Font.register(fontMap[font] as Parameters[number]) + Font.getRegisteredFonts() + registeredFonts[font] = fontMap[font].family + } + + return registeredFonts as Record +} diff --git a/src/pdf/index.tsx b/src/pdf/index.tsx new file mode 100644 index 00000000..960323b0 --- /dev/null +++ b/src/pdf/index.tsx @@ -0,0 +1,170 @@ +import { Document, Font, Page, StyleSheet, View } from '@react-pdf/renderer' + +import createHyphenator, { type HyphenationFunctionSync, type PatternsDefinition } from 'hyphen' +import dePattern from 'hyphen/patterns/de-1996' +import enPattern from 'hyphen/patterns/en-us' + +import type { BilingualLanguage } from '@/lib/i18n' +import { BulletPoint } from '@/pdf/components/BulletPoint' +import { Footer } from '@/pdf/components/Footer' +import { Header } from '@/pdf/components/Header' +import { Introduction } from '@/pdf/components/Introduction' +import { Section } from '@/pdf/components/Section' +import { SkillEntry } from '@/pdf/components/SkillEntry' +import { WorkExperience } from '@/pdf/components/WorkExperience' +import { sizes } from '@/pdf/constants' +import { DocumentFooter, DocumentHeader, DocumentSection, DocumentSectionType } from '@/pdf/types' + +const hyphenateEN = createHyphenator(enPattern as unknown as PatternsDefinition, { + async: false, +}) as HyphenationFunctionSync +const hyphenateDE = createHyphenator(dePattern as unknown as PatternsDefinition, { + async: false, +}) as HyphenationFunctionSync + +const styles = StyleSheet.create({ + page: { + flexDirection: 'column', + alignItems: 'flex-start', + justifyContent: 'flex-start', + ...sizes.page, + }, + header: { + alignSelf: 'flex-start', + flexGrow: 0, + flexShrink: 0, + ...sizes.header, + }, + body: { + flexGrow: 1, + flexShrink: 1, + flexDirection: 'column', + alignItems: 'flex-start', + justifyContent: 'flex-start', + ...sizes.body, + }, + footer: { + alignSelf: 'flex-end', + flexGrow: 0, + flexShrink: 0, + ...sizes.footer, + }, +}) + +interface ResumeDocumentProps { + isPreview: boolean + locale: BilingualLanguage + document: { + title: string + author: string + language: string + creationDate: Date + } + header: DocumentHeader + footer: DocumentFooter + sections: DocumentSection[] +} + +export const ResumeDocument = ({ + isPreview, + locale, + document, + header, + footer, + sections, +}: ResumeDocumentProps) => { + Font.registerHyphenationCallback((word) => { + const hyphenatedWords = locale === 'en' ? hyphenateEN(word) : hyphenateDE(word) + return hyphenatedWords.split('\u00AD') + }) + + return ( + + +
+ + {sections.map(({ type, data }, sectionIndex) => { + /** + * Introduction Section + */ + if (type === DocumentSectionType.Introduction) { + const { headline, content } = data + return ( + + + {headline} + + {content} + + ) + } + + /** + * Work Experience Section + */ + if (type === DocumentSectionType.WorkExperience) { + const { headline, entries } = data + return ( + + {headline} + {entries.map(({ title, interval, tasks }, entryIndex) => ( + + + + + ))} + + ) + } + + /** + * Skill Section + */ + if (type === DocumentSectionType.Skill) { + const { headline, entries } = data + return ( + + {headline} + {entries.map((skill, entryIndex) => ( + + ))} + + ) + } + + if (type === DocumentSectionType.Language) { + const { headline, entries } = data + return ( + + {headline} + {entries.map((language, entryIndex) => ( + {language} + ))} + + ) + } + + /** + * Unknown Section + */ + return null + })} + +