@snowcone-app/canvas 0.22.0 → 0.26.0

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 (59) hide show
  1. package/ERROR_CONTRACT.md +600 -0
  2. package/README.md +2 -1
  3. package/STYLING_CONTRACT.md +173 -93
  4. package/dist/{ContextualToolbars-BDEt9ND0.js → ContextualToolbars-DUhBKVxe.js} +3 -3
  5. package/dist/{ContextualToolbars-BDEt9ND0.js.map → ContextualToolbars-DUhBKVxe.js.map} +1 -1
  6. package/dist/{EditorCanvasImpl-BH_bKy-F.js → EditorCanvasImpl-BLZV_el0.js} +6 -6
  7. package/dist/{EditorCanvasImpl-BH_bKy-F.js.map → EditorCanvasImpl-BLZV_el0.js.map} +1 -1
  8. package/dist/{ImagePanel-BwqFDKvW.js → ImagePanel-sLSjaPWS.js} +3 -3
  9. package/dist/{ImagePanel-BwqFDKvW.js.map → ImagePanel-sLSjaPWS.js.map} +1 -1
  10. package/dist/{SnowconeCanvas-Cx7nXlBI.js → SnowconeCanvas-4ef4a61J.js} +6 -6
  11. package/dist/{SnowconeCanvas-Cx7nXlBI.js.map → SnowconeCanvas-4ef4a61J.js.map} +1 -1
  12. package/dist/{UnifiedFontService-CC3CSmH5.js → UnifiedFontService-Bx2MxFfy.js} +867 -834
  13. package/dist/{UnifiedFontService-CC3CSmH5.js.map → UnifiedFontService-Bx2MxFfy.js.map} +1 -1
  14. package/dist/advanced.mjs +7 -7
  15. package/dist/api/embed.d.ts +4 -4
  16. package/dist/components/editor/EditorLoadingOverlay.d.ts +12 -0
  17. package/dist/components/editor/EditorPlacements.d.ts +14 -0
  18. package/dist/components/editor/EditorPreview.d.ts +32 -8
  19. package/dist/components/editor/EditorRoot.d.ts +12 -0
  20. package/dist/components/editor/PreviewPrismOverlay.d.ts +23 -0
  21. package/dist/components/editor/RootInternals.d.ts +31 -0
  22. package/dist/components/editor/editorAudit.d.ts +66 -0
  23. package/dist/components/editor/index.d.ts +14 -0
  24. package/dist/components/editor/usePlacements.d.ts +14 -0
  25. package/dist/components/embed-realtime/context.d.ts +11 -2
  26. package/dist/components/embed-realtime/validateEmbed.d.ts +20 -1
  27. package/dist/{custom-icons-BW6hqmkL.js → custom-icons-DeYIrTK1.js} +7 -7
  28. package/dist/{custom-icons-BW6hqmkL.js.map → custom-icons-DeYIrTK1.js.map} +1 -1
  29. package/dist/design/design-builder.d.ts +108 -15
  30. package/dist/design/product-config.d.ts +10 -0
  31. package/dist/design-builder-U7Su9MMC.js +470 -0
  32. package/dist/design-builder-U7Su9MMC.js.map +1 -0
  33. package/dist/editorErrors-B2mb1sVN.js.map +1 -1
  34. package/dist/embed-DXGydZOT.js +1586 -0
  35. package/dist/embed-DXGydZOT.js.map +1 -0
  36. package/dist/embed.mjs +34 -31
  37. package/dist/errors/editorError.d.ts +27 -1
  38. package/dist/hooks/bindingGuards.d.ts +16 -0
  39. package/dist/hooks/useColorBinding.d.ts +2 -1
  40. package/dist/hooks/useFontBinding.d.ts +2 -1
  41. package/dist/hooks/useImageBinding.d.ts +2 -1
  42. package/dist/hooks/useTextBinding.d.ts +2 -1
  43. package/dist/index.mjs +6 -6
  44. package/dist/style.css +1 -1
  45. package/dist/template-fields-DJ157D3E.js +548 -0
  46. package/dist/template-fields-DJ157D3E.js.map +1 -0
  47. package/dist/testing/failureFixtures.d.ts +2 -2
  48. package/dist/testing.mjs +1 -1
  49. package/dist/{validation-C9Fe9ahK.js → validation-DnAkXdUg.js} +7 -7
  50. package/dist/{validation-C9Fe9ahK.js.map → validation-DnAkXdUg.js.map} +1 -1
  51. package/example/package.json +1 -1
  52. package/llms.txt +3 -0
  53. package/package.json +6 -3
  54. package/dist/design-builder-CT4DHIPe.js +0 -367
  55. package/dist/design-builder-CT4DHIPe.js.map +0 -1
  56. package/dist/embed-8ecUMMH-.js +0 -1226
  57. package/dist/embed-8ecUMMH-.js.map +0 -1
  58. package/dist/template-fields-C2pSfMBh.js +0 -494
  59. package/dist/template-fields-C2pSfMBh.js.map +0 -1
