@adukiorg/anza 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/bin/anza/anza-linux-arm64 +0 -0
  2. package/bin/anza/anza-linux-x64 +0 -0
  3. package/bin/anza/anza-macos-arm64 +0 -0
  4. package/bin/anza/anza-macos-x64 +0 -0
  5. package/bin/anza/anza-windows-x64.exe +0 -0
  6. package/package.json +1 -1
  7. package/src/core/api/index.js +2 -2
  8. package/src/core/offline/sync.js +2 -2
  9. package/src/core/router/cascade.js +15 -20
  10. package/src/core/router/container.js +4 -0
  11. package/src/core/router/graph.js +40 -12
  12. package/src/core/router/index.js +7 -1
  13. package/src/core/router/intercept.js +400 -100
  14. package/src/core/router/match.js +30 -0
  15. package/src/core/ui/define/element.js +58 -8
  16. package/src/core/ui/define/orchestrator.js +8 -4
  17. package/src/core/ui/defs/dock.js +18 -1
  18. package/src/core/ui/defs/page.js +75 -29
  19. package/src/core/ui/defs/spec.js +81 -11
  20. package/src/elements/data/list/style.css +1 -1
  21. package/src/elements/data/table/index.js +2 -1
  22. package/src/elements/data/table/style.css +1 -1
  23. package/src/elements/feedback/alert/style.css +1 -1
  24. package/src/styles/base.css +22 -21
  25. package/src/tokens/index.css +1 -4
  26. package/src/tokens/primitives/colors.css +9 -64
  27. package/src/tokens/primitives/motion.css +6 -18
  28. package/src/tokens/primitives/spacing.css +7 -12
  29. package/src/tokens/primitives/typography.css +12 -42
  30. package/src/tokens/registered/colors.css +5 -96
  31. package/src/tokens/registered/dimensions.css +6 -19
  32. package/src/tokens/semantic/contrast.css +8 -36
  33. package/src/tokens/semantic/dark.css +13 -48
  34. package/src/tokens/semantic/light.css +13 -44
  35. package/src/tokens/semantic/transitions.css +22 -12
  36. package/CHANGELOG.md +0 -360
  37. package/src/tokens/primitives/radius.css +0 -16
  38. package/src/tokens/primitives/shadow.css +0 -34
  39. package/src/tokens/primitives/zindex.css +0 -18
  40. package/src/tokens/semantic/components.css +0 -123
