@motion-proto/live-tokens 0.78.0 → 0.80.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 (172) hide show
  1. package/.claude/skills/live-tokens-check-compliance/SKILL.md +49 -38
  2. package/.claude/skills/live-tokens-create-component/SKILL.md +23 -28
  3. package/.claude/skills/live-tokens-create-component/references/contract-tests.md +61 -0
  4. package/.claude/skills/live-tokens-create-component/references/sketch-mode.md +2 -2
  5. package/.claude/skills/live-tokens-create-component/references/token-naming.md +6 -15
  6. package/.claude/skills/live-tokens-create-page/SKILL.md +6 -4
  7. package/.claude/skills/live-tokens-create-theme/references/design-directions.md +1 -1
  8. package/.claude/skills/live-tokens-pick-component/SKILL.md +3 -3
  9. package/.claude/skills/live-tokens-set-colors/references/color-anchors.md +1 -1
  10. package/.claude/skills/live-tokens-set-geometry/SKILL.md +1 -1
  11. package/.claude/skills/live-tokens-set-geometry/references/geometry-anchors.md +1 -1
  12. package/CHANGELOG.md +271 -0
  13. package/README.md +10 -16
  14. package/bin/check-component.mjs +154 -551
  15. package/bin/check-page.mjs +57 -541
  16. package/bin/cli.mjs +93 -16
  17. package/bin/contractRunner.mjs +37 -91
  18. package/bin/lib/buildChecks.mjs +32 -0
  19. package/bin/lib/catalogue.mjs +161 -34
  20. package/bin/lib/componentSource.mjs +152 -0
  21. package/bin/lib/cssValues.mjs +9 -0
  22. package/bin/lib/dataDir.mjs +126 -0
  23. package/bin/lib/findings.mjs +103 -12
  24. package/bin/lib/fixers.mjs +64 -0
  25. package/bin/lib/geometry.mjs +92 -0
  26. package/bin/lib/pageSource.mjs +230 -0
  27. package/bin/lib/report.mjs +57 -59
  28. package/bin/lib/tokenVocabulary.mjs +104 -34
  29. package/bin/migrate-build-script.mjs +66 -0
  30. package/bin/migrate.mjs +5 -0
  31. package/bin/rules/componentStructure.mjs +344 -0
  32. package/bin/rules/componentUse.mjs +313 -0
  33. package/bin/rules/importsAndRoutes.mjs +136 -0
  34. package/bin/rules/testRuns.mjs +122 -0
  35. package/bin/rules/tokens.mjs +426 -0
  36. package/bin/setup-claude.mjs +1 -2
  37. package/dist-plugin/{chunk-PDNL4NC5.js → chunk-D4WRIKEZ.js} +7 -2
  38. package/dist-plugin/{chunk-SWXRVZKT.js → chunk-REBHE3ZM.js} +414 -1
  39. package/dist-plugin/index.cjs +470 -19
  40. package/dist-plugin/index.d.cts +1 -0
  41. package/dist-plugin/index.d.ts +1 -0
  42. package/dist-plugin/index.js +87 -55
  43. package/dist-plugin/migrateData/index.cjs +422 -4
  44. package/dist-plugin/migrateData/index.js +2 -2
  45. package/dist-plugin/setColors/index.cjs +414 -1
  46. package/dist-plugin/setColors/index.d.cts +1 -1
  47. package/dist-plugin/setColors/index.d.ts +1 -1
  48. package/dist-plugin/setColors/index.js +1 -1
  49. package/dist-plugin/setGeometry/index.cjs +423 -13
  50. package/dist-plugin/setGeometry/index.d.cts +3 -3
  51. package/dist-plugin/setGeometry/index.d.ts +3 -3
  52. package/dist-plugin/setGeometry/index.js +10 -13
  53. package/dist-plugin/setType/index.d.cts +1 -1
  54. package/dist-plugin/setType/index.d.ts +1 -1
  55. package/dist-plugin/{themeTypes-BxRtuN5V.d.cts → themeTypes-B8_Idrp4.d.cts} +2 -2
  56. package/dist-plugin/{themeTypes-BxRtuN5V.d.ts → themeTypes-B8_Idrp4.d.ts} +2 -2
  57. package/package.json +2 -2
  58. package/src/editor/component-editor/CalloutEditor.svelte +2 -2
  59. package/src/editor/component-editor/CollapsibleSectionEditor.svelte +14 -15
  60. package/src/editor/component-editor/CornerBadgeEditor.svelte +14 -14
  61. package/src/editor/component-editor/DialogEditor.svelte +5 -5
  62. package/src/editor/component-editor/InlineEditActionsEditor.svelte +2 -2
  63. package/src/editor/component-editor/RadioButtonEditor.svelte +21 -21
  64. package/src/editor/component-editor/SectionDividerEditor.svelte +7 -7
  65. package/src/editor/component-editor/SegmentedControlEditor.svelte +5 -5
  66. package/src/editor/component-editor/SideNavigationEditor.svelte +25 -25
  67. package/src/editor/component-editor/TabBarEditor.svelte +6 -6
  68. package/src/editor/component-editor/TableEditor.svelte +6 -6
  69. package/src/editor/component-editor/ToggleEditor.svelte +2 -2
  70. package/src/editor/component-editor/index.ts +3 -0
  71. package/src/editor/component-editor/registry.ts +57 -1
  72. package/src/editor/component-editor/scaffolding/TokenLayout.svelte +14 -14
  73. package/src/editor/component-editor/scaffolding/VariantGroup.svelte +3 -0
  74. package/src/editor/component-editor/scaffolding/types.ts +15 -0
  75. package/src/editor/core/components/adjustAliases.ts +4 -4
  76. package/src/editor/core/components/aliasKinds.ts +20 -19
  77. package/src/editor/core/sketch/sketchLayer.ts +3 -3
  78. package/src/editor/core/themes/migrateComponentConfig.ts +14 -6
  79. package/src/editor/core/themes/migrations/2026-09-13-badge-brand.ts +42 -0
  80. package/src/editor/core/themes/migrations/2026-09-13-collapsiblesection-open.ts +33 -0
  81. package/src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts +70 -0
  82. package/src/editor/core/themes/migrations/2026-09-13-hairline.ts +92 -0
  83. package/src/editor/core/themes/migrations/2026-09-13-indicator.ts +54 -0
  84. package/src/editor/core/themes/migrations/2026-09-13-sectiondivider-surface.ts +36 -0
  85. package/src/editor/core/themes/migrations/2026-09-13-selected-state.ts +124 -0
  86. package/src/editor/core/themes/migrations/2026-09-13-toggle-label.ts +31 -0
  87. package/src/editor/core/themes/migrations/index.ts +16 -0
  88. package/src/editor/core/themes/themeService.ts +3 -3
  89. package/src/editor/core/themes/themeTypes.ts +13 -15
  90. package/src/editor/docs/Docs.svelte +1 -1
  91. package/src/editor/docs/content/light-and-dark.md +3 -3
  92. package/src/editor/docs/content.generated.ts +1 -1
  93. package/src/editor/index.ts +1 -0
  94. package/src/editor/overlay/LiveEditorOverlay.svelte +15 -0
  95. package/src/editor/skill-atlas/SkillAtlas.svelte +4 -4
  96. package/src/editor/skill-atlas/TreeNodeCard.svelte +4 -4
  97. package/src/editor/skill-atlas/skillSources.generated.ts +11 -14
  98. package/src/editor/skill-atlas/skillTrees.ts +1 -3
  99. package/src/editor/skill-atlas/trees/check-compliance.ts +37 -149
  100. package/src/editor/skill-atlas/trees/create-component.ts +62 -64
  101. package/src/editor/skill-atlas/trees/create-page.ts +38 -17
  102. package/src/editor/skill-atlas/trees/pick-component.ts +3 -3
  103. package/src/editor/skill-atlas/trees/set-geometry.ts +1 -1
  104. package/src/editor/ui/UIPaletteSelector.svelte +11 -15
  105. package/src/editor/ui/variantScales.ts +8 -8
  106. package/src/live-tokens/data/themes/autumn.json +188 -188
  107. package/src/live-tokens/data/themes/halloween.json +188 -188
  108. package/src/live-tokens/data/themes/midnight-study.json +245 -245
  109. package/src/live-tokens/data/themes/ocean.json +188 -188
  110. package/src/live-tokens/data/themes/royal-velvet.json +188 -188
  111. package/src/live-tokens/data/themes/sketchy.json +188 -188
  112. package/src/live-tokens/data/themes/spring-meadow.json +188 -188
  113. package/src/live-tokens/data/themes/sunset.json +188 -188
  114. package/src/system/components/Badge.svelte +27 -23
  115. package/src/system/components/Button.svelte +13 -7
  116. package/src/system/components/Callout.svelte +16 -11
  117. package/src/system/components/Card.svelte +22 -15
  118. package/src/system/components/CodeSnippet.svelte +10 -6
  119. package/src/system/components/CollapsibleSection.svelte +81 -76
  120. package/src/system/components/CornerBadge.svelte +78 -72
  121. package/src/system/components/Dialog.svelte +21 -18
  122. package/src/system/components/IconButton.svelte +13 -9
  123. package/src/system/components/Image.svelte +14 -8
  124. package/src/system/components/ImageLightbox.svelte +10 -6
  125. package/src/system/components/InlineEditActions.svelte +17 -14
  126. package/src/system/components/Input.svelte +13 -7
  127. package/src/system/components/MenuSelect.svelte +13 -7
  128. package/src/system/components/Notification.svelte +17 -11
  129. package/src/system/components/Panel.svelte +13 -6
  130. package/src/system/components/ProgressBar.svelte +10 -5
  131. package/src/system/components/RadioButton.svelte +33 -30
  132. package/src/system/components/SectionDivider.svelte +28 -21
  133. package/src/system/components/SegmentedControl.svelte +27 -23
  134. package/src/system/components/SideNavigation.svelte +175 -171
  135. package/src/system/components/Slider.svelte +11 -7
  136. package/src/system/components/TabBar.svelte +53 -49
  137. package/src/system/components/Table.svelte +20 -15
  138. package/src/system/components/Toggle.svelte +14 -10
  139. package/src/system/components/Tooltip.svelte +10 -6
  140. package/src/system/styles/CONVENTIONS.md +3 -4
  141. package/src/testing-js/chunk-3UKGXCDL.js +48 -0
  142. package/src/testing-js/chunk-3UKGXCDL.js.map +1 -0
  143. package/src/testing-js/{chunk-FAFOAWYL.js → chunk-Q3YIAAG3.js} +17 -3
  144. package/src/testing-js/chunk-Q3YIAAG3.js.map +1 -0
  145. package/src/testing-js/{chunk-GNIUPIU2.js → chunk-U7OJE5DU.js} +18 -18
  146. package/src/testing-js/chunk-U7OJE5DU.js.map +1 -0
  147. package/src/testing-js/{chunk-4JQX6WWL.js → chunk-ZMZQZ33J.js} +474 -166
  148. package/src/testing-js/chunk-ZMZQZ33J.js.map +1 -0
  149. package/src/testing-js/component-behavior.contract.js +155 -0
  150. package/src/testing-js/component-behavior.contract.js.map +1 -0
  151. package/src/testing-js/component-editor.contract.js +6 -4
  152. package/src/testing-js/component-editor.contract.js.map +1 -1
  153. package/src/testing-js/component-render.contract.js +14 -10
  154. package/src/testing-js/component-render.contract.js.map +1 -1
  155. package/src/testing-js/index.d.ts +44 -4
  156. package/src/testing-js/index.js +13 -7
  157. package/src/testing-js/index.js.map +1 -1
  158. package/src/testing-js/page-compliance.contract.js +48 -10
  159. package/src/testing-js/page-compliance.contract.js.map +1 -1
  160. package/src/testing-js/registry.contract.js +5 -3
  161. package/src/testing-js/registry.contract.js.map +1 -1
  162. package/src/testing-js/{vitest-C-wNWcoA.d.ts → vitest-BMLIbDs2.d.ts} +8 -2
  163. package/src/testing-js/vitest.d.ts +1 -1
  164. package/src/testing-js/vitest.js +2 -1
  165. package/template/package.json +1 -2
  166. package/template/vite.config.ts +3 -2
  167. package/.claude/skills/live-tokens-create-component/SKILL copy.md +0 -196
  168. package/.claude/skills/live-tokens-fix-findings/SKILL.md +0 -105
  169. package/src/editor/skill-atlas/trees/fix-findings.ts +0 -504
  170. package/src/testing-js/chunk-4JQX6WWL.js.map +0 -1
  171. package/src/testing-js/chunk-FAFOAWYL.js.map +0 -1
  172. package/src/testing-js/chunk-GNIUPIU2.js.map +0 -1