@@ -25,9 +25,14 @@ stable hooks; `sc:`-prefixed utility classes are internal and NOT contract.
25
25
  | `history` | Editor.History |
26
26
  | `layers` | Editor.Layers |
27
27
  | `layers-item` | Editor.Layers |
28
+ | `loading-overlay` | Editor.LoadingOverlay |
28
29
  | `menu` | Editor.Menu |
30
+ | `placements` | Editor.Placements |
31
+ | `placements-item` | Editor.Placements |
29
32
  | `preview` | Editor.Preview |
30
33
  | `preview-error` | Editor.Preview |
34
+ | `preview-image` | Editor.Preview |
35
+ | `preview-loading` | Editor.Preview |
31
36
  | `root` | Editor.Root |
32
37
  | `snowcone-editor` | SnowconeEditor |
33
38
  | `snowcone-editor-header` | SnowconeEditor |
@@ -174,6 +179,15 @@ stable hooks; `sc:`-prefixed utility classes are internal and NOT contract.
174
179
  <span>
175
180
  ```
176
181
 
182
+ ### `loading-overlay` — Editor.LoadingOverlay — standalone render-in-flight rainbow for host-owned preview surfaces (fills its positioned parent)
183
+
184
+ ```html
185
+ <div class="sc-loading-overlay-host" data-sc-part="loading-overlay">
186
+ <div class="sc-prism-overlay sc-prism-fade-in" data-sc-part="preview-loading">
187
+ <div class="sc-prism-band"> ×6
188
+ <div class="sc-prism-particle"> ×10
189
+ ```
190
+
177
191
  ### `menu` — Editor.Menu
178
192
 
179
193
  ```html
@@ -184,29 +198,66 @@ stable hooks; `sc:`-prefixed utility classes are internal and NOT contract.
184
198
  <input type="file">
185
199
  ```
186
200
 
201
+ ### `placements` — Editor.Placements — two-placement design
202
+
203
+ ```html
204
+ <div data-sc-part="placements">
205
+ <button aria-pressed="true" data-sc-active="true" data-sc-part="placements-item" type="button">
206
+ <button aria-pressed="false" data-sc-active="false" data-sc-part="placements-item" type="button">
207
+ ```
208
+
209
+ ### `placements-item` — Editor.Placements — one tab (active state in data-sc-active)
210
+
211
+ ```html
212
+ <button aria-pressed="true" data-sc-active="true" data-sc-part="placements-item" type="button">
213
+ ```
214
+
187
215
  ### `preview` — Editor.Preview — awaiting the first mockup
188
216
 
189
217
  ```html
190
- <div aria-busy="true" data-sc-part="preview" data-sc-preview-state="rendering">
218
+ <div aria-busy="true" class="sc-preview-frame" data-sc-part="preview" data-sc-preview-state="rendering">
191
219
  ```
192
220
 
193
221
  ### `preview` — Editor.Preview — with a rendered mockup
194
222
 
195
223
  ```html
