diff --git a/.gitea/workflows/size-limit.yml b/.gitea/workflows/size-limit.yml new file mode 100644 index 00000000..08e44e74 --- /dev/null +++ b/.gitea/workflows/size-limit.yml @@ -0,0 +1,75 @@ +name: Size limit + +# ROADMAP TODO #6 — enforces bundle-size budgets defined in +# .size-limit.cjs on every push to main and every PR. Failures block +# merge so that bundle bloat is a visible, deliberate decision. + +on: + push: + branches: [main] + paths: + - 'packages/**' + - 'pnpm-lock.yaml' + - 'pnpm-workspace.yaml' + - 'package.json' + - '.size-limit.cjs' + - '.gitea/workflows/size-limit.yml' + pull_request: + branches: [main] + paths: + - 'packages/**' + - 'pnpm-lock.yaml' + - 'pnpm-workspace.yaml' + - 'package.json' + - '.size-limit.cjs' + +concurrency: + group: size-limit-${{ github.ref }} + cancel-in-progress: true + +jobs: + size: + name: size-limit + runs-on: [ubuntu-latest, bytelyst, hostinger] + container: + image: node:20-bookworm + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + github-server-url: https://gitea.bytelyst.com + + - name: Install pinned pnpm + run: | + npm install -g pnpm@10.6.5 + pnpm --version + + - name: Install dependencies + run: HUSKY=0 pnpm install --frozen-lockfile + + - name: Build measured packages + # size-limit measures dist/ — ensure every entry in + # .size-limit.cjs has a fresh build before running. + run: | + pnpm --filter @bytelyst/api-client \ + --filter @bytelyst/auth-client \ + --filter @bytelyst/celebrations \ + --filter @bytelyst/quick-actions \ + --filter @bytelyst/react-auth \ + --filter @bytelyst/dashboard-shell \ + run build + + - name: Enforce size budgets + run: pnpm size + + - name: Upload size report + if: always() + uses: actions/upload-artifact@v4 + with: + name: size-limit-${{ github.run_id }} + path: | + .size-limit/ + retention-days: 14 + continue-on-error: true diff --git a/.size-limit.cjs b/.size-limit.cjs new file mode 100644 index 00000000..13140424 --- /dev/null +++ b/.size-limit.cjs @@ -0,0 +1,68 @@ +/** + * ROADMAP TODO #6 — Bundle-size budgets for @bytelyst/* packages. + * + * Each entry measures the gzipped size of a package's built `dist/` + * output. The 'limit' field is the budget — PRs that exceed it fail CI. + * + * Initial budgets per learning_ai_uxui_web/docs/ROADMAP_2026.md §5 + * "Performance budgets": + * - Pure-TS clients → 8 KB + * - Feature packs → 6 KB + * - UI primitive slices → ~1 KB per primitive (whole pkg < 30 KB) + * - Tokens / design-tokens → 12 KB (CSS heavy) + * + * Pilot scope (this commit): wire up 6 representative packages. Rollout + * to the rest of @bytelyst/* lands incrementally as packages stabilise. + * + * Run locally: + * pnpm -w size — full check + * pnpm -w size --why — explain what's contributing + * + * To add a package: + * 1. Confirm the package has 'build' in its scripts and emits to dist/ + * 2. Add an entry below with name, path, and limit + * 3. Run `pnpm -w size --update` to record the current baseline if + * you're starting under-budget (optional) + */ +module.exports = [ + // ── Pure-TS clients (8 KB) ────────────────────────────────────── + { + name: '@bytelyst/api-client', + path: 'packages/api-client/dist/index.js', + limit: '8 KB', + gzip: true, + }, + { + name: '@bytelyst/auth-client', + path: 'packages/auth-client/dist/index.js', + limit: '8 KB', + gzip: true, + }, + // ── Feature packs (6 KB) ──────────────────────────────────────── + { + name: '@bytelyst/celebrations', + path: 'packages/celebrations/dist/index.js', + limit: '6 KB', + gzip: true, + }, + { + name: '@bytelyst/quick-actions', + path: 'packages/quick-actions/dist/index.js', + limit: '6 KB', + gzip: true, + }, + // ── React bindings (10 KB — slightly higher for hooks + context) ─ + { + name: '@bytelyst/react-auth', + path: 'packages/react-auth/dist/index.js', + limit: '10 KB', + gzip: true, + }, + // ── Shells / composite UI (30 KB) ─────────────────────────────── + { + name: '@bytelyst/dashboard-shell', + path: 'packages/dashboard-shell/dist/index.js', + limit: '30 KB', + gzip: true, + }, +]; diff --git a/docs/STORYBOOK_TEMPLATE.md b/docs/STORYBOOK_TEMPLATE.md new file mode 100644 index 00000000..a2873710 --- /dev/null +++ b/docs/STORYBOOK_TEMPLATE.md @@ -0,0 +1,115 @@ +# Storybook Template for `@bytelyst/*` Packages + +> ROADMAP TODO #5 — canonical pattern for adding Storybook 8 to each +> visual `@bytelyst/*` package. + +## Status + +| Package | Has Storybook | Stories | A11y addon | +| -------------------------------- | ------------- | --------------------------------------------------------------- | ---------- | +| `@bytelyst/ui` | ✅ | 5 (`Button`, `Card`, `Controls`, `Input`, `OperationalPreview`) | ✅ | +| `@bytelyst/auth-ui` | ❌ | — | — | +| `@bytelyst/dashboard-components` | ❌ | — | — | +| `@bytelyst/dashboard-shell` | ❌ | — | — | +| `@bytelyst/celebrations` | ❌ | — | — | +| `@bytelyst/gentle-notifications` | ❌ | — | — | +| `@bytelyst/quick-actions` | ❌ | — | — | +| `@bytelyst/react-auth` | ❌ | — | — | + +Rollout is incremental — each package added separately so failures are +diagnosable. + +## Canonical setup (mirrors `@bytelyst/ui`) + +### 1. Add devDependencies + +```sh +pnpm --filter @bytelyst/ add -D \ + storybook@^8.5.0 \ + @storybook/react@^8.5.0 \ + @storybook/react-vite@^8.5.0 \ + @storybook/addon-essentials@^8.5.0 \ + @storybook/addon-a11y@^8.5.0 +``` + +### 2. Add scripts to `package.json` + +```json +{ + "scripts": { + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" + } +} +``` + +### 3. Create `.storybook/main.ts` + +```ts +import type { StorybookConfig } from '@storybook/react-vite'; + +const config: StorybookConfig = { + stories: ['../src/**/*.stories.@(ts|tsx)'], + addons: ['@storybook/addon-essentials', '@storybook/addon-a11y'], + framework: { name: '@storybook/react-vite', options: {} }, +}; + +export default config; +``` + +### 4. Create `.storybook/preview.ts` + +```ts +import type { Preview } from '@storybook/react'; +import '@bytelyst/design-tokens/css'; + +const preview: Preview = { + parameters: { + backgrounds: { + default: 'dark', + values: [ + { name: 'dark', value: '#06070A' }, + { name: 'elevated', value: '#0E1118' }, + { name: 'light', value: '#F8F9FC' }, + ], + }, + }, +}; + +export default preview; +``` + +### 5. Add at least one `*.stories.tsx` + +Pattern — one story file per component, **co-located** in `src/`: + +```tsx +// src/components/Button.stories.tsx +import type { Meta, StoryObj } from '@storybook/react'; +import { Button } from './Button.js'; + +const meta: Meta = { + title: 'Components/Button', + component: Button, + parameters: { layout: 'centered' }, + tags: ['autodocs'], +}; +export default meta; + +type Story = StoryObj; + +export const Primary: Story = { args: { children: 'Click me' } }; +export const Disabled: Story = { args: { children: 'Disabled', disabled: true } }; +``` + +## Hosting + +**Decision (`docs/ROADMAP_2026_DECISIONS.md` §9):** self-hosted on +Gitea Pages. + +A future Gitea Actions workflow at `.gitea/workflows/storybook.yml` +will build each package's Storybook on push to `main` and deploy the +combined output to `storybook.bytelyst.com` (or equivalent). + +Until that workflow lands, developers run `pnpm --filter @bytelyst/ +run storybook` locally on `:6006`. diff --git a/docs/rfc/0001-dtcg-v3-token-migration.md b/docs/rfc/0001-dtcg-v3-token-migration.md new file mode 100644 index 00000000..cefb3b28 --- /dev/null +++ b/docs/rfc/0001-dtcg-v3-token-migration.md @@ -0,0 +1,177 @@ +# RFC 0001 — Migrate `@bytelyst/design-tokens` to DTCG v3 + +| Status | Draft | +| --------- | ---------------- | +| Author | Cascade | +| Created | 2026-05-27 | +| Tracks | ROADMAP TODO #4 | +| Reviewers | _to be assigned_ | + +## Summary + +Migrate `packages/design-tokens/tokens/bytelyst.tokens.json` from the +current bespoke schema to the **W3C Design Tokens Community Group +(DTCG) Format Module v3**. Re-emit all generated outputs +(CSS / TS / Kotlin / Swift / per-product CSS) from the new schema with +**no observable change to runtime CSS variable names**. + +## Motivation + +1. **Designer tooling.** Figma-Tokens (now "Tokens Studio") and + Specify both speak DTCG natively. Today designers cannot round-trip + tokens with engineering — the JSON schema is bespoke. +2. **Long-term portability.** DTCG is becoming the lingua franca of + design systems (Adobe Spectrum, Salesforce Lightning, GitHub Primer + are all migrating). +3. **Three-tier semantics.** DTCG `$type` + reference syntax (`{path}`) + gives us a clean way to express the **reference → semantic → + component** layering documented in + `learning_ai_uxui_web/docs/ROADMAP_2026.md` §3. + +## Current schema (excerpt) + +```json +{ + "meta": { "name": "ByteLyst Design Tokens", "version": "1.1.0" }, + "color": { + "palette": { "neutral": { "0": "#FFFFFF", "50": "#F6F8FC", ... } }, + "semantic": { + "dark": { "bgCanvas": "#06070A", ... }, + "light": { "bgCanvas": "#F8F9FC", ... } + } + }, + "spacing": { "0": 0, "1": 4, "2": 8, ... }, + "radius": { "xs": 4, "sm": 6, ... }, + "typography": { "fontSize": { "xs": 12, ... } }, + ... +} +``` + +## Proposed DTCG v3 schema (excerpt) + +```json +{ + "$description": "ByteLyst design tokens — DTCG v3", + "$schema": "https://design-tokens.github.io/community-group/format/", + + "color": { + "neutral": { + "0": { "$value": "#FFFFFF", "$type": "color" }, + "50": { "$value": "#F6F8FC", "$type": "color" }, + "950": { "$value": "#06070A", "$type": "color" } + }, + "brand": { + "blue": { "$value": "#5A8CFF", "$type": "color" }, + "coral": { "$value": "#FF6E6E", "$type": "color" } + }, + "semantic": { + "bgCanvas": { + "$value": "{color.neutral.950}", + "$type": "color", + "$description": "Page background — dark" + } + } + }, + + "spacing": { + "1": { "$value": "4px", "$type": "dimension" }, + "2": { "$value": "8px", "$type": "dimension" } + }, + + "radius": { + "xs": { "$value": "4px", "$type": "dimension" } + }, + + "component": { + "button": { + "padding-x": { "$value": "{spacing.4}", "$type": "dimension" }, + "bg": { "$value": "{color.semantic.accent}", "$type": "color" } + } + } +} +``` + +### Key changes + +| Aspect | Today | DTCG v3 | +| -------------- | ------------------------ | ------------------------------------- | +| Value wrapper | bare value | `{ "$value": ..., "$type": ... }` | +| Type metadata | inferred from JS path | explicit `$type` | +| References | manual JS lookup | `{path.to.token}` syntax | +| Light/dark | parallel sibling objects | DTCG **token sets** (per-theme files) | +| Documentation | none | `$description` per token | +| Component tier | doesn't exist | new top-level `component` group | + +## Implementation plan + +The migration is split into **4 PRs** to keep each one reviewable. + +### PR 1 — Add converter + dual-emit (no behaviour change) + +- Add `scripts/convert-legacy-to-dtcg.ts` that reads the bespoke JSON + and emits `bytelyst.tokens.dtcg.json`. +- Modify `scripts/generate.ts` to accept either schema and produce + byte-identical output. +- Add a vitest case asserting the two emitters produce identical CSS + byte-for-byte. + +### PR 2 — Flip source of truth to DTCG JSON + +- Delete the legacy JSON. +- Update Figma-Tokens plugin documentation + commit a `.tokens.config.json` + for round-trip. + +### PR 3 — Introduce the component tier + +- New `component.*` group in the DTCG JSON. +- Generator emits new `--bl-{component}-{slot}` variables. +- Audit existing hardcoded values in `@bytelyst/ui` and replace with + the new component tokens. + +### PR 4 — Multi-theme via DTCG token sets + +- Split the single JSON into: + - `tokens/global.tokens.json` (reference + semantic core) + - `tokens/themes/dark.tokens.json` (light/dark overrides) + - `tokens/themes/light.tokens.json` + - `tokens/brands/lysnrai.tokens.json` (brand-layer overrides — Wave 7) +- Generator composes per-output set. + +## Backward compatibility + +- All existing `--ml-*` and `--bl-*` CSS variable names are preserved. +- All TS/Kotlin/Swift exported identifiers preserved. +- Consumer apps require zero changes through PRs 1–3. +- PR 4 introduces multi-set composition but the **default** still + produces the same `tokens.css`. + +## Risks + +| Risk | Severity | Mitigation | +| ------------------------------------------------ | -------- | ------------------------------------- | +| Generator divergence between schemas during PR 1 | High | Byte-identical assertion test | +| Figma-Tokens plugin version churn | Med | Pin plugin version in docs/THEMING.md | +| Designer learning curve | Med | One-pager + paired migration session | +| Reference cycles in DTCG (`{a}` → `{b}` → `{a}`) | Low | Generator validates DAG before emit | + +## Alternatives considered + +- **Style Dictionary** — Amazon's tool. Heavier, more opinionated. + Rejected: we already have a working generator; switching tools is a + larger change than switching schemas. +- **Stay on bespoke JSON** — Rejected: blocks designer round-trip + and locks us out of the ecosystem. + +## Estimate + +~1 person-week for PRs 1–3, +1 pw for PR 4 = **2 pw total**. + +## Open questions + +- Do we adopt the DTCG **2024 candidate** or wait for the **2026 + final**? Candidate is stable enough; recommend candidate now, + re-verify when final. +- Where do per-product brand layers live — separate packages + (`@bytelyst/brand-lysnrai`) or subpaths + (`@bytelyst/design-tokens/brands/lysnrai`)? Recommend subpaths + pre-Wave 7, separate packages from Wave 7. diff --git a/package.json b/package.json index 15ae3ca3..385d5790 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,8 @@ "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", "audit": "pnpm -r audit --audit-level moderate", + "size": "size-limit", + "size:why": "size-limit --why", "clean": "pnpm -r exec rm -rf dist", "docker:clean": "./scripts/docker-clean.sh", "dns:godaddy:bytelyst": "./scripts/godaddy-sync-bytelyst-dns.sh", @@ -26,6 +28,7 @@ "devDependencies": { "@changesets/cli": "^2.28.1", "@eslint/js": "^10.0.1", + "@size-limit/preset-small-lib": "^12.1.0", "@types/bcryptjs": "^2.4.6", "@types/node": "^20.0.0", "@types/react": "^19.0.0", @@ -36,6 +39,7 @@ "husky": "^9.0.0", "lint-staged": "^15.0.0", "prettier": "^3.0.0", + "size-limit": "^12.1.0", "typescript": "^5.7.0", "vitest": "^3.0.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3eff7316..7fb2d597 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: '@eslint/js': specifier: ^10.0.1 version: 10.0.1(eslint@9.39.2(jiti@2.6.1)) + '@size-limit/preset-small-lib': + specifier: ^12.1.0 + version: 12.1.0(size-limit@12.1.0(jiti@2.6.1)) '@types/bcryptjs': specifier: ^2.4.6 version: 2.4.6 @@ -59,6 +62,9 @@ importers: prettier: specifier: ^3.0.0 version: 3.8.1 + size-limit: + specifier: ^12.1.0 + version: 12.1.0(jiti@2.6.1) typescript: specifier: ^5.7.0 version: 5.9.3 @@ -200,7 +206,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: 16.1.6 - version: 16.1.6(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 16.1.6(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) husky: specifier: ^9.0.0 version: 9.1.7 @@ -297,7 +303,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: 16.1.6 - version: 16.1.6(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 16.1.6(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) husky: specifier: ^9.0.0 version: 9.1.7 @@ -770,7 +776,7 @@ importers: packages/react-auth: dependencies: '@bytelyst/api-client': - specifier: workspace:* + specifier: workspace:^ version: link:../api-client devDependencies: '@testing-library/react': @@ -2508,6 +2514,15 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.28.0': + resolution: + { + integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==, + } + engines: { node: '>=18' } + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.25.12': resolution: { @@ -2526,6 +2541,15 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.28.0': + resolution: + { + integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==, + } + engines: { node: '>=18' } + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.25.12': resolution: { @@ -2544,6 +2568,15 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.28.0': + resolution: + { + integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==, + } + engines: { node: '>=18' } + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.25.12': resolution: { @@ -2562,6 +2595,15 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.28.0': + resolution: + { + integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==, + } + engines: { node: '>=18' } + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.25.12': resolution: { @@ -2580,6 +2622,15 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.28.0': + resolution: + { + integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==, + } + engines: { node: '>=18' } + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.25.12': resolution: { @@ -2598,6 +2649,15 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.28.0': + resolution: + { + integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==, + } + engines: { node: '>=18' } + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.25.12': resolution: { @@ -2616,6 +2676,15 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.28.0': + resolution: + { + integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==, + } + engines: { node: '>=18' } + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': resolution: { @@ -2634,6 +2703,15 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.28.0': + resolution: + { + integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==, + } + engines: { node: '>=18' } + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.25.12': resolution: { @@ -2652,6 +2730,15 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.28.0': + resolution: + { + integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==, + } + engines: { node: '>=18' } + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.25.12': resolution: { @@ -2670,6 +2757,15 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.28.0': + resolution: + { + integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==, + } + engines: { node: '>=18' } + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.25.12': resolution: { @@ -2688,6 +2784,15 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.28.0': + resolution: + { + integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==, + } + engines: { node: '>=18' } + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.25.12': resolution: { @@ -2706,6 +2811,15 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.28.0': + resolution: + { + integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==, + } + engines: { node: '>=18' } + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.25.12': resolution: { @@ -2724,6 +2838,15 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.28.0': + resolution: + { + integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==, + } + engines: { node: '>=18' } + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.25.12': resolution: { @@ -2742,6 +2865,15 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.28.0': + resolution: + { + integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==, + } + engines: { node: '>=18' } + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.25.12': resolution: { @@ -2760,6 +2892,15 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.28.0': + resolution: + { + integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==, + } + engines: { node: '>=18' } + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.25.12': resolution: { @@ -2778,6 +2919,15 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.28.0': + resolution: + { + integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==, + } + engines: { node: '>=18' } + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.25.12': resolution: { @@ -2796,6 +2946,15 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.28.0': + resolution: + { + integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==, + } + engines: { node: '>=18' } + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.25.12': resolution: { @@ -2814,6 +2973,15 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.28.0': + resolution: + { + integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==, + } + engines: { node: '>=18' } + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': resolution: { @@ -2832,6 +3000,15 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.28.0': + resolution: + { + integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==, + } + engines: { node: '>=18' } + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.25.12': resolution: { @@ -2850,6 +3027,15 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.28.0': + resolution: + { + integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==, + } + engines: { node: '>=18' } + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': resolution: { @@ -2868,6 +3054,15 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.28.0': + resolution: + { + integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==, + } + engines: { node: '>=18' } + cpu: [x64] + os: [openbsd] + '@esbuild/openharmony-arm64@0.25.12': resolution: { @@ -2886,6 +3081,15 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/openharmony-arm64@0.28.0': + resolution: + { + integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==, + } + engines: { node: '>=18' } + cpu: [arm64] + os: [openharmony] + '@esbuild/sunos-x64@0.25.12': resolution: { @@ -2904,6 +3108,15 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.28.0': + resolution: + { + integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==, + } + engines: { node: '>=18' } + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.25.12': resolution: { @@ -2922,6 +3135,15 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.28.0': + resolution: + { + integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==, + } + engines: { node: '>=18' } + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.25.12': resolution: { @@ -2940,6 +3162,15 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.28.0': + resolution: + { + integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==, + } + engines: { node: '>=18' } + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.25.12': resolution: { @@ -2958,6 +3189,15 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.28.0': + resolution: + { + integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==, + } + engines: { node: '>=18' } + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.9.1': resolution: { @@ -5550,6 +5790,32 @@ packages: integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==, } + '@size-limit/esbuild@12.1.0': + resolution: + { + integrity: sha512-Um6MVrX+05kIxI4+zk0ZByG9dA/Th1f+sfGc571D95BnCPc90/pl2+2OdsQuOyoWEbeAMqfcTKo0v07i+E65Vw==, + } + engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } + peerDependencies: + size-limit: 12.1.0 + + '@size-limit/file@12.1.0': + resolution: + { + integrity: sha512-eGwDcIufnNnvJRzv3liDOn6MAOGgmOTUdpeGQ2KuRTlgIgO54AJH1ilvktlJc6PIjNfwpYY0dOGyap1QgM1swQ==, + } + engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } + peerDependencies: + size-limit: 12.1.0 + + '@size-limit/preset-small-lib@12.1.0': + resolution: + { + integrity: sha512-TVVQ/iuHbaGtHJrjur5s4XKYEyGk0nIwUAqhuzhKPbTyV9nYOH/laDelQ4vg3cGmm8sayRx998wxEdnwM/Yewg==, + } + peerDependencies: + size-limit: 12.1.0 + '@standard-schema/spec@1.1.0': resolution: { @@ -6514,6 +6780,7 @@ packages: { integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==, } + deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: @@ -7519,6 +7786,13 @@ packages: } hasBin: true + bytes-iec@3.1.1: + resolution: + { + integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==, + } + engines: { node: '>= 0.8' } + bytes@3.1.2: resolution: { @@ -8676,6 +8950,14 @@ packages: engines: { node: '>=18' } hasBin: true + esbuild@0.28.0: + resolution: + { + integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==, + } + engines: { node: '>=18' } + hasBin: true + escalade@3.2.0: resolution: { @@ -11988,6 +12270,20 @@ packages: engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true + nanoid@5.1.11: + resolution: + { + integrity: sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg==, + } + engines: { node: ^18 || >=20 } + hasBin: true + + nanospinner@1.2.2: + resolution: + { + integrity: sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==, + } + napi-build-utils@1.0.2: resolution: { @@ -12620,6 +12916,13 @@ packages: } engines: { node: '>=12' } + picomatch@4.0.4: + resolution: + { + integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==, + } + engines: { node: '>=12' } + pidtree@0.6.0: resolution: { @@ -13750,6 +14053,19 @@ packages: integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, } + size-limit@12.1.0: + resolution: + { + integrity: sha512-VnDS2fycANrJFVPQwjaD+h+hkISY7EB3LsPsYWje4lBCjQwwsZLxjwwRwVJKHrcj2ZqyG+DdXykWm9mbZklZrw==, + } + engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } + hasBin: true + peerDependencies: + jiti: ^2.0.0 + peerDependenciesMeta: + jiti: + optional: true + slash@3.0.0: resolution: { @@ -14339,6 +14655,13 @@ packages: } engines: { node: '>=12.0.0' } + tinyglobby@0.2.16: + resolution: + { + integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==, + } + engines: { node: '>=12.0.0' } + tinypool@1.1.1: resolution: { @@ -14822,6 +15145,7 @@ packages: { 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-name@5.0.1: @@ -16478,156 +16802,234 @@ snapshots: '@esbuild/aix-ppc64@0.27.3': optional: true + '@esbuild/aix-ppc64@0.28.0': + optional: true + '@esbuild/android-arm64@0.25.12': optional: true '@esbuild/android-arm64@0.27.3': optional: true + '@esbuild/android-arm64@0.28.0': + optional: true + '@esbuild/android-arm@0.25.12': optional: true '@esbuild/android-arm@0.27.3': optional: true + '@esbuild/android-arm@0.28.0': + optional: true + '@esbuild/android-x64@0.25.12': optional: true '@esbuild/android-x64@0.27.3': optional: true + '@esbuild/android-x64@0.28.0': + optional: true + '@esbuild/darwin-arm64@0.25.12': optional: true '@esbuild/darwin-arm64@0.27.3': optional: true + '@esbuild/darwin-arm64@0.28.0': + optional: true + '@esbuild/darwin-x64@0.25.12': optional: true '@esbuild/darwin-x64@0.27.3': optional: true + '@esbuild/darwin-x64@0.28.0': + optional: true + '@esbuild/freebsd-arm64@0.25.12': optional: true '@esbuild/freebsd-arm64@0.27.3': optional: true + '@esbuild/freebsd-arm64@0.28.0': + optional: true + '@esbuild/freebsd-x64@0.25.12': optional: true '@esbuild/freebsd-x64@0.27.3': optional: true + '@esbuild/freebsd-x64@0.28.0': + optional: true + '@esbuild/linux-arm64@0.25.12': optional: true '@esbuild/linux-arm64@0.27.3': optional: true + '@esbuild/linux-arm64@0.28.0': + optional: true + '@esbuild/linux-arm@0.25.12': optional: true '@esbuild/linux-arm@0.27.3': optional: true + '@esbuild/linux-arm@0.28.0': + optional: true + '@esbuild/linux-ia32@0.25.12': optional: true '@esbuild/linux-ia32@0.27.3': optional: true + '@esbuild/linux-ia32@0.28.0': + optional: true + '@esbuild/linux-loong64@0.25.12': optional: true '@esbuild/linux-loong64@0.27.3': optional: true + '@esbuild/linux-loong64@0.28.0': + optional: true + '@esbuild/linux-mips64el@0.25.12': optional: true '@esbuild/linux-mips64el@0.27.3': optional: true + '@esbuild/linux-mips64el@0.28.0': + optional: true + '@esbuild/linux-ppc64@0.25.12': optional: true '@esbuild/linux-ppc64@0.27.3': optional: true + '@esbuild/linux-ppc64@0.28.0': + optional: true + '@esbuild/linux-riscv64@0.25.12': optional: true '@esbuild/linux-riscv64@0.27.3': optional: true + '@esbuild/linux-riscv64@0.28.0': + optional: true + '@esbuild/linux-s390x@0.25.12': optional: true '@esbuild/linux-s390x@0.27.3': optional: true + '@esbuild/linux-s390x@0.28.0': + optional: true + '@esbuild/linux-x64@0.25.12': optional: true '@esbuild/linux-x64@0.27.3': optional: true + '@esbuild/linux-x64@0.28.0': + optional: true + '@esbuild/netbsd-arm64@0.25.12': optional: true '@esbuild/netbsd-arm64@0.27.3': optional: true + '@esbuild/netbsd-arm64@0.28.0': + optional: true + '@esbuild/netbsd-x64@0.25.12': optional: true '@esbuild/netbsd-x64@0.27.3': optional: true + '@esbuild/netbsd-x64@0.28.0': + optional: true + '@esbuild/openbsd-arm64@0.25.12': optional: true '@esbuild/openbsd-arm64@0.27.3': optional: true + '@esbuild/openbsd-arm64@0.28.0': + optional: true + '@esbuild/openbsd-x64@0.25.12': optional: true '@esbuild/openbsd-x64@0.27.3': optional: true + '@esbuild/openbsd-x64@0.28.0': + optional: true + '@esbuild/openharmony-arm64@0.25.12': optional: true '@esbuild/openharmony-arm64@0.27.3': optional: true + '@esbuild/openharmony-arm64@0.28.0': + optional: true + '@esbuild/sunos-x64@0.25.12': optional: true '@esbuild/sunos-x64@0.27.3': optional: true + '@esbuild/sunos-x64@0.28.0': + optional: true + '@esbuild/win32-arm64@0.25.12': optional: true '@esbuild/win32-arm64@0.27.3': optional: true + '@esbuild/win32-arm64@0.28.0': + optional: true + '@esbuild/win32-ia32@0.25.12': optional: true '@esbuild/win32-ia32@0.27.3': optional: true + '@esbuild/win32-ia32@0.28.0': + optional: true + '@esbuild/win32-x64@0.25.12': optional: true '@esbuild/win32-x64@0.27.3': optional: true + '@esbuild/win32-x64@0.28.0': + optional: true + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': dependencies: eslint: 9.39.2(jiti@2.6.1) @@ -19064,6 +19466,22 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@size-limit/esbuild@12.1.0(size-limit@12.1.0(jiti@2.6.1))': + dependencies: + esbuild: 0.28.0 + nanoid: 5.1.11 + size-limit: 12.1.0(jiti@2.6.1) + + '@size-limit/file@12.1.0(size-limit@12.1.0(jiti@2.6.1))': + dependencies: + size-limit: 12.1.0(jiti@2.6.1) + + '@size-limit/preset-small-lib@12.1.0(size-limit@12.1.0(jiti@2.6.1))': + dependencies: + '@size-limit/esbuild': 12.1.0(size-limit@12.1.0(jiti@2.6.1)) + '@size-limit/file': 12.1.0(size-limit@12.1.0(jiti@2.6.1)) + size-limit: 12.1.0(jiti@2.6.1) + '@standard-schema/spec@1.1.0': {} '@standard-schema/utils@0.3.0': {} @@ -19891,14 +20309,14 @@ snapshots: msw: 2.12.10(@types/node@20.19.33)(typescript@5.9.3) vite: 7.3.1(@types/node@20.19.33)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/mocker@3.2.4(msw@2.12.10(@types/node@22.19.11)(typescript@5.9.3))(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.2.4(msw@2.12.10(@types/node@22.19.11)(typescript@5.9.3))(vite@7.3.1(@types/node@20.19.33)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.10(@types/node@22.19.11)(typescript@5.9.3) - vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@20.19.33)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/mocker@4.0.18(msw@2.12.10(@types/node@20.19.33)(typescript@5.9.3))(vite@7.3.1(@types/node@20.19.33)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: @@ -20478,6 +20896,8 @@ snapshots: transitivePeerDependencies: - debug + bytes-iec@3.1.1: {} + bytes@3.1.2: {} cac@6.7.14: {} @@ -21172,6 +21592,35 @@ snapshots: '@esbuild/win32-ia32': 0.27.3 '@esbuild/win32-x64': 0.27.3 + esbuild@0.28.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.0 + '@esbuild/android-arm': 0.28.0 + '@esbuild/android-arm64': 0.28.0 + '@esbuild/android-x64': 0.28.0 + '@esbuild/darwin-arm64': 0.28.0 + '@esbuild/darwin-x64': 0.28.0 + '@esbuild/freebsd-arm64': 0.28.0 + '@esbuild/freebsd-x64': 0.28.0 + '@esbuild/linux-arm': 0.28.0 + '@esbuild/linux-arm64': 0.28.0 + '@esbuild/linux-ia32': 0.28.0 + '@esbuild/linux-loong64': 0.28.0 + '@esbuild/linux-mips64el': 0.28.0 + '@esbuild/linux-ppc64': 0.28.0 + '@esbuild/linux-riscv64': 0.28.0 + '@esbuild/linux-s390x': 0.28.0 + '@esbuild/linux-x64': 0.28.0 + '@esbuild/netbsd-arm64': 0.28.0 + '@esbuild/netbsd-x64': 0.28.0 + '@esbuild/openbsd-arm64': 0.28.0 + '@esbuild/openbsd-x64': 0.28.0 + '@esbuild/openharmony-arm64': 0.28.0 + '@esbuild/sunos-x64': 0.28.0 + '@esbuild/win32-arm64': 0.28.0 + '@esbuild/win32-ia32': 0.28.0 + '@esbuild/win32-x64': 0.28.0 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -21209,7 +21658,7 @@ snapshots: '@next/eslint-plugin-next': 16.1.6 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@2.6.1)) @@ -21232,7 +21681,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 @@ -21247,6 +21696,21 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3 + eslint: 9.39.2(jiti@2.6.1) + get-tsconfig: 4.13.6 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) + transitivePeerDependencies: + - supports-color + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 @@ -21258,14 +21722,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -21309,7 +21773,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -21755,6 +22219,10 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -23747,6 +24215,12 @@ snapshots: nanoid@3.3.11: {} + nanoid@5.1.11: {} + + nanospinner@1.2.2: + dependencies: + picocolors: 1.1.1 + napi-build-utils@1.0.2: {} napi-postinstall@0.3.4: {} @@ -24114,6 +24588,8 @@ snapshots: picomatch@4.0.3: {} + picomatch@4.0.4: {} + pidtree@0.6.0: {} pify@3.0.0: {} @@ -25111,6 +25587,16 @@ snapshots: sisteransi@1.0.5: {} + size-limit@12.1.0(jiti@2.6.1): + dependencies: + bytes-iec: 3.1.1 + lilconfig: 3.1.3 + nanospinner: 1.2.2 + picocolors: 1.1.1 + tinyglobby: 0.2.16 + optionalDependencies: + jiti: 2.6.1 + slash@3.0.0: {} slice-ansi@5.0.0: @@ -25447,6 +25933,11 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + tinypool@1.1.1: {} tinyrainbow@1.2.0: {} @@ -25943,7 +26434,7 @@ snapshots: dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.12.10(@types/node@22.19.11)(typescript@5.9.3))(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.4(msw@2.12.10(@types/node@22.19.11)(typescript@5.9.3))(vite@7.3.1(@types/node@20.19.33)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4