@@ -1,15 +1,18 @@
1
- <!--
2
- RadioButton.svelte. A form row that selects one option.
3
- Use for: a choice the reader reviews as text before committing to a larger
4
- form.
5
- Not for: an inline switch between views (SegmentedControl); a setting that
6
- takes effect at once (Toggle).
7
- -->
1
+ <script module lang="ts">
2
+ import type { CatalogueEntry } from '../../editor/component-editor/scaffolding/types';
3
+
4
+ export const catalogue = {
5
+ description: 'A form row that selects one option.',
6
+ useFor: 'a choice the reader reviews as text before committing to a larger form.',
7
+ notFor: 'an inline switch between views (SegmentedControl); a setting that takes effect at once (Toggle).',
8
+ } satisfies CatalogueEntry;
9
+ </script>
10
+
8
11
  <script lang="ts">
9
12
  import { createEventDispatcher } from 'svelte';
10
13
 
11
14
  interface Props {
12
- active?: boolean;
15
+ selected?: boolean;
13
16
  label: string;
14
17
  color?: string;
15
18
  class?: string;
@@ -18,7 +21,7 @@
18
21
  }
19
22
 
20
23
  let {
21
- active = false,
24
+ selected = false,
22
25
  label,
23
26
  color = '',
24
27
  class: className = '',
@@ -36,7 +39,7 @@
36
39
 
37
40
  <button
38
41
  class="radio-button {className}"
39
- class:active
42
+ class:selected
40
43
  style={color ? `--radiobutton-color: ${color};` : ''}
41
44
  onclick={fireClick}
42
45
  >
@@ -68,16 +71,16 @@
68
71
  --radiobutton-hover-label-font-weight: var(--font-weight-semibold);
69
72
  --radiobutton-hover-label-line-height: var(--line-height-none);
70
73
 
71
- /* Active */
72
- --radiobutton-active-dot-border-color: var(--border-neutral);
73
- --radiobutton-active-dot-border-width: var(--border-width-2);
74
- --radiobutton-active-dot-fill: var(--text-secondary);
75
- --radiobutton-active-dot-size: var(--dot-size-50);
76
- --radiobutton-active-label: var(--text-primary);
77
- --radiobutton-active-label-font-family: var(--font-sans);
78
- --radiobutton-active-label-font-size: var(--font-size-md);
79
- --radiobutton-active-label-font-weight: var(--font-weight-semibold);
80
- --radiobutton-active-label-line-height: var(--line-height-none);
74
+ /* Selected */
75
+ --radiobutton-selected-dot-border-color: var(--border-neutral);
76
+ --radiobutton-selected-dot-border-width: var(--border-width-2);
77
+ --radiobutton-selected-dot-fill: var(--text-secondary);
78
+ --radiobutton-selected-dot-size: var(--dot-size-50);
79
+ --radiobutton-selected-label: var(--text-primary);
80
+ --radiobutton-selected-label-font-family: var(--font-sans);
81
+ --radiobutton-selected-label-font-size: var(--font-size-md);
82
+ --radiobutton-selected-label-font-weight: var(--font-weight-semibold);
83
+ --radiobutton-selected-label-line-height: var(--line-height-none);
81
84
  }