196
- <img alt=<alt> data-sc-part="preview" data-sc-preview-state="ready" src=<url>>
224
+ <div class="sc-preview-frame" data-sc-part="preview" data-sc-preview-state="ready">
225
+ <img alt=<alt> data-sc-part="preview-image" src=<url>>
226
+ ```
227
+
228
+ ### `preview` — Editor.Preview — loadingOverlay frame (the part becomes the stage)
229
+
230
+ ```html
231
+ <div class="sc-preview-frame" data-sc-part="preview" data-sc-preview-state="ready">
232
+ <img alt=<alt> data-sc-part="preview-image" src=<url>>
197
233
  ```
198
234
 
199
235
  ### `preview-error` — Editor.Preview — render/grant failure before any mockup
200
236
 
201
237
  ```html
202
- <div data-sc-error=<message> data-sc-part="preview-error" data-sc-preview-state="error" role="alert">
238
+ <div data-sc-error=<message> data-sc-part="preview-error" role="alert">
239
+ ```
240
+
241
+ ### `preview-image` — Editor.Preview — loadingOverlay image
242
+
243
+ ```html
244
+ <img alt=<alt> data-sc-part="preview-image" src=<url>>
245
+ ```
246
+
247
+ ### `preview-loading` — Editor.Preview — loadingOverlay render-in-flight rainbow
248
+
249
+ ```html
250
+ <div class="sc-prism-overlay sc-prism-fade-in" data-sc-part="preview-loading">
251
+ <div class="sc-prism-band"> ×6
252
+ <div class="sc-prism-particle"> ×10
203
253
  ```
204
254
 
205
255
  ### `root` — Editor.Root
206
256
 
207
257
  ```html
208
258
  <div class="sc-root" data-sc-part="root">
209
- <img alt=<alt> data-sc-part="preview" data-sc-preview-state="ready" src=<url>>
259
+ <div class="sc-preview-frame" data-sc-part="preview" data-sc-preview-state="ready">
260
+ <img alt=<alt> data-sc-part="preview-image" src=<url>>
210
261
  <input aria-label=<label> data-sc-layer=<layer-name> data-sc-part="textfield" placeholder=<placeholder> type="text">
211
262
  <button data-sc-buy-missing=<reason-codes> data-sc-buy-state="incomplete" data-sc-part="buy" disabled type="button">
212
263
  ```
@@ -230,7 +281,7 @@ stable hooks; `sc:`-prefixed utility classes are internal and NOT contract.
230
281
  <div>
231
282
  …
232
283
  <button aria-label=<label> data-sc-part="snowcone-editor-pip" type="button">
233
- <div aria-busy="true" data-sc-part="preview" data-sc-preview-state="rendering">
284
+ <div aria-busy="true" class="sc-preview-frame" data-sc-part="preview" data-sc-preview-state="rendering">
234
285
  <span aria-busy="true">
235
286
  <div data-sc-part="snowcone-editor-zone" data-sc-zone-state="idle">
236
287
  <div>
@@ -303,7 +354,7 @@ stable hooks; `sc:`-prefixed utility classes are internal and NOT contract.
303
354
 
304
355
  ```html
305
356
  <button aria-label=<label> data-sc-part="snowcone-editor-pip" type="button">
306
- <div aria-busy="true" data-sc-part="preview" data-sc-preview-state="rendering">
357
+ <div aria-busy="true" class="sc-preview-frame" data-sc-part="preview" data-sc-preview-state="rendering">
307
358
  <span aria-busy="true">
308
359
  ```
309
360
 
@@ -317,7 +368,7 @@ stable hooks; `sc:`-prefixed utility classes are internal and NOT contract.
317
368
  <div>
318
369
  …
319
370
  <button aria-label=<label> data-sc-part="snowcone-editor-pip" type="button">
320
- <div aria-busy="true" data-sc-part="preview" data-sc-preview-state="rendering">
371
+ <div aria-busy="true" class="sc-preview-frame" data-sc-part="preview" data-sc-preview-state="rendering">
321
372
  <span aria-busy="true">
322
373
  ```
323
374
 
@@ -331,7 +382,7 @@ stable hooks; `sc:`-prefixed utility classes are internal and NOT contract.
331
382
 
