@motion-proto/live-tokens 0.6.1 → 0.7.1

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 (212) hide show
  1. package/README.md +14 -13
  2. package/dist-plugin/index.cjs +149 -136
  3. package/dist-plugin/index.d.cts +1 -1
  4. package/dist-plugin/index.d.ts +1 -1
  5. package/dist-plugin/index.js +147 -135
  6. package/package.json +26 -41
  7. package/src/{component-editor → editor/component-editor}/BadgeEditor.svelte +8 -82
  8. package/src/{component-editor → editor/component-editor}/CalloutEditor.svelte +4 -4
  9. package/src/{component-editor → editor/component-editor}/CardEditor.svelte +28 -76
  10. package/src/{component-editor → editor/component-editor}/CollapsibleSectionEditor.svelte +3 -3
  11. package/src/{component-editor → editor/component-editor}/CornerBadgeEditor.svelte +31 -93
  12. package/src/{component-editor → editor/component-editor}/DialogEditor.svelte +60 -57
  13. package/src/editor/component-editor/ImageEditor.svelte +30 -0
  14. package/src/{component-editor → editor/component-editor}/InlineEditActionsEditor.svelte +6 -4
  15. package/src/editor/component-editor/MenuSelectEditor.svelte +160 -0
  16. package/src/{component-editor → editor/component-editor}/NotificationEditor.svelte +64 -37
  17. package/src/{component-editor → editor/component-editor}/ProgressBarEditor.svelte +5 -4
  18. package/src/{component-editor → editor/component-editor}/RadioButtonEditor.svelte +3 -3
  19. package/src/{component-editor → editor/component-editor}/SectionDividerEditor.svelte +57 -84
  20. package/src/{component-editor → editor/component-editor}/SegmentedControlEditor.svelte +2 -2
  21. package/src/{component-editor → editor/component-editor}/StandardButtonsEditor.svelte +16 -20
  22. package/src/{component-editor → editor/component-editor}/TabBarEditor.svelte +9 -14
  23. package/src/{component-editor → editor/component-editor}/TableEditor.svelte +9 -18
  24. package/src/{component-editor → editor/component-editor}/TooltipEditor.svelte +11 -47
  25. package/src/{component-editor → editor/component-editor}/registry.ts +28 -18
  26. package/src/{component-editor → editor/component-editor}/scaffolding/AngleDial.svelte +2 -2
  27. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentEditorBase.svelte +3 -51
  28. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentFileManager.svelte +144 -416
  29. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentFileMenu.svelte +18 -170
  30. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentsTab.svelte +2 -2
  31. package/src/{component-editor → editor/component-editor}/scaffolding/CopyFromMenu.svelte +44 -4
  32. package/src/{component-editor → editor/component-editor}/scaffolding/DividerEditor.svelte +1 -1
  33. package/src/{component-editor → editor/component-editor}/scaffolding/FieldsetWrapper.svelte +1 -1
  34. package/src/{component-editor → editor/component-editor}/scaffolding/GradientCard.svelte +6 -6
  35. package/src/{component-editor → editor/component-editor}/scaffolding/LinkageChart.svelte +6 -6
  36. package/src/{component-editor → editor/component-editor}/scaffolding/LinkedBlock.svelte +6 -11
  37. package/src/editor/component-editor/scaffolding/NonStylableConfig.svelte +38 -0
  38. package/src/{component-editor → editor/component-editor}/scaffolding/SaveAsDialog.svelte +66 -12
  39. package/src/editor/component-editor/scaffolding/ShadowBackdrop.svelte +72 -0
  40. package/src/editor/component-editor/scaffolding/ShadowBackdropControls.svelte +132 -0
  41. package/src/editor/component-editor/scaffolding/StateBlock.svelte +257 -0
  42. package/src/{component-editor → editor/component-editor}/scaffolding/TokenLayout.svelte +9 -7
  43. package/src/editor/component-editor/scaffolding/VariantGroup.svelte +644 -0
  44. package/src/{component-editor → editor/component-editor}/scaffolding/editorContext.ts +19 -9
  45. package/src/{component-editor → editor/component-editor}/scaffolding/linkedBlock.ts +2 -2
  46. package/src/{component-editor → editor/component-editor}/scaffolding/types.ts +14 -0
  47. package/src/{lib → editor/core/components}/componentConfigService.ts +2 -2
  48. package/src/{lib → editor/core/components}/componentPersist.ts +5 -5
  49. package/src/editor/core/flashStatus.ts +30 -0
  50. package/src/{lib → editor/core/fonts}/fontLoader.ts +2 -2
  51. package/src/{lib → editor/core/fonts}/fontMigration.ts +4 -4
  52. package/src/{lib → editor/core/fonts}/fontParse.ts +1 -1
  53. package/src/editor/core/manifests/manifestService.ts +116 -0
  54. package/src/{lib → editor/core/palettes}/paletteDerivation.ts +2 -2
  55. package/src/{lib → editor/core/palettes}/tokenRegistry.ts +5 -5
  56. package/src/editor/core/productionPulse.ts +37 -0
  57. package/src/{lib → editor/core/routing}/router.ts +1 -1
  58. package/src/{lib/files/versionedFileResource.ts → editor/core/storage/files/versionedFileResourceClient.ts} +8 -1
  59. package/src/{lib → editor/core/store}/editorCore.ts +24 -8
  60. package/src/{lib → editor/core/store}/editorPersistence.ts +3 -3
  61. package/src/{lib → editor/core/store}/editorRenderer.ts +2 -2
  62. package/src/{lib → editor/core/store}/editorStore.ts +17 -17
  63. package/src/{lib → editor/core/store}/editorTypes.ts +1 -1
  64. package/src/{lib → editor/core/themes}/slices/columns.ts +2 -2
  65. package/src/{lib → editor/core/themes}/slices/components.ts +2 -2
  66. package/src/{lib → editor/core/themes}/slices/fonts.ts +1 -1
  67. package/src/{lib → editor/core/themes}/slices/gradients.ts +2 -2
  68. package/src/{lib → editor/core/themes}/slices/overlays.ts +1 -1
  69. package/src/{lib → editor/core/themes}/slices/palettes.ts +1 -1
  70. package/src/{lib → editor/core/themes}/slices/shadows.ts +3 -3
  71. package/src/{lib → editor/core/themes}/themeInit.ts +6 -6
  72. package/src/{lib → editor/core/themes}/themeService.ts +6 -6
  73. package/src/{lib → editor/core/themes}/themeTypes.ts +11 -7
  74. package/src/editor/index.ts +69 -0
  75. package/src/{lib → editor/overlay}/LiveEditorOverlay.svelte +79 -125
  76. package/src/{lib → editor/overlay}/columnsOverlay.ts +2 -2
  77. package/src/{pages → editor/pages}/ComponentEditorPage.svelte +12 -12
  78. package/src/{pages → editor/pages}/Editor.svelte +4 -4
  79. package/src/{pages → editor/pages}/EditorShell.svelte +18 -36
  80. package/src/{styles → editor/styles}/ui-editor.css +41 -21
  81. package/src/{styles → editor/styles}/ui-form-controls.css +8 -8
  82. package/src/{ui → editor/ui}/BezierCurveEditor.svelte +8 -8
  83. package/src/{ui → editor/ui}/ColorEditPanel.svelte +13 -13
  84. package/src/{ui → editor/ui}/EditorViewSwitcher.svelte +8 -6
  85. package/src/editor/ui/FileLoadList.svelte +350 -0
  86. package/src/editor/ui/FilePill.svelte +80 -0
  87. package/src/{ui → editor/ui}/FontStackEditor.svelte +7 -7
  88. package/src/{ui → editor/ui}/GradientEditor.svelte +11 -11
  89. package/src/{ui → editor/ui}/GradientStopPicker.svelte +1 -1
  90. package/src/editor/ui/ManifestFileManager.svelte +371 -0
  91. package/src/{ui → editor/ui}/PaletteEditor.svelte +132 -598
  92. package/src/{ui → editor/ui}/ProjectFontsSection.svelte +102 -144
  93. package/src/{ui → editor/ui}/SurfacesTab.svelte +3 -3
  94. package/src/{ui → editor/ui}/TextTab.svelte +3 -3
  95. package/src/{ui → editor/ui}/ThemeFileManager.svelte +286 -519
  96. package/src/{ui → editor/ui}/UICopyPopover.svelte +4 -4
  97. package/src/{ui → editor/ui}/UIFontFamilySelector.svelte +6 -6
  98. package/src/{ui → editor/ui}/UIFontSizeSelector.svelte +1 -1
  99. package/src/editor/ui/UIInfoPopover.svelte +244 -0
  100. package/src/{ui → editor/ui}/UILineHeightSelector.svelte +5 -5
  101. package/src/{ui → editor/ui}/UILinkToggle.svelte +2 -2
  102. package/src/{ui → editor/ui}/UIPaddingSelector.svelte +6 -6
  103. package/src/{ui → editor/ui}/UIPaletteSelector.svelte +26 -26
  104. package/src/editor/ui/UIPillButton.svelte +138 -0
  105. package/src/{ui → editor/ui}/UIRadio.svelte +2 -2
  106. package/src/{ui → editor/ui}/UIRelinkConfirmPopover.svelte +4 -4
  107. package/src/editor/ui/UISquareButton.svelte +172 -0
  108. package/src/{ui → editor/ui}/UITokenSelector.svelte +10 -10
  109. package/src/{ui → editor/ui}/UIVariantSelector.svelte +1 -1
  110. package/src/{ui → editor/ui}/VariablesTab.svelte +31 -8
  111. package/src/{ui → editor/ui}/palette/GradientStopEditor.svelte +13 -13
  112. package/src/{ui → editor/ui}/palette/OverridesPanel.svelte +13 -13
  113. package/src/{ui → editor/ui}/palette/PaletteBase.svelte +8 -5
  114. package/src/{ui → editor/ui}/palette/paletteEditorState.ts +1 -1
  115. package/src/editor/ui/palette/paletteMath.ts +275 -0
  116. package/src/{ui → editor/ui}/sections/ColumnsSection.svelte +137 -17
  117. package/src/{ui → editor/ui}/sections/GradientsSection.svelte +7 -7
  118. package/src/{ui → editor/ui}/sections/OverlaysSection.svelte +17 -17
  119. package/src/{ui → editor/ui}/sections/ShadowsSection.svelte +22 -22
  120. package/src/{ui → editor/ui}/sections/TokenScaleTable.svelte +3 -3
  121. package/src/{components → system/components}/Badge.svelte +0 -36
  122. package/src/{components → system/components}/Card.svelte +8 -62
  123. package/src/{components → system/components}/CornerBadge.svelte +8 -24
  124. package/src/{components → system/components}/Dialog.svelte +1 -1
  125. package/src/system/components/FloatingTokenTags.css +256 -0
  126. package/src/system/components/FloatingTokenTags.svelte +592 -0
  127. package/src/{components → system/components}/InlineEditActions.svelte +6 -4
  128. package/src/system/components/MenuSelect.svelte +229 -0
  129. package/src/{components → system/components}/ProgressBar.svelte +29 -11
  130. package/src/{components → system/components}/SegmentedControl.svelte +49 -43
  131. package/src/{components → system/components}/TabBar.svelte +81 -65
  132. package/src/{components → system/components}/Table.svelte +17 -3
  133. package/src/{components → system/components}/Tooltip.svelte +6 -4
  134. package/src/system/styles/CONVENTIONS.md +178 -0
  135. package/src/{styles → system/styles}/fonts.css +6 -3
  136. package/src/{styles → system/styles}/tokens.css +149 -29
  137. package/src/component-editor/ImageEditor.svelte +0 -74
  138. package/src/component-editor/scaffolding/NonStylableConfig.svelte +0 -62
  139. package/src/component-editor/scaffolding/ShadowBackdrop.svelte +0 -37
  140. package/src/component-editor/scaffolding/ShadowBackdropControls.svelte +0 -61
  141. package/src/component-editor/scaffolding/StateBlock.svelte +0 -132
  142. package/src/component-editor/scaffolding/VariantGroup.svelte +0 -310
  143. package/src/data/google-fonts.json +0 -75
  144. package/src/lib/index.ts +0 -68
  145. package/src/lib/presetService.ts +0 -214
  146. package/src/lib/productionPulse.ts +0 -32
  147. package/src/ui/PresetFileManager.svelte +0 -1116
  148. package/src/ui/UnsavedComponentsDialog.svelte +0 -315
  149. /package/src/{styles → app}/site.css +0 -0
  150. /package/src/{component-editor → editor/component-editor}/index.ts +0 -0
  151. /package/src/{component-editor → editor/component-editor}/scaffolding/DemoHeader.svelte +0 -0
  152. /package/src/{component-editor → editor/component-editor}/scaffolding/TypeEditor.svelte +0 -0
  153. /package/src/{component-editor → editor/component-editor}/scaffolding/buildTypeGroupTokens.ts +0 -0
  154. /package/src/{component-editor → editor/component-editor}/scaffolding/componentSectionType.ts +0 -0
  155. /package/src/{component-editor → editor/component-editor}/scaffolding/componentSources.ts +0 -0
  156. /package/src/{component-editor → editor/component-editor}/scaffolding/defaultSections.ts +0 -0
  157. /package/src/{component-editor → editor/component-editor}/scaffolding/siblings.ts +0 -0
  158. /package/src/{lib → editor/core/components}/componentConfigKeys.ts +0 -0
  159. /package/src/{lib → editor/core}/cssVarSync.ts +0 -0
  160. /package/src/{lib → editor/core/palettes}/oklch.ts +0 -0
  161. /package/src/{lib → editor/core/routing}/navLinkTypes.ts +0 -0
  162. /package/src/{lib → editor/core/routing}/parentRouteStore.ts +0 -0
  163. /package/src/{lib → editor/core/storage}/storage.ts +0 -0
  164. /package/src/{lib → editor/core/store}/editorConfig.ts +0 -0
  165. /package/src/{lib → editor/core/store}/editorConfigStore.ts +0 -0
  166. /package/src/{lib → editor/core/store}/editorKeybindings.ts +0 -0
  167. /package/src/{lib → editor/core/store}/editorViewStore.ts +0 -0
  168. /package/src/{lib → editor/core/themes}/migrations/2026-04-24-component-prefix-and-suffix-renames.ts +0 -0
  169. /package/src/{lib → editor/core/themes}/migrations/2026-04-24-legacy-keys-and-bg-to-canvas.ts +0 -0
  170. /package/src/{lib → editor/core/themes}/migrations/2026-04-27-segmentedcontrol-disabled-flatten.ts +0 -0
  171. /package/src/{lib → editor/core/themes}/migrations/2026-05-08-collapsiblesection-frame-and-cleanup.ts +0 -0
  172. /package/src/{lib → editor/core/themes}/migrations/2026-05-08-collapsiblesection-variant-namespace.ts +0 -0
  173. /package/src/{lib → editor/core/themes}/migrations/2026-05-10-sectiondivider-gradient-stops.ts +0 -0
  174. /package/src/{lib → editor/core/themes}/migrations/2026-05-13-primary-to-brand.ts +0 -0
  175. /package/src/{lib → editor/core/themes}/migrations/index.ts +0 -0
  176. /package/src/{lib → editor/core/themes}/parsers/globalRootBlock.ts +0 -0
  177. /package/src/{lib → editor/core/themes}/slices/domainVars.ts +0 -0
  178. /package/src/{lib → editor/overlay}/ColumnsOverlay.svelte +0 -0
  179. /package/src/{lib → editor/overlay}/overlayState.ts +0 -0
  180. /package/src/{pages → editor/pages}/ComponentEditorPage.svelte.d.ts +0 -0
  181. /package/src/{pages → editor/pages}/Editor.svelte.d.ts +0 -0
  182. /package/src/{ui → editor/ui}/Toggle.svelte +0 -0
  183. /package/src/{ui → editor/ui}/UIDialog.svelte +0 -0
  184. /package/src/{ui → editor/ui}/UIFontWeightSelector.svelte +0 -0
  185. /package/src/{ui → editor/ui}/UIOptionItem.svelte +0 -0
  186. /package/src/{ui → editor/ui}/UIOptionList.svelte +0 -0
  187. /package/src/{ui → editor/ui}/UIRadioGroup.svelte +0 -0
  188. /package/src/{lib → editor/ui}/copyPopover.ts +0 -0
  189. /package/src/{ui → editor/ui}/curveEngine.ts +0 -0
  190. /package/src/{ui → editor/ui}/index.ts +0 -0
  191. /package/src/{ui → editor/ui}/keepInViewport.ts +0 -0
  192. /package/src/{ui → editor/ui}/palette/ScaleCurveEditor.svelte +0 -0
  193. /package/src/{lib → editor/ui}/scrollSection.ts +0 -0
  194. /package/src/{ui → editor/ui}/sections/tokenScales.ts +0 -0
  195. /package/src/{ui → editor/ui}/variantScales.ts +0 -0
  196. /package/src/{assets → system/assets}/newspaper.webp +0 -0
  197. /package/src/{assets → system/assets}/offering.webp +0 -0
  198. /package/src/{components → system/components}/Button.svelte +0 -0
  199. /package/src/{components → system/components}/Callout.svelte +0 -0
  200. /package/src/{components → system/components}/CollapsibleSection.svelte +0 -0
  201. /package/src/{components → system/components}/Image.svelte +0 -0
  202. /package/src/{components → system/components}/Notification.svelte +0 -0
  203. /package/src/{components → system/components}/RadioButton.svelte +0 -0
  204. /package/src/{components → system/components}/SectionDivider.svelte +0 -0
  205. /package/src/{components → system/components}/types.ts +0 -0
  206. /package/src/{styles → system/styles}/_padding.scss +0 -0
  207. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-italic-latin-ext.woff2 +0 -0
  208. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-italic-latin.woff2 +0 -0
  209. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-roman-latin-ext.woff2 +0 -0
  210. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-roman-latin.woff2 +0 -0
  211. /package/src/{styles → system/styles}/fonts/Manrope/Manrope-latin-ext.woff2 +0 -0
  212. /package/src/{styles → system/styles}/fonts/Manrope/Manrope-latin.woff2 +0 -0
