@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.
- package/.claude/skills/live-tokens-check-compliance/SKILL.md +49 -38
- package/.claude/skills/live-tokens-create-component/SKILL.md +23 -28
- package/.claude/skills/live-tokens-create-component/references/contract-tests.md +61 -0
- package/.claude/skills/live-tokens-create-component/references/sketch-mode.md +2 -2
- package/.claude/skills/live-tokens-create-component/references/token-naming.md +6 -15
- package/.claude/skills/live-tokens-create-page/SKILL.md +6 -4
- package/.claude/skills/live-tokens-create-theme/references/design-directions.md +1 -1
- package/.claude/skills/live-tokens-pick-component/SKILL.md +3 -3
- package/.claude/skills/live-tokens-set-colors/references/color-anchors.md +1 -1
- package/.claude/skills/live-tokens-set-geometry/SKILL.md +1 -1
- package/.claude/skills/live-tokens-set-geometry/references/geometry-anchors.md +1 -1
- package/CHANGELOG.md +271 -0
- package/README.md +10 -16
- package/bin/check-component.mjs +154 -551
- package/bin/check-page.mjs +57 -541
- package/bin/cli.mjs +93 -16
- package/bin/contractRunner.mjs +37 -91
- package/bin/lib/buildChecks.mjs +32 -0
- package/bin/lib/catalogue.mjs +161 -34
- package/bin/lib/componentSource.mjs +152 -0
- package/bin/lib/cssValues.mjs +9 -0
- package/bin/lib/dataDir.mjs +126 -0
- package/bin/lib/findings.mjs +103 -12
- package/bin/lib/fixers.mjs +64 -0
- package/bin/lib/geometry.mjs +92 -0
- package/bin/lib/pageSource.mjs +230 -0
- package/bin/lib/report.mjs +57 -59
- package/bin/lib/tokenVocabulary.mjs +104 -34
- package/bin/migrate-build-script.mjs +66 -0
- package/bin/migrate.mjs +5 -0
- package/bin/rules/componentStructure.mjs +344 -0
- package/bin/rules/componentUse.mjs +313 -0
- package/bin/rules/importsAndRoutes.mjs +136 -0
- package/bin/rules/testRuns.mjs +122 -0
- package/bin/rules/tokens.mjs +426 -0
- package/bin/setup-claude.mjs +1 -2
- package/dist-plugin/{chunk-PDNL4NC5.js → chunk-D4WRIKEZ.js} +7 -2
- package/dist-plugin/{chunk-SWXRVZKT.js → chunk-REBHE3ZM.js} +414 -1
- package/dist-plugin/index.cjs +470 -19
- package/dist-plugin/index.d.cts +1 -0
- package/dist-plugin/index.d.ts +1 -0
- package/dist-plugin/index.js +87 -55
- package/dist-plugin/migrateData/index.cjs +422 -4
- package/dist-plugin/migrateData/index.js +2 -2
- package/dist-plugin/setColors/index.cjs +414 -1
- package/dist-plugin/setColors/index.d.cts +1 -1
- package/dist-plugin/setColors/index.d.ts +1 -1
- package/dist-plugin/setColors/index.js +1 -1
- package/dist-plugin/setGeometry/index.cjs +423 -13
- package/dist-plugin/setGeometry/index.d.cts +3 -3
- package/dist-plugin/setGeometry/index.d.ts +3 -3
- package/dist-plugin/setGeometry/index.js +10 -13
- package/dist-plugin/setType/index.d.cts +1 -1
- package/dist-plugin/setType/index.d.ts +1 -1
- package/dist-plugin/{themeTypes-BxRtuN5V.d.cts → themeTypes-B8_Idrp4.d.cts} +2 -2
- package/dist-plugin/{themeTypes-BxRtuN5V.d.ts → themeTypes-B8_Idrp4.d.ts} +2 -2
- package/package.json +2 -2
- package/src/editor/component-editor/CalloutEditor.svelte +2 -2
- package/src/editor/component-editor/CollapsibleSectionEditor.svelte +14 -15
- package/src/editor/component-editor/CornerBadgeEditor.svelte +14 -14
- package/src/editor/component-editor/DialogEditor.svelte +5 -5
- package/src/editor/component-editor/InlineEditActionsEditor.svelte +2 -2
- package/src/editor/component-editor/RadioButtonEditor.svelte +21 -21
- package/src/editor/component-editor/SectionDividerEditor.svelte +7 -7
- package/src/editor/component-editor/SegmentedControlEditor.svelte +5 -5
- package/src/editor/component-editor/SideNavigationEditor.svelte +25 -25
- package/src/editor/component-editor/TabBarEditor.svelte +6 -6
- package/src/editor/component-editor/TableEditor.svelte +6 -6
- package/src/editor/component-editor/ToggleEditor.svelte +2 -2
- package/src/editor/component-editor/index.ts +3 -0
- package/src/editor/component-editor/registry.ts +57 -1
- package/src/editor/component-editor/scaffolding/TokenLayout.svelte +14 -14
- package/src/editor/component-editor/scaffolding/VariantGroup.svelte +3 -0
- package/src/editor/component-editor/scaffolding/types.ts +15 -0
- package/src/editor/core/components/adjustAliases.ts +4 -4
- package/src/editor/core/components/aliasKinds.ts +20 -19
- package/src/editor/core/sketch/sketchLayer.ts +3 -3
- package/src/editor/core/themes/migrateComponentConfig.ts +14 -6
- package/src/editor/core/themes/migrations/2026-09-13-badge-brand.ts +42 -0
- package/src/editor/core/themes/migrations/2026-09-13-collapsiblesection-open.ts +33 -0
- package/src/editor/core/themes/migrations/2026-09-13-cornerbadge-prefix.ts +70 -0
- package/src/editor/core/themes/migrations/2026-09-13-hairline.ts +92 -0
- package/src/editor/core/themes/migrations/2026-09-13-indicator.ts +54 -0
- package/src/editor/core/themes/migrations/2026-09-13-sectiondivider-surface.ts +36 -0
- package/src/editor/core/themes/migrations/2026-09-13-selected-state.ts +124 -0
- package/src/editor/core/themes/migrations/2026-09-13-toggle-label.ts +31 -0
- package/src/editor/core/themes/migrations/index.ts +16 -0
- package/src/editor/core/themes/themeService.ts +3 -3
- package/src/editor/core/themes/themeTypes.ts +13 -15
- package/src/editor/docs/Docs.svelte +1 -1
- package/src/editor/docs/content/light-and-dark.md +3 -3
- package/src/editor/docs/content.generated.ts +1 -1
- package/src/editor/index.ts +1 -0
- package/src/editor/overlay/LiveEditorOverlay.svelte +15 -0
- package/src/editor/skill-atlas/SkillAtlas.svelte +4 -4
- package/src/editor/skill-atlas/TreeNodeCard.svelte +4 -4
- package/src/editor/skill-atlas/skillSources.generated.ts +11 -14
- package/src/editor/skill-atlas/skillTrees.ts +1 -3
- package/src/editor/skill-atlas/trees/check-compliance.ts +37 -149
- package/src/editor/skill-atlas/trees/create-component.ts +62 -64
- package/src/editor/skill-atlas/trees/create-page.ts +38 -17
- package/src/editor/skill-atlas/trees/pick-component.ts +3 -3
- package/src/editor/skill-atlas/trees/set-geometry.ts +1 -1
- package/src/editor/ui/UIPaletteSelector.svelte +11 -15
- package/src/editor/ui/variantScales.ts +8 -8
- package/src/live-tokens/data/themes/autumn.json +188 -188
- package/src/live-tokens/data/themes/halloween.json +188 -188
- package/src/live-tokens/data/themes/midnight-study.json +245 -245
- package/src/live-tokens/data/themes/ocean.json +188 -188
- package/src/live-tokens/data/themes/royal-velvet.json +188 -188
- package/src/live-tokens/data/themes/sketchy.json +188 -188
- package/src/live-tokens/data/themes/spring-meadow.json +188 -188
- package/src/live-tokens/data/themes/sunset.json +188 -188
- package/src/system/components/Badge.svelte +27 -23
- package/src/system/components/Button.svelte +13 -7
- package/src/system/components/Callout.svelte +16 -11
- package/src/system/components/Card.svelte +22 -15
- package/src/system/components/CodeSnippet.svelte +10 -6
- package/src/system/components/CollapsibleSection.svelte +81 -76
- package/src/system/components/CornerBadge.svelte +78 -72
- package/src/system/components/Dialog.svelte +21 -18
- package/src/system/components/IconButton.svelte +13 -9
- package/src/system/components/Image.svelte +14 -8
- package/src/system/components/ImageLightbox.svelte +10 -6
- package/src/system/components/InlineEditActions.svelte +17 -14
- package/src/system/components/Input.svelte +13 -7
- package/src/system/components/MenuSelect.svelte +13 -7
- package/src/system/components/Notification.svelte +17 -11
- package/src/system/components/Panel.svelte +13 -6
- package/src/system/components/ProgressBar.svelte +10 -5
- package/src/system/components/RadioButton.svelte +33 -30
- package/src/system/components/SectionDivider.svelte +28 -21
- package/src/system/components/SegmentedControl.svelte +27 -23
- package/src/system/components/SideNavigation.svelte +175 -171
- package/src/system/components/Slider.svelte +11 -7
- package/src/system/components/TabBar.svelte +53 -49
- package/src/system/components/Table.svelte +20 -15
- package/src/system/components/Toggle.svelte +14 -10
- package/src/system/components/Tooltip.svelte +10 -6
- package/src/system/styles/CONVENTIONS.md +3 -4
- package/src/testing-js/chunk-3UKGXCDL.js +48 -0
- package/src/testing-js/chunk-3UKGXCDL.js.map +1 -0
- package/src/testing-js/{chunk-FAFOAWYL.js → chunk-Q3YIAAG3.js} +17 -3
- package/src/testing-js/chunk-Q3YIAAG3.js.map +1 -0
- package/src/testing-js/{chunk-GNIUPIU2.js → chunk-U7OJE5DU.js} +18 -18
- package/src/testing-js/chunk-U7OJE5DU.js.map +1 -0
- package/src/testing-js/{chunk-4JQX6WWL.js → chunk-ZMZQZ33J.js} +474 -166
- package/src/testing-js/chunk-ZMZQZ33J.js.map +1 -0
- package/src/testing-js/component-behavior.contract.js +155 -0
- package/src/testing-js/component-behavior.contract.js.map +1 -0
- package/src/testing-js/component-editor.contract.js +6 -4
- package/src/testing-js/component-editor.contract.js.map +1 -1
- package/src/testing-js/component-render.contract.js +14 -10
- package/src/testing-js/component-render.contract.js.map +1 -1
- package/src/testing-js/index.d.ts +44 -4
- package/src/testing-js/index.js +13 -7
- package/src/testing-js/index.js.map +1 -1
- package/src/testing-js/page-compliance.contract.js +48 -10
- package/src/testing-js/page-compliance.contract.js.map +1 -1
- package/src/testing-js/registry.contract.js +5 -3
- package/src/testing-js/registry.contract.js.map +1 -1
- package/src/testing-js/{vitest-C-wNWcoA.d.ts → vitest-BMLIbDs2.d.ts} +8 -2
- package/src/testing-js/vitest.d.ts +1 -1
- package/src/testing-js/vitest.js +2 -1
- package/template/package.json +1 -2
- package/template/vite.config.ts +3 -2
- package/.claude/skills/live-tokens-create-component/SKILL copy.md +0 -196
- package/.claude/skills/live-tokens-fix-findings/SKILL.md +0 -105
- package/src/editor/skill-atlas/trees/fix-findings.ts +0 -504
- package/src/testing-js/chunk-4JQX6WWL.js.map +0 -1
- package/src/testing-js/chunk-FAFOAWYL.js.map +0 -1
- package/src/testing-js/chunk-GNIUPIU2.js.map +0 -1
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
/*
|
|
72
|
-
--radiobutton-
|
|
73
|
-
--radiobutton-
|
|
74
|
-
--radiobutton-
|
|
75
|
-
--radiobutton-
|
|
76
|
-
--radiobutton-
|
|
77
|
-
--radiobutton-
|
|
78
|
-
--radiobutton-
|
|
79
|
-
--radiobutton-
|
|
80
|
-
--radiobutton-
|
|
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
|
-
&.
|
|
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-
|
|
131
|
-
font-family: var(--radiobutton-
|
|
132
|
-
font-size: var(--radiobutton-
|
|
133
|
-
font-weight: var(--radiobutton-
|
|
134
|
-
line-height: var(--radiobutton-
|
|
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-
|
|
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-
|
|
142
|
-
height: var(--radiobutton-
|
|
143
|
-
background: var(--radiobutton-color, var(--radiobutton-
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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-
|
|
133
|
-
--sectiondivider-lg-
|
|
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-
|
|
162
|
-
--sectiondivider-md-
|
|
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-
|
|
191
|
-
--sectiondivider-sm-
|
|
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-
|
|
267
|
-
--_divider-bg: var(--sectiondivider-lg-
|
|
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-
|
|
302
|
-
--_divider-bg: var(--sectiondivider-md-
|
|
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-
|
|
337
|
-
--_divider-bg: var(--sectiondivider-sm-
|
|
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-
|
|
486
|
+
height: var(--_divider-hairline-width);
|
|
480
487
|
}
|
|
481
488
|
.sd-hairline--row {
|
|
482
489
|
width: 100%;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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-
|
|
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
|
-
/*
|
|
99
|
-
margin trimmed from the
|
|
100
|
-
--segmentedcontrol-
|
|
101
|
-
--segmentedcontrol-
|
|
102
|
-
--segmentedcontrol-
|
|
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-
|
|
154
|
-
--segmentedcontrol-small-
|
|
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-
|
|
192
|
-
--segmentedcontrol-
|
|
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
|
-
/*
|
|
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
|
|
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-
|
|
269
|
+
.segment-hairline {
|
|
266
270
|
flex-shrink: 0;
|
|
267
|
-
width: var(--segmentedcontrol-
|
|
268
|
-
margin-block: var(--segmentedcontrol-
|
|
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-
|
|
274
|
+
var(--segmentedcontrol-bar-gap) * -0.5 - var(--segmentedcontrol-hairline-width) * 0.5
|
|
271
275
|
);
|
|
272
|
-
background: var(--segmentedcontrol-
|
|
276
|
+
background: var(--segmentedcontrol-hairline-color);
|
|
273
277
|
pointer-events: none;
|
|
274
278
|
}
|
|
275
279
|
|