332
383
  ```html
333
384
  <div data-sc-part="snowcone-editor-swap-stage">
334
- <div aria-busy="true" data-sc-part="preview" data-sc-preview-state="rendering">
385
+ <div aria-busy="true" class="sc-preview-frame" data-sc-part="preview" data-sc-preview-state="rendering">
335
386
  <div aria-busy="true">
336
387
  <button aria-label=<label> data-sc-part="snowcone-editor-swap-back" type="button">
337
388
  ```
@@ -364,88 +415,117 @@ stable hooks; `sc:`-prefixed utility classes are internal and NOT contract.
364
415
  <input aria-label=<label> data-sc-layer=<layer-name> data-sc-part="textfield" placeholder=<placeholder> type="text">
365
416
  ```
366
417
 
367
- ## `.sc-root` theming tokens
368
-
369
- Declared on `.sc-root` (applied once by `Editor.Root`); override any of
370
- them on your own wrapper around the Root to retheme every part. Portaled
371
- UI (the floating toolbar) carries its own `.sc-root` wrapper, so overrides
372
- on `:root` or above the widget apply there too.
373
-
374
- | group | token | default |
375
- |---|---|---|
376
- | Semantic Colors | `--color-primary` | `#000000` |
377
- | Semantic Colors | `--color-primary-foreground` | `#ffffff` |
378
- | Semantic Colors | `--color-secondary` | `#f4f4f5` |
379
- | Semantic Colors | `--color-secondary-foreground` | `#18181b` |
380
- | Semantic Colors | `--color-default` | `#f0f0f1` |
381
- | Semantic Colors | `--color-default-foreground` | `#18181b` |
382
- | Semantic Colors | `--color-danger` | `#ef4444` |
383
- | Semantic Colors | `--color-danger-foreground` | `#ffffff` |
384
- | Semantic Colors | `--color-success` | `#22c55e` |
385
- | Semantic Colors | `--color-success-foreground` | `#ffffff` |
386
- | Semantic Colors | `--color-warning` | `#f59e0b` |
387
- | Semantic Colors | `--color-warning-foreground` | `#000000` |
388
- | Layout Colors | `--color-background` | `#f8f8f8` |
389
- | Layout Colors | `--color-foreground` | `#0a0a0a` |
390
- | Layout Colors | `--color-surface` | `#ffffff` |
391
- | Layout Colors | `--color-surface-foreground` | `#0a0a0a` |
392
- | Layout Colors | `--color-muted` | `#f4f4f5` |
393
- | Layout Colors | `--color-muted-foreground` | `#71717a` |
394
- | Layout Colors | `--color-divider` | `#e4e4e7` |
395
- | Layout Colors | `--color-focus` | `#000000` |
396
- | Field/Input Colors | `--color-field` | `#ffffff` |
397
- | Field/Input Colors | `--color-field-foreground` | `#0a0a0a` |
398
- | Field/Input Colors | `--color-field-placeholder` | `#71717a` |
399
- | Field/Input Colors | `--color-field-border` | `transparent` |
400
- | Accent (backward compat) | `--color-accent` | `#000000` |
401
- | Accent (backward compat) | `--color-accent-foreground` | `#ffffff` |
402
- | Shadcn compatibility aliases | `--color-card` | `#ffffff` |
403
- | Shadcn compatibility aliases | `--color-card-foreground` | `#0a0a0a` |
404
- | Shadcn compatibility aliases | `--color-popover` | `#ffffff` |
405
- | Shadcn compatibility aliases | `--color-popover-foreground` | `#0a0a0a` |
406
- | Shadcn compatibility aliases | `--color-border` | `#e4e4e7` |
407
- | Shadcn compatibility aliases | `--color-destructive` | `#ef4444` |
408
- | Shadcn compatibility aliases | `--color-destructive-foreground` | `#ffffff` |
409
- | Shadcn compatibility aliases | `--color-ring` | `#000000` |
410
- | Shadcn compatibility aliases | `--color-input` | `transparent` |
411
- | Overlay/Surface | `--color-overlay` | `#ffffff` |
412
- | Overlay/Surface | `--color-overlay-foreground` | `#0a0a0a` |
413
- | Overlay/Surface | `--shadow-overlay` | `0 8px 30px rgb(0 0 0 / 0.12)` |
414
- | Overlay/Surface | `--shadow-surface` | `0 1px 3px rgb(0 0 0 / 0.1)` |
415
- | Overlay/Surface | `--shadow-soft` | `0 1px 2px rgb(0 0 0 / 0.06), 0 2px 4px rgb(0 0 0 / 0.04)` |
416
- | Semantic Font Families | `--font-family-heading` | `ui-sans-serif, system-ui, sans-serif` |
417
- | Semantic Font Families | `--font-family-body` | `ui-sans-serif, system-ui, sans-serif` |
418
- | Semantic Font Families | `--font-family-label` | `ui-sans-serif, system-ui, sans-serif` |
419
- | Semantic Font Families | `--font-family-button` | `ui-sans-serif, system-ui, sans-serif` |
420
- | Semantic Font Families | `--font-family-caption` | `ui-sans-serif, system-ui, sans-serif` |
421
- | Semantic Font Families | `--font-family-display` | `ui-sans-serif, system-ui, sans-serif` |
422
- | Semantic Font Families | `--font-family-accent` | `ui-sans-serif, system-ui, sans-serif` |
423
- | Semantic Radius | `--radius-button` | `4px` |
424
- | Semantic Radius | `--radius-input` | `4px` |
425
- | Semantic Radius | `--radius-card` | `6px` |
426
- | Semantic Radius | `--radius-modal` | `8px` |
427
- | Semantic Radius | `--radius-badge` | `9999px` |
428
- | Semantic Radius | `--radius-avatar` | `9999px` |
429
- | Semantic Radius | `--radius-tooltip` | `6px` |
430
- | Semantic Radius | `--radius-image` | `4px` |
431
- | Z-index scale | `--z-base` | `1` |
432
- | Z-index scale | `--z-sticky` | `1000` |
433
- | Z-index scale | `--z-dropdown` | `1001` |
434
- | Z-index scale | `--z-drawer` | `10002` |
435
- | Z-index scale | `--z-overlay` | `10001` |
436
- | Z-index scale | `--z-modal` | `10000` |
437
- | Z-index scale | `--z-tooltip` | `2147483647` |
438
- | Z-index scale | `--spacing-xs` | `4px` |
439
- | Z-index scale | `--spacing-sm` | `6px` |
440
- | Z-index scale | `--spacing-md` | `8px` |
441
- | Z-index scale | `--spacing-lg` | `10px` |
442
- | Z-index scale | `--spacing-xl` | `12px` |
443
- | Z-index scale | `--spacing-2xl` | `16px` |
444
- | Z-index scale | `--spacing-3xl` | `20px` |
445
- | Z-index scale | `--spacing-4xl` | `24px` |
446
- | Z-index scale | `--color-text-primary` | `#0a0a0a` |
447
- | Z-index scale | `--color-text-secondary` | `#71717a` |
448
- | Z-index scale | `--color-text-muted` | `#a1a1aa` |
449
- | Z-index scale | `--color-border-primary` | `#e4e4e7` |
450
- | Z-index scale | `--color-border-secondary` | `#f0f0f1` |
451
- | Z-index scale | `--color-border-dark` | `#d4d4d8` |
418
+ ## `.sc-root` theming tokens (the host theming API)
419
+
420
+ The override surface is the UNPREFIXED primitives below (`--foreground`,
421
+ `--surface`, `--accent`, …), declared on `.sc-root` — the element
422
+ `Editor.Root` itself renders as the composition's OUTERMOST wrapper.
423
+ Working recipes:
424
+
425
+ - **Dark host:** put the `dark` class on `<html>` (or any ancestor of the
426
+ Root). The package ships a complete `.dark .sc-root` theme — the `dark`
427
+ column below. Blank = inherits the light value (brand/status colors,
428
+ fonts, radius, spacing are mode-independent). `<html>`-level classes
429
+ also reach body-portaled package UI.
430
+ - **Custom theme:** scope overrides as `.my-brand .sc-root { --foreground: …; }`
431
+ with `class="my-brand"` on an element ABOVE `<Editor.Root/>` (page shell
432
+ or `<html>`). A class on DOM you render INSIDE the Root cannot work —
433
+ the Root's own `.sc-root` wraps your markup, so `.my-brand .sc-root`
434
+ matches nothing there.
435
+ - **Portal caveat:** package UI portaled to `<body>` (the floating
436
+ toolbar) carries its own `.sc-root` outside any page-shell wrapper —
437
+ `<html>`-level classes reach it; a page-shell wrapper does not.
438
+
439
+ NOT the API: `--color-*` (Tailwind `@theme` utility-generation defaults)
440
+ and `--sc-color-*` (emitted plumbing that `.sc-root` re-points at the
441
+ primitives). Overriding those does nothing. Earlier versions of this
442
+ document listed the `@theme` defaults here in error.
443
+
444
+ | group | token | default | dark |
445
+ |---|---|---|---|
446
+ | Primitive colors | `--white` | `oklch(100% 0 0)` | |
447
+ | Primitive colors | `--black` | `oklch(0% 0 0)` | |
448
+ | Primitive colors | `--snow` | `oklch(0.9911 0 0)` | |
449
+ | Primitive colors | `--eclipse` | `oklch(0.2103 0.0059 285.89)` | |
450
+ | Primary / Accent — HeroUI default blue | `--accent` | `oklch(0.6204 0.195 253.83)` | |
451
+ | Primary / Accent — HeroUI default blue | `--accent-foreground` | `var(--snow)` | |
452
+ | Primary / Accent — HeroUI default blue | `--primary` | `var(--accent)` | |
453
+ | Primary / Accent — HeroUI default blue | `--primary-foreground` | `var(--accent-foreground)` | |
454
+ | Secondary | `--secondary` | `oklch(0.45 0.0 0)` | |
455
+ | Secondary | `--secondary-foreground` | `var(--eclipse)` | |
456
+ | Default — Neutral elements | `--default` | `oklch(94% 0.001 286.375)` | `oklch(27.4% 0.006 286.033)` |
457
+ | Default — Neutral elements | `--default-foreground` | `var(--eclipse)` | `var(--snow)` |
458
+ | Default — Neutral elements | `--color-default-on-surface` | `oklch(90% 0.006 265)` | `oklch(30% 0.006 265)` |
459
+ | Status colors | `--success` | `oklch(0.7329 0.1935 150.81)` | |
460
+ | Status colors | `--success-foreground` | `var(--eclipse)` | |
461
+ | Status colors | `--warning` | `oklch(0.7819 0.1585 72.33)` | |
462
+ | Status colors | `--warning-foreground` | `var(--eclipse)` | |
463
+ | Status colors | `--danger` | `oklch(0.6532 0.2328 25.74)` | |
464
+ | Status colors | `--danger-foreground` | `var(--snow)` | |
465
+ | Layout colors | `--background` | `oklch(0.9607 0 0)` | `oklch(0.07 0.002 270)` |
466
+ | Layout colors | `--foreground` | `var(--eclipse)` | `var(--snow)` |
467
+ | Layout colors | `--muted` | `oklch(0.5517 0.0138 285.94)` | `oklch(70.5% 0.015 286.067)` |
468
+ | Layout colors | `--muted-foreground` | `oklch(from var(--foreground) l c h / 0.6)` | `oklch(from var(--foreground) l c h / 0.6)` |
469
+ | Layout colors | `--divider` | `oklch(92% 0.004 286.32)` | `oklch(32% 0.006 286.033)` |
470
+ | Layout colors | `--focus` | `var(--accent)` | |
471
+ | Surface | `--surface` | `var(--white)` | `oklch(0.2103 0.0059 285.89)` |
472
+ | Surface | `--surface-foreground` | `var(--foreground)` | `var(--foreground)` |
473
+ | Surface | `--surface-shadow` | `0 2px 4px 0 rgba(0, 0, 0, 0.04), 0 1px 2px 0 rgba(0, 0, 0, 0.06), 0 0 1px 0 rgba(0, 0, 0, 0.06)` | `0 0 0 0 transparent inset` |
474
+ | Overlay | `--overlay` | `var(--white)` | `oklch(0.22 0.0059 285.89)` |
475
+ | Overlay | `--overlay-foreground` | `var(--foreground)` | `var(--foreground)` |
476
+ | Overlay | `--overlay-shadow` | `0 4px 16px 0 rgba(24, 24, 27, 0.08), 0 8px 24px 0 rgba(24, 24, 27, 0.09)` | `0 0 0 0 transparent inset` |
477
+ | Fields/Inputs | `--field` | `var(--white)` | `var(--default)` |
478
+ | Fields/Inputs | `--field-foreground` | `var(--eclipse)` | `var(--foreground)` |
479
+ | Fields/Inputs | `--field-placeholder` | `var(--muted)` | |
480
+ | Fields/Inputs | `--field-border` | `transparent` | `transparent` |
481
+ | Fields/Inputs | `--color-field-on-surface` | `oklch(96% 0.006 265)` | `oklch(25% 0.006 265)` |
482
+ | Shadows | `--shadow-color-sm` | `rgba(0, 0, 0, 0.06)` | `rgba(0, 0, 0, 0.2)` |
483
+ | Shadows | `--shadow-color-md` | `rgba(0, 0, 0, 0.08)` | `rgba(0, 0, 0, 0.25)` |
484
+ | Shadows | `--shadow-color-lg` | `rgba(0, 0, 0, 0.1)` | `rgba(0, 0, 0, 0.3)` |
485
+ | Shadows | `--shadow-color-tooltip` | `rgba(0, 0, 0, 0.1)` | `rgba(0, 0, 0, 0.3)` |
486
+ | Shadows | `--shadow-color-hover` | `rgba(0, 0, 0, 0.08)` | `rgba(0, 0, 0, 0.2)` |
487
+ | Fonts | `--font-heading` | `ui-sans-serif, system-ui, sans-serif` | |
488
+ | Fonts | `--font-body` | `ui-sans-serif, system-ui, sans-serif` | |
489
+ | Fonts | `--font-label` | `var(--font-body)` | |
490
+ | Fonts | `--font-button` | `var(--font-body)` | |
491
+ | Fonts | `--font-caption` | `var(--font-body)` | |
492
+ | Fonts | `--font-display` | `var(--font-heading)` | |
493
+ | Fonts | `--font-accent` | `var(--font-heading)` | |
494
+ | Font weights | `--font-weight-body` | `400` | |
495
+ | Font weights | `--font-weight-heading` | `600` | |
496
+ | Font weights | `--font-weight-button` | `500` | |
497
+ | Font weights | `--font-weight-label` | `500` | |
498
+ | Font weights | `--font-weight-caption` | `400` | |
499
+ | Font weights | `--font-weight-display` | `700` | |
500
+ | Semantic radius roles → map to primitives | `--radius-semantic-button` | `var(--radius-md, 4px)` | |
501
+ | Semantic radius roles → map to primitives | `--radius-semantic-input` | `var(--radius-md, 4px)` | |
502
+ | Semantic radius roles → map to primitives | `--radius-semantic-card` | `var(--radius-lg, 6px)` | |
503
+ | Semantic radius roles → map to primitives | `--radius-semantic-modal` | `var(--radius-xl, 8px)` | |
504
+ | Semantic radius roles → map to primitives | `--radius-semantic-badge` | `var(--radius-full, 9999px)` | |
505
+ | Semantic radius roles → map to primitives | `--radius-semantic-avatar` | `var(--radius-full, 9999px)` | |
506
+ | Semantic radius roles → map to primitives | `--radius-semantic-tooltip` | `var(--radius-lg, 6px)` | |
507
+ | Semantic radius roles → map to primitives | `--radius-semantic-image` | `var(--radius-md, 4px)` | |
508
+ | Radius primitives (fallbacks for tokens.css) | `--radius-sm` | `2px` | |
509
+ | Radius primitives (fallbacks for tokens.css) | `--radius-md` | `4px` | |
510
+ | Radius primitives (fallbacks for tokens.css) | `--radius-lg` | `6px` | |
511
+ | Radius primitives (fallbacks for tokens.css) | `--radius-xl` | `8px` | |
512
+ | Radius primitives (fallbacks for tokens.css) | `--radius-2xl` | `12px` | |
513
+ | Radius primitives (fallbacks for tokens.css) | `--radius-3xl` | `20px` | |
514
+ | Radius primitives (fallbacks for tokens.css) | `--radius-full` | `9999px` | |
515
+ | Spacing (fallbacks for tokens.css) | `--space-xs` | `4px` | |
516
+ | Spacing (fallbacks for tokens.css) | `--space-sm` | `6px` | |
517
+ | Spacing (fallbacks for tokens.css) | `--space-md` | `8px` | |
518
+ | Spacing (fallbacks for tokens.css) | `--space-lg` | `10px` | |
519
+ | Spacing (fallbacks for tokens.css) | `--space-xl` | `12px` | |
520
+ | Spacing (fallbacks for tokens.css) | `--space-2xl` | `16px` | |
521
+ | Spacing (fallbacks for tokens.css) | `--space-3xl` | `20px` | |
522
+ | Spacing (fallbacks for tokens.css) | `--space-4xl` | `24px` | |
523
+ | Transitions | `--transition-fast` | `0.1s ease` | |
524
+ | Transitions | `--transition-base` | `0.15s ease` | |
525
+ | Opacity | `--opacity-disabled` | `0.3` | |
526
+ | Opacity | `--opacity-muted` | `0.5` | |
527
+ | Canvas background | `--color-canvas-bg` | `#f5f5f5` | `#080809` |
528
+ | Legacy tokens.css shorthand aliases used by embed components | `--text-primary` | `var(--foreground)` | `var(--foreground)` |
529
+ | Legacy tokens.css shorthand aliases used by embed components | `--text-secondary` | `var(--muted-foreground)` | `var(--muted-foreground)` |
530
+ | Legacy tokens.css shorthand aliases used by embed components | `--bg-primary` | `var(--surface)` | `var(--surface)` |
531
+ | Legacy tokens.css shorthand aliases used by embed components | `--bg-secondary` | `var(--background)` | `var(--background)` |
@@ -3,8 +3,8 @@ import * as se from "react";
3
3
  import we, { useRef as $, useEffect as X, useCallback as D, useState as T, useLayoutEffect as ic, useMemo as Ye, memo as lc } from "react";