82
85
 
83
86
  .radio-button {
@@ -119,7 +122,7 @@
119
122
  }
120
123
  }
121
124
 
122
- &.active {
125
+ &.selected {
123
126
  background: linear-gradient(
124
127
  135deg,
125
128
  color-mix(in srgb, var(--radiobutton-color) 15%, var(--surface-neutral-lowest)),
@@ -127,20 +130,20 @@
127
130
  );
128
131
 
129
132
  .radio-label {
130
- color: var(--radiobutton-active-label);
131
- font-family: var(--radiobutton-active-label-font-family);
132
- font-size: var(--radiobutton-active-label-font-size);
133
- font-weight: var(--radiobutton-active-label-font-weight);
134
- line-height: var(--radiobutton-active-label-line-height);
133
+ color: var(--radiobutton-selected-label);
134
+ font-family: var(--radiobutton-selected-label-font-family);
135
+ font-size: var(--radiobutton-selected-label-font-size);
136
+ font-weight: var(--radiobutton-selected-label-font-weight);
137
+ line-height: var(--radiobutton-selected-label-line-height);
135
138
  }
136
139
 
137
140
  .radio-dot {
138
- border: var(--radiobutton-active-dot-border-width) solid var(--radiobutton-color, var(--radiobutton-active-dot-border-color));
141
+ border: var(--radiobutton-selected-dot-border-width) solid var(--radiobutton-color, var(--radiobutton-selected-dot-border-color));
139
142
 
140
143
  .radio-dot-fill {
141
- width: var(--radiobutton-active-dot-size);
142
- height: var(--radiobutton-active-dot-size);
143
- background: var(--radiobutton-color, var(--radiobutton-active-dot-fill));
144
+ width: var(--radiobutton-selected-dot-size);
145
+ height: var(--radiobutton-selected-dot-size);
146
+ background: var(--radiobutton-color, var(--radiobutton-selected-dot-fill));
144
147
  opacity: 1;
145
148
  }
146
149
  }
@@ -1,11 +1,18 @@
1
- <!--
2
- SectionDivider.svelte. A titled break between the sections of a page.
3
- Use for: naming the band that follows it.
4
- Not for: moving between pages (SideNavigation); a title inside a container
5
- (Card).
6
- Level: `md` titles a page and `sm` titles a section; `eyebrow` is an opt-in
7
- label above the title.
8
- -->
1
+ <script module lang="ts">
2
+ import type { CatalogueEntry } from '../../editor/component-editor/scaffolding/types';
3
+
4
+ export const catalogue = {
5
+ description: 'A titled break between the sections of a page.',
6
+ useFor: 'naming the section that follows it.',
7
+ notFor: 'moving between pages (SideNavigation); a title inside a container (Card).',
8
+ props: {
9
+ variant: '`sm` titles a section, `md` titles a page, and `lg` is the largest size.',
10
+ eyebrow: 'an opt-in label above the title.',
11
+ description: 'an opt-in line under the title.',
12
+ },
13
+ } satisfies CatalogueEntry;
14
+ </script>
15
+
9
16
  <script lang="ts">
10
17
  /** Size variant. Each variant owns everything that defines its style:
11
18
  * typography, geometry, colors AND the intrinsic display properties
@@ -129,8 +136,8 @@
129
136
  --sectiondivider-lg-radius: var(--radius-lg);
130
137
  --sectiondivider-lg-border-width: var(--border-width-1);
131
138
  --sectiondivider-lg-shadow: var(--shadow-none);
132
- --sectiondivider-lg-hairline-thickness: var(--border-width-1);
133
- --sectiondivider-lg-background: var(--color-transparent);
139
+ --sectiondivider-lg-hairline-width: var(--border-width-1);
140
+ --sectiondivider-lg-surface: var(--color-transparent);
134
141
  --sectiondivider-lg-title: var(--text-primary);
135
142
  --sectiondivider-lg-description: var(--text-alternate);
136
143
  --sectiondivider-lg-eyebrow: var(--text-brand);
@@ -158,8 +165,8 @@
158
165
  --sectiondivider-md-radius: var(--radius-lg);
159
166
  --sectiondivider-md-border-width: var(--border-width-1);
160
167
  --sectiondivider-md-shadow: var(--shadow-none);
161
- --sectiondivider-md-hairline-thickness: var(--border-width-1);
162
- --sectiondivider-md-background: var(--color-transparent);
168
+ --sectiondivider-md-hairline-width: var(--border-width-1);
169
+ --sectiondivider-md-surface: var(--color-transparent);
163
170
  --sectiondivider-md-title: var(--text-primary);
164
171
  --sectiondivider-md-description: var(--text-secondary);
165
172
  --sectiondivider-md-eyebrow: var(--text-tertiary);
@@ -187,8 +194,8 @@
187
194
  --sectiondivider-sm-radius: var(--radius-lg);
188
195
  --sectiondivider-sm-border-width: var(--border-width-1);
189
196
  --sectiondivider-sm-shadow: var(--shadow-none);
190
- --sectiondivider-sm-hairline-thickness: var(--border-width-1);
191
- --sectiondivider-sm-background: var(--color-transparent);
197
+ --sectiondivider-sm-hairline-width: var(--border-width-1);
198
+ --sectiondivider-sm-surface: var(--color-transparent);
192
199
  --sectiondivider-sm-title: var(--text-brand);
193
200
  --sectiondivider-sm-description: var(--text-secondary);
194
201
  --sectiondivider-sm-eyebrow: var(--text-tertiary);
@@ -263,8 +270,8 @@
263
270
  --_divider-radius: var(--sectiondivider-lg-radius);
264
271
  --_divider-border-width: var(--sectiondivider-lg-border-width);
265
272
  --_divider-shadow: var(--sectiondivider-lg-shadow);
266
- --_divider-hairline-thickness: var(--sectiondivider-lg-hairline-thickness);
267
- --_divider-bg: var(--sectiondivider-lg-background);
273
+ --_divider-hairline-width: var(--sectiondivider-lg-hairline-width);
274
+ --_divider-bg: var(--sectiondivider-lg-surface);
268
275
  --_divider-title: var(--sectiondivider-lg-title);
269
276
  --_divider-description: var(--sectiondivider-lg-description);
270
277
  --_divider-eyebrow: var(--sectiondivider-lg-eyebrow);
@@ -298,8 +305,8 @@
298
305
  --_divider-radius: var(--sectiondivider-md-radius);
299
306
  --_divider-border-width: var(--sectiondivider-md-border-width);
300
307
  --_divider-shadow: var(--sectiondivider-md-shadow);
301
- --_divider-hairline-thickness: var(--sectiondivider-md-hairline-thickness);
302
- --_divider-bg: var(--sectiondivider-md-background);
308
+ --_divider-hairline-width: var(--sectiondivider-md-hairline-width);
309
+ --_divider-bg: var(--sectiondivider-md-surface);
303
310
  --_divider-title: var(--sectiondivider-md-title);
304
311
  --_divider-description: var(--sectiondivider-md-description);
305
312
  --_divider-eyebrow: var(--sectiondivider-md-eyebrow);
@@ -333,8 +340,8 @@
333
340
  --_divider-radius: var(--sectiondivider-sm-radius);
334
341
  --_divider-border-width: var(--sectiondivider-sm-border-width);
335
342
  --_divider-shadow: var(--sectiondivider-sm-shadow);
336
- --_divider-hairline-thickness: var(--sectiondivider-sm-hairline-thickness);
337
- --_divider-bg: var(--sectiondivider-sm-background);
343
+ --_divider-hairline-width: var(--sectiondivider-sm-hairline-width);
344
+ --_divider-bg: var(--sectiondivider-sm-surface);
338
345
  --_divider-title: var(--sectiondivider-sm-title);
339
346
  --_divider-description: var(--sectiondivider-sm-description);
340
347
  --_divider-eyebrow: var(--sectiondivider-sm-eyebrow);
@@ -476,7 +483,7 @@
476
483
  .sd-hairline {
477
484
  display: none;
478
485
  background: var(--_divider-hairline-color);
479
- height: var(--_divider-hairline-thickness);
486
+ height: var(--_divider-hairline-width);
480
487
  }
481
488
  .sd-hairline--row {
482
489
  width: 100%;
@@ -1,9 +1,13 @@
1
- <!--
2
- SegmentedControl.svelte. An inline switch between named alternatives.
3
- Use for: two to four short labels that pick one view of the same data.
4
- Not for: swapping the page's content area (TabBar); labels long enough to
5
- wrap (RadioButton).
6
- -->
1
+ <script module lang="ts">
2
+ import type { CatalogueEntry } from '../../editor/component-editor/scaffolding/types';
3
+
4
+ export const catalogue = {
5
+ description: 'An inline switch between named alternatives.',
6
+ useFor: 'two to four short labels that pick one view of the same data.',
7
+ notFor: "swapping the page's content area (TabBar); labels long enough to wrap (RadioButton).",
8
+ } satisfies CatalogueEntry;
9
+ </script>
10
+
7
11
  <script lang="ts">
8
12
  import { createEventDispatcher } from 'svelte';
9
13
 
@@ -60,7 +64,7 @@
60
64
  >
61
65
  {#each segments as seg, i (seg.value)}
62
66
  {#if i > 0}
63
- <span class="segment-divider" aria-hidden="true"></span>
67
+ <span class="segment-hairline" aria-hidden="true"></span>
64
68
  {/if}
65
69
  <button
66
70
  type="button"
@@ -95,11 +99,11 @@
95
99
  --segmentedcontrol-bar-padding: var(--space-4);
96
100
  --segmentedcontrol-bar-gap: var(--space-8);
97
101
 
98
- /* Divider (line between non-selected options). Inset is the top + bottom
99
- margin trimmed from the divider; 0 = bar-height divider. */
100
- --segmentedcontrol-divider-color: var(--border-neutral);
101
- --segmentedcontrol-divider-thickness: var(--border-width-1);
102
- --segmentedcontrol-divider-inset: var(--space-6);
102
+ /* Hairline (line between non-selected options). Inset is the top + bottom
103
+ margin trimmed from the line; 0 = bar-height line. */
104
+ --segmentedcontrol-hairline-color: var(--border-neutral);
105
+ --segmentedcontrol-hairline-width: var(--border-width-1);
106
+ --segmentedcontrol-hairline-inset: var(--space-6);
103
107
 
104
108
  /* Option (inner button) — shape applies to every state */
105
109
  --segmentedcontrol-option-padding: var(--space-8);
@@ -150,8 +154,8 @@
150
154
  values so existing state-specific cascades flow through unchanged. */
151
155
  --segmentedcontrol-bar-small-padding: var(--space-2);
152
156
  --segmentedcontrol-bar-small-radius: var(--radius-md);
153
- --segmentedcontrol-small-divider-inset: var(--space-4);
154
- --segmentedcontrol-small-divider-thickness: var(--border-width-1);
157
+ --segmentedcontrol-small-hairline-inset: var(--space-4);
158
+ --segmentedcontrol-small-hairline-width: var(--border-width-1);
155
159
  --segmentedcontrol-option-small-padding: var(--space-6);
156
160
  --segmentedcontrol-option-small-gap: var(--space-6);
157
161
  --segmentedcontrol-option-small-icon-size: var(--icon-size-sm);
@@ -188,8 +192,8 @@
188
192
  --segmentedcontrol-bar-padding-left: var(--segmentedcontrol-bar-small-padding-left, var(--segmentedcontrol-bar-small-padding));
189
193
  --segmentedcontrol-bar-radius: var(--segmentedcontrol-bar-small-radius);
190
194
 
191
- --segmentedcontrol-divider-inset: var(--segmentedcontrol-small-divider-inset);
192
- --segmentedcontrol-divider-thickness: var(--segmentedcontrol-small-divider-thickness);
195
+ --segmentedcontrol-hairline-inset: var(--segmentedcontrol-small-hairline-inset);
196
+ --segmentedcontrol-hairline-width: var(--segmentedcontrol-small-hairline-width);
193
197
 
194
198
  --segmentedcontrol-option-padding: var(--segmentedcontrol-option-small-padding);
195
199
  --segmentedcontrol-option-padding-top: var(--segmentedcontrol-option-small-padding-top, var(--segmentedcontrol-option-small-padding));
@@ -255,21 +259,21 @@
255
259
  transition: color var(--duration-150);
256
260
  }
257
261
 
258
- /* Divider between adjacent segments. Stretches to the bar's cross-axis size
262
+ /* Hairline between adjacent segments. Stretches to the bar's cross-axis size
259
263
  by inheriting the parent's `align-items: stretch`; an explicit margin-block
260
264
  trims top + bottom so "Full" (0 inset) gives a bar-height line and larger
261
265
  insets give shorter ones. Avoids the percentage-height collapse that bit us
262
- when the divider was `align-self: center; height: 100%`.
266
+ when the line was `align-self: center; height: 100%`.
263
267
  Negative inline margins absorb the surrounding flex gap so seg-to-seg
264
268
  distance stays var(--bar-gap). */
265
- .segment-divider {
269
+ .segment-hairline {
266
270
  flex-shrink: 0;
267
- width: var(--segmentedcontrol-divider-thickness);
268
- margin-block: var(--segmentedcontrol-divider-inset);
271
+ width: var(--segmentedcontrol-hairline-width);
272
+ margin-block: var(--segmentedcontrol-hairline-inset);
269
273
  margin-inline: calc(
270
- var(--segmentedcontrol-bar-gap) * -0.5 - var(--segmentedcontrol-divider-thickness) * 0.5
274
+ var(--segmentedcontrol-bar-gap) * -0.5 - var(--segmentedcontrol-hairline-width) * 0.5
271
275
  );
272
- background: var(--segmentedcontrol-divider-color);
276
+ background: var(--segmentedcontrol-hairline-color);
273
277
  pointer-events: none;
274
278
  }
275
279