@@ -7,7 +7,7 @@
7
7
  * direction, kind switch) lives in <GradientEditor>; this section is a
8
8
  * thin grid that toggles which gradient is being edited.
9
9
  */
10
- import { editorState } from '../../lib/editorStore';
10
+ import { editorState } from '../../core/store/editorStore';
11
11
  import GradientEditor from '../GradientEditor.svelte';
12
12
 
13
13
  interface Props {
@@ -60,12 +60,12 @@
60
60
  }
61
61
 
62
62
  .section-title {
63
- font-size: var(--ui-font-size-lg);
63
+ font-size: var(--ui-font-size-2xl);
64
64
  font-weight: var(--ui-font-weight-semibold);
65
65
  color: var(--ui-text-primary);
66
66
  margin: 0;
67
67
  padding-bottom: var(--ui-space-8);
68
- border-bottom: 1px solid var(--ui-border-subtle);
68
+ border-bottom: 2px solid var(--ui-border-high);
69
69
  }
70
70
 
71
71
  .editor-intro {
@@ -103,7 +103,7 @@
103
103
  flex-direction: column;
104
104
  gap: var(--ui-space-8);
105
105
  padding: var(--ui-space-12);
106
- border: 1px solid var(--ui-border-faint);
106
+ border: 1px solid var(--ui-border-low);
107
107
  border-radius: var(--ui-radius-lg);
108
108
  background: var(--ui-surface-lowest);
109
109
  min-width: 0;
@@ -124,7 +124,7 @@
124
124
  .gradient-edit-btn {
125
125
  padding: var(--ui-space-2) var(--ui-space-10);
126
126
  background: var(--ui-surface-low);
127
- border: 1px solid var(--ui-border-faint);
127
+ border: 1px solid var(--ui-border-low);
128
128
  border-radius: var(--ui-radius-sm);
129
129
  color: var(--ui-text-secondary);
130
130
  font-size: var(--ui-font-size-xs);
@@ -134,13 +134,13 @@
134
134
 
135
135
  .gradient-edit-btn:hover {
136
136
  color: var(--ui-text-primary);
137
- border-color: var(--ui-border-default);
137
+ border-color: var(--ui-border);
138
138
  }
139
139
 
140
140
  .gradient-editor-host {
141
141
  margin-top: var(--ui-space-8);
142
142
  padding-top: var(--ui-space-12);
143
- border-top: 1px dashed var(--ui-border-faint);
143
+ border-top: 1px dashed var(--ui-border-low);
144
144
  }
145
145
 
146
146
  .gradient-box {
@@ -6,8 +6,8 @@
6
6
  * rgba values out to :root, so this component only orchestrates mutations
7
7
  * and reads derived display state.
8
8
  */
9
- import { editorState, mutate, beginSliderGesture } from '../../lib/editorStore';
10
- import type { OverlayToken, OverlayChannelGlobals, EditorState } from '../../lib/editorTypes';
9
+ import { editorState, mutate, beginSliderGesture } from '../../core/store/editorStore';
10
+ import type { OverlayToken, OverlayChannelGlobals, EditorState } from '../../core/store/editorTypes';
11
11
 
12
12
  interface Props {
13
13
  copiedVar?: string | null;
@@ -341,16 +341,16 @@
341
341
  }
342
342
 
343
343
  .section-title {
344
- font-size: var(--ui-font-size-lg);
344
+ font-size: var(--ui-font-size-2xl);
345
345
  font-weight: var(--ui-font-weight-semibold);
346
346
  color: var(--ui-text-primary);
347
347
  margin: 0;
348
348
  padding-bottom: var(--ui-space-8);
349
- border-bottom: 1px solid var(--ui-border-subtle);
349
+ border-bottom: 2px solid var(--ui-border-high);
350
350
  }
351
351
 
352
352
  .group-title {
353
- font-size: var(--ui-font-size-md);
353
+ font-size: var(--ui-font-size-lg);
354
354
  font-weight: var(--ui-font-weight-semibold);
355
355
  color: var(--ui-text-secondary);
356
356
  margin: 0;
@@ -404,7 +404,7 @@
404
404
  border-radius: var(--ui-radius-md);
405
405
  position: relative;
406
406
  overflow: hidden;
407
- border: 1px solid var(--ui-border-subtle);
407
+ border: 1px solid var(--ui-border-low);
408
408
  background-image:
409
409
  linear-gradient(45deg, #ccc 25%, transparent 25%),
410
410
  linear-gradient(-45deg, #ccc 25%, transparent 25%),
@@ -442,7 +442,7 @@
442
442
  gap: var(--ui-space-8);
443
443
  padding: var(--ui-space-12);
444
444
  background: var(--ui-surface-lowest);
445
- border: 1px solid var(--ui-border-subtle);
445
+ border: 1px solid var(--ui-border-low);
446
446
  border-radius: var(--ui-radius-md);
447
447
  margin-top: var(--ui-space-8);
448
448
  }
@@ -517,7 +517,7 @@
517
517
  text-align: right;
518
518
  flex-shrink: 0;
519
519
  background: var(--ui-surface-lowest);
520
- border: 1px solid var(--ui-border-subtle);
520
+ border: 1px solid var(--ui-border-low);
521
521
  border-radius: var(--ui-radius-sm);
522
522
  padding: var(--ui-space-2) var(--ui-space-4);
523
523
  -moz-appearance: textfield;
@@ -532,7 +532,7 @@
532
532
 
533
533
  .shadow-slider-input:focus {
534
534
  outline: none;
535
- border-color: var(--ui-border-medium);
535
+ border-color: var(--ui-border-high);
536
536
  }
537
537
 
538
538
  .shadow-slider-unit {
@@ -564,7 +564,7 @@
564
564
  gap: var(--ui-space-8);
565
565
  padding: var(--ui-space-12);
566
566
  background: var(--ui-surface-lowest);
567
- border: 1px solid var(--ui-border-subtle);
567
+ border: 1px solid var(--ui-border-low);
568
568
  border-radius: var(--ui-radius-md);
569
569
  width: 100%;
570
570
  min-width: 14rem;
@@ -576,7 +576,7 @@
576
576
  gap: var(--ui-space-4);
577
577
  margin-top: var(--ui-space-4);
578
578
  padding-top: var(--ui-space-8);
579
- border-top: 1px solid var(--ui-border-faint);
579
+ border-top: 1px solid var(--ui-border-low);
580
580
  }
581
581
 
582
582
  .shadow-css-output code {
@@ -592,7 +592,7 @@
592
592
  color: var(--ui-text-muted);
593
593
  cursor: pointer;
594
594
  padding: var(--ui-space-2) var(--ui-space-6);
595
- border: 1px solid var(--ui-border-subtle);
595
+ border: 1px solid var(--ui-border-low);
596
596
  border-radius: var(--ui-radius-sm);
597
597
  text-align: center;
598
598
  transition: color var(--ui-transition-fast), border-color var(--ui-transition-fast);
@@ -600,7 +600,7 @@
600
600
 
601
601
  .shadow-copy-btn:hover {
602
602
  color: var(--ui-text-primary);
603
- border-color: var(--ui-border-medium);
603
+ border-color: var(--ui-border-high);
604
604
  }
605
605
 
606
606
  .slider-track {
@@ -609,7 +609,7 @@
609
609
  position: relative;
610
610
  height: 12px;
611
611
  border-radius: var(--ui-radius-sm);
612
- border: 1px solid var(--ui-border-subtle);
612
+ border: 1px solid var(--ui-border-low);
613
613
  }
614
614
 
615
615
  .slider-track input[type="range"] {
@@ -631,7 +631,7 @@
631
631
  height: 14px;
632
632
  border-radius: 2px;
633
633
  background: white;
634
- border: 1px solid var(--ui-border-subtle);
634
+ border: 1px solid var(--ui-border-low);
635
635
  box-shadow: 0 1px 3px rgba(0,0,0,0.4);
636
636
  cursor: pointer;
637
637
  }
@@ -641,7 +641,7 @@
641
641
  height: 14px;
642
642
  border-radius: 2px;
643
643
  background: white;
644
- border: 1px solid var(--ui-border-subtle);
644
+ border: 1px solid var(--ui-border-low);
645
645
  box-shadow: 0 1px 3px rgba(0,0,0,0.4);
646
646
  cursor: pointer;
647
647
  }
@@ -661,7 +661,7 @@
661
661
  width: 2rem;
662
662
  flex-shrink: 0;
663
663
  border-radius: var(--ui-radius-sm);
664
- border: 1px solid var(--ui-border-subtle);
664
+ border: 1px solid var(--ui-border-low);
665
665
  }
666
666
 
667
667
  .global-color-sliders {
@@ -18,8 +18,8 @@
18
18
  seedShadowsFromDom, shadowTokenCss, computeShadowXY,
19
19
  SCALE_SHADOW_VARIABLES, defaultShadowOverride,
20
20
  type Scope,
21
- } from '../../lib/editorStore';
22
- import type { ShadowToken, ShadowOverrideFlags, EditorState } from '../../lib/editorTypes';
21
+ } from '../../core/store/editorStore';
22
+ import type { ShadowToken, ShadowOverrideFlags, EditorState } from '../../core/store/editorTypes';
23
23
 
24
24
  interface Props {
25
25
  copiedVar?: string | null;
@@ -803,12 +803,12 @@
803
803
  }
804
804
 
805
805
  .section-title {
806
- font-size: var(--ui-font-size-lg);
806
+ font-size: var(--ui-font-size-2xl);
807
807
  font-weight: var(--ui-font-weight-semibold);
808
808
  color: var(--ui-text-primary);
809
809
  margin: 0;
810
810
  padding-bottom: var(--ui-space-8);
811
- border-bottom: 1px solid var(--ui-border-subtle);
811
+ border-bottom: 2px solid var(--ui-border-high);
812
812
  }
813
813
 
814
814
  .token-info {
@@ -890,7 +890,7 @@
890
890
  color: var(--ui-text-muted);
891
891
  cursor: pointer;
892
892
  padding: var(--ui-space-4) var(--ui-space-8);
893
- border: 1px solid var(--ui-border-subtle);
893
+ border: 1px solid var(--ui-border-low);
894
894
  border-radius: var(--ui-radius-sm);
895
895
  text-align: center;
896
896
  transition: color var(--ui-transition-fast), border-color var(--ui-transition-fast);
@@ -898,7 +898,7 @@
898
898
 
899
899
  .reset-btn:hover {
900
900
  color: var(--ui-text-primary);
901
- border-color: var(--ui-border-medium);
901
+ border-color: var(--ui-border-high);
902
902
  }
903
903
 
904
904
  .shadow-box {
@@ -945,7 +945,7 @@
945
945
  text-align: right;
946
946
  flex-shrink: 0;
947
947
  background: var(--ui-surface-lowest);
948
- border: 1px solid var(--ui-border-subtle);
948
+ border: 1px solid var(--ui-border-low);
949
949
  border-radius: var(--ui-radius-sm);
950
950
  padding: var(--ui-space-2) var(--ui-space-4);
951
951
  -moz-appearance: textfield;
@@ -960,7 +960,7 @@
960
960
 
961
961
  .shadow-slider-input:focus {
962
962
  outline: none;
963
- border-color: var(--ui-border-medium);
963
+ border-color: var(--ui-border-high);
964
964
  }
965
965
 
966
966
  .shadow-slider-unit {
@@ -980,7 +980,7 @@
980
980
 
981
981
  .dial-ring {
982
982
  fill: none;
983
- stroke: var(--ui-border-subtle);
983
+ stroke: var(--ui-border-low);
984
984
  stroke-width: 1.5;
985
985
  }
986
986
 
@@ -996,7 +996,7 @@
996
996
  }
997
997
 
998
998
  .angle-dial:hover .dial-ring {
999
- stroke: var(--ui-border-medium);
999
+ stroke: var(--ui-border-high);
1000
1000
  }
1001
1001
 
1002
1002
  .angle-dial:hover .dial-handle {
@@ -1009,7 +1009,7 @@
1009
1009
  gap: var(--ui-space-4);
1010
1010
  margin-top: var(--ui-space-4);
1011
1011
  padding-top: var(--ui-space-8);
1012
- border-top: 1px solid var(--ui-border-faint);
1012
+ border-top: 1px solid var(--ui-border-low);
1013
1013
  }
1014
1014
 
1015
1015
  .shadow-css-output code {
@@ -1025,7 +1025,7 @@
1025
1025
  color: var(--ui-text-muted);
1026
1026
  cursor: pointer;
1027
1027
  padding: var(--ui-space-2) var(--ui-space-6);
1028
- border: 1px solid var(--ui-border-subtle);
1028
+ border: 1px solid var(--ui-border-low);
1029
1029
  border-radius: var(--ui-radius-sm);
1030
1030
  text-align: center;
1031
1031
  transition: color var(--ui-transition-fast), border-color var(--ui-transition-fast);
@@ -1033,7 +1033,7 @@
1033
1033
 
1034
1034
  .shadow-copy-btn:hover {
1035
1035
  color: var(--ui-text-primary);
1036
- border-color: var(--ui-border-medium);
1036
+ border-color: var(--ui-border-high);
1037
1037
  }
1038
1038
 
1039
1039
  /* Global shadow editor */
@@ -1046,7 +1046,7 @@
1046
1046
  gap: var(--ui-space-6);
1047
1047
  padding: var(--ui-space-12);
1048
1048
  background: var(--ui-surface-lowest);
1049
- border: 1px solid var(--ui-border-subtle);
1049
+ border: 1px solid var(--ui-border-low);
1050
1050
  border-radius: var(--ui-radius-md);
1051
1051
  width: 18rem;
1052
1052
  }
@@ -1103,7 +1103,7 @@
1103
1103
  position: relative;
1104
1104
  height: 12px;
1105
1105
  border-radius: var(--ui-radius-sm);
1106
- border: 1px solid var(--ui-border-subtle);
1106
+ border: 1px solid var(--ui-border-low);
1107
1107
  }
1108
1108
 
1109
1109
  .slider-track input[type="range"] {
@@ -1125,7 +1125,7 @@
1125
1125
  height: 14px;
1126
1126
  border-radius: 2px;
1127
1127
  background: white;
1128
- border: 1px solid var(--ui-border-subtle);
1128
+ border: 1px solid var(--ui-border-low);
1129
1129
  box-shadow: 0 1px 3px rgba(0,0,0,0.4);
1130
1130
  cursor: pointer;
1131
1131
  }
@@ -1135,7 +1135,7 @@
1135
1135
  height: 14px;
1136
1136
  border-radius: 2px;
1137
1137
  background: white;
1138
- border: 1px solid var(--ui-border-subtle);
1138
+ border: 1px solid var(--ui-border-low);
1139
1139
  box-shadow: 0 1px 3px rgba(0,0,0,0.4);
1140
1140
  cursor: pointer;
1141
1141
  }
@@ -1155,7 +1155,7 @@
1155
1155
  width: 2rem;
1156
1156
  flex-shrink: 0;
1157
1157
  border-radius: var(--ui-radius-sm);
1158
- border: 1px solid var(--ui-border-subtle);
1158
+ border: 1px solid var(--ui-border-low);
1159
1159
  }
1160
1160
 
1161
1161
  .global-color-sliders {
@@ -1172,7 +1172,7 @@
1172
1172
  color: var(--ui-text-muted);
1173
1173
  cursor: pointer;
1174
1174
  padding: var(--ui-space-4) var(--ui-space-8);
1175
- border: 1px solid var(--ui-border-subtle);
1175
+ border: 1px solid var(--ui-border-low);
1176
1176
  border-radius: var(--ui-radius-md);
1177
1177
  background: var(--ui-surface-low);
1178
1178
  transition: color var(--ui-transition-fast), border-color var(--ui-transition-fast);
@@ -1180,7 +1180,7 @@
1180
1180
 
1181
1181
  .bg-picker-btn:hover {
1182
1182
  color: var(--ui-text-primary);
1183
- border-color: var(--ui-border-medium);
1183
+ border-color: var(--ui-border-high);
1184
1184
  }
1185
1185
 
1186
1186
  .bg-picker-menu {
@@ -1192,7 +1192,7 @@
1192
1192
  max-height: 24rem;
1193
1193
  overflow-y: auto;
1194
1194
  background: var(--ui-surface-low);
1195
- border: 1px solid var(--ui-border-subtle);
1195
+ border: 1px solid var(--ui-border-low);
1196
1196
  border-radius: var(--ui-radius-md);
1197
1197
  padding: var(--ui-space-4);
1198
1198
  display: flex;
@@ -1250,7 +1250,7 @@
1250
1250
  width: 1rem;
1251
1251
  height: 1rem;
1252
1252
  border-radius: var(--ui-radius-sm);
1253
- border: 1px solid var(--ui-border-subtle);
1253
+ border: 1px solid var(--ui-border-low);
1254
1254
  flex-shrink: 0;
1255
1255
  }
1256
1256
  </style>
@@ -12,7 +12,7 @@
12
12
  * Values are read live via getComputedStyle (passed in by the parent through
13
13
  * `tokens`), so tokens.css remains the single source of truth.
14
14
  */
15
- import { editorState } from '../../lib/editorStore';
15
+ import { editorState } from '../../core/store/editorStore';
16
16
 
17
17
  interface TokenItem {
18
18
  variable: string;
@@ -263,7 +263,7 @@
263
263
  width: 3.5rem;
264
264
  height: 3.5rem;
265
265
  background: none;
266
- border: 2px solid var(--ui-border-medium);
266
+ border: 2px solid var(--ui-border-high);
267
267
  }
268
268
 
269
269
  /* Font sizes / icon sizes */
@@ -339,7 +339,7 @@
339
339
  align-items: baseline;
340
340
  gap: var(--ui-space-12);
341
341
  padding: var(--ui-space-4) 0;
342
- border-bottom: 1px solid var(--ui-border-faint);
342
+ border-bottom: 1px solid var(--ui-border-low);
343
343
  }
344
344
 
345
345
  .token-row:last-child {
@@ -21,14 +21,6 @@
21
21
  variant?: BadgeVariant;
22
22
  size?: 'default' | 'small';
23
23
  icon?: string | undefined;
24
- /** When true, badge is absolutely positioned. Requires the parent to be position: relative. */
25
- floating?: boolean;
26
- /** Corner of the positioned parent to attach to when floating. */
27
- anchor?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
28
- /** CSS length to offset from the anchor edges. Defaults to --space-12 (or --space-8 when size='small'). */
29
- offset?: string | undefined;
30
- /** When true, badge sits flush in the anchor corner: zero offset and squared corners. */
31
- flush?: boolean;
32
24
  /** Custom icon content. Falls back to `icon` prop's font-icon class. Renamed from `slot="icon"` in 0.5.0. */
33
25
  iconSlot?: Snippet;
34
26
  children?: Snippet;
@@ -38,10 +30,6 @@
38
30
  variant = 'info',
39
31
  size = 'default',
40
32
  icon = undefined,
41
- floating = false,
42
- anchor = 'bottom-right',
43
- offset = undefined,
44
- flush = false,
45
33
  iconSlot,
46
34
  children,
47
35
  }: Props = $props();
@@ -50,10 +38,6 @@
50
38
  <span
51
39
  class="badge badge-{variant}"
52
40
  class:badge-small={size === 'small'}
53
- class:badge-floating={floating}
54
- class:badge-flush={flush}
55
- data-anchor={floating ? anchor : undefined}
56
- style={floating && offset && !flush ? `--badge-offset: ${offset};` : undefined}
57
41
  >
58
42
  {#if icon}
59
43
  <span class="icon"><i class={icon}></i></span>
@@ -228,7 +212,6 @@
228
212
  }
229
213
 
230
214
  .badge {
231
- --badge-offset: var(--space-12);
232
215
  display: inline-flex;
233
216
  align-items: center;
234
217
  gap: var(--space-6);
@@ -249,22 +232,9 @@
249
232
  }
250
233
 
251
234
  .badge-small {
252
- --badge-offset: var(--space-8);
253
235
  gap: var(--space-4);
254
236
  }
255
237
 
256
- .badge-floating {
257
- position: absolute;
258
- /* Floating badges are decorative overlays over other content — let clicks
259
- pass through to whatever owns the underlying surface (links, buttons). */
260
- pointer-events: none;
261
- }
262
-
263
- .badge-floating[data-anchor='top-left'] { top: var(--badge-offset); left: var(--badge-offset); }
264
- .badge-floating[data-anchor='top-right'] { top: var(--badge-offset); right: var(--badge-offset); }
265
- .badge-floating[data-anchor='bottom-left'] { bottom: var(--badge-offset); left: var(--badge-offset); }
266
- .badge-floating[data-anchor='bottom-right'] { bottom: var(--badge-offset); right: var(--badge-offset); }
267
-
268
238
  @each $v in $variants {
269
239
  .badge-#{$v} {
270
240
  --badge-icon-size: var(--badge-#{$v}-icon-size);
@@ -281,10 +251,4 @@
281
251
  box-shadow: var(--badge-#{$v}-shadow);
282
252
  }
283
253
  }
284
-
285
- /* Flush wins over per-variant radius via source order — declared after @each. */
286
- .badge-flush {
287
- --badge-offset: 0;
288
- border-radius: 0;
289
- }
290
254
  </style>
@@ -39,9 +39,10 @@
39
39
  </div>
40
40
  </div>
41
41
 
42
- <style>
42
+ <style lang="scss">
43
+ @use '../styles/padding' as *;
44
+
43
45
  :global(:root) {
44
- /* Default */
45
46
  --card-default-surface: var(--surface-neutral-high);
46
47
  --card-default-border: var(--border-neutral);
47
48
  --card-default-border-width: var(--border-width-1);
@@ -66,30 +67,8 @@
66
67
  --card-default-body-font-weight: var(--font-weight-normal);
67
68
  --card-default-body-line-height: var(--line-height-md);
68
69
 
69
- /* Hover */
70
- --card-hover-surface: var(--surface-neutral-high);
71
70
  --card-hover-border: var(--border-neutral-strong);
72
- --card-hover-border-width: var(--border-width-1);
73
- --card-hover-radius: var(--radius-lg);
74
- --card-hover-header-padding: var(--space-16);
75
- --card-hover-body-padding: var(--space-16);
76
71
  --card-hover-shadow: var(--shadow-md);
77
- --card-hover-blur: var(--blur-none);
78
- --card-hover-header-surface: var(--color-transparent);
79
-
80
- --card-hover-title: var(--text-primary);
81
- --card-hover-title-font-family: var(--font-sans);
82
- --card-hover-title-font-size: var(--font-size-lg);
83
- --card-hover-title-font-weight: var(--font-weight-normal);
84
- --card-hover-title-line-height: var(--line-height-sm);
85
-
86
- --card-hover-icon-size: var(--icon-size-lg);
87
-
88
- --card-hover-body: var(--text-secondary);
89
- --card-hover-body-font-family: var(--font-sans);
90
- --card-hover-body-font-size: var(--font-size-md);
91
- --card-hover-body-font-weight: var(--font-weight-normal);
92
- --card-hover-body-line-height: var(--line-height-md);
93
72
  }
94
73
 
95
74
  .card {
@@ -98,35 +77,27 @@
98
77
  border-radius: var(--card-default-radius);
99
78
  box-shadow: var(--card-default-shadow);
100
79
  backdrop-filter: blur(var(--card-default-blur));
101
- transition: all var(--duration-150);
80
+ transition: border-color var(--duration-150), box-shadow var(--duration-150);
102
81
  display: flex;
103
82
  flex-direction: column;
104
83
  overflow: hidden;
84
+ letter-spacing: normal;
105
85
  }
106
86
 
107
87
  .card:not(.no-hover):hover,
108
88
  .card.force-hover {
109
- background: var(--card-hover-surface);
110
- border: var(--card-hover-border-width) solid var(--card-hover-border);
111
- border-radius: var(--card-hover-radius);
89
+ border-color: var(--card-hover-border);
112
90
  box-shadow: var(--card-hover-shadow);
113
- backdrop-filter: blur(var(--card-hover-blur));
114
91
  }
115
92
 
116
93
  .card-header {
117
94
  display: flex;
118
95
  align-items: center;
119
96
  gap: var(--space-8);
120
- padding: var(--card-default-header-padding);
97
+ @include themed-padding(--card-default-header-padding);
121
98
  background: var(--card-default-header-surface);
122
99
  }
123
100
 
124
- .card:not(.no-hover):hover .card-header,
125
- .card.force-hover .card-header {
126
- padding: var(--card-hover-header-padding);
127
- background: var(--card-hover-header-surface);
128
- }
129
-
130
101
  .card.compact .card-header,
131
102
  .card.compact .card-body {
132
103
  padding: var(--space-8) var(--space-12);
@@ -137,12 +108,6 @@
137
108
  color: var(--card-color, var(--card-default-title));
138
109
  }
139
110
 
140
- .card:not(.no-hover):hover .card-icon,
141
- .card.force-hover .card-icon {
142
- font-size: var(--card-hover-icon-size);
143
- color: var(--card-color, var(--card-hover-title));
144
- }
145
-
146
111
  .card.compact .card-icon {
147
112
  font-size: var(--icon-size-md);
148
113
  }
@@ -155,15 +120,6 @@
155
120
  line-height: var(--card-default-title-line-height);
156
121
  }
157
122
 
158
- .card:not(.no-hover):hover .card-title,
159
- .card.force-hover .card-title {
160
- color: var(--card-hover-title);
161
- font-family: var(--card-hover-title-font-family);
162
- font-size: var(--card-hover-title-font-size);
163
- font-weight: var(--card-hover-title-font-weight);
164
- line-height: var(--card-hover-title-line-height);
165
- }
166
-
167
123
  .card.compact .card-title {
168
124
  font-size: var(--font-size-md);
169
125
  }
@@ -174,17 +130,7 @@
174
130
  font-size: var(--card-default-body-font-size);
175
131
  font-weight: var(--card-default-body-font-weight);
176
132
  line-height: var(--card-default-body-line-height);
177
- padding: var(--card-default-body-padding);
178
- }
179
-
180
- .card:not(.no-hover):hover .card-body,
181
- .card.force-hover .card-body {
182
- color: var(--card-hover-body);
183
- font-family: var(--card-hover-body-font-family);
184
- font-size: var(--card-hover-body-font-size);
185
- font-weight: var(--card-hover-body-font-weight);
186
- line-height: var(--card-hover-body-line-height);
187
- padding: var(--card-hover-body-padding);
133
+ @include themed-padding(--card-default-body-padding);
188
134
  }
189
135
 
190
136
  .card.compact .card-body {
@@ -11,7 +11,7 @@
11
11
  anchor?: CornerAnchor;
12
12
  size?: 'default' | 'small';
13
13
  icon?: string | undefined;
14
- /** Custom icon content. Falls back to `icon` prop's font-icon class. Renamed from `slot="icon"` in 0.5.0. */
14
+ /** Custom icon content; falls back to `icon` prop's font-icon class. */
15
15
  iconSlot?: Snippet;
16
16
  children?: Snippet;
17
17
  }
@@ -37,23 +37,10 @@
37
37
 
38
38
  $variants: primary, accent, neutral, alternate, canvas, special, success, warning, danger, info;
39
39
 
40
- // Per-variant token block kept flat (not collapsed via SCSS @each) so the
41
- // Layer-2 token-discovery parser (`extractGlobalRootBody` in
42
- // src/lib/parsers/globalRootBlock.ts) can read the .svelte source verbatim;
43
- // @each interpolation would make the parser see zero tokens here, even though
44
- // the rendered DOM would be identical. Same pattern as Badge.svelte / Notification.svelte.
45
- //
46
- // Role-based radii: each variable follows the badge's geometry regardless of anchor.
47
- // - outer: the corner flush with the parent's anchored corner
48
- // - inner: the diagonally opposite corner (deepest into the parent)
49
- // - h-axis: the on-axis corner along the horizontal edge shared with `outer`
50
- // - v-axis: the on-axis corner along the vertical edge shared with `outer`
51
- //
52
- // Padding + font props are corner-badge-specific (not inherited from the
53
- // sibling Badge variant), so corner-badge instances can carry their own
54
- // typography and sizing without dragging the inline Badge along. They default
55
- // to the same underlying global tokens Badge uses, so an unconfigured corner
56
- // badge still matches its inline badge counterpart visually.
40
+ // Flat per-variant blocks (no @each) so extractGlobalRootBody can parse them verbatim.
41
+ // Role-based radii follow badge geometry regardless of anchor:
42
+ // outer = flush corner, inner = diagonal, h-axis/v-axis = edges shared with outer.
43
+ // Padding + font are corner-badge-specific; defaults match Badge so unconfigured looks identical.
57
44
  :global(:root) {
58
45
  /* Primary */
59
46
  --corner-badge-primary-margin: var(--space-0);
@@ -182,11 +169,8 @@
182
169
  pointer-events: none;
183
170
  }
184
171
 
185
- // Per-variant: pull the variant's public tokens into private vars so the
186
- // anchor-based mappings below can read them without 4 × 10 explicit rules.
187
- // Padding + font props are forwarded directly onto the inner Badge so the
188
- // corner-badge tokens fully replace Badge's per-variant declarations
189
- // (otherwise Badge's own `.badge-#{$v}` rule wins by source order).
172
+ // Pull public tokens into private vars so anchor mappings below stay generic (avoids 4×10 rules).
173
+ // Padding + font forwarded onto inner Badge to override Badge's own `.badge-#{$v}` rule.
190
174
  @each $v in $variants {
191
175
  .corner-badge-#{$v} {
192
176
  --_margin: var(--corner-badge-#{$v}-margin);
@@ -210,7 +194,7 @@
210
194
  .corner-badge-top-right { top: var(--_margin); right: var(--_margin); }
211
195
  .corner-badge-top-left { top: var(--_margin); left: var(--_margin); }
212
196
 
213
- /* Map logical corner roles physical corners per anchor. */
197
+ /* Logical roles to physical corners, per anchor. */
214
198
  .corner-badge-bottom-right :global(.badge) {
215
199
  border-top-left-radius: var(--_inner-radius);
216
200
  border-top-right-radius: var(--_v-axis-radius);
@@ -2,7 +2,7 @@
2
2
  import { createEventDispatcher, tick } from 'svelte';
3
3
  import type { Snippet } from 'svelte';
4
4
  import Button from './Button.svelte';
5
- import { editorState } from '../lib/editorStore';
5
+ import { editorState } from '../../editor/core/store/editorStore';
6
6
  import type { ButtonVariant, DialogButtonSpec } from './types';
7
7
 
8
8
  const BUTTON_VARIANTS: readonly ButtonVariant[] = ['primary', 'secondary', 'outline', 'success', 'danger', 'warning'];