4
4
  import { createPortal as xa } from "react-dom";
5
5
  import { u as dc, a as Ca, e as wa, f as ka } from "./editorErrors-B2mb1sVN.js";
6
- import { n as uc, I as P, y as Ce, K as Ta, H as ae, N as mt, B as te, z as Na, T as de, h as ue, i as fe, O as j, m as ss, U as We, J as Sa, C as Da, d as Ma, S as Ia } from "./UnifiedFontService-CC3CSmH5.js";
7
- import { R as cs, L as Ee, a as Ra, I as Ea, T as Ge } from "./custom-icons-BW6hqmkL.js";
6
+ import { n as uc, I as P, z as Ce, N as Ta, J as ae, O as mt, B as te, A as Na, T as de, h as ue, i as fe, P as j, m as ss, U as We, K as Sa, C as Da, d as Ma, S as Ia } from "./UnifiedFontService-Bx2MxFfy.js";
7
+ import { R as cs, L as Ee, a as Ra, I as Ea, T as Ge } from "./custom-icons-DeYIrTK1.js";
8
8
  import * as ht from "@radix-ui/react-popover";
9
9
  import * as Je from "@radix-ui/react-slider";
10
10
  import { T as Xn, G as fc, H as Ms, J as Is, P as pc, Q as Rs, R as qn } from "./ExportManager-DoU4VK6h.js";
@@ -5553,4 +5553,4 @@ export {
5553
5553
  Di as s,
5554
5554
  zr as u
5555
5555
  };
5556
- //# sourceMappingURL=ContextualToolbars-BDEt9ND0.js.map
5556
+ //# sourceMappingURL=ContextualToolbars-DUhBKVxe.js.map