package/CHANGELOG.md DELETED
@@ -1,360 +0,0 @@
1
- <!-- markdownlint-disable MD024 -->
2
- # Changelog
3
-
4
- All notable changes to `@adukiorg/anza` will be documented here.
5
-
6
- Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
7
- Versioning follows [Semantic Versioning](https://semver.org/).
8
-
9
- ---
10
-
11
- ## [Unreleased]
12
-
13
- ### Planned
14
-
15
- - Full element library documentation (`src/elements/`)
16
- - Integration with external bundlers/compilers
17
-
18
- ---
19
-
20
- ## [0.4.1] — 2026-06-14
21
-
22
- ### Fixed
23
-
24
- - **URL Detection Bug**: Fixed a critical bug in both the JS runtime (`utils.js`, `element.js`) and the Rust compiler (`parse.rs`) where inline CSS strings starting with `/*` or `<!--` were mistakenly identified as file URLs. This bug was bypassing inline CSS injection when providing CSS string arrays.
25
-
26
- ---
27
-
28
- ## [0.4.0] — 2026-06-14
29
-
30
- ### Added
31
-
32
- - Natively support arrays of multiple CSS imports in component definitions (`template: { html, css: ['./a.css', './b.css'] }`) across both the JavaScript library runtime and the Rust compiler.
33
-
34
- ### Changed
35
-
36
- - Replaced CSS Custom Highlight API implementation with PrismJS for `view-code` syntax highlighting.
37
-
38
- ---
39
-
40
- ## [0.3.9] — 2026-06-13
41
-
42
- ### Changed
43
-
44
- - Updated core component rendering to correctly process nested syntax logic and perform full syntax highlighting.
45
-
46
- ---
47
-
48
- ## [0.3.7] — 2026-06-13
49
-
50
- ### Changed
51
-
52
- - Updated README and package descriptions to clarify the "instant" build step.
53
-
54
- ---
55
-
56
- ## [0.3.6] — 2026-06-13
57
-
58
- ### Fixed
59
-
60
- - Resolved NPM publish collision for the watcher hotfix.
61
-
62
- ---
63
-
64
- ## [0.3.5] — 2026-06-13
65
-
66
- ### Changed
67
-
68
- - Prevent native browser tab loading spinner during client-side navigation.
69
- - Removed unnecessary console logs in `boot.js`, `orchestrator.js`, and `element.js`.
70
-
71
- ---
72
-
73
- ## [0.3.3] — 2026-06-13
74
-
75
- ### Changed
76
-
77
- - Removed `<main>` to `<dock-main>` compiler auto-alignment. Apps now use `<dock-main id="main">` natively in HTML templates.
78
- - Update `boot.js` router error messages to correctly refer to `<dock-main id="main">`.
79
-
80
- ---
81
-
82
- ## [0.3.2] — 2026-06-13
83
-
84
- ### Fixed
85
-
86
- - Update scaffolding templates to use `<dock-main>` and ES module Service Worker registration (`{ type: 'module' }`)
87
- - Fix CLI watcher to properly resolve Linux `inotify` absolute paths for CSS and JS Hot Module Reloading (HMR)
88
- - Improve HMR client script with SSE auto-reconnect back-off
89
-
90
- ---
91
-
92
- ## [0.3.1] — 2026-06-13
93
-
94
- ### Changed
95
-
96
- - Soften library README tone — remove sarcastic framework comparisons
97
- - Update dock() example to use simplified API (no parent parameter)
98
-
99
- ---
100
-
101
- ## [0.3.0] — 2026-06-13
102
-
103
- ### Fixed
104
-
105
- - Sync `tools/Cargo.toml` version with npm package version (0.2.1 → 0.3.0)
106
-
107
- ---
108
-
109
- ## [0.2.8] — 2026-06-09
110
-
111
- ### Fixed
112
-
113
- - Remove empty `importmap.json` from scaffold — HTML now points to `/dist/importmap.json`
114
- - Category barrel files for generated doc pages (`docs/*/index.js`)
115
- - Docs root route (`/docs`) uses `entry/` folder like other pages
116
-
117
- ---
118
-
119
- ## [0.2.7] — 2026-06-09
120
-
121
- ### Fixed
122
-
123
- - Scaffold structure: landing page moved to `src/pages/entry/` instead of `src/pages/index/`
124
- - Node.js and Rust create commands generate consistent `src/pages/index.js` barrel file
125
- - Docs conversion task (`tasks/docs.js`) for markdown-to-anza-page generation
126
-
127
- ---
128
-
129
- ## [0.2.6] — 2026-06-09
130
-
131
- ### Fixed
132
-
133
- - `bin/anza/index.js` wrapper now uses `realpathSync` to correctly detect CLI entry through npm bin symlinks
134
- - `npm run dev` and `npx anza` now work from installed packages
135
-
136
- ---
137
-
138
- ## [0.2.5] — 2026-06-09
139
-
140
- ### Fixed
141
-
142
- - Add `./package.json` export to `@adukiorg/anza` so `npm create` resolver works
143
- - Fix `@adukiorg/create-anza` fallback resolution for local development
144
-
145
- ---
146
-
147
- ## [0.2.4] — 2026-06-09
148
-
149
- ### Added
150
-
151
- - **`@adukiorg/create-anza`** package for `npm create @adukiorg/anza <name>`
152
- - `./bin/create` export added to `@adukiorg/anza` for programmatic scaffold access
153
-
154
- ---
155
-
156
- ## [0.2.3] — 2026-06-09
157
-
158
- ### Fixed
159
-
160
- - CI release workflow artifact naming to prevent binary overwrites
161
- - Windows runner shell compatibility (`shell: bash`)
162
-
163
- ---
164
-
165
- ## [0.2.2] — 2026-06-09
166
-
167
- ### Added
168
-
169
- - CI/CD workflows for GitHub Actions (build, typecheck, verify scaffolding, cross-platform release)
170
- - Comprehensive documentation for all modules (animations, api, events, platform, router, security, state, storage, sw, ui, workers)
171
- - `library/bin/` CLI wrappers for Node.js distribution
172
-
173
- ---
174
-
175
- ## [0.2.1] — 2026-06-09
176
-
177
- ### Added
178
-
179
- #### Service Worker Toolkit — `@adukiorg/anza/sw`
180
-
181
- - **New subpath export** `@adukiorg/anza/sw` — caching strategies, route interception, background sync, and push notifications
182
- - **Seven caching strategies**: CacheFirst, NetworkFirst, StaleRevalidate, CacheThenNetwork, NetworkOnly, CacheOnly, OfflineFallback
183
- - **URLPattern routing** inside the Service Worker via `router()` and `Router`
184
- - **Install/activate helpers**: `precache()`, `pruneStale()`, `claim()`, `enableNavPreload()`
185
- - **TTL expiry**: `pruneExpired()`, `setupAutoPrune()` with `x-expires-at` headers
186
- - **Background sync**: `replayQueue()`, `requeueFailed()` with dead-letter queue
187
- - **Request serialization**: `serializeRequest()`, `deserializeRequest()` for IndexedDB storage
188
- - **Push notifications**: `subscribe()`, `notify()` with VAPID support
189
- - **Scaffolded `src/sw.js`** generated by both `anza create` and `anza-create`
190
-
191
- #### Theme Switching — `@adukiorg/anza/theme`
192
-
193
- - **New subpath export** `@adukiorg/anza/theme`
194
- - **Auto-init on import** — reads saved preference from `localStorage` or respects `prefers-color-scheme`
195
- - **Attaches to `window.theme`** via `Object.defineProperty` (non-enumerable, non-configurable)
196
- - **API**: `theme.get()`, `theme.set()`, `theme.toggle()` — all update the same global instance
197
- - **No manual init required** — importing `@adukiorg/anza/ui` triggers it automatically
198
-
199
- #### View Transition Tokens — `tokens/semantic/transitions.css`
200
-
201
- - **New semantic token layer** connecting the CSS View Transitions API to the design token system
202
- - **Tokens**: `--transition-bg`, `--transition-duration`, `--transition-easing`, `--transition-push`, `--transition-pop`, `--transition-replace`
203
- - **Router `transitions.run()`** injects a token-aware stylesheet on first use
204
- - **Dock `swap()`** reads directional easing from tokens (`--transition-push` vs `--transition-pop`) for physically different forward/back feel
205
- - **High-contrast theme morphing** — `contrast.css` now declares `transition:` for smooth token interpolation
206
-
207
- #### Documentation
208
-
209
- - **Comprehensive `docs/index.md`** — master docs entry with all modules listed by usefulness
210
- - **`docs/sw/`** — complete SW documentation: `index.md`, `start.md`, `strategies.md`, `routes.md`, `sync.md`, `api.md`
211
- - **Updated `docs/intro/`** — SW toolkit in feature list, build output includes `dist/sw.js`
212
- - **View Transition token docs** added to `docs/ui/transitions.md`, `docs/router/transitions.md`, `docs/animations/tokens.md`
213
-
214
- #### Tooling
215
-
216
- - **`tools/src/build/graph.rs` split** into focused modules:
217
- - `cache.rs` — incremental build cache (`.anzacache.json`)
218
- - `parse.rs` — ESM AST parsing with swc
219
- - `entries.rs` — entry point discovery from HTML and `src/sw.js`
220
- - `resolve.rs` — import map and filesystem resolution
221
- - `html.rs` — HTML injection (importmap link, HMR script)
222
- - `sw.rs` — Service Worker bare-specifier rewriting
223
- - **Auto-discovery of `src/sw.js`** as a build entry point
224
- - **Bare specifier rewriting in `dist/sw.js`** — `@adukiorg/anza/sw` → `./sw/index.js` (SW does not support import maps)
225
-
226
- ### Changed
227
-
228
- - **Cache file renamed** from `.anza-build-cache.json` to `.anzacache.json`
229
- - **Scaffolded `src/app.js`** now imports and auto-registers the Service Worker
230
- - **Scaffolded `src/sw.js`** included in both Node.js and Rust `create` commands
231
-
232
- ### Fixed
233
-
234
- - High-contrast theme (`contrast.css`) now animates token changes instead of snapping instantly
235
-
236
- ---
237
-
238
- ## [0.2.0] — 2026-06-07
239
-
240
- ### Added
241
-
242
- #### Compiler — `anza`
243
-
244
- - **Dependency Graph Walking**: Automated dependency resolution of ESM imports/exports.
245
- - **Tree-Shaking**: Outputs only referenced files to `dist/`, excluding unused code.
246
- - **Automatic Inline Importmaps**: Optimal `<script type="importmap">` generated and injected inline into HTML entry points.
247
- - **Relative Component Styles & Templates**: Parses relative template and stylesheet file paths referenced in `ui.element` relative to `import.meta.url`.
248
- - **Concurrent File Watcher**: Recompiles output on file modifications.
249
- - **SSE HMR Dev Server**: CSS hot-swapping and HTML/JS auto-reloading via Server-Sent Events (SSE).
250
- - **Nested /dist Routing**: Added router nested service mapping in Axum dev server for development path parity.
251
-
252
- #### Structure
253
-
254
- - **Monorepo Split**: Reorganized files into `/library` (NPM package), `/sample` (demo application), and `/tools` (Rust compiler).
255
-
256
- #### Sample
257
-
258
- - **Cyberpunk Blog SPA**: Features reactive store, category filters, instant search, likes count persistence, details page with lightweight custom markdown renderer, post publishing, and post deletion.
259
-
260
- ---
261
-
262
- ## [0.1.0] — 2026-05-27
263
-
264
- ### Added
265
-
266
- #### Package
267
-
268
- - Published as `@adukiorg/anza` — pure browser ESM, zero build step
269
- - Scoped subpath exports for every core module (`/api`, `/state`, `/storage`, etc.)
270
- - `"type": "module"` — fully native ESM, no CommonJS wrapper
271
- - `npm test` via `@web/test-runner` (real Chromium, no jsdom)
272
- - `npm run serve` via `@web/dev-server` on port 8080
273
-
274
- #### Core — `@adukiorg/anza/api`
275
-
276
- - `execute()` — fetch wrapper with AbortSignal, timeout, and `scheduler.postTask` integration
277
- - `PlatformError` — unified error shape across all network failures
278
- - `retry()` — exponential backoff with jitter and AbortSignal support
279
- - `stream()` — async generator streaming over NDJSON responses
280
- - `createNDJSONTransform()` — reusable `TransformStream` for NDJSON parsing
281
- - `upload()` — multipart file upload with progress events
282
- - `pipeline` — composable request/response middleware pipeline
283
- - Cache strategies: `cache-first`, `network-first`, `stale-while-revalidate`
284
-
285
- #### Core — `@adukiorg/anza/state`
286
-
287
- - `ReactiveStore` — Proxy-based reactive state with microtask-batched notifications
288
- - `setActiveSubscriber` / `getActiveSubscriber` — dependency tracking context
289
- - `derived()` — auto-tracked computed values that re-evaluate on dependency changes
290
- - `sync()` — BroadcastChannel cross-tab state synchronization
291
-
292
- #### Core — `@adukiorg/anza/events`
293
-
294
- - `EventBus` — typed pub/sub with wildcard patterns and AbortSignal cleanup
295
- - `events` — singleton global event bus instance
296
-
297
- #### Core — `@adukiorg/anza/router`
298
-
299
- - `register()` / `match()` — URL pattern registration and matching
300
- - `clear()` / `getRoutes()` — route registry management
301
- - `addGuard()` — async navigation guard hooks
302
- - `setNotFound()` — 404 handler
303
- - `setup()` — bootstraps native Navigation API interception
304
- - Full programmatic history API: `navigate`, `replace`, `back`, `forward`, `go`, `current`, `entries`
305
- - `renderOutlet()` — declarative route outlet rendering
306
-
307
- #### Core — `@adukiorg/anza/storage`
308
-
309
- - `Database` — Promise-wrapped IndexedDB with sequential migrations
310
- - `LRUCache` / `WeakLRUCache` — in-memory LRU caches with optional TTL
311
- - `storage` — unified tiered facade: memory → IndexedDB → Cache API → OPFS
312
- - `quota` — storage estimate and persistence request helpers
313
-
314
- #### Core — `@adukiorg/anza/offline`
315
-
316
- - `queue` — IndexedDB-backed offline operation queue with FIFO dequeue
317
- - `check()` / `subscribe()` — connectivity detection and change subscriptions
318
-
319
- #### Core — `@adukiorg/anza/animations`
320
-
321
- - `animate()` — WAAPI wrapper with AbortSignal and easing controls
322
- - `stagger()` — staggered multi-element animation groups with `finished` promise
323
-
324
- #### Core — `@adukiorg/anza/workers`
325
-
326
- - `lock()` — Web Locks API facade with timeout and AbortSignal support
327
- - `WorkerPool` — managed pool of Web Workers with task queue and concurrency limits
328
-
329
- #### Core — `@adukiorg/anza/security`
330
-
331
- - `sanitize()` — XSS-safe HTML sanitizer using `DOMParser`
332
- - `uuid()` — `crypto.randomUUID()` wrapper
333
- - `hash()` — SHA-256/384/512 via Web Crypto API
334
- - `generateKey()` / `deriveKey()` — AES-GCM key generation and PBKDF2 derivation
335
- - `encrypt()` / `decrypt()` — AES-GCM symmetric encryption/decryption
336
-
337
- #### Core — `@adukiorg/anza/platform`
338
-
339
- - `supports` — feature detection registry for 30+ browser APIs
340
- - `reset()` — cache reset utility (used in tests)
341
-
342
- #### Core — `@adukiorg/anza/ui`
343
-
344
- - `BaseElement` — Shadow DOM base class for all custom elements
345
- - Design token cascade: primitive → semantic → component token layers
346
-
347
- #### Tests
348
-
349
- - 26 test suites, 70 assertions — all running in real Chromium via `@web/test-runner`
350
- - Browser-native import maps injected per test run — no Node.js module resolution
351
-
352
- #### Blog Demo
353
-
354
- - `blog/` — sample SPA demonstrating state, storage, offline queue, and animations
355
- - Import map mirrors the published `@adukiorg/anza/*` subpath exports exactly
356
-
357
- [Unreleased]: https://github.com/aduki-org/anza/compare/v0.2.1...HEAD
358
- [0.2.1]: https://github.com/aduki-org/anza/compare/v0.2.0...v0.2.1
359
- [0.2.0]: https://github.com/aduki-org/anza/compare/v0.1.0...v0.2.0
360
- [0.1.0]: https://github.com/aduki-org/anza/releases/tag/v0.1.0
@@ -1,16 +0,0 @@
1
- /**
2
- * tokens/primitives/radius.css
3
- *
4
- * Border radius scale from none to full pill/circle shapes.
5
- * Source: doc 26 §4
6
- */
7
-
8
- :root {
9
- --radius-none: 0px;
10
- --radius-sm: 0.125rem; /* 2px */
11
- --radius-md: 0.375rem; /* 6px */
12
- --radius-lg: 0.5rem; /* 8px */
13
- --radius-xl: 0.75rem; /* 12px */
14
- --radius-2xl: 1rem; /* 16px */
15
- --radius-full: 9999px; /* Pill / Circle */
16
- }
@@ -1,34 +0,0 @@
1
- /**
2
- * tokens/primitives/shadow.css
3
- *
4
- * Elevation shadows using modern ambient + key light OKLCH alpha models.
5
- * Dark mode shadows automatically increase opacity to counteract low contrast.
6
- * Source: doc 26 §4
7
- */
8
-
9
- :root {
10
- --shadow-xs: 0 1px 2px 0 oklch(0% 0 0 / 0.05);
11
- --shadow-sm: 0 1px 3px 0 oklch(0% 0 0 / 0.1), 0 1px 2px -1px oklch(0% 0 0 / 0.1);
12
- --shadow-md: 0 4px 6px -1px oklch(0% 0 0 / 0.1), 0 2px 4px -2px oklch(0% 0 0 / 0.1);
13
- --shadow-lg: 0 10px 15px -3px oklch(0% 0 0 / 0.1), 0 4px 6px -4px oklch(0% 0 0 / 0.1);
14
- --shadow-xl: 0 20px 25px -5px oklch(0% 0 0 / 0.1), 0 8px 10px -6px oklch(0% 0 0 / 0.1);
15
- --shadow-none: 0 0 #0000;
16
- }
17
-
18
- [data-theme="dark"] {
19
- --shadow-xs: 0 1px 2px 0 oklch(0% 0 0 / 0.15);
20
- --shadow-sm: 0 1px 3px 0 oklch(0% 0 0 / 0.3), 0 1px 2px -1px oklch(0% 0 0 / 0.3);
21
- --shadow-md: 0 4px 6px -1px oklch(0% 0 0 / 0.3), 0 2px 4px -2px oklch(0% 0 0 / 0.3);
22
- --shadow-lg: 0 10px 15px -3px oklch(0% 0 0 / 0.3), 0 4px 6px -4px oklch(0% 0 0 / 0.3);
23
- --shadow-xl: 0 20px 25px -5px oklch(0% 0 0 / 0.3), 0 8px 10px -6px oklch(0% 0 0 / 0.3);
24
- }
25
-
26
- @media (prefers-color-scheme: dark) {
27
- :root:not([data-theme="light"]) {
28
- --shadow-xs: 0 1px 2px 0 oklch(0% 0 0 / 0.15);
29
- --shadow-sm: 0 1px 3px 0 oklch(0% 0 0 / 0.3), 0 1px 2px -1px oklch(0% 0 0 / 0.3);
30
- --shadow-md: 0 4px 6px -1px oklch(0% 0 0 / 0.3), 0 2px 4px -2px oklch(0% 0 0 / 0.3);
31
- --shadow-lg: 0 10px 15px -3px oklch(0% 0 0 / 0.3), 0 4px 6px -4px oklch(0% 0 0 / 0.3);
32
- --shadow-xl: 0 20px 25px -5px oklch(0% 0 0 / 0.3), 0 8px 10px -6px oklch(0% 0 0 / 0.3);
33
- }
34
- }
@@ -1,18 +0,0 @@
1
- /**
2
- * tokens/primitives/zindex.css
3
- *
4
- * Explicit layer indices to eliminate z-index escalation bugs.
5
- * Source: doc 26 §4
6
- */
7
-
8
- :root {
9
- --z-index-base: 0;
10
- --z-index-raised: 10;
11
- --z-index-dropdown: 100;
12
- --z-index-sticky: 200;
13
- --z-index-overlay: 300;
14
- --z-index-modal: 400;
15
- --z-index-popover: 500;
16
- --z-index-toast: 600;
17
- --z-index-tooltip: 700;
18
- }
@@ -1,123 +0,0 @@
1
- /**
2
- * tokens/semantic/components.css
3
- *
4
- * Semantic component-level design tokens.
5
- */
6
-
7
- :root {
8
- /* Form Controls */
9
- --input-bg: var(--background);
10
- --input-border: var(--border);
11
- --input-border-focus: var(--border-focus);
12
- --input-radius: var(--radius-md);
13
- --input-font-size: var(--text-md);
14
- --input-padding-y: var(--space-sm);
15
- --input-padding-x: var(--space-md);
16
- --input-text-color: var(--foreground);
17
-
18
- --textarea-bg: var(--background);
19
- --textarea-border: var(--border);
20
- --textarea-border-focus: var(--border-focus);
21
- --textarea-radius: var(--radius-md);
22
- --textarea-font-size: var(--text-md);
23
- --textarea-padding-y: var(--space-sm);
24
- --textarea-padding-x: var(--space-md);
25
- --textarea-text-color: var(--foreground);
26
-
27
- --check-bg: var(--background);
28
- --check-bg-checked: var(--primary);
29
- --check-border: var(--border);
30
- --check-border-focus: var(--border-focus);
31
- --check-radius: var(--radius-sm);
32
- --check-size: var(--space-lg);
33
- --check-color: var(--primary-foreground);
34
-
35
- --radio-bg: var(--background);
36
- --radio-bg-checked: var(--primary);
37
- --radio-border: var(--border);
38
- --radio-border-focus: var(--border-focus);
39
- --radio-radius: var(--radius-full);
40
- --radio-size: var(--space-lg);
41
- --radio-color: var(--primary-foreground);
42
-
43
- --switch-bg: var(--border-strong);
44
- --switch-bg-on: var(--primary);
45
- --switch-thumb-color: var(--primary-foreground);
46
- --switch-width: var(--space-xl);
47
- --switch-height: var(--space-lg);
48
- --switch-thumb-size: calc(var(--switch-height) - var(--space-xs));
49
-
50
- --select-bg: var(--background);
51
- --select-border: var(--border);
52
- --select-border-focus: var(--border-focus);
53
- --select-radius: var(--radius-md);
54
- --select-font-size: var(--text-md);
55
- --select-padding-y: var(--space-sm);
56
- --select-padding-x: var(--space-md);
57
- --select-text-color: var(--foreground);
58
-
59
- --upload-bg: var(--background);
60
- --upload-border: var(--border);
61
- --upload-border-focus: var(--border-focus);
62
- --upload-radius: var(--radius-lg);
63
- --upload-padding: var(--space-xl);
64
- --upload-color: var(--foreground-muted);
65
-
66
- /* Feedback */
67
- --alert-radius: var(--radius-md);
68
- --alert-bg: var(--background-elevated);
69
- --alert-color: var(--foreground);
70
- --alert-border: var(--border);
71
-
72
- --skeleton-bg: var(--foreground-disabled);
73
- --skeleton-radius: var(--radius-md);
74
- --skeleton-width: 100%;
75
- --skeleton-height: var(--space-md);
76
-
77
- /* Data Display */
78
- --card-radius: var(--radius-lg);
79
-
80
- --stat-label: var(--text-xs);
81
- --stat-value: var(--text-3xl);
82
-
83
- /* Navigation */
84
- --link-color: var(--foreground-link);
85
- --link-color-hover: var(--primary-hover);
86
- --link-color-active: var(--primary-active);
87
-
88
- /* Layout */
89
- --stack-gap: var(--space-md);
90
-
91
- --grid-gap: var(--space-md);
92
- --grid-cols: repeat(auto-fit, minmax(250px, 1fr));
93
-
94
- --surface-bg: var(--background);
95
- --surface-border: transparent;
96
- --surface-shadow: none;
97
- --surface-radius: var(--radius-none);
98
-
99
- /* Overlay */
100
- --dialog-radius: var(--radius-lg);
101
- --dialog-shadow: var(--shadow-xl);
102
-
103
- --popover-bg: var(--background-elevated);
104
- --popover-border: var(--border);
105
- --popover-shadow: var(--shadow-lg);
106
- --popover-radius: var(--radius-md);
107
-
108
- --tooltip-bg: var(--background-inverse);
109
- --tooltip-color: var(--foreground-inverse);
110
- --tooltip-radius: var(--radius-sm);
111
-
112
- --menu-bg: var(--background-elevated);
113
- --menu-border: var(--border);
114
- --menu-shadow: var(--shadow-lg);
115
- --menu-radius: var(--radius-md);
116
-
117
- --drawer-shadow: var(--shadow-xl);
118
- --drawer-width: min(calc(var(--space-5xl) * 3), 85vw);
119
-
120
- --sheet-radius: var(--radius-lg);
121
- --sheet-shadow: var(--shadow-xl);
122
- --sheet-max-width: min(calc(var(--space-5xl) * 6), 100vw);
123
- }