From 0a25e35118740e78583007abcb71af1fba3016a5 Mon Sep 17 00:00:00 2001 From: Lu Nelson Date: Thu, 27 Nov 2025 17:43:59 +0100 Subject: [PATCH 1/6] add ds-rebase and do initial housekeeping --- pocs/ds-rebase/.gitignore | 4 ++ pocs/ds-rebase/README.md | 29 +++++++++++ pocs/ds-rebase/dev/index.html | 12 +++++ pocs/ds-rebase/dev/src/App.tsx | 9 ++++ pocs/ds-rebase/dev/src/index.tsx | 10 ++++ pocs/ds-rebase/dev/src/style.css | 79 +++++++++++++++++++++++++++++ pocs/ds-rebase/dev/vite.config.ts | 7 +++ pocs/ds-rebase/package.json | 57 +++++++++++++++++++++ pocs/ds-rebase/src/MyButton.tsx | 16 ++++++ pocs/ds-rebase/src/index.ts | 1 + pocs/ds-rebase/tests/index.test.tsx | 17 +++++++ pocs/ds-rebase/tests/setup.ts | 1 + pocs/ds-rebase/tsconfig.json | 17 +++++++ pocs/ds-rebase/tsdown.config.ts | 6 +++ pocs/ds-rebase/vitest.config.ts | 11 ++++ 15 files changed, 276 insertions(+) create mode 100644 pocs/ds-rebase/.gitignore create mode 100644 pocs/ds-rebase/README.md create mode 100644 pocs/ds-rebase/dev/index.html create mode 100644 pocs/ds-rebase/dev/src/App.tsx create mode 100644 pocs/ds-rebase/dev/src/index.tsx create mode 100644 pocs/ds-rebase/dev/src/style.css create mode 100644 pocs/ds-rebase/dev/vite.config.ts create mode 100644 pocs/ds-rebase/package.json create mode 100644 pocs/ds-rebase/src/MyButton.tsx create mode 100644 pocs/ds-rebase/src/index.ts create mode 100644 pocs/ds-rebase/tests/index.test.tsx create mode 100644 pocs/ds-rebase/tests/setup.ts create mode 100644 pocs/ds-rebase/tsconfig.json create mode 100644 pocs/ds-rebase/tsdown.config.ts create mode 100644 pocs/ds-rebase/vitest.config.ts diff --git a/pocs/ds-rebase/.gitignore b/pocs/ds-rebase/.gitignore new file mode 100644 index 0000000..7535211 --- /dev/null +++ b/pocs/ds-rebase/.gitignore @@ -0,0 +1,4 @@ +node_modules +dist +*.log +.DS_Store diff --git a/pocs/ds-rebase/README.md b/pocs/ds-rebase/README.md new file mode 100644 index 0000000..4525491 --- /dev/null +++ b/pocs/ds-rebase/README.md @@ -0,0 +1,29 @@ +# react-components-starter + +A starter for creating a React component library. + +## Development + +- Install dependencies: + +```bash +npm install +``` + +- Run the dev environment: + +```bash +npm run dev +``` + +- Run the unit tests: + +```bash +npm run test +``` + +- Build the library: + +```bash +npm run build +``` diff --git a/pocs/ds-rebase/dev/index.html b/pocs/ds-rebase/dev/index.html new file mode 100644 index 0000000..9022237 --- /dev/null +++ b/pocs/ds-rebase/dev/index.html @@ -0,0 +1,12 @@ + + + + + + React Components Starter + + +
+ + + diff --git a/pocs/ds-rebase/dev/src/App.tsx b/pocs/ds-rebase/dev/src/App.tsx new file mode 100644 index 0000000..c85da45 --- /dev/null +++ b/pocs/ds-rebase/dev/src/App.tsx @@ -0,0 +1,9 @@ +import { MyButton } from '../../src' + +export function App() { + return ( + <> + + + ) +} diff --git a/pocs/ds-rebase/dev/src/index.tsx b/pocs/ds-rebase/dev/src/index.tsx new file mode 100644 index 0000000..5694ed7 --- /dev/null +++ b/pocs/ds-rebase/dev/src/index.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import { App } from './App.tsx' +import './style.css' + +createRoot(document.querySelector('#app')!).render( + + + , +) diff --git a/pocs/ds-rebase/dev/src/style.css b/pocs/ds-rebase/dev/src/style.css new file mode 100644 index 0000000..f691315 --- /dev/null +++ b/pocs/ds-rebase/dev/src/style.css @@ -0,0 +1,79 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +.card { + padding: 2em; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/pocs/ds-rebase/dev/vite.config.ts b/pocs/ds-rebase/dev/vite.config.ts new file mode 100644 index 0000000..46a16c3 --- /dev/null +++ b/pocs/ds-rebase/dev/vite.config.ts @@ -0,0 +1,7 @@ +import react from '@vitejs/plugin-react' +import { defineConfig } from 'vite' + +export default defineConfig({ + root: './dev', + plugins: [react()], +}) diff --git a/pocs/ds-rebase/package.json b/pocs/ds-rebase/package.json new file mode 100644 index 0000000..7844084 --- /dev/null +++ b/pocs/ds-rebase/package.json @@ -0,0 +1,57 @@ +{ + "name": "react-components-starter", + "version": "0.0.0", + "description": "A starter for creating a React component library.", + "type": "module", + "license": "MIT", + "homepage": "https://github.com/author/library#readme", + "bugs": { + "url": "https://github.com/author/library/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/author/library.git" + }, + "author": "Author Name ", + "files": [ + "dist" + ], + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": "./dist/index.js", + "./package.json": "./package.json" + }, + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "tsdown", + "watch": "tsdown --watch", + "dev": "vite --config dev/vite.config.ts", + "test": "vitest", + "typecheck": "tsc --noEmit", + "release": "bumpp && pnpm publish", + "prepublishOnly": "pnpm run build" + }, + "peerDependencies": { + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.0", + "@tsconfig/strictest": "^2.0.8", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "bumpp": "^10.3.1", + "happy-dom": "^20.0.10", + "tsdown": "^0.16.4", + "typescript": "^5.9.3", + "vite": "npm:rolldown-vite@^7.2.5", + "vitest": "^4.0.9" + } +} diff --git a/pocs/ds-rebase/src/MyButton.tsx b/pocs/ds-rebase/src/MyButton.tsx new file mode 100644 index 0000000..7a71a4c --- /dev/null +++ b/pocs/ds-rebase/src/MyButton.tsx @@ -0,0 +1,16 @@ +import { useState } from 'react' + +interface MyButtonProps { + type?: 'primary' +} + +export const MyButton: React.FC = ({ type }) => { + let [count, setCount] = useState(0) + return ( + + ) +} diff --git a/pocs/ds-rebase/src/index.ts b/pocs/ds-rebase/src/index.ts new file mode 100644 index 0000000..a607dca --- /dev/null +++ b/pocs/ds-rebase/src/index.ts @@ -0,0 +1 @@ +export { MyButton } from './MyButton' diff --git a/pocs/ds-rebase/tests/index.test.tsx b/pocs/ds-rebase/tests/index.test.tsx new file mode 100644 index 0000000..e661d79 --- /dev/null +++ b/pocs/ds-rebase/tests/index.test.tsx @@ -0,0 +1,17 @@ +/// + +import { render, screen } from '@testing-library/react' +import { expect, test } from 'vitest' +import { MyButton } from '../src' + +test('button', () => { + render() + + const buttonElement = screen.getByText(/my button/i) + + expect(buttonElement).toBeInTheDocument() + expect(buttonElement).toHaveTextContent('my button type: primary count: 0') + expect(buttonElement.outerHTML).toMatchInlineSnapshot(`""`) + + expect(buttonElement).toHaveClass('my-button') +}) diff --git a/pocs/ds-rebase/tests/setup.ts b/pocs/ds-rebase/tests/setup.ts new file mode 100644 index 0000000..c44951a --- /dev/null +++ b/pocs/ds-rebase/tests/setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom' diff --git a/pocs/ds-rebase/tsconfig.json b/pocs/ds-rebase/tsconfig.json new file mode 100644 index 0000000..5e9e89a --- /dev/null +++ b/pocs/ds-rebase/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "@tsconfig/strictest/tsconfig.json", + "compilerOptions": { + "target": "esnext", + "jsx": "react-jsx", + "lib": ["es2023", "DOM"], + "moduleDetection": "force", + "module": "preserve", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "types": [], + "declaration": true, + "emitDeclarationOnly": true, + "verbatimModuleSyntax": true, + }, + "include": ["src"] +} diff --git a/pocs/ds-rebase/tsdown.config.ts b/pocs/ds-rebase/tsdown.config.ts new file mode 100644 index 0000000..4c6bc29 --- /dev/null +++ b/pocs/ds-rebase/tsdown.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from 'tsdown' + +export default defineConfig({ + platform: 'neutral', + // ...config options +}) diff --git a/pocs/ds-rebase/vitest.config.ts b/pocs/ds-rebase/vitest.config.ts new file mode 100644 index 0000000..8a2d860 --- /dev/null +++ b/pocs/ds-rebase/vitest.config.ts @@ -0,0 +1,11 @@ +import react from '@vitejs/plugin-react' +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + plugins: [react()], + test: { + environment: 'happy-dom', + globals: true, + setupFiles: './tests/setup.ts', + }, +}) From 7f43ce675c6885051b4f48ae0f1fbc6daa69220a Mon Sep 17 00:00:00 2001 From: Lu Nelson Date: Fri, 28 Nov 2025 10:53:30 +0100 Subject: [PATCH 2/6] add the gathered docs --- pocs/ds-rebase/docs/design-system-review.md | 693 ++++++++++++++++++++ 1 file changed, 693 insertions(+) create mode 100644 pocs/ds-rebase/docs/design-system-review.md diff --git a/pocs/ds-rebase/docs/design-system-review.md b/pocs/ds-rebase/docs/design-system-review.md new file mode 100644 index 0000000..5cf9daf --- /dev/null +++ b/pocs/ds-rebase/docs/design-system-review.md @@ -0,0 +1,693 @@ +# Design System Review and Recommendations + +**Date**: 2025-11-27 +**Packages Reviewed**: + +- `@hashintel/ds-components` +- `@hashintel/ds-theme` +- `@hashintel/ds-helpers` + +--- + +## Executive Summary + +The current design system has a solid foundation (PandaCSS, Ark UI, Figma integration) but suffers from: + +1. An overcomplicated, non-standard Figma export pipeline +2. Unnecessary package separation creating dependency complexity +3. PandaCSS lock-in with no portable token format +4. Component styling patterns that won't scale + +This document outlines ticketable tasks to address these issues. + +--- + +## Current Architecture + +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ ds-theme │────▶│ ds-helpers │────▶│ ds-components │ +│ │ │ │ │ │ +│ PandaCSS preset │ │ Generated CSS │ │ React + Ark UI │ +│ (1,662 lines) │ │ utilities │ │ components │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ + ▲ + │ +┌───────┴───────┐ +│ Figma Plugin │ "Variables Exporter for Dev Mode" (third-party) +│ + toPanda.ts │ Custom transformation script (~320 lines) +└───────────────┘ +``` + +### Current Figma Workflow (Manual) + +1. Open Figma file +2. Run third-party "Variables Exporter for Dev Mode" plugin +3. Copy JSON output to a file +4. Run `yarn generate:panda ./path/to/file.json` +5. Commit generated `src/index.ts` + +**Problems**: Manual, non-standard format, no automation, plugin could break/disappear. + +--- + +## Task 1: Establish Standard Token Format (W3C DTCG) + +### Problem + +Tokens are stored as a PandaCSS-specific TypeScript preset (`ds-theme/src/index.ts`), not a portable format. This: + +- Locks the system to PandaCSS +- Prevents use in plain CSS, Tailwind, native apps, etc. +- Makes the Figma sync script unnecessarily complex + +### Recommendation + +Adopt the [W3C Design Tokens Community Group (DTCG) format](https://tr.designtokens.org/format/) as the source of truth. + +**Example structure**: + +``` +tokens/ +├── colors.light.json # Core color primitives (light mode values) +├── colors.dark.json # Core color primitives (dark mode values) +├── semantic.json # Semantic aliases (text.primary → core.gray.90) +├── spacing.json +├── typography.json +└── radii.json +``` + +**Example token file** (`tokens/colors.light.json`): + +```json +{ + "core": { + "gray": { + "50": { + "$type": "color", + "$value": "#737373" + }, + "90": { + "$type": "color", + "$value": "#171717" + } + } + } +} +``` + +### Acceptance Criteria + +- [ ] Tokens stored as W3C DTCG JSON files +- [ ] One file per collection/mode from Figma +- [ ] Human-readable and diffable in PRs +- [ ] Validated against DTCG schema + +### Estimated Scope + +Medium - Requires converting existing preset to JSON format + +--- + +## Task 2: Replace Custom Script with Style Dictionary + +### Problem + +The custom `toPanda.ts` script (~320 lines) manually handles: + +- Type inference from Figma scopes +- Alias resolution +- Mode-to-condition mapping +- Name sanitization + +This reinvents what [Style Dictionary](https://amzn.github.io/style-dictionary/) does out of the box. + +### Recommendation + +Use Style Dictionary with [@tokens-studio/sd-transforms](https://www.npmjs.com/package/@tokens-studio/sd-transforms) to generate outputs. + +**Example `style-dictionary.config.js`**: + +```javascript +import StyleDictionary from 'style-dictionary'; +import { registerTransforms } from '@tokens-studio/sd-transforms'; + +registerTransforms(StyleDictionary); + +export default { + source: ['tokens/**/*.json'], + platforms: { + css: { + transformGroup: 'tokens-studio', + buildPath: 'dist/', + files: [{ + destination: 'tokens.css', + format: 'css/variables', + }] + }, + panda: { + transformGroup: 'tokens-studio', + buildPath: 'dist/', + files: [{ + destination: 'panda-preset.ts', + format: 'panda/preset', // custom format + }] + } + } +}; +``` + +### Benefits + +- Industry-standard tooling with large community +- Multi-platform output (CSS, iOS, Android, Tailwind, PandaCSS) +- Built-in alias resolution +- Extensible via custom transforms/formats + +### Acceptance Criteria + +- [ ] Style Dictionary configured with tokens-studio transforms +- [ ] Generates CSS custom properties file +- [ ] Generates PandaCSS preset (if still needed) +- [ ] Custom `toPanda.ts` script deleted + +### Estimated Scope + +Medium - Style Dictionary setup, custom format for PandaCSS if needed + +--- + +## Task 3: Automate Figma Sync with GitHub Actions + +### Problem + +Current workflow is manual: + +1. Designer updates Figma +2. Developer manually exports via plugin +3. Developer runs script +4. Developer commits + +No automation, easy to forget, drift between Figma and code. + +### Recommendation + +**Option A: Figma REST API (requires Enterprise)** + +Use [Figma's official GitHub Action example](https://github.com/figma/variables-github-action-example) for bi-directional sync. + +```yaml +# .github/workflows/sync-figma-tokens.yml +name: Sync Figma Variables to Tokens +on: + workflow_dispatch: + schedule: + - cron: '0 9 * * 1' # Weekly on Mondays + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Fetch Figma variables + run: node scripts/fetch-figma-variables.js + env: + FIGMA_ACCESS_TOKEN: ${{ secrets.FIGMA_ACCESS_TOKEN }} + FIGMA_FILE_KEY: ${{ secrets.FIGMA_FILE_KEY }} + - name: Create PR if changed + uses: peter-evans/create-pull-request@v5 + with: + title: 'chore: sync design tokens from Figma' + branch: chore/sync-figma-tokens +``` + +**Option B: Tokens Studio (no Enterprise required)** + +Use [Tokens Studio plugin](https://tokens.studio/) which can sync directly to GitHub. + +### Acceptance Criteria + +- [ ] Automated workflow fetches tokens from Figma +- [ ] Changes create PR for review +- [ ] Works on schedule or manual trigger +- [ ] Supports bi-directional sync (nice-to-have) + +### Estimated Scope + +Medium - Depends on Figma plan (Enterprise vs not) + +### Open Question + +Does HASH have Figma Enterprise? This determines whether REST API is available. + +--- + +## Task 4: Consolidate Packages + +### Problem + +Three packages with tight coupling: + +- `ds-theme` - Just a TypeScript file (no build) +- `ds-helpers` - PandaCSS codegen output +- `ds-components` - Actual components + +This creates: + +- Unnecessary npm package overhead +- Complex dependency chain +- Confusing for consumers + +### Recommendation + +**Option A: Single package** + +``` +@hashintel/design-system/ +├── tokens/ # W3C DTCG JSON source +├── dist/ +│ ├── tokens.css # CSS custom properties +│ ├── tokens.js # JS constants +│ └── components/ # React components +├── src/ +│ └── components/ +└── style-dictionary.config.js +``` + +**Option B: Two packages** + +``` +@hashintel/ds-tokens/ # Tokens only (JSON + CSS + JS exports) +@hashintel/ds-components/ # React components (depends on ds-tokens) +``` + +### Acceptance Criteria + +- [ ] Decide on package structure (1 vs 2 packages) +- [ ] Consolidate code +- [ ] Update all internal consumers +- [ ] Publish to npm (if public) + +### Estimated Scope + +Large - Requires updating all consumers, potential breaking changes + +--- + +## Task 5: Generate CSS Custom Properties + +### Problem + +Tokens are only usable via PandaCSS `css()` function. No standalone CSS file with custom properties. + +This means: + +- Can't use tokens in plain CSS +- Can't share with non-React apps +- No CSS-native dark mode via `[data-theme="dark"]` + +### Recommendation + +Generate a CSS file with all tokens as custom properties: + +```css +:root { + /* Core primitives */ + --color-core-gray-50: #737373; + --color-core-gray-90: #171717; + + /* Semantic tokens (reference primitives) */ + --color-text-primary: var(--color-core-gray-90); + --color-text-secondary: var(--color-core-gray-70); + + /* Spacing */ + --spacing-1: 1px; + --spacing-2: 2px; + /* ... */ +} + +[data-theme="dark"] { + --color-core-gray-50: #9ca3af; + --color-core-gray-90: #f6f8f9; +} +``` + +### Benefits + +- Works everywhere (React, Vue, plain HTML) +- Native dark mode support +- Browser DevTools can inspect/modify +- Smaller JS bundle (no runtime token resolution) + +### Acceptance Criteria + +- [ ] CSS file generated with all tokens +- [ ] Semantic tokens reference core tokens via `var()` +- [ ] Dark mode values in `[data-theme="dark"]` selector +- [ ] Exported from package for consumers + +### Estimated Scope + +Small - Style Dictionary can do this with minimal config + +--- + +## Task 6: Refactor Component Styling Patterns + +### Problem + +Components have massive inline style blocks. Example from `button.tsx`: + +```typescript +// 222 lines of css() in a single call +css({ + "&[data-variant='primary'][data-color-scheme='brand']": { + backgroundColor: "bg.brand.bold.default", + // ... + }, + "&[data-variant='primary'][data-color-scheme='neutral']": { + // ... + }, + // ... repeated for every variant/size/state combination +}) +``` + +This is: + +- Hard to read and review +- Difficult to maintain as variants grow +- Not using PandaCSS's recipe system + +### Recommendation + +Use PandaCSS [recipes](https://panda-css.com/docs/concepts/recipes) (`cva`) or [slot recipes](https://panda-css.com/docs/concepts/slot-recipes) (`sva`): + +```typescript +import { cva } from '@hashintel/ds-helpers/css'; + +const buttonRecipe = cva({ + base: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + fontWeight: 'medium', + cursor: 'pointer', + }, + variants: { + variant: { + primary: { /* ... */ }, + secondary: { /* ... */ }, + ghost: { /* ... */ }, + }, + colorScheme: { + brand: { /* ... */ }, + neutral: { /* ... */ }, + critical: { /* ... */ }, + }, + size: { + xs: { height: '24px', px: 'spacing.5', fontSize: 'size.textsm' }, + sm: { height: '28px', px: 'spacing.5', fontSize: 'size.textsm' }, + md: { height: '32px', px: 'spacing.6', fontSize: 'size.textsm' }, + lg: { height: '40px', px: 'spacing.8', fontSize: 'size.textbase' }, + }, + }, + compoundVariants: [ + { + variant: 'primary', + colorScheme: 'brand', + css: { + backgroundColor: 'bg.brand.bold.default', + color: 'text.inverted', + _hover: { backgroundColor: 'bg.brand.bold.hover' }, + }, + }, + // ... other combinations + ], + defaultVariants: { + variant: 'primary', + colorScheme: 'brand', + size: 'md', + }, +}); +``` + +### Acceptance Criteria + +- [ ] Button refactored to use `cva` +- [ ] Other components follow same pattern +- [ ] Consistent disabled state handling across components +- [ ] Consistent focus ring pattern across components + +### Estimated Scope + +Medium - Refactor each component, establish patterns + +--- + +## Task 7: Clean Up Token Naming Issues + +### Problem + +Several naming issues in the current token structure: + +1. **Redundant nesting**: `spacing.spacing.0` (double "spacing") +2. **Unclear aliases**: `spacing.spacing.default.0` vs `spacing.spacing.0` +3. **Placeholder values**: `colors.color.accent.*` has many `#ffffff` placeholders +4. **Suspicious names**: `fonts.weight.normaldelete`, `fonts.weight.mediumdelete` +5. **Overcomplicated radii**: `radii.core.full.0` through `radii.core.full.10` all equal `9999px` + +### Recommendation + +Clean up during DTCG migration: + +```json +// Before (current) +"spacing.spacing.default.0": "0px" +"spacing.spacing.0": "{spacing.spacing.default.0}" + +// After (cleaned) +"spacing.0": "0px" +``` + +### Acceptance Criteria + +- [ ] Remove redundant nesting +- [ ] Remove placeholder/unused tokens +- [ ] Fix suspicious token names +- [ ] Simplify radii scale +- [ ] Document token naming conventions + +### Estimated Scope + +Small-Medium - Part of DTCG migration + +--- + +## Task 8: Add Missing Token Categories + +### Problem + +Current tokens are missing common design system categories: + +| Category | Status | Used In Components As | +| ----------- | ------- | --------------------- | +| Colors | Present | Tokens | +| Spacing | Present | Tokens | +| Radii | Present | Tokens | +| Typography | Partial | Tokens | +| Shadows | Missing | Hardcoded or absent | +| Z-indices | Missing | Hardcoded | +| Transitions | Missing | `"[all 0.2s ease]"` | +| Borders | Missing | Inline values | + +### Recommendation + +Add missing categories to Figma variables (source of truth) or manually to token files: + +```json +{ + "shadow": { + "sm": { + "$type": "shadow", + "$value": "0 1px 2px 0 rgb(0 0 0 / 0.05)" + }, + "focus-ring": { + "$type": "shadow", + "$value": "0 0 0 2px var(--color-core-custom-30)" + } + }, + "transition": { + "fast": { + "$type": "duration", + "$value": "150ms" + }, + "normal": { + "$type": "duration", + "$value": "200ms" + } + } +} +``` + +### Acceptance Criteria + +- [ ] Shadow tokens defined +- [ ] Transition/duration tokens defined +- [ ] Z-index scale defined +- [ ] Components updated to use new tokens +- [ ] No more hardcoded `"[...]"` escape values in components + +### Estimated Scope + +Medium - Define tokens, update components + +--- + +## Task 9: Remove `canvas` Dependency + +### Problem + +`ds-components` depends on `canvas: 3.2.0`, a heavy Node.js native module. This is used by WebGL filter effects in `src/lib/`: + +- `filter.tsx` +- `flexible-filter.tsx` +- `surface-equations.ts` +- Various motion/animation hooks + +This will cause issues for: + +- SSR (server-side rendering) +- Edge runtimes (Cloudflare Workers, Vercel Edge) +- Bundle size + +### Recommendation + +Either: + +1. **Extract to separate package**: `@hashintel/ds-effects` for WebGL components +2. **Make optional**: Dynamic import with fallback +3. **Remove if unused**: If RefractivePane isn't being used, remove it + +### Acceptance Criteria + +- [ ] Determine if WebGL effects are needed +- [ ] If yes, extract to optional package +- [ ] If no, remove `canvas` dependency and related code +- [ ] Verify SSR compatibility + +### Estimated Scope + +Small-Medium - Depends on whether effects are needed + +--- + +## Task 10: Add Component Tests + +### Problem + +No test files exist despite `test:watch` script in package.json. Given the complexity of variant combinations, this is risky. + +### Recommendation + +Add tests for: + +1. **Rendering**: Components render without errors +2. **Variants**: All variant combinations apply correct classes +3. **Accessibility**: Keyboard navigation, ARIA attributes +4. **Interactions**: Click handlers, state changes + +**Example test** (`button.test.tsx`): + +```typescript +import { render, screen } from '@testing-library/react'; +import { Button } from './button'; + +describe('Button', () => { + it('renders with default props', () => { + render(); + expect(screen.getByRole('button')).toHaveTextContent('Click me'); + }); + + it('applies variant classes', () => { + const { container } = render( + + ); + expect(container.firstChild).toHaveAttribute('data-variant', 'secondary'); + expect(container.firstChild).toHaveAttribute('data-color-scheme', 'critical'); + }); + + it('disables when loading', () => { + render(); + expect(screen.getByRole('button')).toBeDisabled(); + }); +}); +``` + +### Acceptance Criteria + +- [ ] Test setup with Vitest + Testing Library +- [ ] Tests for each component +- [ ] Coverage threshold established +- [ ] Tests run in CI + +### Estimated Scope + +Medium - Setup + write tests for each component + +--- + +## Suggested Task Order + +Based on dependencies and impact: + +### Phase 1: Foundation + +1. **Task 1**: Establish W3C DTCG token format +2. **Task 7**: Clean up token naming (do alongside Task 1) +3. **Task 2**: Replace custom script with Style Dictionary + +### Phase 2: Outputs + +4. **Task 5**: Generate CSS custom properties +5. **Task 8**: Add missing token categories +6. **Task 3**: Automate Figma sync + +### Phase 3: Components + +7. **Task 6**: Refactor component styling patterns +8. **Task 9**: Remove `canvas` dependency +9. **Task 10**: Add component tests + +### Phase 4: Structure + +10. **Task 4**: Consolidate packages (breaking change, do last) + +--- + +## Open Questions + +1. **Does HASH have Figma Enterprise?** - Determines REST API availability +2. **Is the WebGL RefractivePane component used?** - Determines `canvas` dependency fate +3. **Should tokens be public npm packages?** - Affects versioning strategy +4. **What other apps consume these packages?** - Affects migration strategy + +--- + +## References + +- [W3C Design Tokens Format](https://tr.designtokens.org/format/) +- [Figma Variables GitHub Action Example](https://github.com/figma/variables-github-action-example) +- [Style Dictionary](https://amzn.github.io/style-dictionary/) +- [Tokens Studio](https://tokens.studio/) +- [@tokens-studio/sd-transforms](https://www.npmjs.com/package/@tokens-studio/sd-transforms) +- [PandaCSS Recipes](https://panda-css.com/docs/concepts/recipes) + +## Revised References +- [Figma to Panda CSS Workflow](https://www.perplexity.ai/search/figma-to-panda-css-workflow-3SYUk2xGTNqjtrEoFMbmZQ) +- [panda-variables-config | Figma](https://www.figma.com/community/plugin/1547569940760832554/panda-variables-config) +- [variables-to-css | Figma](https://www.figma.com/community/plugin/1460027932302083848/variables-to-css) +- [Tokens | Panda CSS - Panda CSS](https://panda-css.com/docs/theming/tokens#shadows) +- [Design Tokens Format Module 2025.10](https://www.designtokens.org/tr/drafts/format/) +- [Splitter | Chakra UI](https://www.chakra-ui.com/docs/components/splitter) +- [Generating a Custom Chakra UI v3 Theme from Design Tokens: A Complete Guide - DEV Community](https://dev.to/kiranmantha/generating-a-custom-chakra-ui-v3-theme-from-design-tokens-a-complete-guide-1085) +- [Design Tokens Community Group](https://www.designtokens.org/) From 918ec4863f841cd83b4fdcf5264158f669536037 Mon Sep 17 00:00:00 2001 From: Lu Nelson Date: Fri, 28 Nov 2025 12:41:44 +0100 Subject: [PATCH 3/6] rename base folder and init panda --- pocs/ds-figma-to-panda/.gitignore | 8 + .../README.md | 0 .../dev/index.html | 0 .../dev/src/App.tsx | 0 .../dev/src/index.tsx | 0 .../dev/src/style.css | 0 .../dev/vite.config.ts | 0 .../docs/design-system-review.md | 0 pocs/ds-figma-to-panda/docs/figma-to-panda.md | 1 + .../package.json | 2 + pocs/ds-figma-to-panda/panda.config.ts | 20 + pocs/ds-figma-to-panda/pnpm-lock.yaml | 3461 +++++++++++++++++ pocs/ds-figma-to-panda/postcss.config.cjs | 5 + .../src/MyButton.tsx | 0 .../src/index.ts | 0 .../tests/index.test.tsx | 0 .../tests/setup.ts | 0 .../tsconfig.json | 0 .../tsdown.config.ts | 0 .../vitest.config.ts | 0 pocs/ds-rebase/.gitignore | 4 - 21 files changed, 3497 insertions(+), 4 deletions(-) create mode 100644 pocs/ds-figma-to-panda/.gitignore rename pocs/{ds-rebase => ds-figma-to-panda}/README.md (100%) rename pocs/{ds-rebase => ds-figma-to-panda}/dev/index.html (100%) rename pocs/{ds-rebase => ds-figma-to-panda}/dev/src/App.tsx (100%) rename pocs/{ds-rebase => ds-figma-to-panda}/dev/src/index.tsx (100%) rename pocs/{ds-rebase => ds-figma-to-panda}/dev/src/style.css (100%) rename pocs/{ds-rebase => ds-figma-to-panda}/dev/vite.config.ts (100%) rename pocs/{ds-rebase => ds-figma-to-panda}/docs/design-system-review.md (100%) create mode 100644 pocs/ds-figma-to-panda/docs/figma-to-panda.md rename pocs/{ds-rebase => ds-figma-to-panda}/package.json (95%) create mode 100644 pocs/ds-figma-to-panda/panda.config.ts create mode 100644 pocs/ds-figma-to-panda/pnpm-lock.yaml create mode 100644 pocs/ds-figma-to-panda/postcss.config.cjs rename pocs/{ds-rebase => ds-figma-to-panda}/src/MyButton.tsx (100%) rename pocs/{ds-rebase => ds-figma-to-panda}/src/index.ts (100%) rename pocs/{ds-rebase => ds-figma-to-panda}/tests/index.test.tsx (100%) rename pocs/{ds-rebase => ds-figma-to-panda}/tests/setup.ts (100%) rename pocs/{ds-rebase => ds-figma-to-panda}/tsconfig.json (100%) rename pocs/{ds-rebase => ds-figma-to-panda}/tsdown.config.ts (100%) rename pocs/{ds-rebase => ds-figma-to-panda}/vitest.config.ts (100%) delete mode 100644 pocs/ds-rebase/.gitignore diff --git a/pocs/ds-figma-to-panda/.gitignore b/pocs/ds-figma-to-panda/.gitignore new file mode 100644 index 0000000..c823581 --- /dev/null +++ b/pocs/ds-figma-to-panda/.gitignore @@ -0,0 +1,8 @@ +node_modules +dist +*.log +.DS_Store + +## Panda +styled-system +styled-system-studio \ No newline at end of file diff --git a/pocs/ds-rebase/README.md b/pocs/ds-figma-to-panda/README.md similarity index 100% rename from pocs/ds-rebase/README.md rename to pocs/ds-figma-to-panda/README.md diff --git a/pocs/ds-rebase/dev/index.html b/pocs/ds-figma-to-panda/dev/index.html similarity index 100% rename from pocs/ds-rebase/dev/index.html rename to pocs/ds-figma-to-panda/dev/index.html diff --git a/pocs/ds-rebase/dev/src/App.tsx b/pocs/ds-figma-to-panda/dev/src/App.tsx similarity index 100% rename from pocs/ds-rebase/dev/src/App.tsx rename to pocs/ds-figma-to-panda/dev/src/App.tsx diff --git a/pocs/ds-rebase/dev/src/index.tsx b/pocs/ds-figma-to-panda/dev/src/index.tsx similarity index 100% rename from pocs/ds-rebase/dev/src/index.tsx rename to pocs/ds-figma-to-panda/dev/src/index.tsx diff --git a/pocs/ds-rebase/dev/src/style.css b/pocs/ds-figma-to-panda/dev/src/style.css similarity index 100% rename from pocs/ds-rebase/dev/src/style.css rename to pocs/ds-figma-to-panda/dev/src/style.css diff --git a/pocs/ds-rebase/dev/vite.config.ts b/pocs/ds-figma-to-panda/dev/vite.config.ts similarity index 100% rename from pocs/ds-rebase/dev/vite.config.ts rename to pocs/ds-figma-to-panda/dev/vite.config.ts diff --git a/pocs/ds-rebase/docs/design-system-review.md b/pocs/ds-figma-to-panda/docs/design-system-review.md similarity index 100% rename from pocs/ds-rebase/docs/design-system-review.md rename to pocs/ds-figma-to-panda/docs/design-system-review.md diff --git a/pocs/ds-figma-to-panda/docs/figma-to-panda.md b/pocs/ds-figma-to-panda/docs/figma-to-panda.md new file mode 100644 index 0000000..8051bba --- /dev/null +++ b/pocs/ds-figma-to-panda/docs/figma-to-panda.md @@ -0,0 +1 @@ +# figma to panda workflow diff --git a/pocs/ds-rebase/package.json b/pocs/ds-figma-to-panda/package.json similarity index 95% rename from pocs/ds-rebase/package.json rename to pocs/ds-figma-to-panda/package.json index 7844084..f427e77 100644 --- a/pocs/ds-rebase/package.json +++ b/pocs/ds-figma-to-panda/package.json @@ -27,6 +27,7 @@ "access": "public" }, "scripts": { + "prepare": "panda codegen", "build": "tsdown", "watch": "tsdown --watch", "dev": "vite --config dev/vite.config.ts", @@ -40,6 +41,7 @@ "react-dom": "^19.2.0" }, "devDependencies": { + "@pandacss/dev": "^1.5.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.0", "@tsconfig/strictest": "^2.0.8", diff --git a/pocs/ds-figma-to-panda/panda.config.ts b/pocs/ds-figma-to-panda/panda.config.ts new file mode 100644 index 0000000..be6363d --- /dev/null +++ b/pocs/ds-figma-to-panda/panda.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from "@pandacss/dev"; + +export default defineConfig({ + // Whether to use css reset + preflight: true, + + // Where to look for your css declarations + include: ["./src/**/*.{js,jsx,ts,tsx}", "./pages/**/*.{js,jsx,ts,tsx}"], + + // Files to exclude + exclude: [], + + // Useful for theme customization + theme: { + extend: {}, + }, + + // The output directory for your css system + outdir: "styled-system", +}); diff --git a/pocs/ds-figma-to-panda/pnpm-lock.yaml b/pocs/ds-figma-to-panda/pnpm-lock.yaml new file mode 100644 index 0000000..9a1cffd --- /dev/null +++ b/pocs/ds-figma-to-panda/pnpm-lock.yaml @@ -0,0 +1,3461 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + react: + specifier: ^19.2.0 + version: 19.2.0 + react-dom: + specifier: ^19.2.0 + version: 19.2.0(react@19.2.0) + devDependencies: + '@pandacss/dev': + specifier: ^1.5.1 + version: 1.5.1(typescript@5.9.3) + '@testing-library/jest-dom': + specifier: ^6.9.1 + version: 6.9.1 + '@testing-library/react': + specifier: ^16.3.0 + version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tsconfig/strictest': + specifier: ^2.0.8 + version: 2.0.8 + '@types/node': + specifier: ^24.10.1 + version: 24.10.1 + '@types/react': + specifier: ^19.2.5 + version: 19.2.7 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.7) + '@vitejs/plugin-react': + specifier: ^5.1.1 + version: 5.1.1(rolldown-vite@7.2.8(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(yaml@2.8.1)) + bumpp: + specifier: ^10.3.1 + version: 10.3.2 + happy-dom: + specifier: ^20.0.10 + version: 20.0.11 + tsdown: + specifier: ^0.16.4 + version: 0.16.8(typescript@5.9.3) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vite: + specifier: npm:rolldown-vite@^7.2.5 + version: rolldown-vite@7.2.8(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(yaml@2.8.1) + vitest: + specifier: ^4.0.9 + version: 4.0.14(@types/node@24.10.1)(happy-dom@20.0.11)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1) + +packages: + + '@adobe/css-tools@4.4.4': + resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + + '@clack/core@0.5.0': + resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==} + + '@clack/prompts@0.11.0': + resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} + + '@csstools/postcss-cascade-layers@5.0.2': + resolution: {integrity: sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/selector-specificity@5.0.0': + resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@emnapi/core@1.7.1': + resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} + + '@emnapi/runtime@1.7.1': + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@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-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@napi-rs/wasm-runtime@1.0.7': + resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@oxc-project/runtime@0.99.0': + resolution: {integrity: sha512-8iE5/4OK0SLHqWzRxSvI1gjFPmIH6718s8iwkuco95rBZsCZIHq+5wy4lYsASxnH+8FOhbGndiUrcwsVG5i2zw==} + engines: {node: ^20.19.0 || >=22.12.0} + + '@oxc-project/types@0.99.0': + resolution: {integrity: sha512-LLDEhXB7g1m5J+woRSgfKsFPS3LhR9xRhTeIoEBm5WrkwMxn6eZ0Ld0c0K5eHB57ChZX6I3uSmmLjZ8pcjlRcw==} + + '@pandacss/config@1.5.1': + resolution: {integrity: sha512-aO+YVRlccLXuFC30DEO9ZDkvXwjbCXk1blIpii8PuclTAR0+YPq8xXVRTVK3fR3MiA0zROca8nAf5Kb+wHVKPw==} + + '@pandacss/core@1.5.1': + resolution: {integrity: sha512-okuvSm5o0gmQmkpLONH4ReqgBVOMMsfb9MyK8vpcZUpzvMBiraVcgsbLxKQyHlmVDZNbKLLokIycb8KEpqtIDQ==} + + '@pandacss/dev@1.5.1': + resolution: {integrity: sha512-U1NWO3ZgOLlABtDk6MMQwTNYOCiUtUg+HEoHPdEExLzNn+20mrLf1IZWJyn4zXKSpANGSi79EV7X4yxPa+W+MA==} + hasBin: true + + '@pandacss/extractor@1.5.1': + resolution: {integrity: sha512-/DG4MnVo5LA0SpJq4rI0RgOp8kPjZMP5a1+q4MwLDHPtfWTwPaiKv7LULBW1L11V+fMOYn+d44dBKgU4dj6oSg==} + + '@pandacss/generator@1.5.1': + resolution: {integrity: sha512-kijxpjpvRQBz16BiBcghknthsdmVxSJD5C71jlcM4aVeqoZSCWDNcmlL/2SSCMy7oC6HANu2oRXS/L1YgYzHGA==} + + '@pandacss/is-valid-prop@1.5.1': + resolution: {integrity: sha512-AlOt+MqqwDlIdVEdW6wEtvDmX8MmPv004oD+7tdGN54HKpD9jqrwPwwS9p7YQ7nai631JlyladshFHqe1xl7+w==} + + '@pandacss/logger@1.5.1': + resolution: {integrity: sha512-jC835vvSGIOxCZcqXH1alXdzO/ThUCE3HXGjt17mGli/QiVT3b/v83n/Cfz0wiHP3zSUlwVYaPAlXryepsQNWA==} + + '@pandacss/node@1.5.1': + resolution: {integrity: sha512-qgiydokbjWcSqzsuCP1LR91IOLs7JgsMJkgAbEim/PdVH3NbKNjCUx9mK8bt1JO3/GKNC+GfePpacxGLmt/p6w==} + + '@pandacss/parser@1.5.1': + resolution: {integrity: sha512-CuG5qdsQkw2xjxzN9pkfl9JaPgK28FJnRj9jmLb98Vo3J+NkUD2NyzL4k69lKZv9nbcmwn7+HbvMP/DKfx8OvQ==} + + '@pandacss/postcss@1.5.1': + resolution: {integrity: sha512-fZZOf0n6WKm3JQnGXC4Y8RGzw9jDdYpFGaSpVLpE4VotbfBq/jZtACw/pLa4ryferJhRp+WraBvYtKg6w2bQ9w==} + + '@pandacss/preset-base@1.5.1': + resolution: {integrity: sha512-I8USdmUqPPkluznTFilbzLgXzU/+NEzeCvkwuwfi0QZlmGXOXnatM/7IUK7yatNikPx3neqmNh4o4WwWE04dGQ==} + + '@pandacss/preset-panda@1.5.1': + resolution: {integrity: sha512-ZA/MhFK3O/fYIS4p2HDpyPMgCISAi+g5LoPzX/jQbQ5WGfkBS8sTmxIM/XapGNVHAzXFzYOTwqQ87KP3Siiozw==} + + '@pandacss/reporter@1.5.1': + resolution: {integrity: sha512-fCgX/VN9ZDZpvfYJU+bdQpwoR48cMmhtTvPYJIek6KoANKXXJFbpgC5t2N6EtTkktg+3+unks3XpU3FvQdGHTQ==} + + '@pandacss/shared@1.5.1': + resolution: {integrity: sha512-pTHbfT6N7vt6/BncGoMduCo4jnYOvyHC8XdSgV3mzStdGJqw+0R30jeULixYrv7HFGDXCNxzohQ2k8YGOk6UoQ==} + + '@pandacss/token-dictionary@1.5.1': + resolution: {integrity: sha512-w/dSvEaskD7zYHYWbPdYG+zrFLVsYYYJl9hT2cE2spccgJCid40Ov/4/zuP67rC9rPfs7qETMy6ydTPGbCfZ5A==} + + '@pandacss/types@1.5.1': + resolution: {integrity: sha512-fUDPtP3+yW8q5gPC2UfDcrdd/QW3H24kNt5vD30f5dt0CGDGkSoRUP4iJVNViEfQS2MzfDCnYI+PFOCw3eeQFw==} + + '@quansync/fs@0.1.5': + resolution: {integrity: sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==} + + '@rolldown/binding-android-arm64@1.0.0-beta.52': + resolution: {integrity: sha512-MBGIgysimZPqTDcLXI+i9VveijkP5C3EAncEogXhqfax6YXj1Tr2LY3DVuEOMIjWfMPMhtQSPup4fSTAmgjqIw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-beta.52': + resolution: {integrity: sha512-MmKeoLnKu1d9j6r19K8B+prJnIZ7u+zQ+zGQ3YHXGnr41rzE3eqQLovlkvoZnRoxDGPA4ps0pGiwXy6YE3lJyg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-beta.52': + resolution: {integrity: sha512-qpHedvQBmIjT8zdnjN3nWPR2qjQyJttbXniCEKKdHeAbZG9HyNPBUzQF7AZZGwmS9coQKL+hWg9FhWzh2dZ2IA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-beta.52': + resolution: {integrity: sha512-dDp7WbPapj/NVW0LSiH/CLwMhmLwwKb3R7mh2kWX+QW85X1DGVnIEyKh9PmNJjB/+suG1dJygdtdNPVXK1hylg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.52': + resolution: {integrity: sha512-9e4l6vy5qNSliDPqNfR6CkBOAx6PH7iDV4OJiEJzajajGrVy8gc/IKKJUsoE52G8ud8MX6r3PMl97NfwgOzB7g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.52': + resolution: {integrity: sha512-V48oDR84feRU2KRuzpALp594Uqlx27+zFsT6+BgTcXOtu7dWy350J1G28ydoCwKB+oxwsRPx2e7aeQnmd3YJbQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.52': + resolution: {integrity: sha512-ENLmSQCWqSA/+YN45V2FqTIemg7QspaiTjlm327eUAMeOLdqmSOVVyrQexJGNTQ5M8sDYCgVAig2Kk01Ggmqaw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.52': + resolution: {integrity: sha512-klahlb2EIFltSUubn/VLjuc3qxp1E7th8ukayPfdkcKvvYcQ5rJztgx8JsJSuAKVzKtNTqUGOhy4On71BuyV8g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.52': + resolution: {integrity: sha512-UuA+JqQIgqtkgGN2c/AQ5wi8M6mJHrahz/wciENPTeI6zEIbbLGoth5XN+sQe2pJDejEVofN9aOAp0kaazwnVg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.52': + resolution: {integrity: sha512-1BNQW8u4ro8bsN1+tgKENJiqmvc+WfuaUhXzMImOVSMw28pkBKdfZtX2qJPADV3terx+vNJtlsgSGeb3+W6Jiw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.52': + resolution: {integrity: sha512-K/p7clhCqJOQpXGykrFaBX2Dp9AUVIDHGc+PtFGBwg7V+mvBTv/tsm3LC3aUmH02H2y3gz4y+nUTQ0MLpofEEg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.52': + resolution: {integrity: sha512-a4EkXBtnYYsKipjS7QOhEBM4bU5IlR9N1hU+JcVEVeuTiaslIyhWVKsvf7K2YkQHyVAJ+7/A9BtrGqORFcTgng==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.52': + resolution: {integrity: sha512-5ZXcYyd4GxPA6QfbGrNcQjmjbuLGvfz6728pZMsQvGHI+06LT06M6TPtXvFvLgXtexc+OqvFe1yAIXJU1gob/w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.52': + resolution: {integrity: sha512-tzpnRQXJrSzb8Z9sm97UD3cY0toKOImx+xRKsDLX4zHaAlRXWh7jbaKBePJXEN7gNw7Nm03PBNwphdtA8KSUYQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-beta.47': + resolution: {integrity: sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==} + + '@rolldown/pluginutils@1.0.0-beta.52': + resolution: {integrity: sha512-/L0htLJZbaZFL1g9OHOblTxbCYIGefErJjtYOwgl9ZqNx27P3L0SDfjhhHIss32gu5NWgnxuT2a2Hnnv6QGHKA==} + + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} + cpu: [x64] + os: [win32] + + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/react@16.3.0': + resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@ts-morph/common@0.28.1': + resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==} + + '@tsconfig/strictest@2.0.8': + resolution: {integrity: sha512-XnQ7vNz5HRN0r88GYf1J9JJjqtZPiHt2woGJOo2dYqyHGGcd6OLGqSlBB6p1j9mpzja6Oe5BoPqWmeDx6X9rLw==} + + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/node@17.0.45': + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + + '@types/node@20.19.25': + resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==} + + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.7': + resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} + + '@types/whatwg-mimetype@3.0.2': + resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} + + '@vitejs/plugin-react@5.1.1': + resolution: {integrity: sha512-WQfkSw0QbQ5aJ2CHYw23ZGkqnRwqKHD/KYsMeTkZzPT4Jcf0DcBxBtwMJxnu6E7oxw5+JC6ZAiePgh28uJ1HBA==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + '@vitest/expect@4.0.14': + resolution: {integrity: sha512-RHk63V3zvRiYOWAV0rGEBRO820ce17hz7cI2kDmEdfQsBjT2luEKB5tCOc91u1oSQoUOZkSv3ZyzkdkSLD7lKw==} + + '@vitest/mocker@4.0.14': + resolution: {integrity: sha512-RzS5NujlCzeRPF1MK7MXLiEFpkIXeMdQ+rN3Kk3tDI9j0mtbr7Nmuq67tpkOJQpgyClbOltCXMjLZicJHsH5Cg==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.0.14': + resolution: {integrity: sha512-SOYPgujB6TITcJxgd3wmsLl+wZv+fy3av2PpiPpsWPZ6J1ySUYfScfpIt2Yv56ShJXR2MOA6q2KjKHN4EpdyRQ==} + + '@vitest/runner@4.0.14': + resolution: {integrity: sha512-BsAIk3FAqxICqREbX8SetIteT8PiaUL/tgJjmhxJhCsigmzzH8xeadtp7LRnTpCVzvf0ib9BgAfKJHuhNllKLw==} + + '@vitest/snapshot@4.0.14': + resolution: {integrity: sha512-aQVBfT1PMzDSA16Y3Fp45a0q8nKexx6N5Amw3MX55BeTeZpoC08fGqEZqVmPcqN0ueZsuUQ9rriPMhZ3Mu19Ag==} + + '@vitest/spy@4.0.14': + resolution: {integrity: sha512-JmAZT1UtZooO0tpY3GRyiC/8W7dCs05UOq9rfsUUgEZEdq+DuHLmWhPsrTt0TiW7WYeL/hXpaE07AZ2RCk44hg==} + + '@vitest/utils@4.0.14': + resolution: {integrity: sha512-hLqXZKAWNg8pI+SQXyXxWCTOpA3MvsqcbVeNgSi8x/CSN2wi26dSzn1wrOhmCmFjEvN9p8/kLFRHa6PI8jHazw==} + + '@vue/compiler-core@3.5.22': + resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==} + + '@vue/compiler-dom@3.5.22': + resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==} + + '@vue/compiler-sfc@3.5.22': + resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==} + + '@vue/compiler-ssr@3.5.22': + resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==} + + '@vue/shared@3.5.22': + resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansis@4.2.0: + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} + engines: {node: '>=14'} + + args-tokenizer@0.3.0: + resolution: {integrity: sha512-xXAd7G2Mll5W8uo37GETpQ2VrE84M181Z7ugHFGQnJZ50M2mbOv0osSZ9VsSgPfJQ+LVG0prSi0th+ELMsno7Q==} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + ast-kit@2.2.0: + resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} + engines: {node: '>=20.19.0'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + baseline-browser-mapping@2.8.31: + resolution: {integrity: sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==} + hasBin: true + + birpc@2.8.0: + resolution: {integrity: sha512-Bz2a4qD/5GRhiHSwj30c/8kC8QGj12nNDwz3D4ErQ4Xhy35dsSDvF+RA/tWpjyU0pdGtSDiEk6B5fBGE1qNVhw==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + 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.0: + resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bumpp@10.3.2: + resolution: {integrity: sha512-yUUkVx5zpTywLNX97MlrqtpanI7eMMwFwLntWR2EBVDw3/Pm3aRIzCoDEGHATLIiHK9PuJC7xWI4XNWqXItSPg==} + engines: {node: '>=18'} + hasBin: true + + bundle-n-require@1.1.2: + resolution: {integrity: sha512-bEk2jakVK1ytnZ9R2AAiZEeK/GxPUM8jvcRxHZXifZDMcjkI4EG/GlsJ2YGSVYT9y/p/gA9/0yDY8rCGsSU6Tg==} + + c12@3.3.2: + resolution: {integrity: sha512-QkikB2X5voO1okL3QsES0N690Sn/K9WokXqUsDQsWy5SnYb+psYQFGA10iy1bZHj3fjISKsI67Q90gruvWWM3A==} + peerDependencies: + magicast: '*' + peerDependenciesMeta: + magicast: + optional: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001757: + resolution: {integrity: sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==} + + chai@6.2.1: + resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} + engines: {node: '>=18'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + code-block-writer@13.0.3: + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + crosspath@2.0.0: + resolution: {integrity: sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA==} + engines: {node: '>=14.9.0'} + + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-utils@5.0.1: + resolution: {integrity: sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + diff@8.0.2: + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + engines: {node: '>=0.3.1'} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + + dotenv@17.2.3: + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} + engines: {node: '>=12'} + + dts-resolver@2.1.3: + resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==} + engines: {node: '>=20.19.0'} + peerDependencies: + oxc-resolver: '>=11.0.0' + peerDependenciesMeta: + oxc-resolver: + optional: true + + electron-to-chromium@1.5.262: + resolution: {integrity: sha512-NlAsMteRHek05jRUxUR0a5jpjYq9ykk6+kO0yRaMi5moe7u0fVIOeQ3Y30A8dIiWFBNUoQGi1ljb1i5VtS9WQQ==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + engines: {node: '>=12.0.0'} + + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + + giget@2.0.0: + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} + hasBin: true + + 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'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + happy-dom@20.0.11: + resolution: {integrity: sha512-QsCdAUHAmiDeKeaNojb1OHOPF7NjcWPBR7obdu3NwH2a/oyQaLg5d0aaCy/9My6CdPChYF07dvz5chaXBGaD4g==} + engines: {node: '>=20.0.0'} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + javascript-stringify@2.1.0: + resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + 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.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.25.1: + resolution: {integrity: sha512-G4Dcvv85bs5NLENcu/s1f7ehzE3D5ThnlWSDwE190tWXRQCQaqwcuHe+MGSVI/slm0XrxnaayXY+cNl3cSricw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.25.1: + resolution: {integrity: sha512-dYWuCzzfqRueDSmto6YU5SoGHvZTMU1Em9xvhcdROpmtOQLorurUZz8+xFxZ51lCO2LnYbfdjZ/gCqWEkwixNg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.25.1: + resolution: {integrity: sha512-hXoy2s9A3KVNAIoKz+Fp6bNeY+h9c3tkcx1J3+pS48CqAt+5bI/R/YY4hxGL57fWAIquRjGKW50arltD6iRt/w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.25.1: + resolution: {integrity: sha512-tWyMgHFlHlp1e5iW3EpqvH5MvsgoN7ZkylBbG2R2LWxnvH3FuWCJOhtGcYx9Ks0Kv0eZOBud789odkYLhyf1ng==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.25.1: + resolution: {integrity: sha512-Xjxsx286OT9/XSnVLIsFEDyDipqe4BcLeB4pXQ/FEA5+2uWCCuAEarUNQumRucnj7k6ftkAHUEph5r821KBccQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.25.1: + resolution: {integrity: sha512-IhxVFJoTW8wq6yLvxdPvyHv4NjzcpN1B7gjxrY3uaykQNXPHNIpChLB52+wfH+yS58zm1PL4LemUp8u9Cfp6Bw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.25.1: + resolution: {integrity: sha512-RXIaru79KrREPEd6WLXfKfIp4QzoppZvD3x7vuTKkDA64PwTzKJ2jaC43RZHRt8BmyIkRRlmywNhTRMbmkPYpA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.25.1: + resolution: {integrity: sha512-TdcNqFsAENEEFr8fJWg0Y4fZ/nwuqTRsIr7W7t2wmDUlA8eSXVepeeONYcb+gtTj1RaXn/WgNLB45SFkz+XBZA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.25.1: + resolution: {integrity: sha512-9KZZkmmy9oGDSrnyHuxP6iMhbsgChUiu/NSgOx+U1I/wTngBStDf2i2aGRCHvFqj19HqqBEI4WuGVQBa2V6e0A==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.25.1: + resolution: {integrity: sha512-V0RMVZzK1+rCHpymRv4URK2lNhIRyO8g7U7zOFwVAhJuat74HtkjIQpQRKNCwFEYkRGpafOpmXXLoaoBcyVtBg==} + engines: {node: '>= 12.0.0'} + + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + engines: {node: '>= 12.0.0'} + + 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.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + look-it-up@2.1.0: + resolution: {integrity: sha512-nMoGWW2HurtuJf6XAL56FWTDCWLOTSsanrgwOyaR5Y4e3zfG5N/0cU5xWZSEU3tBxhQugRbV1xL9jb+ug7yZww==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + merge-anything@5.1.7: + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} + engines: {node: '>=12.13'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + microdiff@1.5.0: + resolution: {integrity: sha512-Drq+/THMvDdzRYrK0oxJmOKiC24ayUV8ahrt8l3oRK51PWt6gdtrIGrlIH3pT/lFh1z93FbAcidtsHcWbnRz8Q==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} + engines: {node: 20 || >=22} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-eval@2.0.0: + resolution: {integrity: sha512-Ap+L9HznXAVeJj3TJ1op6M6bg5xtTq8L5CU/PJxtkhea/DrIxdTknGKIECKd/v/Lgql95iuMAYvIzBNd0pmcMg==} + engines: {node: '>= 4'} + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + + nypm@0.6.2: + resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-path@0.11.8: + resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==} + engines: {node: '>= 10.12.0'} + + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + outdent@0.8.0: + resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + + package-manager-detector@1.5.0: + resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==} + + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + perfect-debounce@2.0.0: + resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + postcss-discard-duplicates@7.0.2: + resolution: {integrity: sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-discard-empty@7.0.1: + resolution: {integrity: sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-merge-rules@7.0.6: + resolution: {integrity: sha512-2jIPT4Tzs8K87tvgCpSukRQ2jjd+hH6Bb8rEEOUDmmhOeTcqDg5fEFK8uKIu+Pvc3//sm3Uu6FRqfyv7YF7+BQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-selectors@7.0.5: + resolution: {integrity: sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-nested@7.0.2: + resolution: {integrity: sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-normalize-whitespace@7.0.1: + resolution: {integrity: sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + react-dom@19.2.0: + resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} + peerDependencies: + react: ^19.2.0 + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} + engines: {node: '>=0.10.0'} + + react@19.2.0: + resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + engines: {node: '>=0.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rolldown-plugin-dts@0.18.1: + resolution: {integrity: sha512-uIgNMix6OI+6bSkw0nw6O+G/ydPRCWKwvvcEyL6gWkVkSFVGWWO23DX4ZYVOqC7w5u2c8uPY9Q74U0QCKvegFA==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@ts-macro/tsc': ^0.3.6 + '@typescript/native-preview': '>=7.0.0-dev.20250601.1' + rolldown: ^1.0.0-beta.51 + typescript: ^5.0.0 + vue-tsc: ~3.1.0 + peerDependenciesMeta: + '@ts-macro/tsc': + optional: true + '@typescript/native-preview': + optional: true + typescript: + optional: true + vue-tsc: + optional: true + + rolldown-vite@7.2.8: + resolution: {integrity: sha512-8wKihlF6EDF8grimwd7GPOhLkQkSIgj6Hlcp0CXhtO3HAXeUUqhgZmJmn07OF8e4PbTusMX6Yxmy1BptVRZsdw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + esbuild: ^0.25.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 + 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 + + rolldown@1.0.0-beta.52: + resolution: {integrity: sha512-Hbnpljue+JhMJrlOjQ1ixp9me7sUec7OjFvS+A1Qm8k8Xyxmw3ZhxFu7LlSXW1s9AX3POE9W9o2oqCEeR5uDmg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + engines: {node: '>=14.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-evaluator@1.2.0: + resolution: {integrity: sha512-ncSGek1p92bj2ifB7s9UBgryHCkU9vwC5d+Lplt12gT9DH+e41X8dMoHRQjIMeAvyG7j9dEnuHmwgOtuRIQL+Q==} + engines: {node: '>=14.19.0'} + peerDependencies: + jsdom: '>=14.x || >=15.x || >=16.x || >=17.x || >=18.x || >=19.x || >=20.x || >=21.x || >=22.x' + typescript: '>=3.2.x || >= 4.x || >= 5.x' + peerDependenciesMeta: + jsdom: + optional: true + + ts-morph@27.0.2: + resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} + + ts-pattern@5.9.0: + resolution: {integrity: sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg==} + + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + tsdown@0.16.8: + resolution: {integrity: sha512-6ANw9mgU9kk7SvTBKvpDu/DVJeAFECiLUSeL5M7f5Nm5H97E7ybxmXT4PQ23FySYn32y6OzjoAH/lsWCbGzfLA==} + engines: {node: '>=20.19.0'} + hasBin: true + peerDependencies: + '@arethetypeswrong/core': ^0.18.1 + '@vitejs/devtools': ^0.0.0-alpha.18 + publint: ^0.3.0 + typescript: ^5.0.0 + unplugin-lightningcss: ^0.4.0 + unplugin-unused: ^0.5.0 + peerDependenciesMeta: + '@arethetypeswrong/core': + optional: true + '@vitejs/devtools': + optional: true + publint: + optional: true + typescript: + optional: true + unplugin-lightningcss: + optional: true + unplugin-unused: + optional: true + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + unconfig-core@7.4.1: + resolution: {integrity: sha512-Bp/bPZjV2Vl/fofoA2OYLSnw1Z0MOhCX7zHnVCYrazpfZvseBbGhwcNQMxsg185Mqh7VZQqK3C8hFG/Dyng+yA==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unrun@0.2.13: + resolution: {integrity: sha512-vHhOrQ6ntlLsYkP573zYVu8J9VDNm6x3vA1UurhcP/JEepbcSfI8dscuHIBOz5q+3uc1jUndZzpvTLgbntmgMg==} + engines: {node: '>=20.19.0'} + hasBin: true + peerDependencies: + synckit: ^0.11.11 + peerDependenciesMeta: + synckit: + optional: true + + update-browserslist-db@1.1.4: + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vite@7.2.4: + resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.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 + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.0.14: + resolution: {integrity: sha512-d9B2J9Cm9dN9+6nxMnnNJKJCtcyKfnHj15N6YNJfaFHRLua/d3sRKU9RuKmO9mB0XdFtUizlxfz/VPbd3OxGhw==} + 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.0.14 + '@vitest/browser-preview': 4.0.14 + '@vitest/browser-webdriverio': 4.0.14 + '@vitest/ui': 4.0.14 + happy-dom: '*' + jsdom: '*' + 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/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wordwrapjs@5.1.1: + resolution: {integrity: sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==} + engines: {node: '>=12.17'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} + hasBin: true + +snapshots: + + '@adobe/css-tools@4.4.4': {} + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.5': {} + + '@babel/core@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.5 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + + '@babel/parser@7.28.5': + dependencies: + '@babel/types': 7.28.5 + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/runtime@7.28.4': {} + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + + '@babel/traverse@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.5': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@clack/core@0.5.0': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@clack/prompts@0.11.0': + dependencies: + '@clack/core': 0.5.0 + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@csstools/postcss-cascade-layers@5.0.2(postcss@8.5.6)': + dependencies: + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': + dependencies: + postcss-selector-parser: 7.1.0 + + '@emnapi/core@1.7.1': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.7.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + + '@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/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@napi-rs/wasm-runtime@1.0.7': + dependencies: + '@emnapi/core': 1.7.1 + '@emnapi/runtime': 1.7.1 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@oxc-project/runtime@0.99.0': {} + + '@oxc-project/types@0.99.0': {} + + '@pandacss/config@1.5.1': + dependencies: + '@pandacss/logger': 1.5.1 + '@pandacss/preset-base': 1.5.1 + '@pandacss/preset-panda': 1.5.1 + '@pandacss/shared': 1.5.1 + '@pandacss/types': 1.5.1 + bundle-n-require: 1.1.2 + escalade: 3.1.2 + merge-anything: 5.1.7 + microdiff: 1.5.0 + typescript: 5.9.3 + + '@pandacss/core@1.5.1': + dependencies: + '@csstools/postcss-cascade-layers': 5.0.2(postcss@8.5.6) + '@pandacss/is-valid-prop': 1.5.1 + '@pandacss/logger': 1.5.1 + '@pandacss/shared': 1.5.1 + '@pandacss/token-dictionary': 1.5.1 + '@pandacss/types': 1.5.1 + browserslist: 4.24.4 + hookable: 5.5.3 + lightningcss: 1.25.1 + lodash.merge: 4.6.2 + outdent: 0.8.0 + postcss: 8.5.6 + postcss-discard-duplicates: 7.0.2(postcss@8.5.6) + postcss-discard-empty: 7.0.1(postcss@8.5.6) + postcss-merge-rules: 7.0.6(postcss@8.5.6) + postcss-minify-selectors: 7.0.5(postcss@8.5.6) + postcss-nested: 7.0.2(postcss@8.5.6) + postcss-normalize-whitespace: 7.0.1(postcss@8.5.6) + postcss-selector-parser: 7.1.0 + ts-pattern: 5.9.0 + + '@pandacss/dev@1.5.1(typescript@5.9.3)': + dependencies: + '@clack/prompts': 0.11.0 + '@pandacss/config': 1.5.1 + '@pandacss/logger': 1.5.1 + '@pandacss/node': 1.5.1(typescript@5.9.3) + '@pandacss/postcss': 1.5.1(typescript@5.9.3) + '@pandacss/preset-base': 1.5.1 + '@pandacss/preset-panda': 1.5.1 + '@pandacss/shared': 1.5.1 + '@pandacss/token-dictionary': 1.5.1 + '@pandacss/types': 1.5.1 + cac: 6.7.14 + transitivePeerDependencies: + - jsdom + - typescript + + '@pandacss/extractor@1.5.1(typescript@5.9.3)': + dependencies: + '@pandacss/shared': 1.5.1 + ts-evaluator: 1.2.0(typescript@5.9.3) + ts-morph: 27.0.2 + transitivePeerDependencies: + - jsdom + - typescript + + '@pandacss/generator@1.5.1': + dependencies: + '@pandacss/core': 1.5.1 + '@pandacss/is-valid-prop': 1.5.1 + '@pandacss/logger': 1.5.1 + '@pandacss/shared': 1.5.1 + '@pandacss/token-dictionary': 1.5.1 + '@pandacss/types': 1.5.1 + javascript-stringify: 2.1.0 + outdent: 0.8.0 + pluralize: 8.0.0 + postcss: 8.5.6 + ts-pattern: 5.9.0 + + '@pandacss/is-valid-prop@1.5.1': {} + + '@pandacss/logger@1.5.1': + dependencies: + '@pandacss/types': 1.5.1 + kleur: 4.1.5 + + '@pandacss/node@1.5.1(typescript@5.9.3)': + dependencies: + '@pandacss/config': 1.5.1 + '@pandacss/core': 1.5.1 + '@pandacss/generator': 1.5.1 + '@pandacss/logger': 1.5.1 + '@pandacss/parser': 1.5.1(typescript@5.9.3) + '@pandacss/reporter': 1.5.1 + '@pandacss/shared': 1.5.1 + '@pandacss/token-dictionary': 1.5.1 + '@pandacss/types': 1.5.1 + browserslist: 4.24.4 + chokidar: 4.0.3 + fast-glob: 3.3.3 + fs-extra: 11.2.0 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lodash.merge: 4.6.2 + look-it-up: 2.1.0 + outdent: 0.8.0 + package-manager-detector: 1.5.0 + perfect-debounce: 1.0.0 + picomatch: 4.0.3 + pkg-types: 2.3.0 + pluralize: 8.0.0 + postcss: 8.5.6 + prettier: 3.2.5 + ts-morph: 27.0.2 + ts-pattern: 5.9.0 + tsconfck: 3.1.6(typescript@5.9.3) + transitivePeerDependencies: + - jsdom + - typescript + + '@pandacss/parser@1.5.1(typescript@5.9.3)': + dependencies: + '@pandacss/config': 1.5.1 + '@pandacss/core': 1.5.1 + '@pandacss/extractor': 1.5.1(typescript@5.9.3) + '@pandacss/logger': 1.5.1 + '@pandacss/shared': 1.5.1 + '@pandacss/types': 1.5.1 + '@vue/compiler-sfc': 3.5.22 + magic-string: 0.30.19 + ts-morph: 27.0.2 + ts-pattern: 5.9.0 + transitivePeerDependencies: + - jsdom + - typescript + + '@pandacss/postcss@1.5.1(typescript@5.9.3)': + dependencies: + '@pandacss/node': 1.5.1(typescript@5.9.3) + postcss: 8.5.6 + transitivePeerDependencies: + - jsdom + - typescript + + '@pandacss/preset-base@1.5.1': + dependencies: + '@pandacss/types': 1.5.1 + + '@pandacss/preset-panda@1.5.1': + dependencies: + '@pandacss/types': 1.5.1 + + '@pandacss/reporter@1.5.1': + dependencies: + '@pandacss/core': 1.5.1 + '@pandacss/generator': 1.5.1 + '@pandacss/logger': 1.5.1 + '@pandacss/shared': 1.5.1 + '@pandacss/types': 1.5.1 + table: 6.9.0 + wordwrapjs: 5.1.1 + + '@pandacss/shared@1.5.1': {} + + '@pandacss/token-dictionary@1.5.1': + dependencies: + '@pandacss/logger': 1.5.1 + '@pandacss/shared': 1.5.1 + '@pandacss/types': 1.5.1 + picomatch: 4.0.3 + ts-pattern: 5.9.0 + + '@pandacss/types@1.5.1': {} + + '@quansync/fs@0.1.5': + dependencies: + quansync: 0.2.11 + + '@rolldown/binding-android-arm64@1.0.0-beta.52': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-beta.52': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-beta.52': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-beta.52': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.52': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.52': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.52': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.52': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.52': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.52': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.52': + dependencies: + '@napi-rs/wasm-runtime': 1.0.7 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.52': + optional: true + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.52': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.52': + optional: true + + '@rolldown/pluginutils@1.0.0-beta.47': {} + + '@rolldown/pluginutils@1.0.0-beta.52': {} + + '@rollup/rollup-android-arm-eabi@4.53.3': + optional: true + + '@rollup/rollup-android-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-x64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.53.3': + optional: true + + '@rollup/rollup-openharmony-arm64@4.53.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.53.3': + optional: true + + '@standard-schema/spec@1.0.0': {} + + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/runtime': 7.28.4 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.9.1': + dependencies: + '@adobe/css-tools': 4.4.4 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@testing-library/dom': 10.4.1 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@ts-morph/common@0.28.1': + dependencies: + minimatch: 10.1.1 + path-browserify: 1.0.1 + tinyglobby: 0.2.15 + + '@tsconfig/strictest@2.0.8': {} + + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/aria-query@5.0.4': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.28.5 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.28.5 + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.8': {} + + '@types/node@17.0.45': {} + + '@types/node@20.19.25': + dependencies: + undici-types: 6.21.0 + + '@types/node@24.10.1': + dependencies: + undici-types: 7.16.0 + + '@types/react-dom@19.2.3(@types/react@19.2.7)': + dependencies: + '@types/react': 19.2.7 + + '@types/react@19.2.7': + dependencies: + csstype: 3.2.3 + + '@types/whatwg-mimetype@3.0.2': {} + + '@vitejs/plugin-react@5.1.1(rolldown-vite@7.2.8(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(yaml@2.8.1))': + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) + '@rolldown/pluginutils': 1.0.0-beta.47 + '@types/babel__core': 7.20.5 + react-refresh: 0.18.0 + vite: rolldown-vite@7.2.8(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(yaml@2.8.1) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@4.0.14': + dependencies: + '@standard-schema/spec': 1.0.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.14 + '@vitest/utils': 4.0.14 + chai: 6.2.1 + tinyrainbow: 3.0.3 + + '@vitest/mocker@4.0.14(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1))': + dependencies: + '@vitest/spy': 4.0.14 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1) + + '@vitest/pretty-format@4.0.14': + dependencies: + tinyrainbow: 3.0.3 + + '@vitest/runner@4.0.14': + dependencies: + '@vitest/utils': 4.0.14 + pathe: 2.0.3 + + '@vitest/snapshot@4.0.14': + dependencies: + '@vitest/pretty-format': 4.0.14 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.0.14': {} + + '@vitest/utils@4.0.14': + dependencies: + '@vitest/pretty-format': 4.0.14 + tinyrainbow: 3.0.3 + + '@vue/compiler-core@3.5.22': + dependencies: + '@babel/parser': 7.28.5 + '@vue/shared': 3.5.22 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.22': + dependencies: + '@vue/compiler-core': 3.5.22 + '@vue/shared': 3.5.22 + + '@vue/compiler-sfc@3.5.22': + dependencies: + '@babel/parser': 7.28.5 + '@vue/compiler-core': 3.5.22 + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-ssr': 3.5.22 + '@vue/shared': 3.5.22 + estree-walker: 2.0.2 + magic-string: 0.30.19 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.22': + dependencies: + '@vue/compiler-dom': 3.5.22 + '@vue/shared': 3.5.22 + + '@vue/shared@3.5.22': {} + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-colors@4.1.3: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansis@4.2.0: {} + + args-tokenizer@0.3.0: {} + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + aria-query@5.3.2: {} + + assertion-error@2.0.1: {} + + ast-kit@2.2.0: + dependencies: + '@babel/parser': 7.28.5 + pathe: 2.0.3 + + astral-regex@2.0.0: {} + + baseline-browser-mapping@2.8.31: {} + + birpc@2.8.0: {} + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001757 + electron-to-chromium: 1.5.262 + node-releases: 2.0.27 + update-browserslist-db: 1.1.4(browserslist@4.24.4) + + browserslist@4.28.0: + dependencies: + baseline-browser-mapping: 2.8.31 + caniuse-lite: 1.0.30001757 + electron-to-chromium: 1.5.262 + node-releases: 2.0.27 + update-browserslist-db: 1.1.4(browserslist@4.28.0) + + bumpp@10.3.2: + dependencies: + ansis: 4.2.0 + args-tokenizer: 0.3.0 + c12: 3.3.2 + cac: 6.7.14 + escalade: 3.2.0 + jsonc-parser: 3.3.1 + package-manager-detector: 1.6.0 + semver: 7.7.3 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + yaml: 2.8.1 + transitivePeerDependencies: + - magicast + + bundle-n-require@1.1.2: + dependencies: + esbuild: 0.25.12 + node-eval: 2.0.0 + + c12@3.3.2: + dependencies: + chokidar: 4.0.3 + confbox: 0.2.2 + defu: 6.1.4 + dotenv: 17.2.3 + exsolve: 1.0.8 + giget: 2.0.0 + jiti: 2.6.1 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.0.0 + pkg-types: 2.3.0 + rc9: 2.1.2 + + cac@6.7.14: {} + + caniuse-api@3.0.0: + dependencies: + browserslist: 4.28.0 + caniuse-lite: 1.0.30001757 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + + caniuse-lite@1.0.30001757: {} + + chai@6.2.1: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + citty@0.1.6: + dependencies: + consola: 3.4.2 + + code-block-writer@13.0.3: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + confbox@0.2.2: {} + + consola@3.4.2: {} + + convert-source-map@2.0.0: {} + + crosspath@2.0.0: + dependencies: + '@types/node': 17.0.45 + + css.escape@1.5.1: {} + + cssesc@3.0.0: {} + + cssnano-utils@5.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + csstype@3.2.3: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + defu@6.1.4: {} + + dequal@2.0.3: {} + + destr@2.0.5: {} + + detect-libc@1.0.3: {} + + detect-libc@2.1.2: {} + + diff@8.0.2: {} + + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + + dotenv@17.2.3: {} + + dts-resolver@2.1.3: {} + + electron-to-chromium@1.5.262: {} + + emoji-regex@8.0.0: {} + + empathic@2.0.0: {} + + entities@4.5.0: {} + + es-module-lexer@1.7.0: {} + + 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 + + escalade@3.1.2: {} + + escalade@3.2.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + expect-type@1.2.2: {} + + exsolve@1.0.8: {} + + fast-deep-equal@3.1.3: {} + + 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-uri@3.1.0: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + get-tsconfig@4.13.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.7 + nypm: 0.6.2 + pathe: 2.0.3 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + graceful-fs@4.2.11: {} + + happy-dom@20.0.11: + dependencies: + '@types/node': 20.19.25 + '@types/whatwg-mimetype': 3.0.2 + whatwg-mimetype: 3.0.0 + + hookable@5.5.3: {} + + indent-string@4.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-what@4.1.16: {} + + javascript-stringify@2.1.0: {} + + jiti@2.6.1: {} + + js-tokens@4.0.0: {} + + jsesc@3.1.0: {} + + json-schema-traverse@1.0.0: {} + + json5@2.2.3: {} + + jsonc-parser@3.3.1: {} + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + kleur@4.1.5: {} + + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.25.1: + optional: true + + lightningcss-darwin-arm64@1.30.2: + optional: true + + lightningcss-darwin-x64@1.25.1: + optional: true + + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.25.1: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.25.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + + lightningcss-linux-arm64-gnu@1.25.1: + optional: true + + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + + lightningcss-linux-arm64-musl@1.25.1: + optional: true + + lightningcss-linux-arm64-musl@1.30.2: + optional: true + + lightningcss-linux-x64-gnu@1.25.1: + optional: true + + lightningcss-linux-x64-gnu@1.30.2: + optional: true + + lightningcss-linux-x64-musl@1.25.1: + optional: true + + lightningcss-linux-x64-musl@1.30.2: + optional: true + + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + + lightningcss-win32-x64-msvc@1.25.1: + optional: true + + lightningcss-win32-x64-msvc@1.30.2: + optional: true + + lightningcss@1.25.1: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.25.1 + lightningcss-darwin-x64: 1.25.1 + lightningcss-freebsd-x64: 1.25.1 + lightningcss-linux-arm-gnueabihf: 1.25.1 + lightningcss-linux-arm64-gnu: 1.25.1 + lightningcss-linux-arm64-musl: 1.25.1 + lightningcss-linux-x64-gnu: 1.25.1 + lightningcss-linux-x64-musl: 1.25.1 + lightningcss-win32-x64-msvc: 1.25.1 + + lightningcss@1.30.2: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.truncate@4.4.2: {} + + lodash.uniq@4.5.0: {} + + look-it-up@2.1.0: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lz-string@1.5.0: {} + + magic-string@0.30.19: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + merge-anything@5.1.7: + dependencies: + is-what: 4.1.16 + + merge2@1.4.1: {} + + microdiff@1.5.0: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + min-indent@1.0.1: {} + + minimatch@10.1.1: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + node-eval@2.0.0: + dependencies: + path-is-absolute: 1.0.1 + + node-fetch-native@1.6.7: {} + + node-releases@2.0.27: {} + + nypm@0.6.2: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.3.0 + tinyexec: 1.0.2 + + object-path@0.11.8: {} + + obug@2.1.1: {} + + ohash@2.0.11: {} + + outdent@0.8.0: {} + + package-manager-detector@1.5.0: {} + + package-manager-detector@1.6.0: {} + + path-browserify@1.0.1: {} + + path-is-absolute@1.0.1: {} + + pathe@2.0.3: {} + + perfect-debounce@1.0.0: {} + + perfect-debounce@2.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + + pluralize@8.0.0: {} + + postcss-discard-duplicates@7.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-discard-empty@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-merge-rules@7.0.6(postcss@8.5.6): + dependencies: + browserslist: 4.28.0 + caniuse-api: 3.0.0 + cssnano-utils: 5.0.1(postcss@8.5.6) + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + + postcss-minify-selectors@7.0.5(postcss@8.5.6): + dependencies: + cssesc: 3.0.0 + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + + postcss-nested@7.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + + postcss-normalize-whitespace@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prettier@3.2.5: {} + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + quansync@0.2.11: {} + + queue-microtask@1.2.3: {} + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.5 + + react-dom@19.2.0(react@19.2.0): + dependencies: + react: 19.2.0 + scheduler: 0.27.0 + + react-is@17.0.2: {} + + react-refresh@0.18.0: {} + + react@19.2.0: {} + + readdirp@4.1.2: {} + + readdirp@5.0.0: {} + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + require-from-string@2.0.2: {} + + resolve-pkg-maps@1.0.0: {} + + reusify@1.1.0: {} + + rolldown-plugin-dts@0.18.1(rolldown@1.0.0-beta.52)(typescript@5.9.3): + dependencies: + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + ast-kit: 2.2.0 + birpc: 2.8.0 + dts-resolver: 2.1.3 + get-tsconfig: 4.13.0 + magic-string: 0.30.21 + obug: 2.1.1 + rolldown: 1.0.0-beta.52 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - oxc-resolver + + rolldown-vite@7.2.8(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(yaml@2.8.1): + dependencies: + '@oxc-project/runtime': 0.99.0 + fdir: 6.5.0(picomatch@4.0.3) + lightningcss: 1.30.2 + picomatch: 4.0.3 + postcss: 8.5.6 + rolldown: 1.0.0-beta.52 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.10.1 + esbuild: 0.25.12 + fsevents: 2.3.3 + jiti: 2.6.1 + yaml: 2.8.1 + + rolldown@1.0.0-beta.52: + dependencies: + '@oxc-project/types': 0.99.0 + '@rolldown/pluginutils': 1.0.0-beta.52 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.52 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.52 + '@rolldown/binding-darwin-x64': 1.0.0-beta.52 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.52 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.52 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.52 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.52 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.52 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.52 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.52 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.52 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.52 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.52 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.52 + + rollup@4.53.3: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + scheduler@0.27.0: {} + + semver@6.3.1: {} + + semver@7.7.3: {} + + siginfo@2.0.0: {} + + sisteransi@1.0.5: {} + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + source-map-js@1.2.1: {} + + stackback@0.0.2: {} + + std-env@3.10.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + table@6.9.0: + dependencies: + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyexec@1.0.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinyrainbow@3.0.3: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tree-kill@1.2.2: {} + + ts-evaluator@1.2.0(typescript@5.9.3): + dependencies: + ansi-colors: 4.1.3 + crosspath: 2.0.0 + object-path: 0.11.8 + typescript: 5.9.3 + + ts-morph@27.0.2: + dependencies: + '@ts-morph/common': 0.28.1 + code-block-writer: 13.0.3 + + ts-pattern@5.9.0: {} + + tsconfck@3.1.6(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + + tsdown@0.16.8(typescript@5.9.3): + dependencies: + ansis: 4.2.0 + cac: 6.7.14 + chokidar: 5.0.0 + diff: 8.0.2 + empathic: 2.0.0 + hookable: 5.5.3 + obug: 2.1.1 + rolldown: 1.0.0-beta.52 + rolldown-plugin-dts: 0.18.1(rolldown@1.0.0-beta.52)(typescript@5.9.3) + semver: 7.7.3 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tree-kill: 1.2.2 + unconfig-core: 7.4.1 + unrun: 0.2.13 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@ts-macro/tsc' + - '@typescript/native-preview' + - oxc-resolver + - synckit + - vue-tsc + + tslib@2.8.1: + optional: true + + typescript@5.9.3: {} + + unconfig-core@7.4.1: + dependencies: + '@quansync/fs': 0.1.5 + quansync: 0.2.11 + + undici-types@6.21.0: {} + + undici-types@7.16.0: {} + + universalify@2.0.1: {} + + unrun@0.2.13: + dependencies: + '@oxc-project/runtime': 0.99.0 + rolldown: 1.0.0-beta.52 + + update-browserslist-db@1.1.4(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + update-browserslist-db@1.1.4(browserslist@4.28.0): + dependencies: + browserslist: 4.28.0 + escalade: 3.2.0 + picocolors: 1.1.1 + + util-deprecate@1.0.2: {} + + vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.3 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.10.1 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + yaml: 2.8.1 + + vitest@4.0.14(@types/node@24.10.1)(happy-dom@20.0.11)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1): + dependencies: + '@vitest/expect': 4.0.14 + '@vitest/mocker': 4.0.14(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)) + '@vitest/pretty-format': 4.0.14 + '@vitest/runner': 4.0.14 + '@vitest/snapshot': 4.0.14 + '@vitest/spy': 4.0.14 + '@vitest/utils': 4.0.14 + es-module-lexer: 1.7.0 + expect-type: 1.2.2 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.10.1 + happy-dom: 20.0.11 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + + whatwg-mimetype@3.0.0: {} + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wordwrapjs@5.1.1: {} + + yallist@3.1.1: {} + + yaml@2.8.1: {} diff --git a/pocs/ds-figma-to-panda/postcss.config.cjs b/pocs/ds-figma-to-panda/postcss.config.cjs new file mode 100644 index 0000000..573efad --- /dev/null +++ b/pocs/ds-figma-to-panda/postcss.config.cjs @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + '@pandacss/dev/postcss': {}, + }, +} \ No newline at end of file diff --git a/pocs/ds-rebase/src/MyButton.tsx b/pocs/ds-figma-to-panda/src/MyButton.tsx similarity index 100% rename from pocs/ds-rebase/src/MyButton.tsx rename to pocs/ds-figma-to-panda/src/MyButton.tsx diff --git a/pocs/ds-rebase/src/index.ts b/pocs/ds-figma-to-panda/src/index.ts similarity index 100% rename from pocs/ds-rebase/src/index.ts rename to pocs/ds-figma-to-panda/src/index.ts diff --git a/pocs/ds-rebase/tests/index.test.tsx b/pocs/ds-figma-to-panda/tests/index.test.tsx similarity index 100% rename from pocs/ds-rebase/tests/index.test.tsx rename to pocs/ds-figma-to-panda/tests/index.test.tsx diff --git a/pocs/ds-rebase/tests/setup.ts b/pocs/ds-figma-to-panda/tests/setup.ts similarity index 100% rename from pocs/ds-rebase/tests/setup.ts rename to pocs/ds-figma-to-panda/tests/setup.ts diff --git a/pocs/ds-rebase/tsconfig.json b/pocs/ds-figma-to-panda/tsconfig.json similarity index 100% rename from pocs/ds-rebase/tsconfig.json rename to pocs/ds-figma-to-panda/tsconfig.json diff --git a/pocs/ds-rebase/tsdown.config.ts b/pocs/ds-figma-to-panda/tsdown.config.ts similarity index 100% rename from pocs/ds-rebase/tsdown.config.ts rename to pocs/ds-figma-to-panda/tsdown.config.ts diff --git a/pocs/ds-rebase/vitest.config.ts b/pocs/ds-figma-to-panda/vitest.config.ts similarity index 100% rename from pocs/ds-rebase/vitest.config.ts rename to pocs/ds-figma-to-panda/vitest.config.ts diff --git a/pocs/ds-rebase/.gitignore b/pocs/ds-rebase/.gitignore deleted file mode 100644 index 7535211..0000000 --- a/pocs/ds-rebase/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -dist -*.log -.DS_Store From 1a45082261d7f48f018ea9fdf676dd0ff2fb7e0c Mon Sep 17 00:00:00 2001 From: Lu Nelson Date: Fri, 28 Nov 2025 16:11:46 +0100 Subject: [PATCH 4/6] get panda configured, css typed, basic styles coming through in dev --- pocs/ds-figma-to-panda/@types/css.d.ts | 9 +++++++++ pocs/ds-figma-to-panda/@types/react.d.ts | 7 +++++++ pocs/ds-figma-to-panda/@types/reset.d.ts | 1 + pocs/ds-figma-to-panda/dev/src/App.tsx | 9 +++++++-- pocs/ds-figma-to-panda/dev/src/index.tsx | 12 ++++++------ pocs/ds-figma-to-panda/package.json | 3 +++ pocs/ds-figma-to-panda/panda.config.ts | 12 ++++++++---- pocs/ds-figma-to-panda/pnpm-lock.yaml | 8 ++++++++ pocs/ds-figma-to-panda/pnpm-workspace.yaml | 2 ++ pocs/ds-figma-to-panda/src/MyButton.tsx | 11 ++++++----- pocs/ds-figma-to-panda/src/index.css | 1 + pocs/ds-figma-to-panda/tsconfig.json | 4 ++-- 12 files changed, 60 insertions(+), 19 deletions(-) create mode 100644 pocs/ds-figma-to-panda/@types/css.d.ts create mode 100644 pocs/ds-figma-to-panda/@types/react.d.ts create mode 100644 pocs/ds-figma-to-panda/@types/reset.d.ts create mode 100644 pocs/ds-figma-to-panda/pnpm-workspace.yaml create mode 100644 pocs/ds-figma-to-panda/src/index.css diff --git a/pocs/ds-figma-to-panda/@types/css.d.ts b/pocs/ds-figma-to-panda/@types/css.d.ts new file mode 100644 index 0000000..d787002 --- /dev/null +++ b/pocs/ds-figma-to-panda/@types/css.d.ts @@ -0,0 +1,9 @@ +declare module '*.css' { + const css: string; + export default css; +} + +declare module '*.module.css' { + const classes: { readonly [key: string]: string }; + export default classes; +} diff --git a/pocs/ds-figma-to-panda/@types/react.d.ts b/pocs/ds-figma-to-panda/@types/react.d.ts new file mode 100644 index 0000000..e08805f --- /dev/null +++ b/pocs/ds-figma-to-panda/@types/react.d.ts @@ -0,0 +1,7 @@ +import 'react'; + +declare module 'react' { + interface CSSProperties { + [key: `--${string}`]: string | number | undefined; + } +} diff --git a/pocs/ds-figma-to-panda/@types/reset.d.ts b/pocs/ds-figma-to-panda/@types/reset.d.ts new file mode 100644 index 0000000..12bd3ed --- /dev/null +++ b/pocs/ds-figma-to-panda/@types/reset.d.ts @@ -0,0 +1 @@ +import '@total-typescript/ts-reset'; diff --git a/pocs/ds-figma-to-panda/dev/src/App.tsx b/pocs/ds-figma-to-panda/dev/src/App.tsx index c85da45..36d1acc 100644 --- a/pocs/ds-figma-to-panda/dev/src/App.tsx +++ b/pocs/ds-figma-to-panda/dev/src/App.tsx @@ -1,9 +1,14 @@ -import { MyButton } from '../../src' +import React from 'react'; +import { MyButton } from '../../src'; +import { css } from '../../styled-system/css'; + +const divCss = css({ color: 'red', fontSize: '20px', _osDark: { color: 'blue' } }); export function App() { return ( <> +
Hello
- ) + ); } diff --git a/pocs/ds-figma-to-panda/dev/src/index.tsx b/pocs/ds-figma-to-panda/dev/src/index.tsx index 5694ed7..04a7023 100644 --- a/pocs/ds-figma-to-panda/dev/src/index.tsx +++ b/pocs/ds-figma-to-panda/dev/src/index.tsx @@ -1,10 +1,10 @@ -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' -import { App } from './App.tsx' -import './style.css' +import React, { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import { App } from './App.tsx'; +import './style.css'; createRoot(document.querySelector('#app')!).render( - , -) + +); diff --git a/pocs/ds-figma-to-panda/package.json b/pocs/ds-figma-to-panda/package.json index f427e77..99ce439 100644 --- a/pocs/ds-figma-to-panda/package.json +++ b/pocs/ds-figma-to-panda/package.json @@ -55,5 +55,8 @@ "typescript": "^5.9.3", "vite": "npm:rolldown-vite@^7.2.5", "vitest": "^4.0.9" + }, + "dependencies": { + "@total-typescript/ts-reset": "^0.6.1" } } diff --git a/pocs/ds-figma-to-panda/panda.config.ts b/pocs/ds-figma-to-panda/panda.config.ts index be6363d..d109e57 100644 --- a/pocs/ds-figma-to-panda/panda.config.ts +++ b/pocs/ds-figma-to-panda/panda.config.ts @@ -1,11 +1,15 @@ -import { defineConfig } from "@pandacss/dev"; +import { defineConfig } from '@pandacss/dev'; export default defineConfig({ // Whether to use css reset preflight: true, - // Where to look for your css declarations - include: ["./src/**/*.{js,jsx,ts,tsx}", "./pages/**/*.{js,jsx,ts,tsx}"], + include: [ + // Where to look for your css declarations + './src/**/*.{js,jsx,ts,tsx}', + './dev/**/*.{js,jsx,ts,tsx}', + './tests/**/*.{js,jsx,ts,tsx}', + ], // Files to exclude exclude: [], @@ -16,5 +20,5 @@ export default defineConfig({ }, // The output directory for your css system - outdir: "styled-system", + outdir: 'styled-system', }); diff --git a/pocs/ds-figma-to-panda/pnpm-lock.yaml b/pocs/ds-figma-to-panda/pnpm-lock.yaml index 9a1cffd..44ecc69 100644 --- a/pocs/ds-figma-to-panda/pnpm-lock.yaml +++ b/pocs/ds-figma-to-panda/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@total-typescript/ts-reset': + specifier: ^0.6.1 + version: 0.6.1 react: specifier: ^19.2.0 version: 19.2.0 @@ -656,6 +659,9 @@ packages: '@types/react-dom': optional: true + '@total-typescript/ts-reset@0.6.1': + resolution: {integrity: sha512-cka47fVSo6lfQDIATYqb/vO1nvFfbPw7uWLayIXIhGETj0wcOOlrlkobOMDNQOFr9QOafegUPq13V2+6vtD7yg==} + '@ts-morph/common@0.28.1': resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==} @@ -2415,6 +2421,8 @@ snapshots: '@types/react': 19.2.7 '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@total-typescript/ts-reset@0.6.1': {} + '@ts-morph/common@0.28.1': dependencies: minimatch: 10.1.1 diff --git a/pocs/ds-figma-to-panda/pnpm-workspace.yaml b/pocs/ds-figma-to-panda/pnpm-workspace.yaml new file mode 100644 index 0000000..efc037a --- /dev/null +++ b/pocs/ds-figma-to-panda/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +onlyBuiltDependencies: + - esbuild diff --git a/pocs/ds-figma-to-panda/src/MyButton.tsx b/pocs/ds-figma-to-panda/src/MyButton.tsx index 7a71a4c..75ee94c 100644 --- a/pocs/ds-figma-to-panda/src/MyButton.tsx +++ b/pocs/ds-figma-to-panda/src/MyButton.tsx @@ -1,16 +1,17 @@ -import { useState } from 'react' +import { useState } from 'react'; +import './index.css'; interface MyButtonProps { - type?: 'primary' + type?: 'primary'; } export const MyButton: React.FC = ({ type }) => { - let [count, setCount] = useState(0) + let [count, setCount] = useState(0); return ( - ) -} + ); +}; diff --git a/pocs/ds-figma-to-panda/src/index.css b/pocs/ds-figma-to-panda/src/index.css new file mode 100644 index 0000000..e27a23b --- /dev/null +++ b/pocs/ds-figma-to-panda/src/index.css @@ -0,0 +1 @@ +@layer reset, base, tokens, recipes, utilities; diff --git a/pocs/ds-figma-to-panda/tsconfig.json b/pocs/ds-figma-to-panda/tsconfig.json index 5e9e89a..d882113 100644 --- a/pocs/ds-figma-to-panda/tsconfig.json +++ b/pocs/ds-figma-to-panda/tsconfig.json @@ -11,7 +11,7 @@ "types": [], "declaration": true, "emitDeclarationOnly": true, - "verbatimModuleSyntax": true, + "verbatimModuleSyntax": true }, - "include": ["src"] + "include": ["src", "styled-system", "@types"] } From e6454ef25ba76342f9e368d845276a063b7fb4f5 Mon Sep 17 00:00:00 2001 From: Lu Nelson Date: Mon, 1 Dec 2025 09:36:43 +0100 Subject: [PATCH 5/6] delete unneeded doc; update root readme for this POC --- pocs/ds-figma-to-panda/README.md | 32 ++++--------------- pocs/ds-figma-to-panda/docs/figma-to-panda.md | 1 - 2 files changed, 6 insertions(+), 27 deletions(-) delete mode 100644 pocs/ds-figma-to-panda/docs/figma-to-panda.md diff --git a/pocs/ds-figma-to-panda/README.md b/pocs/ds-figma-to-panda/README.md index 4525491..8e0b7fa 100644 --- a/pocs/ds-figma-to-panda/README.md +++ b/pocs/ds-figma-to-panda/README.md @@ -1,29 +1,9 @@ -# react-components-starter +# ds-figma-to-panda -A starter for creating a React component library. +This is a POC for a getting from a Figma variables export, to a Panda CSS theme configuration object, which can be directly used in the panda config of the design-system. -## Development +## TODOs -- Install dependencies: - -```bash -npm install -``` - -- Run the dev environment: - -```bash -npm run dev -``` - -- Run the unit tests: - -```bash -npm run test -``` - -- Build the library: - -```bash -npm run build -``` +- [ ] establish coordinatedthe variables nomenclature in Figma +- [ ] write a transformation script backed by Zod schema verification, that takes Figma variables output JSON and produces a well-formed PandaCSS theme token configuration object +- [ ] create various demo "stories" in Ladle to demonstrate visual matching of the token and variant structures, against the Figma originals (swatches, surfaces, spacings, button and input variants, etc.) diff --git a/pocs/ds-figma-to-panda/docs/figma-to-panda.md b/pocs/ds-figma-to-panda/docs/figma-to-panda.md deleted file mode 100644 index 8051bba..0000000 --- a/pocs/ds-figma-to-panda/docs/figma-to-panda.md +++ /dev/null @@ -1 +0,0 @@ -# figma to panda workflow From 0db831a758bd48326f26c383f8a0db6591ff8271 Mon Sep 17 00:00:00 2001 From: Lu Nelson Date: Tue, 2 Dec 2025 09:49:49 +0100 Subject: [PATCH 6/6] delete original ds review doc for now --- .../docs/design-system-review.md | 693 ------------------ 1 file changed, 693 deletions(-) delete mode 100644 pocs/ds-figma-to-panda/docs/design-system-review.md diff --git a/pocs/ds-figma-to-panda/docs/design-system-review.md b/pocs/ds-figma-to-panda/docs/design-system-review.md deleted file mode 100644 index 5cf9daf..0000000 --- a/pocs/ds-figma-to-panda/docs/design-system-review.md +++ /dev/null @@ -1,693 +0,0 @@ -# Design System Review and Recommendations - -**Date**: 2025-11-27 -**Packages Reviewed**: - -- `@hashintel/ds-components` -- `@hashintel/ds-theme` -- `@hashintel/ds-helpers` - ---- - -## Executive Summary - -The current design system has a solid foundation (PandaCSS, Ark UI, Figma integration) but suffers from: - -1. An overcomplicated, non-standard Figma export pipeline -2. Unnecessary package separation creating dependency complexity -3. PandaCSS lock-in with no portable token format -4. Component styling patterns that won't scale - -This document outlines ticketable tasks to address these issues. - ---- - -## Current Architecture - -``` -┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ -│ ds-theme │────▶│ ds-helpers │────▶│ ds-components │ -│ │ │ │ │ │ -│ PandaCSS preset │ │ Generated CSS │ │ React + Ark UI │ -│ (1,662 lines) │ │ utilities │ │ components │ -└─────────────────┘ └─────────────────┘ └─────────────────┘ - ▲ - │ -┌───────┴───────┐ -│ Figma Plugin │ "Variables Exporter for Dev Mode" (third-party) -│ + toPanda.ts │ Custom transformation script (~320 lines) -└───────────────┘ -``` - -### Current Figma Workflow (Manual) - -1. Open Figma file -2. Run third-party "Variables Exporter for Dev Mode" plugin -3. Copy JSON output to a file -4. Run `yarn generate:panda ./path/to/file.json` -5. Commit generated `src/index.ts` - -**Problems**: Manual, non-standard format, no automation, plugin could break/disappear. - ---- - -## Task 1: Establish Standard Token Format (W3C DTCG) - -### Problem - -Tokens are stored as a PandaCSS-specific TypeScript preset (`ds-theme/src/index.ts`), not a portable format. This: - -- Locks the system to PandaCSS -- Prevents use in plain CSS, Tailwind, native apps, etc. -- Makes the Figma sync script unnecessarily complex - -### Recommendation - -Adopt the [W3C Design Tokens Community Group (DTCG) format](https://tr.designtokens.org/format/) as the source of truth. - -**Example structure**: - -``` -tokens/ -├── colors.light.json # Core color primitives (light mode values) -├── colors.dark.json # Core color primitives (dark mode values) -├── semantic.json # Semantic aliases (text.primary → core.gray.90) -├── spacing.json -├── typography.json -└── radii.json -``` - -**Example token file** (`tokens/colors.light.json`): - -```json -{ - "core": { - "gray": { - "50": { - "$type": "color", - "$value": "#737373" - }, - "90": { - "$type": "color", - "$value": "#171717" - } - } - } -} -``` - -### Acceptance Criteria - -- [ ] Tokens stored as W3C DTCG JSON files -- [ ] One file per collection/mode from Figma -- [ ] Human-readable and diffable in PRs -- [ ] Validated against DTCG schema - -### Estimated Scope - -Medium - Requires converting existing preset to JSON format - ---- - -## Task 2: Replace Custom Script with Style Dictionary - -### Problem - -The custom `toPanda.ts` script (~320 lines) manually handles: - -- Type inference from Figma scopes -- Alias resolution -- Mode-to-condition mapping -- Name sanitization - -This reinvents what [Style Dictionary](https://amzn.github.io/style-dictionary/) does out of the box. - -### Recommendation - -Use Style Dictionary with [@tokens-studio/sd-transforms](https://www.npmjs.com/package/@tokens-studio/sd-transforms) to generate outputs. - -**Example `style-dictionary.config.js`**: - -```javascript -import StyleDictionary from 'style-dictionary'; -import { registerTransforms } from '@tokens-studio/sd-transforms'; - -registerTransforms(StyleDictionary); - -export default { - source: ['tokens/**/*.json'], - platforms: { - css: { - transformGroup: 'tokens-studio', - buildPath: 'dist/', - files: [{ - destination: 'tokens.css', - format: 'css/variables', - }] - }, - panda: { - transformGroup: 'tokens-studio', - buildPath: 'dist/', - files: [{ - destination: 'panda-preset.ts', - format: 'panda/preset', // custom format - }] - } - } -}; -``` - -### Benefits - -- Industry-standard tooling with large community -- Multi-platform output (CSS, iOS, Android, Tailwind, PandaCSS) -- Built-in alias resolution -- Extensible via custom transforms/formats - -### Acceptance Criteria - -- [ ] Style Dictionary configured with tokens-studio transforms -- [ ] Generates CSS custom properties file -- [ ] Generates PandaCSS preset (if still needed) -- [ ] Custom `toPanda.ts` script deleted - -### Estimated Scope - -Medium - Style Dictionary setup, custom format for PandaCSS if needed - ---- - -## Task 3: Automate Figma Sync with GitHub Actions - -### Problem - -Current workflow is manual: - -1. Designer updates Figma -2. Developer manually exports via plugin -3. Developer runs script -4. Developer commits - -No automation, easy to forget, drift between Figma and code. - -### Recommendation - -**Option A: Figma REST API (requires Enterprise)** - -Use [Figma's official GitHub Action example](https://github.com/figma/variables-github-action-example) for bi-directional sync. - -```yaml -# .github/workflows/sync-figma-tokens.yml -name: Sync Figma Variables to Tokens -on: - workflow_dispatch: - schedule: - - cron: '0 9 * * 1' # Weekly on Mondays - -jobs: - sync: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Fetch Figma variables - run: node scripts/fetch-figma-variables.js - env: - FIGMA_ACCESS_TOKEN: ${{ secrets.FIGMA_ACCESS_TOKEN }} - FIGMA_FILE_KEY: ${{ secrets.FIGMA_FILE_KEY }} - - name: Create PR if changed - uses: peter-evans/create-pull-request@v5 - with: - title: 'chore: sync design tokens from Figma' - branch: chore/sync-figma-tokens -``` - -**Option B: Tokens Studio (no Enterprise required)** - -Use [Tokens Studio plugin](https://tokens.studio/) which can sync directly to GitHub. - -### Acceptance Criteria - -- [ ] Automated workflow fetches tokens from Figma -- [ ] Changes create PR for review -- [ ] Works on schedule or manual trigger -- [ ] Supports bi-directional sync (nice-to-have) - -### Estimated Scope - -Medium - Depends on Figma plan (Enterprise vs not) - -### Open Question - -Does HASH have Figma Enterprise? This determines whether REST API is available. - ---- - -## Task 4: Consolidate Packages - -### Problem - -Three packages with tight coupling: - -- `ds-theme` - Just a TypeScript file (no build) -- `ds-helpers` - PandaCSS codegen output -- `ds-components` - Actual components - -This creates: - -- Unnecessary npm package overhead -- Complex dependency chain -- Confusing for consumers - -### Recommendation - -**Option A: Single package** - -``` -@hashintel/design-system/ -├── tokens/ # W3C DTCG JSON source -├── dist/ -│ ├── tokens.css # CSS custom properties -│ ├── tokens.js # JS constants -│ └── components/ # React components -├── src/ -│ └── components/ -└── style-dictionary.config.js -``` - -**Option B: Two packages** - -``` -@hashintel/ds-tokens/ # Tokens only (JSON + CSS + JS exports) -@hashintel/ds-components/ # React components (depends on ds-tokens) -``` - -### Acceptance Criteria - -- [ ] Decide on package structure (1 vs 2 packages) -- [ ] Consolidate code -- [ ] Update all internal consumers -- [ ] Publish to npm (if public) - -### Estimated Scope - -Large - Requires updating all consumers, potential breaking changes - ---- - -## Task 5: Generate CSS Custom Properties - -### Problem - -Tokens are only usable via PandaCSS `css()` function. No standalone CSS file with custom properties. - -This means: - -- Can't use tokens in plain CSS -- Can't share with non-React apps -- No CSS-native dark mode via `[data-theme="dark"]` - -### Recommendation - -Generate a CSS file with all tokens as custom properties: - -```css -:root { - /* Core primitives */ - --color-core-gray-50: #737373; - --color-core-gray-90: #171717; - - /* Semantic tokens (reference primitives) */ - --color-text-primary: var(--color-core-gray-90); - --color-text-secondary: var(--color-core-gray-70); - - /* Spacing */ - --spacing-1: 1px; - --spacing-2: 2px; - /* ... */ -} - -[data-theme="dark"] { - --color-core-gray-50: #9ca3af; - --color-core-gray-90: #f6f8f9; -} -``` - -### Benefits - -- Works everywhere (React, Vue, plain HTML) -- Native dark mode support -- Browser DevTools can inspect/modify -- Smaller JS bundle (no runtime token resolution) - -### Acceptance Criteria - -- [ ] CSS file generated with all tokens -- [ ] Semantic tokens reference core tokens via `var()` -- [ ] Dark mode values in `[data-theme="dark"]` selector -- [ ] Exported from package for consumers - -### Estimated Scope - -Small - Style Dictionary can do this with minimal config - ---- - -## Task 6: Refactor Component Styling Patterns - -### Problem - -Components have massive inline style blocks. Example from `button.tsx`: - -```typescript -// 222 lines of css() in a single call -css({ - "&[data-variant='primary'][data-color-scheme='brand']": { - backgroundColor: "bg.brand.bold.default", - // ... - }, - "&[data-variant='primary'][data-color-scheme='neutral']": { - // ... - }, - // ... repeated for every variant/size/state combination -}) -``` - -This is: - -- Hard to read and review -- Difficult to maintain as variants grow -- Not using PandaCSS's recipe system - -### Recommendation - -Use PandaCSS [recipes](https://panda-css.com/docs/concepts/recipes) (`cva`) or [slot recipes](https://panda-css.com/docs/concepts/slot-recipes) (`sva`): - -```typescript -import { cva } from '@hashintel/ds-helpers/css'; - -const buttonRecipe = cva({ - base: { - display: 'inline-flex', - alignItems: 'center', - justifyContent: 'center', - fontWeight: 'medium', - cursor: 'pointer', - }, - variants: { - variant: { - primary: { /* ... */ }, - secondary: { /* ... */ }, - ghost: { /* ... */ }, - }, - colorScheme: { - brand: { /* ... */ }, - neutral: { /* ... */ }, - critical: { /* ... */ }, - }, - size: { - xs: { height: '24px', px: 'spacing.5', fontSize: 'size.textsm' }, - sm: { height: '28px', px: 'spacing.5', fontSize: 'size.textsm' }, - md: { height: '32px', px: 'spacing.6', fontSize: 'size.textsm' }, - lg: { height: '40px', px: 'spacing.8', fontSize: 'size.textbase' }, - }, - }, - compoundVariants: [ - { - variant: 'primary', - colorScheme: 'brand', - css: { - backgroundColor: 'bg.brand.bold.default', - color: 'text.inverted', - _hover: { backgroundColor: 'bg.brand.bold.hover' }, - }, - }, - // ... other combinations - ], - defaultVariants: { - variant: 'primary', - colorScheme: 'brand', - size: 'md', - }, -}); -``` - -### Acceptance Criteria - -- [ ] Button refactored to use `cva` -- [ ] Other components follow same pattern -- [ ] Consistent disabled state handling across components -- [ ] Consistent focus ring pattern across components - -### Estimated Scope - -Medium - Refactor each component, establish patterns - ---- - -## Task 7: Clean Up Token Naming Issues - -### Problem - -Several naming issues in the current token structure: - -1. **Redundant nesting**: `spacing.spacing.0` (double "spacing") -2. **Unclear aliases**: `spacing.spacing.default.0` vs `spacing.spacing.0` -3. **Placeholder values**: `colors.color.accent.*` has many `#ffffff` placeholders -4. **Suspicious names**: `fonts.weight.normaldelete`, `fonts.weight.mediumdelete` -5. **Overcomplicated radii**: `radii.core.full.0` through `radii.core.full.10` all equal `9999px` - -### Recommendation - -Clean up during DTCG migration: - -```json -// Before (current) -"spacing.spacing.default.0": "0px" -"spacing.spacing.0": "{spacing.spacing.default.0}" - -// After (cleaned) -"spacing.0": "0px" -``` - -### Acceptance Criteria - -- [ ] Remove redundant nesting -- [ ] Remove placeholder/unused tokens -- [ ] Fix suspicious token names -- [ ] Simplify radii scale -- [ ] Document token naming conventions - -### Estimated Scope - -Small-Medium - Part of DTCG migration - ---- - -## Task 8: Add Missing Token Categories - -### Problem - -Current tokens are missing common design system categories: - -| Category | Status | Used In Components As | -| ----------- | ------- | --------------------- | -| Colors | Present | Tokens | -| Spacing | Present | Tokens | -| Radii | Present | Tokens | -| Typography | Partial | Tokens | -| Shadows | Missing | Hardcoded or absent | -| Z-indices | Missing | Hardcoded | -| Transitions | Missing | `"[all 0.2s ease]"` | -| Borders | Missing | Inline values | - -### Recommendation - -Add missing categories to Figma variables (source of truth) or manually to token files: - -```json -{ - "shadow": { - "sm": { - "$type": "shadow", - "$value": "0 1px 2px 0 rgb(0 0 0 / 0.05)" - }, - "focus-ring": { - "$type": "shadow", - "$value": "0 0 0 2px var(--color-core-custom-30)" - } - }, - "transition": { - "fast": { - "$type": "duration", - "$value": "150ms" - }, - "normal": { - "$type": "duration", - "$value": "200ms" - } - } -} -``` - -### Acceptance Criteria - -- [ ] Shadow tokens defined -- [ ] Transition/duration tokens defined -- [ ] Z-index scale defined -- [ ] Components updated to use new tokens -- [ ] No more hardcoded `"[...]"` escape values in components - -### Estimated Scope - -Medium - Define tokens, update components - ---- - -## Task 9: Remove `canvas` Dependency - -### Problem - -`ds-components` depends on `canvas: 3.2.0`, a heavy Node.js native module. This is used by WebGL filter effects in `src/lib/`: - -- `filter.tsx` -- `flexible-filter.tsx` -- `surface-equations.ts` -- Various motion/animation hooks - -This will cause issues for: - -- SSR (server-side rendering) -- Edge runtimes (Cloudflare Workers, Vercel Edge) -- Bundle size - -### Recommendation - -Either: - -1. **Extract to separate package**: `@hashintel/ds-effects` for WebGL components -2. **Make optional**: Dynamic import with fallback -3. **Remove if unused**: If RefractivePane isn't being used, remove it - -### Acceptance Criteria - -- [ ] Determine if WebGL effects are needed -- [ ] If yes, extract to optional package -- [ ] If no, remove `canvas` dependency and related code -- [ ] Verify SSR compatibility - -### Estimated Scope - -Small-Medium - Depends on whether effects are needed - ---- - -## Task 10: Add Component Tests - -### Problem - -No test files exist despite `test:watch` script in package.json. Given the complexity of variant combinations, this is risky. - -### Recommendation - -Add tests for: - -1. **Rendering**: Components render without errors -2. **Variants**: All variant combinations apply correct classes -3. **Accessibility**: Keyboard navigation, ARIA attributes -4. **Interactions**: Click handlers, state changes - -**Example test** (`button.test.tsx`): - -```typescript -import { render, screen } from '@testing-library/react'; -import { Button } from './button'; - -describe('Button', () => { - it('renders with default props', () => { - render(); - expect(screen.getByRole('button')).toHaveTextContent('Click me'); - }); - - it('applies variant classes', () => { - const { container } = render( - - ); - expect(container.firstChild).toHaveAttribute('data-variant', 'secondary'); - expect(container.firstChild).toHaveAttribute('data-color-scheme', 'critical'); - }); - - it('disables when loading', () => { - render(); - expect(screen.getByRole('button')).toBeDisabled(); - }); -}); -``` - -### Acceptance Criteria - -- [ ] Test setup with Vitest + Testing Library -- [ ] Tests for each component -- [ ] Coverage threshold established -- [ ] Tests run in CI - -### Estimated Scope - -Medium - Setup + write tests for each component - ---- - -## Suggested Task Order - -Based on dependencies and impact: - -### Phase 1: Foundation - -1. **Task 1**: Establish W3C DTCG token format -2. **Task 7**: Clean up token naming (do alongside Task 1) -3. **Task 2**: Replace custom script with Style Dictionary - -### Phase 2: Outputs - -4. **Task 5**: Generate CSS custom properties -5. **Task 8**: Add missing token categories -6. **Task 3**: Automate Figma sync - -### Phase 3: Components - -7. **Task 6**: Refactor component styling patterns -8. **Task 9**: Remove `canvas` dependency -9. **Task 10**: Add component tests - -### Phase 4: Structure - -10. **Task 4**: Consolidate packages (breaking change, do last) - ---- - -## Open Questions - -1. **Does HASH have Figma Enterprise?** - Determines REST API availability -2. **Is the WebGL RefractivePane component used?** - Determines `canvas` dependency fate -3. **Should tokens be public npm packages?** - Affects versioning strategy -4. **What other apps consume these packages?** - Affects migration strategy - ---- - -## References - -- [W3C Design Tokens Format](https://tr.designtokens.org/format/) -- [Figma Variables GitHub Action Example](https://github.com/figma/variables-github-action-example) -- [Style Dictionary](https://amzn.github.io/style-dictionary/) -- [Tokens Studio](https://tokens.studio/) -- [@tokens-studio/sd-transforms](https://www.npmjs.com/package/@tokens-studio/sd-transforms) -- [PandaCSS Recipes](https://panda-css.com/docs/concepts/recipes) - -## Revised References -- [Figma to Panda CSS Workflow](https://www.perplexity.ai/search/figma-to-panda-css-workflow-3SYUk2xGTNqjtrEoFMbmZQ) -- [panda-variables-config | Figma](https://www.figma.com/community/plugin/1547569940760832554/panda-variables-config) -- [variables-to-css | Figma](https://www.figma.com/community/plugin/1460027932302083848/variables-to-css) -- [Tokens | Panda CSS - Panda CSS](https://panda-css.com/docs/theming/tokens#shadows) -- [Design Tokens Format Module 2025.10](https://www.designtokens.org/tr/drafts/format/) -- [Splitter | Chakra UI](https://www.chakra-ui.com/docs/components/splitter) -- [Generating a Custom Chakra UI v3 Theme from Design Tokens: A Complete Guide - DEV Community](https://dev.to/kiranmantha/generating-a-custom-chakra-ui-v3-theme-from-design-tokens-a-complete-guide-1085) -- [Design Tokens Community Group](https://www.designtokens.org/)