@motion-proto/live-tokens 0.1.1 → 0.3.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 (224) hide show
  1. package/README.md +160 -21
  2. package/dist-plugin/index.cjs +823 -336
  3. package/dist-plugin/index.d.cts +9 -7
  4. package/dist-plugin/index.d.ts +9 -7
  5. package/dist-plugin/index.js +822 -335
  6. package/package.json +46 -20
  7. package/src/assets/newspaper.webp +0 -0
  8. package/src/assets/offering.webp +0 -0
  9. package/src/component-editor/BadgeEditor.svelte +170 -0
  10. package/src/component-editor/CalloutEditor.svelte +103 -0
  11. package/src/component-editor/CardEditor.svelte +184 -0
  12. package/src/component-editor/CollapsibleSectionEditor.svelte +167 -0
  13. package/src/component-editor/CornerBadgeEditor.svelte +207 -0
  14. package/src/component-editor/DialogEditor.svelte +172 -0
  15. package/src/component-editor/ImageEditor.svelte +72 -0
  16. package/src/component-editor/InlineEditActionsEditor.svelte +83 -0
  17. package/src/component-editor/NotificationEditor.svelte +160 -0
  18. package/src/component-editor/ProgressBarEditor.svelte +124 -0
  19. package/src/component-editor/RadioButtonEditor.svelte +140 -0
  20. package/src/component-editor/SectionDividerEditor.svelte +263 -0
  21. package/src/component-editor/SegmentedControlEditor.svelte +154 -0
  22. package/src/component-editor/StandardButtonsEditor.svelte +178 -0
  23. package/src/component-editor/TabBarEditor.svelte +137 -0
  24. package/src/component-editor/TableEditor.svelte +128 -0
  25. package/src/component-editor/TooltipEditor.svelte +122 -0
  26. package/src/component-editor/editorTokens.test.ts +93 -0
  27. package/src/component-editor/groupKeySlots.test.ts +67 -0
  28. package/src/component-editor/groupKeySnapshot.test.ts +52 -0
  29. package/src/component-editor/index.ts +5 -0
  30. package/src/component-editor/registry.ts +246 -0
  31. package/src/component-editor/scaffolding/AngleDial.svelte +185 -0
  32. package/src/component-editor/scaffolding/ComponentEditorBase.svelte +96 -0
  33. package/src/component-editor/scaffolding/ComponentFileManager.svelte +682 -0
  34. package/src/component-editor/scaffolding/ComponentFileMenu.svelte +312 -0
  35. package/src/component-editor/scaffolding/ComponentsTab.svelte +69 -0
  36. package/src/component-editor/scaffolding/CopyFromMenu.svelte +246 -0
  37. package/src/component-editor/scaffolding/DemoHeader.svelte +21 -0
  38. package/src/component-editor/scaffolding/DividerEditor.svelte +81 -0
  39. package/src/component-editor/scaffolding/FieldsetWrapper.svelte +46 -0
  40. package/src/component-editor/scaffolding/GradientCard.svelte +291 -0
  41. package/src/component-editor/scaffolding/LinkageChart.svelte +297 -0
  42. package/src/component-editor/scaffolding/LinkedBlock.svelte +418 -0
  43. package/src/component-editor/scaffolding/NonStylableConfig.svelte +57 -0
  44. package/src/component-editor/scaffolding/SaveAsDialog.svelte +177 -0
  45. package/src/component-editor/scaffolding/ShadowBackdrop.svelte +25 -0
  46. package/src/component-editor/scaffolding/ShadowBackdropControls.svelte +56 -0
  47. package/src/component-editor/scaffolding/StateBlock.svelte +115 -0
  48. package/src/component-editor/scaffolding/TokenLayout.svelte +511 -0
  49. package/src/component-editor/scaffolding/TypeEditor.svelte +82 -0
  50. package/src/component-editor/scaffolding/VariantGroup.svelte +277 -0
  51. package/src/component-editor/scaffolding/buildTypeGroupTokens.ts +97 -0
  52. package/src/component-editor/scaffolding/componentSectionType.ts +8 -0
  53. package/src/component-editor/scaffolding/componentSources.ts +9 -0
  54. package/src/component-editor/scaffolding/defaultSections.ts +16 -0
  55. package/src/component-editor/scaffolding/editorContext.ts +44 -0
  56. package/src/component-editor/scaffolding/linkedBlock.ts +226 -0
  57. package/src/component-editor/scaffolding/siblings.ts +33 -0
  58. package/src/component-editor/scaffolding/types.ts +39 -0
  59. package/src/components/Badge.svelte +231 -42
  60. package/src/components/Button.svelte +324 -124
  61. package/src/components/Callout.svelte +145 -0
  62. package/src/components/Card.svelte +123 -25
  63. package/src/components/CollapsibleSection.svelte +213 -35
  64. package/src/components/CornerBadge.svelte +224 -0
  65. package/src/components/Dialog.svelte +137 -114
  66. package/src/components/Image.svelte +43 -0
  67. package/src/components/InlineEditActions.svelte +74 -14
  68. package/src/components/Notification.svelte +184 -163
  69. package/src/components/ProgressBar.svelte +216 -22
  70. package/src/components/RadioButton.svelte +110 -40
  71. package/src/components/SectionDivider.svelte +428 -74
  72. package/src/components/SegmentedControl.svelte +203 -0
  73. package/src/components/TabBar.svelte +146 -21
  74. package/src/components/Table.svelte +102 -0
  75. package/src/components/Tooltip.svelte +45 -19
  76. package/src/components/types.ts +51 -0
  77. package/src/data/google-fonts.json +75 -0
  78. package/src/lib/ColumnsOverlay.svelte +20 -7
  79. package/src/lib/LiveEditorOverlay.svelte +257 -78
  80. package/src/lib/columnsOverlay.ts +21 -17
  81. package/src/lib/componentConfig.test.ts +204 -0
  82. package/src/lib/componentConfigKeys.ts +19 -0
  83. package/src/lib/componentConfigService.ts +88 -0
  84. package/src/lib/copyPopover.ts +30 -0
  85. package/src/lib/cssVarSync.ts +59 -7
  86. package/src/lib/editorConfigStore.ts +0 -10
  87. package/src/lib/editorCore.ts +402 -0
  88. package/src/lib/editorKeybindings.ts +52 -0
  89. package/src/lib/editorPersistence.ts +106 -0
  90. package/src/lib/editorRenderer.ts +74 -0
  91. package/src/lib/editorStore.test.ts +328 -0
  92. package/src/lib/editorStore.ts +412 -0
  93. package/src/lib/editorTypes.ts +100 -0
  94. package/src/lib/editorViewStore.ts +55 -0
  95. package/src/lib/files/versionedFileResource.ts +140 -0
  96. package/src/lib/fontLoader.ts +130 -0
  97. package/src/lib/fontMigration.ts +140 -0
  98. package/src/lib/fontParse.ts +168 -0
  99. package/src/lib/index.ts +48 -30
  100. package/src/lib/lazyConfig.test.ts +54 -0
  101. package/src/lib/migrations/2026-04-24-component-prefix-and-suffix-renames.ts +64 -0
  102. package/src/lib/migrations/2026-04-24-legacy-keys-and-bg-to-canvas.ts +71 -0
  103. package/src/lib/migrations/2026-04-27-segmentedcontrol-disabled-flatten.ts +43 -0
  104. package/src/lib/migrations/2026-05-08-collapsiblesection-frame-and-cleanup.ts +68 -0
  105. package/src/lib/migrations/2026-05-08-collapsiblesection-variant-namespace.ts +35 -0
  106. package/src/lib/migrations/2026-05-10-sectiondivider-gradient-stops.ts +50 -0
  107. package/src/lib/migrations/2026-05-13-primary-to-brand.ts +90 -0
  108. package/src/lib/migrations/index.ts +93 -0
  109. package/src/lib/migrations/migrations.test.ts +341 -0
  110. package/src/lib/navLinkTypes.ts +1 -0
  111. package/src/lib/overlayState.ts +3 -0
  112. package/src/lib/paletteDerivation.ts +300 -0
  113. package/src/lib/parentRouteStore.ts +42 -0
  114. package/src/lib/parsers/globalRootBlock.ts +32 -0
  115. package/src/lib/presetService.ts +94 -0
  116. package/src/lib/router.ts +42 -10
  117. package/src/lib/scrollSection.ts +45 -0
  118. package/src/lib/slices/columns.ts +59 -0
  119. package/src/lib/slices/components.ts +362 -0
  120. package/src/lib/slices/domainVars.ts +15 -0
  121. package/src/lib/slices/fonts.ts +30 -0
  122. package/src/lib/slices/gradients.ts +153 -0
  123. package/src/lib/slices/overlays.ts +132 -0
  124. package/src/lib/slices/palettes.ts +26 -0
  125. package/src/lib/slices/shadows.ts +123 -0
  126. package/src/lib/storage.ts +88 -0
  127. package/src/lib/themeInit.ts +74 -0
  128. package/src/lib/themeService.ts +101 -0
  129. package/src/lib/themeTypes.ts +146 -0
  130. package/src/lib/tokenRegistry.ts +148 -0
  131. package/src/pages/ComponentEditorPage.svelte +384 -0
  132. package/src/pages/ComponentEditorPage.svelte.d.ts +2 -0
  133. package/src/pages/Editor.svelte +98 -0
  134. package/src/pages/Editor.svelte.d.ts +2 -0
  135. package/src/pages/EditorShell.svelte +348 -0
  136. package/src/styles/_padding.scss +34 -0
  137. package/src/styles/fonts/Fraunces/Fraunces-italic-latin-ext.woff2 +0 -0
  138. package/src/styles/fonts/Fraunces/Fraunces-italic-latin.woff2 +0 -0
  139. package/src/styles/fonts/Fraunces/Fraunces-roman-latin-ext.woff2 +0 -0
  140. package/src/styles/fonts/Fraunces/Fraunces-roman-latin.woff2 +0 -0
  141. package/src/styles/fonts/Manrope/Manrope-latin-ext.woff2 +0 -0
  142. package/src/styles/fonts/Manrope/Manrope-latin.woff2 +0 -0
  143. package/src/styles/fonts.css +22 -10
  144. package/src/styles/form-controls.css +14 -16
  145. package/src/styles/tokens.css +1322 -0
  146. package/src/styles/ui-editor.css +126 -0
  147. package/src/{showcase → ui}/BezierCurveEditor.svelte +14 -14
  148. package/src/{showcase → ui}/ColorEditPanel.svelte +42 -36
  149. package/src/ui/EditorViewSwitcher.svelte +180 -0
  150. package/src/ui/FontStackEditor.svelte +360 -0
  151. package/src/ui/GradientEditor.svelte +461 -0
  152. package/src/ui/GradientStopPicker.svelte +74 -0
  153. package/src/ui/PaletteEditor.svelte +1590 -0
  154. package/src/ui/PaletteEditor.test.ts +108 -0
  155. package/src/ui/PresetFileManager.svelte +567 -0
  156. package/src/ui/ProjectFontsSection.svelte +645 -0
  157. package/src/{showcase → ui}/SurfacesTab.svelte +39 -39
  158. package/src/{showcase → ui}/TextTab.svelte +27 -27
  159. package/src/{showcase/TokenFileManager.svelte → ui/ThemeFileManager.svelte} +196 -112
  160. package/src/ui/Toggle.svelte +108 -0
  161. package/src/ui/UICopyPopover.svelte +78 -0
  162. package/src/{showcase/EditorDialog.svelte → ui/UIDialog.svelte} +66 -25
  163. package/src/ui/UIFontFamilySelector.svelte +309 -0
  164. package/src/ui/UIFontSizeSelector.svelte +165 -0
  165. package/src/ui/UIFontWeightSelector.svelte +52 -0
  166. package/src/ui/UILineHeightSelector.svelte +47 -0
  167. package/src/ui/UILinkToggle.svelte +60 -0
  168. package/src/ui/UIOptionItem.svelte +74 -0
  169. package/src/ui/UIOptionList.svelte +27 -0
  170. package/src/ui/UIPaddingSelector.svelte +661 -0
  171. package/src/ui/UIPaletteSelector.svelte +1084 -0
  172. package/src/ui/UIRadio.svelte +72 -0
  173. package/src/ui/UIRadioGroup.svelte +59 -0
  174. package/src/ui/UIRelinkConfirmPopover.svelte +235 -0
  175. package/src/ui/UITokenSelector.svelte +509 -0
  176. package/src/ui/UIVariantSelector.svelte +145 -0
  177. package/src/ui/VariablesTab.svelte +252 -0
  178. package/src/ui/index.ts +31 -0
  179. package/src/ui/keepInViewport.ts +84 -0
  180. package/src/ui/palette/GradientStopEditor.svelte +482 -0
  181. package/src/ui/palette/OverridesPanel.svelte +526 -0
  182. package/src/ui/palette/PaletteBase.svelte +165 -0
  183. package/src/ui/palette/ScaleCurveEditor.svelte +38 -0
  184. package/src/ui/palette/paletteEditorState.ts +89 -0
  185. package/src/ui/sections/ColumnsSection.svelte +273 -0
  186. package/src/ui/sections/GradientsSection.svelte +147 -0
  187. package/src/ui/sections/OverlaysSection.svelte +670 -0
  188. package/src/ui/sections/ShadowsSection.svelte +1250 -0
  189. package/src/ui/sections/TokenScaleTable.svelte +332 -0
  190. package/src/ui/sections/tokenScales.ts +81 -0
  191. package/src/ui/variantScales.ts +108 -0
  192. package/src/components/DetailNav.svelte +0 -78
  193. package/src/components/Toggle.svelte +0 -86
  194. package/src/lib/tokenInit.ts +0 -29
  195. package/src/lib/tokenService.ts +0 -144
  196. package/src/lib/tokenTypes.ts +0 -45
  197. package/src/pages/Admin.svelte +0 -100
  198. package/src/pages/ShowcasePage.svelte +0 -144
  199. package/src/showcase/BackupBrowser.svelte +0 -617
  200. package/src/showcase/ComponentsTab.svelte +0 -105
  201. package/src/showcase/PaletteEditor.svelte +0 -2579
  202. package/src/showcase/PaletteSelector.svelte +0 -627
  203. package/src/showcase/TokenMap.svelte +0 -54
  204. package/src/showcase/VariablesTab.svelte +0 -2655
  205. package/src/showcase/VisualsTab.svelte +0 -231
  206. package/src/showcase/demos/BadgeDemo.svelte +0 -56
  207. package/src/showcase/demos/CardDemo.svelte +0 -50
  208. package/src/showcase/demos/ChoiceButtonsDemo.svelte +0 -192
  209. package/src/showcase/demos/CollapsibleSectionDemo.svelte +0 -54
  210. package/src/showcase/demos/DialogDemo.svelte +0 -42
  211. package/src/showcase/demos/InlineEditActionsDemo.svelte +0 -25
  212. package/src/showcase/demos/NotificationDemo.svelte +0 -147
  213. package/src/showcase/demos/ProgressBarDemo.svelte +0 -54
  214. package/src/showcase/demos/RadioButtonDemo.svelte +0 -56
  215. package/src/showcase/demos/SectionDividerDemo.svelte +0 -77
  216. package/src/showcase/demos/StandardButtonsDemo.svelte +0 -455
  217. package/src/showcase/demos/TabBarDemo.svelte +0 -58
  218. package/src/showcase/demos/TooltipDemo.svelte +0 -52
  219. package/src/showcase/editor.css +0 -93
  220. package/src/showcase/index.ts +0 -17
  221. package/src/styles/fonts/Domine/Domine-VariableFont_wght.ttf +0 -0
  222. package/src/styles/fonts/Domine/OFL.txt +0 -97
  223. package/src/styles/fonts/Domine/README.txt +0 -66
  224. /package/src/{showcase → ui}/curveEngine.ts +0 -0
@@ -9,7 +9,7 @@
9
9
  $: isComplete = clampedValue >= 100;
10
10
  </script>
11
11
 
12
- <div class="progress" class:compact={size === 'compact'}>
12
+ <div class="progress {variant}" class:compact={size === 'compact'}>
13
13
  {#if label}
14
14
  <div class="progress-label">
15
15
  <span>{label}</span>
@@ -30,6 +30,98 @@
30
30
  </div>
31
31
 
32
32
  <style>
33
+ :global(:root) {
34
+ /* Primary */
35
+ --progressbar-primary-track-surface: var(--surface-neutral-low);
36
+ --progressbar-primary-track-border: var(--border-neutral-faint);
37
+ --progressbar-primary-track-border-width: var(--border-width-1);
38
+ --progressbar-primary-track-height: var(--space-8);
39
+ --progressbar-primary-radius: var(--radius-full);
40
+ --progressbar-primary-fill: var(--gradient-1);
41
+ --progressbar-primary-label: var(--text-secondary);
42
+ --progressbar-primary-label-font-family: var(--font-sans);
43
+ --progressbar-primary-label-font-size: var(--font-size-sm);
44
+ --progressbar-primary-label-font-weight: var(--font-weight-light);
45
+ --progressbar-primary-label-line-height: var(--line-height-normal);
46
+ --progressbar-primary-value: var(--text-tertiary);
47
+ --progressbar-primary-value-font-family: var(--font-mono);
48
+ --progressbar-primary-value-font-size: var(--font-size-xs);
49
+ --progressbar-primary-value-font-weight: var(--font-weight-light);
50
+ --progressbar-primary-value-line-height: var(--line-height-normal);
51
+
52
+ /* Success */
53
+ --progressbar-success-track-surface: var(--surface-neutral-low);
54
+ --progressbar-success-track-border: var(--border-neutral-faint);
55
+ --progressbar-success-track-border-width: var(--border-width-1);
56
+ --progressbar-success-track-height: var(--space-8);
57
+ --progressbar-success-radius: var(--radius-full);
58
+ --progressbar-success-fill: var(--border-success);
59
+ --progressbar-success-label: var(--text-secondary);
60
+ --progressbar-success-label-font-family: var(--font-sans);
61
+ --progressbar-success-label-font-size: var(--font-size-sm);
62
+ --progressbar-success-label-font-weight: var(--font-weight-light);
63
+ --progressbar-success-label-line-height: var(--line-height-normal);
64
+ --progressbar-success-value: var(--text-tertiary);
65
+ --progressbar-success-value-font-family: var(--font-mono);
66
+ --progressbar-success-value-font-size: var(--font-size-xs);
67
+ --progressbar-success-value-font-weight: var(--font-weight-light);
68
+ --progressbar-success-value-line-height: var(--line-height-normal);
69
+
70
+ /* Warning */
71
+ --progressbar-warning-track-surface: var(--surface-neutral-low);
72
+ --progressbar-warning-track-border: var(--border-neutral-faint);
73
+ --progressbar-warning-track-border-width: var(--border-width-1);
74
+ --progressbar-warning-track-height: var(--space-8);
75
+ --progressbar-warning-radius: var(--radius-full);
76
+ --progressbar-warning-fill: var(--border-warning);
77
+ --progressbar-warning-label: var(--text-secondary);
78
+ --progressbar-warning-label-font-family: var(--font-sans);
79
+ --progressbar-warning-label-font-size: var(--font-size-sm);
80
+ --progressbar-warning-label-font-weight: var(--font-weight-light);
81
+ --progressbar-warning-label-line-height: var(--line-height-normal);
82
+ --progressbar-warning-value: var(--text-tertiary);
83
+ --progressbar-warning-value-font-family: var(--font-mono);
84
+ --progressbar-warning-value-font-size: var(--font-size-xs);
85
+ --progressbar-warning-value-font-weight: var(--font-weight-light);
86
+ --progressbar-warning-value-line-height: var(--line-height-normal);
87
+
88
+ /* Danger */
89
+ --progressbar-danger-track-surface: var(--surface-neutral-low);
90
+ --progressbar-danger-track-border: var(--border-neutral-faint);
91
+ --progressbar-danger-track-border-width: var(--border-width-1);
92
+ --progressbar-danger-track-height: var(--space-8);
93
+ --progressbar-danger-radius: var(--radius-full);
94
+ --progressbar-danger-fill: var(--border-danger);
95
+ --progressbar-danger-label: var(--text-secondary);
96
+ --progressbar-danger-label-font-family: var(--font-sans);
97
+ --progressbar-danger-label-font-size: var(--font-size-sm);
98
+ --progressbar-danger-label-font-weight: var(--font-weight-light);
99
+ --progressbar-danger-label-line-height: var(--line-height-normal);
100
+ --progressbar-danger-value: var(--text-tertiary);
101
+ --progressbar-danger-value-font-family: var(--font-mono);
102
+ --progressbar-danger-value-font-size: var(--font-size-xs);
103
+ --progressbar-danger-value-font-weight: var(--font-weight-light);
104
+ --progressbar-danger-value-line-height: var(--line-height-normal);
105
+
106
+ /* Info */
107
+ --progressbar-info-track-surface: var(--surface-neutral-low);
108
+ --progressbar-info-track-border: var(--border-neutral-faint);
109
+ --progressbar-info-track-border-width: var(--border-width-1);
110
+ --progressbar-info-track-height: var(--space-8);
111
+ --progressbar-info-radius: var(--radius-full);
112
+ --progressbar-info-fill: var(--border-info);
113
+ --progressbar-info-label: var(--text-secondary);
114
+ --progressbar-info-label-font-family: var(--font-sans);
115
+ --progressbar-info-label-font-size: var(--font-size-sm);
116
+ --progressbar-info-label-font-weight: var(--font-weight-light);
117
+ --progressbar-info-label-line-height: var(--line-height-normal);
118
+ --progressbar-info-value: var(--text-tertiary);
119
+ --progressbar-info-value-font-family: var(--font-mono);
120
+ --progressbar-info-value-font-size: var(--font-size-xs);
121
+ --progressbar-info-value-font-weight: var(--font-weight-light);
122
+ --progressbar-info-value-line-height: var(--line-height-normal);
123
+ }
124
+
33
125
  .progress {
34
126
  display: flex;
35
127
  flex-direction: column;
@@ -41,59 +133,161 @@
41
133
  display: flex;
42
134
  justify-content: space-between;
43
135
  align-items: center;
44
- font-size: var(--font-sm);
45
- color: var(--text-secondary);
46
- font-weight: var(--font-weight-medium);
47
- }
48
-
49
- .progress-value {
50
- font-size: var(--font-xs);
51
- color: var(--text-tertiary);
52
- font-family: 'Courier New', monospace;
53
136
  }
54
137
 
55
138
  .progress-track {
56
139
  width: 100%;
57
- height: 8px;
58
- background: var(--surface-neutral-low);
59
- border-radius: var(--radius-full);
60
140
  overflow: hidden;
61
- border: 1px solid var(--border-neutral-faint);
141
+ border-style: solid;
62
142
  }
63
143
 
64
144
  .compact .progress-track {
65
- height: 4px;
145
+ height: calc(var(--progress-track-height, var(--space-4)) * 0.5);
66
146
  }
67
147
 
68
148
  .progress-fill {
69
149
  height: 100%;
70
- border-radius: var(--radius-full);
71
150
  transition: width 0.4s ease;
72
151
  }
73
152
 
153
+ /* Primary */
154
+ .progress.primary .progress-label > span {
155
+ color: var(--progressbar-primary-label);
156
+ font-family: var(--progressbar-primary-label-font-family);
157
+ font-size: var(--progressbar-primary-label-font-size);
158
+ font-weight: var(--progressbar-primary-label-font-weight);
159
+ line-height: var(--progressbar-primary-label-line-height);
160
+ }
161
+ .progress.primary .progress-value {
162
+ color: var(--progressbar-primary-value);
163
+ font-family: var(--progressbar-primary-value-font-family);
164
+ font-size: var(--progressbar-primary-value-font-size);
165
+ font-weight: var(--progressbar-primary-value-font-weight);
166
+ line-height: var(--progressbar-primary-value-line-height);
167
+ }
168
+ .progress.primary .progress-track {
169
+ background: var(--progressbar-primary-track-surface);
170
+ border-color: var(--progressbar-primary-track-border);
171
+ border-width: var(--progressbar-primary-track-border-width);
172
+ border-radius: var(--progressbar-primary-radius);
173
+ height: var(--progressbar-primary-track-height);
174
+ }
74
175
  .progress-fill.primary {
75
- background: var(--gradient-progress);
176
+ background: var(--progressbar-primary-fill);
177
+ border-radius: var(--progressbar-primary-radius);
76
178
  }
77
179
 
180
+ /* Success */
181
+ .progress.success .progress-label > span {
182
+ color: var(--progressbar-success-label);
183
+ font-family: var(--progressbar-success-label-font-family);
184
+ font-size: var(--progressbar-success-label-font-size);
185
+ font-weight: var(--progressbar-success-label-font-weight);
186
+ line-height: var(--progressbar-success-label-line-height);
187
+ }
188
+ .progress.success .progress-value {
189
+ color: var(--progressbar-success-value);
190
+ font-family: var(--progressbar-success-value-font-family);
191
+ font-size: var(--progressbar-success-value-font-size);
192
+ font-weight: var(--progressbar-success-value-font-weight);
193
+ line-height: var(--progressbar-success-value-line-height);
194
+ }
195
+ .progress.success .progress-track {
196
+ background: var(--progressbar-success-track-surface);
197
+ border-color: var(--progressbar-success-track-border);
198
+ border-width: var(--progressbar-success-track-border-width);
199
+ border-radius: var(--progressbar-success-radius);
200
+ height: var(--progressbar-success-track-height);
201
+ }
78
202
  .progress-fill.success {
79
- background: var(--border-success);
203
+ background: var(--progressbar-success-fill);
204
+ border-radius: var(--progressbar-success-radius);
80
205
  }
81
206
 
207
+ /* Warning */
208
+ .progress.warning .progress-label > span {
209
+ color: var(--progressbar-warning-label);
210
+ font-family: var(--progressbar-warning-label-font-family);
211
+ font-size: var(--progressbar-warning-label-font-size);
212
+ font-weight: var(--progressbar-warning-label-font-weight);
213
+ line-height: var(--progressbar-warning-label-line-height);
214
+ }
215
+ .progress.warning .progress-value {
216
+ color: var(--progressbar-warning-value);
217
+ font-family: var(--progressbar-warning-value-font-family);
218
+ font-size: var(--progressbar-warning-value-font-size);
219
+ font-weight: var(--progressbar-warning-value-font-weight);
220
+ line-height: var(--progressbar-warning-value-line-height);
221
+ }
222
+ .progress.warning .progress-track {
223
+ background: var(--progressbar-warning-track-surface);
224
+ border-color: var(--progressbar-warning-track-border);
225
+ border-width: var(--progressbar-warning-track-border-width);
226
+ border-radius: var(--progressbar-warning-radius);
227
+ height: var(--progressbar-warning-track-height);
228
+ }
82
229
  .progress-fill.warning {
83
- background: var(--border-warning);
230
+ background: var(--progressbar-warning-fill);
231
+ border-radius: var(--progressbar-warning-radius);
84
232
  }
85
233
 
234
+ /* Danger */
235
+ .progress.danger .progress-label > span {
236
+ color: var(--progressbar-danger-label);
237
+ font-family: var(--progressbar-danger-label-font-family);
238
+ font-size: var(--progressbar-danger-label-font-size);
239
+ font-weight: var(--progressbar-danger-label-font-weight);
240
+ line-height: var(--progressbar-danger-label-line-height);
241
+ }
242
+ .progress.danger .progress-value {
243
+ color: var(--progressbar-danger-value);
244
+ font-family: var(--progressbar-danger-value-font-family);
245
+ font-size: var(--progressbar-danger-value-font-size);
246
+ font-weight: var(--progressbar-danger-value-font-weight);
247
+ line-height: var(--progressbar-danger-value-line-height);
248
+ }
249
+ .progress.danger .progress-track {
250
+ background: var(--progressbar-danger-track-surface);
251
+ border-color: var(--progressbar-danger-track-border);
252
+ border-width: var(--progressbar-danger-track-border-width);
253
+ border-radius: var(--progressbar-danger-radius);
254
+ height: var(--progressbar-danger-track-height);
255
+ }
86
256
  .progress-fill.danger {
87
- background: var(--border-danger);
257
+ background: var(--progressbar-danger-fill);
258
+ border-radius: var(--progressbar-danger-radius);
88
259
  }
89
260
 
261
+ /* Info */
262
+ .progress.info .progress-label > span {
263
+ color: var(--progressbar-info-label);
264
+ font-family: var(--progressbar-info-label-font-family);
265
+ font-size: var(--progressbar-info-label-font-size);
266
+ font-weight: var(--progressbar-info-label-font-weight);
267
+ line-height: var(--progressbar-info-label-line-height);
268
+ }
269
+ .progress.info .progress-value {
270
+ color: var(--progressbar-info-value);
271
+ font-family: var(--progressbar-info-value-font-family);
272
+ font-size: var(--progressbar-info-value-font-size);
273
+ font-weight: var(--progressbar-info-value-font-weight);
274
+ line-height: var(--progressbar-info-value-line-height);
275
+ }
276
+ .progress.info .progress-track {
277
+ background: var(--progressbar-info-track-surface);
278
+ border-color: var(--progressbar-info-track-border);
279
+ border-width: var(--progressbar-info-track-border-width);
280
+ border-radius: var(--progressbar-info-radius);
281
+ height: var(--progressbar-info-track-height);
282
+ }
90
283
  .progress-fill.info {
91
- background: var(--border-info);
284
+ background: var(--progressbar-info-fill);
285
+ border-radius: var(--progressbar-info-radius);
92
286
  }
93
287
 
94
288
  .progress-icon {
95
289
  color: var(--text-success);
96
- font-size: var(--font-md);
290
+ font-size: var(--icon-size-md);
97
291
  text-align: right;
98
292
  }
99
293
  </style>
@@ -2,86 +2,156 @@
2
2
  import { createEventDispatcher } from 'svelte';
3
3
 
4
4
  export let active: boolean = false;
5
- export let icon: string;
6
5
  export let label: string;
7
- export let color: string = 'var(--text-secondary)';
6
+ export let color: string = '';
7
+ let className: string = '';
8
+ export { className as class };
8
9
 
9
10
  const dispatch = createEventDispatcher();
10
11
  </script>
11
12
 
12
13
  <button
13
- class="radio-button"
14
+ class="radio-button {className}"
14
15
  class:active
15
- style="--radio-color: {color};"
16
+ style={color ? `--radiobutton-color: ${color};` : ''}
16
17
  on:click={() => dispatch('click')}
17
18
  >
18
- <span class="radio-dot" class:filled={active}></span>
19
- <i class={icon + ' fa-fw radio-icon'}></i>
19
+ <span class="radio-dot"></span>
20
20
  <span class="radio-label">{label}</span>
21
21
  </button>
22
22
 
23
23
  <style lang="scss">
24
+ :global(:root) {
25
+ /* Default */
26
+ --radiobutton-default-dot-border-color: var(--border-neutral);
27
+ --radiobutton-default-dot-border-width: var(--border-width-2);
28
+ --radiobutton-default-dot-fill: var(--text-secondary);
29
+ --radiobutton-default-dot-size: var(--dot-size-0);
30
+ --radiobutton-default-label: var(--text-primary);
31
+ --radiobutton-default-label-font-family: var(--font-sans);
32
+ --radiobutton-default-label-font-size: var(--font-size-md);
33
+ --radiobutton-default-label-font-weight: var(--font-weight-semibold);
34
+ --radiobutton-default-label-line-height: var(--line-height-tight);
35
+
36
+ /* Hover */
37
+ --radiobutton-hover-dot-border-color: var(--border-neutral);
38
+ --radiobutton-hover-dot-border-width: var(--border-width-2);
39
+ --radiobutton-hover-dot-fill: var(--text-secondary);
40
+ --radiobutton-hover-dot-size: var(--dot-size-50);
41
+ --radiobutton-hover-label: var(--text-primary);
42
+ --radiobutton-hover-label-font-family: var(--font-sans);
43
+ --radiobutton-hover-label-font-size: var(--font-size-md);
44
+ --radiobutton-hover-label-font-weight: var(--font-weight-semibold);
45
+ --radiobutton-hover-label-line-height: var(--line-height-tight);
46
+
47
+ /* Active */
48
+ --radiobutton-active-dot-border-color: var(--border-neutral);
49
+ --radiobutton-active-dot-border-width: var(--border-width-2);
50
+ --radiobutton-active-dot-fill: var(--text-secondary);
51
+ --radiobutton-active-dot-size: var(--dot-size-50);
52
+ --radiobutton-active-label: var(--text-primary);
53
+ --radiobutton-active-label-font-family: var(--font-sans);
54
+ --radiobutton-active-label-font-size: var(--font-size-md);
55
+ --radiobutton-active-label-font-weight: var(--font-weight-semibold);
56
+ --radiobutton-active-label-line-height: var(--line-height-tight);
57
+ }
58
+
24
59
  .radio-button {
25
60
  display: inline-flex;
26
61
  align-items: center;
27
62
  justify-content: flex-start;
28
- gap: var(--space-4);
29
- width: 120px;
30
- height: 1rem;
31
- padding: 0 var(--space-4);
63
+ gap: var(--space-8);
32
64
  background: transparent;
33
65
  border: none;
34
- border-radius: var(--radius-lg);
35
66
  cursor: pointer;
36
- transition: all 0.2s ease;
37
- line-height: 1;
67
+ transition: all var(--duration-200);
68
+ line-height: var(--line-height-tight);
38
69
 
39
- &:hover {
70
+ &:hover,
71
+ &.force-hover {
40
72
  background: linear-gradient(
41
73
  135deg,
42
- color-mix(in srgb, var(--radio-color) 12%, var(--surface-neutral-lowest)),
74
+ color-mix(in srgb, var(--radiobutton-color) 12%, var(--surface-neutral-lowest)),
43
75
  var(--surface-neutral-lowest)
44
76
  );
77
+
78
+ .radio-label {
79
+ color: var(--radiobutton-hover-label);
80
+ font-family: var(--radiobutton-hover-label-font-family);
81
+ font-size: var(--radiobutton-hover-label-font-size);
82
+ font-weight: var(--radiobutton-hover-label-font-weight);
83
+ line-height: var(--radiobutton-hover-label-line-height);
84
+ }
85
+
86
+ .radio-dot {
87
+ border: var(--radiobutton-hover-dot-border-width) solid var(--radiobutton-color, var(--radiobutton-hover-dot-border-color));
88
+
89
+ &::after {
90
+ width: var(--radiobutton-hover-dot-size);
91
+ height: var(--radiobutton-hover-dot-size);
92
+ background: var(--radiobutton-color, var(--radiobutton-hover-dot-fill));
93
+ opacity: 1;
94
+ }
95
+ }
45
96
  }
46
97
 
47
98
  &.active {
48
99
  background: linear-gradient(
49
100
  135deg,
50
- color-mix(in srgb, var(--radio-color) 15%, var(--surface-neutral-lowest)),
51
- color-mix(in srgb, var(--radio-color) 5%, var(--surface-neutral-lowest))
101
+ color-mix(in srgb, var(--radiobutton-color) 15%, var(--surface-neutral-lowest)),
102
+ color-mix(in srgb, var(--radiobutton-color) 5%, var(--surface-neutral-lowest))
52
103
  );
104
+
105
+ .radio-label {
106
+ color: var(--radiobutton-active-label);
107
+ font-family: var(--radiobutton-active-label-font-family);
108
+ font-size: var(--radiobutton-active-label-font-size);
109
+ font-weight: var(--radiobutton-active-label-font-weight);
110
+ line-height: var(--radiobutton-active-label-line-height);
111
+ }
112
+
113
+ .radio-dot {
114
+ border: var(--radiobutton-active-dot-border-width) solid var(--radiobutton-color, var(--radiobutton-active-dot-border-color));
115
+
116
+ &::after {
117
+ width: var(--radiobutton-active-dot-size);
118
+ height: var(--radiobutton-active-dot-size);
119
+ background: var(--radiobutton-color, var(--radiobutton-active-dot-fill));
120
+ opacity: 1;
121
+ }
122
+ }
53
123
  }
54
124
  }
55
125
 
56
126
  .radio-dot {
57
- width: 0.75rem;
58
- height: 0.75rem;
59
- border-radius: 50%;
60
- border: 2px solid var(--border-neutral-default);
127
+ position: relative;
128
+ width: var(--space-12);
129
+ height: var(--space-12);
130
+ border-radius: var(--radius-full);
131
+ border: var(--radiobutton-default-dot-border-width) solid var(--radiobutton-default-dot-border-color);
61
132
  flex-shrink: 0;
62
- transition: all 0.2s ease;
133
+ transition: all var(--duration-200);
63
134
 
64
- .radio-button:hover & {
65
- border-color: var(--radio-color);
135
+ &::after {
136
+ content: '';
137
+ position: absolute;
138
+ top: 50%;
139
+ left: 50%;
140
+ width: var(--radiobutton-default-dot-size);
141
+ height: var(--radiobutton-default-dot-size);
142
+ background: var(--radiobutton-color, var(--radiobutton-default-dot-fill));
143
+ border-radius: var(--radius-full);
144
+ transform: translate(-50%, -50%);
145
+ opacity: 0;
146
+ transition: opacity var(--duration-200);
66
147
  }
67
-
68
- &.filled {
69
- border-color: var(--radio-color);
70
- background: var(--radio-color);
71
- box-shadow: inset 0 0 0 2px var(--surface-neutral-lowest);
72
- }
73
- }
74
-
75
- .radio-icon {
76
- font-size: var(--font-lg);
77
- color: var(--radio-color);
78
- line-height: 1;
79
148
  }
80
149
 
81
150
  .radio-label {
82
- font-size: var(--font-md);
83
- font-weight: var(--font-weight-bold);
84
- color: var(--text-primary);
85
- line-height: 1;
151
+ color: var(--radiobutton-default-label);
152
+ font-family: var(--radiobutton-default-label-font-family);
153
+ font-size: var(--radiobutton-default-label-font-size);
154
+ font-weight: var(--radiobutton-default-label-font-weight);
155
+ line-height: var(--radiobutton-default-label-line-height);
86
156
  }
87
157
  </style>