@motion-proto/live-tokens 0.73.0 → 0.75.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 +33 -38
- package/.claude/skills/live-tokens-create-component/SKILL copy.md +196 -0
- package/.claude/skills/live-tokens-create-component/SKILL.md +198 -146
- package/.claude/skills/live-tokens-create-component/references/contract-tests.md +95 -52
- package/.claude/skills/live-tokens-create-component/references/intrinsics.md +2 -2
- package/.claude/skills/live-tokens-create-component/references/linked-siblings.md +2 -2
- package/.claude/skills/live-tokens-create-component/references/sketch-mode.md +12 -12
- package/.claude/skills/live-tokens-create-component/references/token-naming.md +2 -1
- package/.claude/skills/live-tokens-create-page/SKILL.md +187 -0
- package/.claude/skills/live-tokens-create-page/references/interaction-sources.md +66 -0
- package/.claude/skills/live-tokens-create-page/references/layout-sources.md +87 -0
- package/.claude/skills/live-tokens-create-theme/SKILL.md +84 -0
- package/.claude/skills/live-tokens-create-theme/references/design-directions.md +94 -0
- package/.claude/skills/live-tokens-fix-findings/SKILL.md +69 -60
- package/.claude/skills/live-tokens-pick-component/SKILL.md +64 -79
- package/.claude/skills/live-tokens-set-colors/SKILL.md +149 -0
- package/.claude/skills/live-tokens-set-colors/references/color-anchors.md +80 -0
- package/.claude/skills/live-tokens-set-geometry/SKILL.md +121 -0
- package/.claude/skills/live-tokens-set-geometry/references/geometry-anchors.md +63 -0
- package/.claude/skills/live-tokens-set-type/SKILL.md +93 -0
- package/.claude/skills/live-tokens-set-type/references/type-anchors.md +60 -0
- package/CHANGELOG.md +194 -0
- package/README.md +27 -18
- package/bin/check-component.mjs +91 -19
- package/bin/check-page.mjs +105 -24
- package/bin/cli.mjs +154 -97
- package/bin/contractRunner.mjs +945 -0
- package/bin/create.mjs +1 -1
- package/bin/lib/catalogue.mjs +37 -30
- package/bin/lib/findings.mjs +46 -15
- package/bin/lib/liveState.mjs +110 -0
- package/bin/lib/report.mjs +3 -3
- package/bin/lib/tokenVocabulary.mjs +4 -4
- package/bin/migrate-routes.mjs +5 -5
- package/bin/migrate.mjs +4 -4
- package/bin/save-theme.mjs +176 -0
- package/bin/set-colors.mjs +189 -0
- package/bin/{adjust.mjs → set-geometry.mjs} +25 -57
- package/bin/{set-fonts.mjs → set-type.mjs} +26 -62
- package/dist-plugin/{chunk-W6Y4BWFB.js → chunk-6WGFOJXO.js} +22 -0
- package/dist-plugin/{chunk-RIXO2E55.js → chunk-PDNL4NC5.js} +9 -2
- package/dist-plugin/{chunk-YLCOIGQC.js → chunk-SWXRVZKT.js} +98 -2
- package/dist-plugin/{dataPaths-BhWzd5cL.d.ts → dataPaths-BpIK_Obx.d.cts} +1 -0
- package/dist-plugin/{dataPaths-BhWzd5cL.d.cts → dataPaths-BpIK_Obx.d.ts} +1 -0
- package/dist-plugin/index.cjs +366 -148
- package/dist-plugin/index.d.cts +1 -1
- package/dist-plugin/index.d.ts +1 -1
- package/dist-plugin/index.js +226 -130
- package/dist-plugin/migrateData/index.cjs +121 -2
- package/dist-plugin/migrateData/index.d.cts +1 -1
- package/dist-plugin/migrateData/index.d.ts +1 -1
- package/dist-plugin/migrateData/index.js +3 -3
- package/dist-plugin/{generateColorsAndType → setColors}/index.cjs +594 -499
- package/dist-plugin/{generateColorsAndType → setColors}/index.d.cts +34 -25
- package/dist-plugin/{generateColorsAndType → setColors}/index.d.ts +34 -25
- package/dist-plugin/{generateColorsAndType → setColors}/index.js +48 -66
- package/dist-plugin/{adjust → setGeometry}/index.cjs +166 -48
- package/dist-plugin/{adjust → setGeometry}/index.d.cts +6 -6
- package/dist-plugin/{adjust → setGeometry}/index.d.ts +6 -6
- package/dist-plugin/{adjust → setGeometry}/index.js +51 -45
- package/dist-plugin/{fontPairing → setType}/index.cjs +19 -4
- package/dist-plugin/{fontPairing → setType}/index.d.cts +2 -2
- package/dist-plugin/{fontPairing → setType}/index.d.ts +2 -2
- package/dist-plugin/{fontPairing → setType}/index.js +1 -1
- package/dist-plugin/{themeTypes-DSV3Zisf.d.cts → themeTypes-BxRtuN5V.d.cts} +1 -1
- package/dist-plugin/{themeTypes-DSV3Zisf.d.ts → themeTypes-BxRtuN5V.d.ts} +1 -1
- package/dist-plugin/tokensCssMigrations/index.d.cts +1 -1
- package/dist-plugin/tokensCssMigrations/index.d.ts +1 -1
- package/dist-plugin/tokensCssMigrations/index.js +1 -1
- package/package.json +36 -8
- package/src/app/site.css +19 -9
- package/src/editor/bootstrap.ts +2 -0
- package/src/editor/component-editor/CollapsibleSectionEditor.svelte +4 -4
- package/src/editor/component-editor/DialogEditor.svelte +4 -4
- package/src/editor/component-editor/MenuSelectEditor.svelte +4 -1
- package/src/editor/component-editor/SegmentedControlEditor.svelte +6 -1
- package/src/editor/component-editor/TabBarEditor.svelte +1 -1
- package/src/editor/component-editor/TableEditor.svelte +2 -2
- package/src/editor/component-editor/scaffolding/TokenLayout.svelte +6 -3
- package/src/editor/component-editor/scaffolding/VariantGroup.svelte +41 -20
- package/src/editor/core/components/adjustAliases.ts +59 -45
- package/src/editor/core/components/aliasKinds.ts +9 -5
- package/src/editor/core/preview/themePreview.ts +9 -2
- package/src/editor/core/sketch/sketchLayer.ts +22 -0
- package/src/editor/core/store/editorStore.ts +10 -1
- package/src/editor/core/themes/{generateColorsAndType.ts → buildColors.ts} +84 -98
- package/src/editor/core/themes/liveStateStream.ts +26 -0
- package/src/editor/core/themes/migrations/2026-09-03-drop-legacy-component-keys.ts +62 -0
- package/src/editor/core/themes/migrations/2026-09-07-stroke-role-renames.ts +52 -0
- package/src/editor/core/themes/migrations/index.ts +4 -0
- package/src/editor/core/themes/themeDocumentSync.ts +22 -11
- package/src/editor/core/themes/themeService.ts +9 -2
- package/src/editor/docs/content/themes-workflow.md +2 -2
- package/src/editor/docs/content.generated.ts +1 -1
- package/src/editor/overlay/LiveEditorOverlay.svelte +519 -28
- package/src/editor/pages/ComponentEditorPage.svelte +17 -1
- package/src/editor/pages/liveTokensEditorHandle.ts +23 -0
- package/src/editor/skill-atlas/SkillAtlas.svelte +76 -574
- package/src/editor/skill-atlas/TreeCanvas.svelte +263 -0
- package/src/editor/skill-atlas/TreeNodeCard.svelte +136 -53
- package/src/editor/skill-atlas/edges.ts +31 -0
- package/src/editor/skill-atlas/skillSources.generated.ts +29 -24
- package/src/editor/skill-atlas/skillTrees.ts +19 -3687
- package/src/editor/skill-atlas/trees/check-compliance.ts +183 -0
- package/src/editor/skill-atlas/trees/create-component.ts +275 -0
- package/src/editor/skill-atlas/trees/create-page.ts +320 -0
- package/src/editor/skill-atlas/trees/create-theme.ts +255 -0
- package/src/editor/skill-atlas/trees/fix-findings.ts +469 -0
- package/src/editor/skill-atlas/trees/pick-component.ts +300 -0
- package/src/editor/skill-atlas/trees/set-colors.ts +148 -0
- package/src/editor/skill-atlas/trees/set-geometry.ts +136 -0
- package/src/editor/skill-atlas/trees/set-type.ts +142 -0
- package/src/editor/skill-atlas/types.ts +3 -4
- package/src/editor/skill-atlas/wireLayout.ts +287 -0
- package/src/live-tokens/data/colors-and-type/autumn.json +1 -37
- package/src/live-tokens/data/colors-and-type/default.json +1 -37
- package/src/live-tokens/data/colors-and-type/halloween.json +1 -37
- package/src/live-tokens/data/colors-and-type/midnight-study.json +1 -37
- package/src/live-tokens/data/colors-and-type/ocean.json +1 -37
- package/src/live-tokens/data/colors-and-type/royal-velvet.json +1 -37
- package/src/live-tokens/data/colors-and-type/sketchy.json +1 -37
- package/src/live-tokens/data/colors-and-type/spring-meadow.json +1 -37
- package/src/live-tokens/data/colors-and-type/sunset.json +1 -37
- package/src/live-tokens/data/themes/autumn.json +16 -52
- package/src/live-tokens/data/themes/halloween.json +16 -52
- package/src/live-tokens/data/themes/midnight-study.json +16 -52
- package/src/live-tokens/data/themes/ocean.json +16 -52
- package/src/live-tokens/data/themes/royal-velvet.json +16 -52
- package/src/live-tokens/data/themes/sketchy.json +16 -52
- package/src/live-tokens/data/themes/spring-meadow.json +16 -52
- package/src/live-tokens/data/themes/sunset.json +16 -52
- package/src/live-tokens/data/tokens.generated.css +0 -36
- package/src/system/components/Badge.svelte +7 -0
- package/src/system/components/Button.svelte +7 -0
- package/src/system/components/Callout.svelte +10 -6
- package/src/system/components/Card.svelte +23 -4
- package/src/system/components/CodeSnippet.svelte +4 -3
- package/src/system/components/CollapsibleSection.svelte +23 -8
- package/src/system/components/CornerBadge.svelte +6 -0
- package/src/system/components/Dialog.svelte +13 -6
- package/src/system/components/IconButton.svelte +9 -0
- package/src/system/components/Image.svelte +8 -0
- package/src/system/components/ImageLightbox.svelte +6 -0
- package/src/system/components/InlineEditActions.svelte +7 -0
- package/src/system/components/Input.svelte +7 -0
- package/src/system/components/MenuSelect.svelte +7 -0
- package/src/system/components/Notification.svelte +7 -0
- package/src/system/components/Panel.svelte +6 -0
- package/src/system/components/ProgressBar.svelte +5 -0
- package/src/system/components/RadioButton.svelte +11 -5
- package/src/system/components/SectionDivider.svelte +8 -0
- package/src/system/components/SegmentedControl.svelte +6 -0
- package/src/system/components/SideNavigation.svelte +6 -0
- package/src/system/components/Slider.svelte +7 -4
- package/src/system/components/TabBar.svelte +15 -9
- package/src/system/components/Table.svelte +8 -3
- package/src/system/components/Toggle.svelte +4 -4
- package/src/system/components/Tooltip.svelte +6 -0
- package/src/testing-js/chunk-AO7EZHYV.js +776 -0
- package/src/testing-js/chunk-AO7EZHYV.js.map +1 -0
- package/src/testing-js/chunk-FAFOAWYL.js +39 -0
- package/src/testing-js/chunk-FAFOAWYL.js.map +1 -0
- package/src/testing-js/chunk-L73N4NSO.js +23 -0
- package/src/testing-js/chunk-L73N4NSO.js.map +1 -0
- package/src/testing-js/chunk-LXR3MN6N.js +3063 -0
- package/src/testing-js/chunk-LXR3MN6N.js.map +1 -0
- package/src/testing-js/chunk-ZMSX6CXR.js +53 -0
- package/src/testing-js/chunk-ZMSX6CXR.js.map +1 -0
- package/src/testing-js/component-alias.contract.js +81 -0
- package/src/testing-js/component-alias.contract.js.map +1 -0
- package/src/testing-js/component-editor.contract.js +62 -0
- package/src/testing-js/component-editor.contract.js.map +1 -0
- package/src/testing-js/component-render.contract.js +568 -0
- package/src/testing-js/component-render.contract.js.map +1 -0
- package/src/testing-js/index.d.ts +293 -0
- package/src/testing-js/index.js +222 -0
- package/src/testing-js/index.js.map +1 -0
- package/src/testing-js/registry.contract.js +39 -0
- package/src/testing-js/registry.contract.js.map +1 -0
- package/src/testing-js/vitest-BE6uGF31.d.ts +73 -0
- package/src/testing-js/vitest.d.ts +3 -0
- package/src/testing-js/vitest.js +13 -0
- package/src/testing-js/vitest.js.map +1 -0
- package/template/README.md +13 -0
- package/template/_gitignore +2 -0
- package/template/package.json +2 -1
- package/template/src/pages/Home.svelte +4 -18
- package/.claude/skills/live-tokens-adjust-geometry/SKILL.md +0 -93
- package/.claude/skills/live-tokens-build-page/SKILL.md +0 -103
- package/.claude/skills/live-tokens-build-page/references/layout-sources.md +0 -48
- package/.claude/skills/live-tokens-generate-theme/SKILL.md +0 -156
- package/.claude/skills/live-tokens-generate-theme/references/mood-vocabulary.md +0 -43
- package/.claude/skills/live-tokens-generate-theme/references/named-themes.md +0 -18
- package/.claude/skills/live-tokens-generate-theme/references/style-vocabulary.md +0 -35
- package/.claude/skills/live-tokens-pair-fonts/SKILL.md +0 -90
- package/bin/generate-theme.mjs +0 -260
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { SkillTree } from '../types';
|
|
2
|
+
|
|
3
|
+
export const setType: SkillTree = {
|
|
4
|
+
"id": "live-tokens-set-type",
|
|
5
|
+
"digest": "sha256:0c8d26a16313f9ee",
|
|
6
|
+
"title": "set-type",
|
|
7
|
+
"tagline": "Set Typefaces from Google Fonts",
|
|
8
|
+
"nodes": [
|
|
9
|
+
{
|
|
10
|
+
"id": "st-trig",
|
|
11
|
+
"row": 0,
|
|
12
|
+
"kind": "trigger",
|
|
13
|
+
"title": "Choose or pair font families",
|
|
14
|
+
"desc": "Sets a theme's fonts: a Google Fonts pairing for the display and body stacks, verified for the weights the text styles need.",
|
|
15
|
+
"lines": [3, 3],
|
|
16
|
+
"anchor": "description: Set a live-tokens theme's type: a Google Fonts "
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "st-anchor",
|
|
20
|
+
"row": 1,
|
|
21
|
+
"kind": "ref",
|
|
22
|
+
"title": "Read the type anchor",
|
|
23
|
+
"desc": "An anchor's entry overrides the Voice table.",
|
|
24
|
+
"lines": [14, 14],
|
|
25
|
+
"anchor": "Read the type intent and any anchor live-tokens-create-theme",
|
|
26
|
+
"reference": "references/type-anchors.md"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "st-input",
|
|
30
|
+
"row": 2,
|
|
31
|
+
"kind": "step",
|
|
32
|
+
"title": "Write the font pairing",
|
|
33
|
+
"desc": "A display family and a body family in one file. The body face comes first, and the display face contrasts with it and matches the voice.",
|
|
34
|
+
"lines": [15, 15],
|
|
35
|
+
"anchor": "Choose the pairing and write it to `scratch/font-pairing.jso",
|
|
36
|
+
"chips": [
|
|
37
|
+
{
|
|
38
|
+
"label": "Choose the body face first",
|
|
39
|
+
"lines": [30, 34],
|
|
40
|
+
"anchor": "## Choose the body face first",
|
|
41
|
+
"anchorEnd": "The shipped text styles ask the display face for 600 and the"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"label": "The font matrix",
|
|
45
|
+
"lines": [36, 50],
|
|
46
|
+
"anchor": "## The font matrix",
|
|
47
|
+
"anchorEnd": "Many faces sit between columns. When one straddles, say so a"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"label": "Voice",
|
|
51
|
+
"lines": [52, 66],
|
|
52
|
+
"anchor": "## Voice",
|
|
53
|
+
"anchorEnd": "Match the type to the design direction the color came from. "
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"label": "Shortcuts",
|
|
57
|
+
"lines": [68, 75],
|
|
58
|
+
"anchor": "## Shortcuts",
|
|
59
|
+
"anchorEnd": "**Serif display over sans body** when nothing else decides i"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"label": "Watch for",
|
|
63
|
+
"lines": [77, 82],
|
|
64
|
+
"anchor": "## Watch for",
|
|
65
|
+
"anchorEnd": "**Sets of themes.** No two share a display face or a body fa"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "st-cli",
|
|
71
|
+
"row": 3,
|
|
72
|
+
"kind": "cli",
|
|
73
|
+
"title": "Run set-type",
|
|
74
|
+
"desc": "The command verifies each family on Google Fonts and reports missing weights.",
|
|
75
|
+
"lines": [16, 16],
|
|
76
|
+
"anchor": "Run `npx live-tokens set-type scratch/font-pairing.json`. It"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "st-fail",
|
|
80
|
+
"row": 4,
|
|
81
|
+
"kind": "gate",
|
|
82
|
+
"title": "Correct the font pairing",
|
|
83
|
+
"desc": "A family not on Google Fonts fails the run. Fix the file and run again.",
|
|
84
|
+
"lines": [17, 17],
|
|
85
|
+
"anchor": "Read the report. Name a missing weight and offer an alternat"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "st-reply",
|
|
89
|
+
"row": 5,
|
|
90
|
+
"kind": "step",
|
|
91
|
+
"title": "Reply with the result",
|
|
92
|
+
"desc": "Report the two families, their construction, and any missing weight.",
|
|
93
|
+
"lines": [17, 18],
|
|
94
|
+
"anchor": "Read the report. Name a missing weight and offer an alternat",
|
|
95
|
+
"anchorEnd": "Reply with the two families, the form model behind each, the"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "st-verify",
|
|
99
|
+
"row": 6,
|
|
100
|
+
"kind": "done",
|
|
101
|
+
"title": "Verify the type",
|
|
102
|
+
"desc": "The CLI passes, each URL matches the family's weights, and the app shows the new type.",
|
|
103
|
+
"lines": [88, 93],
|
|
104
|
+
"anchor": "## Verify",
|
|
105
|
+
"anchorEnd": "To revert, run the previous pairing file, or load the open t"
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"edges": [
|
|
109
|
+
{
|
|
110
|
+
"to": "st-anchor",
|
|
111
|
+
"from": "st-trig"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"to": "st-fail",
|
|
115
|
+
"from": "st-cli",
|
|
116
|
+
"label": "exit 1"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"to": "st-cli",
|
|
120
|
+
"from": "st-fail",
|
|
121
|
+
"label": "rerun",
|
|
122
|
+
"back": true
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"to": "st-input",
|
|
126
|
+
"from": "st-anchor"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"to": "st-cli",
|
|
130
|
+
"from": "st-input"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"to": "st-reply",
|
|
134
|
+
"from": "st-cli",
|
|
135
|
+
"label": "exit 0"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"to": "st-verify",
|
|
139
|
+
"from": "st-reply"
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type NodeKind =
|
|
2
2
|
| 'trigger' | 'step' | 'decide' | 'cli' | 'hand'
|
|
3
|
-
| 'gate' | 'ok' | 'ref' | '
|
|
3
|
+
| 'gate' | 'ok' | 'ref' | 'chipset' | 'done';
|
|
4
4
|
|
|
5
5
|
/** Inclusive 1-based line range into the skill's SKILL.md. */
|
|
6
6
|
export type LineRange = [number, number];
|
|
@@ -27,14 +27,11 @@ export interface TreeNode extends Anchored {
|
|
|
27
27
|
title: string;
|
|
28
28
|
/** Overrides the kind's default eyebrow. */
|
|
29
29
|
tag?: string;
|
|
30
|
-
/** The skill's own step number, where the skill numbers its workflow. */
|
|
31
|
-
n?: string;
|
|
32
30
|
desc?: string;
|
|
33
31
|
/** A `references/*.md` the node stands for, opened as a tab in the source pane. */
|
|
34
32
|
reference?: string;
|
|
35
33
|
lines?: LineRange;
|
|
36
34
|
chips?: Chip[];
|
|
37
|
-
command?: string;
|
|
38
35
|
}
|
|
39
36
|
|
|
40
37
|
export interface Edge {
|
|
@@ -42,6 +39,8 @@ export interface Edge {
|
|
|
42
39
|
to: string;
|
|
43
40
|
/** The answer that selects this branch, drawn on the wire. */
|
|
44
41
|
label?: string;
|
|
42
|
+
/** Answers the card already shows as badges. They light the wire when a badge is selected and are not drawn. */
|
|
43
|
+
answers?: string[];
|
|
45
44
|
/** A re-run loop, routed up the gutter lane. */
|
|
46
45
|
back?: boolean;
|
|
47
46
|
}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import type { Edge } from './types';
|
|
2
|
+
|
|
3
|
+
/** A card's laid-out rectangle, relative to the canvas. */
|
|
4
|
+
export interface Box {
|
|
5
|
+
left: number;
|
|
6
|
+
right: number;
|
|
7
|
+
top: number;
|
|
8
|
+
bottom: number;
|
|
9
|
+
midX: number;
|
|
10
|
+
midY: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface Wire {
|
|
14
|
+
d: string;
|
|
15
|
+
back: boolean;
|
|
16
|
+
lit: boolean;
|
|
17
|
+
/** Trunks and buses carry no arrowhead; only the segment that arrives does. */
|
|
18
|
+
arrow: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface Label {
|
|
22
|
+
x: number;
|
|
23
|
+
y: number;
|
|
24
|
+
/** One entry per answer sharing the wire. */
|
|
25
|
+
lines: string[];
|
|
26
|
+
lit: boolean;
|
|
27
|
+
/** Lane labels run along the lane; branch labels sit across the drop. */
|
|
28
|
+
rotate: boolean;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface Drawing {
|
|
32
|
+
wires: Wire[];
|
|
33
|
+
labels: Label[];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Clearance between a card border and the wire, so the arrowhead reads as
|
|
37
|
+
* an arrival rather than as part of the card outline. */
|
|
38
|
+
const STANDOFF = 6;
|
|
39
|
+
const CORNER = 12;
|
|
40
|
+
/** How far outside the cards a lane sits, and how far one lane nests
|
|
41
|
+
* inside the next when two share a stretch of gutter. */
|
|
42
|
+
const LANE_INSET = 40;
|
|
43
|
+
const LANE_STEP = 16;
|
|
44
|
+
|
|
45
|
+
/** Cards laid out in one row share a top to within a pixel; cards pushed onto
|
|
46
|
+
* a second wrapped line do not, and a single bus cannot serve both. */
|
|
47
|
+
function aligned(values: number[]): boolean {
|
|
48
|
+
return Math.max(...values) - Math.min(...values) < 4;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function push<T>(map: Map<string, T[]>, key: string, value: T) {
|
|
52
|
+
const list = map.get(key);
|
|
53
|
+
if (list) list.push(value);
|
|
54
|
+
else map.set(key, [value]);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function label(out: Drawing, text: string | undefined, x: number, y: number, lit: boolean, rotate = false) {
|
|
58
|
+
if (text) out.labels.push({ x, y, lines: text.split('\n'), lit, rotate });
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** One trunk down from the parent, one bus across, one drop into each child —
|
|
62
|
+
* so a split reads as a single decision rather than as N crossing curves.
|
|
63
|
+
* Each answer sits on its own drop. */
|
|
64
|
+
function fanOut(out: Drawing, a: Box, kids: Box[], edges: Edge[], lit: (i: number) => boolean) {
|
|
65
|
+
const top = kids[0].top;
|
|
66
|
+
const busY = (a.bottom + top) / 2;
|
|
67
|
+
const xs = kids.map((k) => k.midX);
|
|
68
|
+
const r = Math.max(
|
|
69
|
+
0,
|
|
70
|
+
Math.min(CORNER, (Math.max(...xs) - Math.min(...xs)) / 2, (busY - a.bottom) / 2, (top - busY) / 2),
|
|
71
|
+
);
|
|
72
|
+
const turns = xs.map((x) => (x < a.midX ? x + r : x > a.midX ? x - r : x));
|
|
73
|
+
const busLeft = Math.min(...turns, a.midX);
|
|
74
|
+
const busRight = Math.max(...turns, a.midX);
|
|
75
|
+
const anyLit = kids.some((_, i) => lit(i));
|
|
76
|
+
|
|
77
|
+
out.wires.push({
|
|
78
|
+
back: false,
|
|
79
|
+
arrow: false,
|
|
80
|
+
lit: anyLit,
|
|
81
|
+
d: `M ${a.midX} ${a.bottom + STANDOFF} L ${a.midX} ${busY} M ${busLeft} ${busY} L ${busRight} ${busY}`,
|
|
82
|
+
});
|
|
83
|
+
kids.forEach((k, i) => {
|
|
84
|
+
const x = k.midX;
|
|
85
|
+
const turn = turns[i];
|
|
86
|
+
out.wires.push({
|
|
87
|
+
back: false,
|
|
88
|
+
arrow: true,
|
|
89
|
+
lit: lit(i),
|
|
90
|
+
d:
|
|
91
|
+
turn === x
|
|
92
|
+
? `M ${x} ${busY} L ${x} ${top - STANDOFF}`
|
|
93
|
+
: `M ${turn} ${busY} Q ${x} ${busY}, ${x} ${busY + r} L ${x} ${top - STANDOFF}`,
|
|
94
|
+
});
|
|
95
|
+
label(out, edges[i].label, x, (busY + r + top - STANDOFF) / 2, lit(i));
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** The mirror of `fanOut`: risers up to a shared bus, one trunk into the child,
|
|
100
|
+
* so several outcomes converging land as one arrow instead of a pile. */
|
|
101
|
+
function fanIn(out: Drawing, parents: Box[], b: Box, edges: Edge[], lit: (i: number) => boolean) {
|
|
102
|
+
const bottom = parents[0].bottom;
|
|
103
|
+
const busY = (bottom + b.top) / 2;
|
|
104
|
+
const xs = parents.map((p) => p.midX);
|
|
105
|
+
const r = Math.max(
|
|
106
|
+
0,
|
|
107
|
+
Math.min(CORNER, (Math.max(...xs) - Math.min(...xs)) / 2, (busY - bottom) / 2, (b.top - busY) / 2),
|
|
108
|
+
);
|
|
109
|
+
const turns = xs.map((x) => (x < b.midX ? x + r : x > b.midX ? x - r : x));
|
|
110
|
+
const anyLit = parents.some((_, i) => lit(i));
|
|
111
|
+
|
|
112
|
+
parents.forEach((p, i) => {
|
|
113
|
+
const x = p.midX;
|
|
114
|
+
const turn = turns[i];
|
|
115
|
+
out.wires.push({
|
|
116
|
+
back: false,
|
|
117
|
+
arrow: false,
|
|
118
|
+
lit: lit(i),
|
|
119
|
+
d:
|
|
120
|
+
turn === x
|
|
121
|
+
? `M ${x} ${bottom + STANDOFF} L ${x} ${busY}`
|
|
122
|
+
: `M ${x} ${bottom + STANDOFF} L ${x} ${busY - r} Q ${x} ${busY}, ${turn} ${busY}`,
|
|
123
|
+
});
|
|
124
|
+
label(out, edges[i].label, x, (bottom + STANDOFF + busY - r) / 2, lit(i));
|
|
125
|
+
});
|
|
126
|
+
out.wires.push({
|
|
127
|
+
back: false,
|
|
128
|
+
arrow: true,
|
|
129
|
+
lit: anyLit,
|
|
130
|
+
d:
|
|
131
|
+
`M ${Math.min(...turns, b.midX)} ${busY} L ${Math.max(...turns, b.midX)} ${busY}` +
|
|
132
|
+
` M ${b.midX} ${busY} L ${b.midX} ${b.top - STANDOFF}`,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** A plain parent-to-child curve, and the fallback wherever a bus would have
|
|
137
|
+
* to cross a card: children wrapped onto a second line, or parents staggered
|
|
138
|
+
* across rows. */
|
|
139
|
+
function curve(out: Drawing, a: Box, b: Box, edge: Edge, lit: boolean) {
|
|
140
|
+
const y1 = a.bottom + STANDOFF;
|
|
141
|
+
const y2 = b.top - STANDOFF;
|
|
142
|
+
const bend = Math.max(16, (y2 - y1) * 0.55);
|
|
143
|
+
out.wires.push({
|
|
144
|
+
back: false,
|
|
145
|
+
arrow: true,
|
|
146
|
+
lit,
|
|
147
|
+
d: `M ${a.midX} ${y1} C ${a.midX} ${y1 + bend}, ${b.midX} ${y2 - bend}, ${b.midX} ${y2}`,
|
|
148
|
+
});
|
|
149
|
+
label(out, edge.label, (a.midX + b.midX) / 2, (y1 + y2) / 2, lit);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** Every card the span passes between, not just the two it joins. */
|
|
153
|
+
function crossed(a: Box, b: Box, all: Box[]): Box[] {
|
|
154
|
+
const top = Math.min(a.midY, b.midY);
|
|
155
|
+
const bottom = Math.max(a.midY, b.midY);
|
|
156
|
+
return all.filter((x) => x !== a && x !== b && x.bottom > top && x.top < bottom);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** On the spine: no other card shares its row. A wrapped branch row also
|
|
160
|
+
* "crosses" cards on its way down, and those stay curves. */
|
|
161
|
+
function alone(box: Box, all: Box[]): boolean {
|
|
162
|
+
return all.every((x) => x === box || !aligned([x.top, box.top]));
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** Re-run loops ride a lane in the left gutter the centred spine opens up,
|
|
166
|
+
* rather than bulging around the card they leave. A card with siblings to
|
|
167
|
+
* its left leaves from its bottom and runs under the row, so the wire never
|
|
168
|
+
* passes through the cards beside it. */
|
|
169
|
+
function backEdge(out: Drawing, a: Box, b: Box, lane: number, edge: Edge, lit: boolean, under?: number) {
|
|
170
|
+
const dir = Math.sign(b.midY - a.midY) || -1;
|
|
171
|
+
const r = Math.max(0, Math.min(CORNER, (a.left - STANDOFF - lane) / 2, Math.abs(a.midY - b.midY) / 2));
|
|
172
|
+
const d =
|
|
173
|
+
under === undefined
|
|
174
|
+
? `M ${a.left - STANDOFF} ${a.midY} L ${lane + r} ${a.midY}` +
|
|
175
|
+
` Q ${lane} ${a.midY}, ${lane} ${a.midY + dir * r}`
|
|
176
|
+
: `M ${a.midX} ${a.bottom + STANDOFF} L ${a.midX} ${under - r}` +
|
|
177
|
+
` Q ${a.midX} ${under}, ${a.midX - r} ${under} L ${lane + r} ${under}` +
|
|
178
|
+
` Q ${lane} ${under}, ${lane} ${under - r}`;
|
|
179
|
+
out.wires.push({
|
|
180
|
+
back: true,
|
|
181
|
+
arrow: true,
|
|
182
|
+
lit,
|
|
183
|
+
d:
|
|
184
|
+
d +
|
|
185
|
+
` L ${lane} ${b.midY - dir * r} Q ${lane} ${b.midY}, ${lane + r} ${b.midY}` +
|
|
186
|
+
` L ${b.left - STANDOFF} ${b.midY}`,
|
|
187
|
+
});
|
|
188
|
+
label(out, edge.label, lane, (a.midY + b.midY) / 2, lit, true);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** A branch that skips a row rides the right gutter, the mirror of a loop,
|
|
192
|
+
* so a "no" never has to be drawn through the card the "yes" leads to. */
|
|
193
|
+
function skipEdge(out: Drawing, a: Box, b: Box, lane: number, edge: Edge, lit: boolean) {
|
|
194
|
+
const r = Math.max(0, Math.min(CORNER, (lane - a.right - STANDOFF) / 2, Math.abs(a.midY - b.midY) / 2));
|
|
195
|
+
out.wires.push({
|
|
196
|
+
back: false,
|
|
197
|
+
arrow: true,
|
|
198
|
+
lit,
|
|
199
|
+
d:
|
|
200
|
+
`M ${a.right + STANDOFF} ${a.midY} L ${lane - r} ${a.midY}` +
|
|
201
|
+
` Q ${lane} ${a.midY}, ${lane} ${a.midY + r}` +
|
|
202
|
+
` L ${lane} ${b.midY - r} Q ${lane} ${b.midY}, ${lane - r} ${b.midY}` +
|
|
203
|
+
` L ${b.right + STANDOFF} ${b.midY}`,
|
|
204
|
+
});
|
|
205
|
+
label(out, edge.label, lane, (a.midY + b.midY) / 2, lit, true);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Routes every edge between the measured cards. `lit` answers whether a wire
|
|
210
|
+
* joining the given node ids belongs to the current selection.
|
|
211
|
+
*/
|
|
212
|
+
export function routeWires(boxes: Map<string, Box>, edges: Edge[], lit: (edge: Edge) => boolean): Drawing {
|
|
213
|
+
const all = [...boxes.values()];
|
|
214
|
+
const children = new Map<string, Edge[]>();
|
|
215
|
+
const parents = new Map<string, Edge[]>();
|
|
216
|
+
for (const edge of edges) {
|
|
217
|
+
if (edge.back) continue;
|
|
218
|
+
push(children, edge.from, edge);
|
|
219
|
+
push(parents, edge.to, edge);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const out: Drawing = { wires: [], labels: [] };
|
|
223
|
+
const claimed = new Set<Edge>();
|
|
224
|
+
|
|
225
|
+
for (const [from, kidEdges] of children) {
|
|
226
|
+
const a = boxes.get(from);
|
|
227
|
+
const kids = kidEdges.map((e) => boxes.get(e.to));
|
|
228
|
+
if (!a || kidEdges.length < 2 || kids.some((k) => !k)) continue;
|
|
229
|
+
const kept = kids as Box[];
|
|
230
|
+
if (!aligned(kept.map((k) => k.top))) continue;
|
|
231
|
+
kidEdges.forEach((e) => claimed.add(e));
|
|
232
|
+
fanOut(out, a, kept, kidEdges, (i) => lit(kidEdges[i]));
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
for (const [to, parentEdges] of parents) {
|
|
236
|
+
const open = parentEdges.filter((e) => !claimed.has(e));
|
|
237
|
+
const b = boxes.get(to);
|
|
238
|
+
const ups = open.map((e) => boxes.get(e.from));
|
|
239
|
+
if (!b || open.length < 2 || ups.some((u) => !u)) continue;
|
|
240
|
+
const kept = ups as Box[];
|
|
241
|
+
if (!aligned(kept.map((u) => u.bottom))) continue;
|
|
242
|
+
open.forEach((e) => claimed.add(e));
|
|
243
|
+
fanIn(out, kept, b, open, (i) => lit(open[i]));
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Longest skip first, so a long one always rides outside the skips it spans.
|
|
247
|
+
const skips: { edge: Edge; a: Box; b: Box; over: Box[] }[] = [];
|
|
248
|
+
for (const edge of edges) {
|
|
249
|
+
if (edge.back || claimed.has(edge)) continue;
|
|
250
|
+
const a = boxes.get(edge.from);
|
|
251
|
+
const b = boxes.get(edge.to);
|
|
252
|
+
if (!a || !b) continue;
|
|
253
|
+
const over = alone(a, all) && alone(b, all) ? crossed(a, b, all) : [];
|
|
254
|
+
if (over.length > 0) skips.push({ edge, a, b, over });
|
|
255
|
+
else curve(out, a, b, edge, lit(edge));
|
|
256
|
+
}
|
|
257
|
+
skips.sort((x, y) => Math.abs(y.a.midY - y.b.midY) - Math.abs(x.a.midY - x.b.midY));
|
|
258
|
+
let outer = -Infinity;
|
|
259
|
+
for (const { edge, a, b, over } of skips) {
|
|
260
|
+
const lane = Math.max(...over.map((x) => x.right), a.right, b.right) + LANE_INSET;
|
|
261
|
+
const placed = Math.max(lane, outer + LANE_STEP);
|
|
262
|
+
outer = placed;
|
|
263
|
+
skipEdge(out, a, b, placed, edge, lit(edge));
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// Shortest loop first, so a long one always nests outside the loops it spans.
|
|
267
|
+
const loops = edges
|
|
268
|
+
.filter((e) => e.back)
|
|
269
|
+
.map((edge) => ({ edge, a: boxes.get(edge.from), b: boxes.get(edge.to) }))
|
|
270
|
+
.filter((e): e is { edge: Edge; a: Box; b: Box } => !!e.a && !!e.b)
|
|
271
|
+
.sort((x, y) => Math.abs(x.a.midY - x.b.midY) - Math.abs(y.a.midY - y.b.midY));
|
|
272
|
+
|
|
273
|
+
let inner = Infinity;
|
|
274
|
+
let unders = 0;
|
|
275
|
+
for (const { edge, a, b } of loops) {
|
|
276
|
+
const beside = all.filter((x) => x !== a && x.right <= a.left && x.bottom > a.midY && x.top < a.midY);
|
|
277
|
+
const clear = Math.min(...crossed(a, b, all).map((x) => x.left), ...beside.map((x) => x.left), a.left, b.left) - LANE_INSET;
|
|
278
|
+
const lane = Math.max(4, Math.min(clear, inner - LANE_STEP));
|
|
279
|
+
inner = lane;
|
|
280
|
+
// Each wire under the row takes its own height, in step with its lane, so
|
|
281
|
+
// the loops nest instead of sharing one line.
|
|
282
|
+
const under = beside.length ? a.bottom + STANDOFF + CORNER + LANE_STEP * unders++ : undefined;
|
|
283
|
+
backEdge(out, a, b, lane, edge, lit(edge), under);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
return out;
|
|
287
|
+
}
|
|
@@ -2219,42 +2219,6 @@
|
|
|
2219
2219
|
"--gradient-2": "linear-gradient(135deg, var(--color-special-500) 0%, var(--color-brand-500) 100%)",
|
|
2220
2220
|
"--gradient-3": "linear-gradient(90deg, var(--color-brand-500) 0%, var(--color-accent-500) 100%)",
|
|
2221
2221
|
"--gradient-4": "linear-gradient(180deg, var(--color-canvas-200) 0%, var(--color-canvas-500) 100%)",
|
|
2222
|
-
"--badge-trait-surface": "var(--surface-brand)",
|
|
2223
|
-
"--badge-trait-text": "var(--text-brand)",
|
|
2224
|
-
"--badge-trait-text-font-family": "var(--font-sans)",
|
|
2225
|
-
"--badge-trait-text-font-size": "var(--font-size-sm)",
|
|
2226
|
-
"--badge-trait-text-font-weight": "var(--font-weight-light)",
|
|
2227
|
-
"--badge-trait-text-line-height": "var(--line-height-none)",
|
|
2228
|
-
"--badge-trait-border": "var(--border-brand-medium)",
|
|
2229
|
-
"--badge-trait-border-width": "var(--border-width-1)",
|
|
2230
|
-
"--badge-trait-shadow": "transparent",
|
|
2231
|
-
"--sectiondivider-title": "var(--text-primary)",
|
|
2232
|
-
"--sectiondivider-title-font-family": "var(--font-display)",
|
|
2233
|
-
"--sectiondivider-title-font-size": "var(--font-size-5xl)",
|
|
2234
|
-
"--sectiondivider-title-font-weight": "var(--font-weight-normal)",
|
|
2235
|
-
"--sectiondivider-title-line-height": "var(--line-height-none)",
|
|
2236
|
-
"--sectiondivider-title-border-width": "var(--border-width-4)",
|
|
2237
|
-
"--sectiondivider-title-stroke-color": "var(--surface-canvas-lowest)",
|
|
2238
|
-
"--sectiondivider-description": "var(--text-secondary)",
|
|
2239
|
-
"--sectiondivider-description-font-family": "var(--font-sans)",
|
|
2240
|
-
"--sectiondivider-description-font-size": "var(--font-size-md)",
|
|
2241
|
-
"--sectiondivider-description-font-weight": "var(--font-weight-normal)",
|
|
2242
|
-
"--sectiondivider-description-line-height": "var(--line-height-normal)",
|
|
2243
|
-
"--dialog-primary-default-surface": "var(--surface-neutral-high)",
|
|
2244
|
-
"--dialog-primary-default-text": "var(--text-primary)",
|
|
2245
|
-
"--dialog-primary-default-border": "var(--border-neutral-medium)",
|
|
2246
|
-
"--dialog-primary-default-border-width": "var(--border-width-1)",
|
|
2247
|
-
"--dialog-primary-hover-surface": "var(--surface-neutral-higher)",
|
|
2248
|
-
"--dialog-primary-hover-text": "var(--text-primary)",
|
|
2249
|
-
"--dialog-primary-hover-border": "var(--border-neutral-strong)",
|
|
2250
|
-
"--dialog-primary-hover-border-width": "var(--border-width-1)",
|
|
2251
|
-
"--dialog-secondary-default-text": "var(--text-primary)",
|
|
2252
|
-
"--dialog-secondary-default-border": "var(--border-neutral-medium)",
|
|
2253
|
-
"--dialog-secondary-default-border-width": "var(--border-width-1)",
|
|
2254
|
-
"--dialog-secondary-hover-surface": "var(--surface-neutral-lower)",
|
|
2255
|
-
"--dialog-secondary-hover-text": "var(--text-primary)",
|
|
2256
|
-
"--dialog-secondary-hover-border": "var(--border-neutral-strong)",
|
|
2257
|
-
"--dialog-secondary-hover-border-width": "var(--border-width-1)",
|
|
2258
2222
|
"--columns-count": "12",
|
|
2259
2223
|
"--columns-max-width": "1440px",
|
|
2260
2224
|
"--columns-gutter": "32px",
|
|
@@ -2441,7 +2405,7 @@
|
|
|
2441
2405
|
"family": null
|
|
2442
2406
|
}
|
|
2443
2407
|
],
|
|
2444
|
-
"schemaVersion":
|
|
2408
|
+
"schemaVersion": 8,
|
|
2445
2409
|
"gradients": [
|
|
2446
2410
|
{
|
|
2447
2411
|
"variable": "--gradient-1",
|
|
@@ -2250,42 +2250,6 @@
|
|
|
2250
2250
|
"--gradient-2": "linear-gradient(135deg, var(--color-brand-500) 0%, var(--color-special-500) 100%)",
|
|
2251
2251
|
"--gradient-3": "linear-gradient(90deg, var(--color-success-500) 0%, var(--color-info-500) 100%)",
|
|
2252
2252
|
"--gradient-4": "linear-gradient(45deg, var(--color-danger-500) 0%, var(--color-warning-500) 100%)",
|
|
2253
|
-
"--badge-trait-surface": "var(--surface-brand)",
|
|
2254
|
-
"--badge-trait-text": "var(--text-brand)",
|
|
2255
|
-
"--badge-trait-text-font-family": "var(--font-sans)",
|
|
2256
|
-
"--badge-trait-text-font-size": "var(--font-size-sm)",
|
|
2257
|
-
"--badge-trait-text-font-weight": "var(--font-weight-light)",
|
|
2258
|
-
"--badge-trait-text-line-height": "var(--line-height-none)",
|
|
2259
|
-
"--badge-trait-border": "var(--border-brand-medium)",
|
|
2260
|
-
"--badge-trait-border-width": "var(--border-width-1)",
|
|
2261
|
-
"--badge-trait-shadow": "transparent",
|
|
2262
|
-
"--sectiondivider-title": "var(--text-primary)",
|
|
2263
|
-
"--sectiondivider-title-font-family": "var(--font-display)",
|
|
2264
|
-
"--sectiondivider-title-font-size": "var(--font-size-5xl)",
|
|
2265
|
-
"--sectiondivider-title-font-weight": "var(--font-weight-normal)",
|
|
2266
|
-
"--sectiondivider-title-line-height": "var(--line-height-none)",
|
|
2267
|
-
"--sectiondivider-title-border-width": "var(--border-width-4)",
|
|
2268
|
-
"--sectiondivider-title-stroke-color": "var(--surface-canvas-lowest)",
|
|
2269
|
-
"--sectiondivider-description": "var(--text-secondary)",
|
|
2270
|
-
"--sectiondivider-description-font-family": "var(--font-sans)",
|
|
2271
|
-
"--sectiondivider-description-font-size": "var(--font-size-md)",
|
|
2272
|
-
"--sectiondivider-description-font-weight": "var(--font-weight-normal)",
|
|
2273
|
-
"--sectiondivider-description-line-height": "var(--line-height-normal)",
|
|
2274
|
-
"--dialog-primary-default-surface": "var(--surface-neutral-high)",
|
|
2275
|
-
"--dialog-primary-default-text": "var(--text-primary)",
|
|
2276
|
-
"--dialog-primary-default-border": "var(--border-neutral-medium)",
|
|
2277
|
-
"--dialog-primary-default-border-width": "var(--border-width-1)",
|
|
2278
|
-
"--dialog-primary-hover-surface": "var(--surface-neutral-higher)",
|
|
2279
|
-
"--dialog-primary-hover-text": "var(--text-primary)",
|
|
2280
|
-
"--dialog-primary-hover-border": "var(--border-neutral-strong)",
|
|
2281
|
-
"--dialog-primary-hover-border-width": "var(--border-width-1)",
|
|
2282
|
-
"--dialog-secondary-default-text": "var(--text-primary)",
|
|
2283
|
-
"--dialog-secondary-default-border": "var(--border-neutral-medium)",
|
|
2284
|
-
"--dialog-secondary-default-border-width": "var(--border-width-1)",
|
|
2285
|
-
"--dialog-secondary-hover-surface": "var(--surface-neutral-lower)",
|
|
2286
|
-
"--dialog-secondary-hover-text": "var(--text-primary)",
|
|
2287
|
-
"--dialog-secondary-hover-border": "var(--border-neutral-strong)",
|
|
2288
|
-
"--dialog-secondary-hover-border-width": "var(--border-width-1)",
|
|
2289
2253
|
"--columns-count": "12",
|
|
2290
2254
|
"--columns-max-width": "1440px",
|
|
2291
2255
|
"--columns-gutter": "32px",
|
|
@@ -2451,5 +2415,5 @@
|
|
|
2451
2415
|
]
|
|
2452
2416
|
}
|
|
2453
2417
|
],
|
|
2454
|
-
"schemaVersion":
|
|
2418
|
+
"schemaVersion": 8
|
|
2455
2419
|
}
|
|
@@ -2266,42 +2266,6 @@
|
|
|
2266
2266
|
"--gradient-2": "linear-gradient(135deg, var(--color-special-500) 0%, var(--color-brand-500) 100%)",
|
|
2267
2267
|
"--gradient-3": "linear-gradient(90deg, var(--color-accent-400) 0%, var(--color-accent-700) 100%)",
|
|
2268
2268
|
"--gradient-4": "linear-gradient(180deg, var(--color-canvas-600) 0%, var(--color-canvas-900) 100%)",
|
|
2269
|
-
"--badge-trait-surface": "var(--surface-brand)",
|
|
2270
|
-
"--badge-trait-text": "var(--text-brand)",
|
|
2271
|
-
"--badge-trait-text-font-family": "var(--font-sans)",
|
|
2272
|
-
"--badge-trait-text-font-size": "var(--font-size-sm)",
|
|
2273
|
-
"--badge-trait-text-font-weight": "var(--font-weight-light)",
|
|
2274
|
-
"--badge-trait-text-line-height": "var(--line-height-none)",
|
|
2275
|
-
"--badge-trait-border": "var(--border-brand-medium)",
|
|
2276
|
-
"--badge-trait-border-width": "var(--border-width-1)",
|
|
2277
|
-
"--badge-trait-shadow": "transparent",
|
|
2278
|
-
"--sectiondivider-title": "var(--text-primary)",
|
|
2279
|
-
"--sectiondivider-title-font-family": "var(--font-display)",
|
|
2280
|
-
"--sectiondivider-title-font-size": "var(--font-size-5xl)",
|
|
2281
|
-
"--sectiondivider-title-font-weight": "var(--font-weight-normal)",
|
|
2282
|
-
"--sectiondivider-title-line-height": "var(--line-height-none)",
|
|
2283
|
-
"--sectiondivider-title-border-width": "var(--border-width-4)",
|
|
2284
|
-
"--sectiondivider-title-stroke-color": "var(--surface-canvas-lowest)",
|
|
2285
|
-
"--sectiondivider-description": "var(--text-secondary)",
|
|
2286
|
-
"--sectiondivider-description-font-family": "var(--font-sans)",
|
|
2287
|
-
"--sectiondivider-description-font-size": "var(--font-size-md)",
|
|
2288
|
-
"--sectiondivider-description-font-weight": "var(--font-weight-normal)",
|
|
2289
|
-
"--sectiondivider-description-line-height": "var(--line-height-normal)",
|
|
2290
|
-
"--dialog-primary-default-surface": "var(--surface-neutral-high)",
|
|
2291
|
-
"--dialog-primary-default-text": "var(--text-primary)",
|
|
2292
|
-
"--dialog-primary-default-border": "var(--border-neutral-medium)",
|
|
2293
|
-
"--dialog-primary-default-border-width": "var(--border-width-1)",
|
|
2294
|
-
"--dialog-primary-hover-surface": "var(--surface-neutral-higher)",
|
|
2295
|
-
"--dialog-primary-hover-text": "var(--text-primary)",
|
|
2296
|
-
"--dialog-primary-hover-border": "var(--border-neutral-strong)",
|
|
2297
|
-
"--dialog-primary-hover-border-width": "var(--border-width-1)",
|
|
2298
|
-
"--dialog-secondary-default-text": "var(--text-primary)",
|
|
2299
|
-
"--dialog-secondary-default-border": "var(--border-neutral-medium)",
|
|
2300
|
-
"--dialog-secondary-default-border-width": "var(--border-width-1)",
|
|
2301
|
-
"--dialog-secondary-hover-surface": "var(--surface-neutral-lower)",
|
|
2302
|
-
"--dialog-secondary-hover-text": "var(--text-primary)",
|
|
2303
|
-
"--dialog-secondary-hover-border": "var(--border-neutral-strong)",
|
|
2304
|
-
"--dialog-secondary-hover-border-width": "var(--border-width-1)",
|
|
2305
2269
|
"--columns-count": "12",
|
|
2306
2270
|
"--columns-max-width": "1440px",
|
|
2307
2271
|
"--columns-gutter": "32px",
|
|
@@ -2480,7 +2444,7 @@
|
|
|
2480
2444
|
"family": null
|
|
2481
2445
|
}
|
|
2482
2446
|
],
|
|
2483
|
-
"schemaVersion":
|
|
2447
|
+
"schemaVersion": 8,
|
|
2484
2448
|
"gradients": [
|
|
2485
2449
|
{
|
|
2486
2450
|
"variable": "--gradient-1",
|
|
@@ -2262,42 +2262,6 @@
|
|
|
2262
2262
|
}
|
|
2263
2263
|
},
|
|
2264
2264
|
"cssVariables": {
|
|
2265
|
-
"--badge-trait-surface": "var(--surface-brand)",
|
|
2266
|
-
"--badge-trait-text": "var(--text-brand)",
|
|
2267
|
-
"--badge-trait-text-font-family": "var(--font-sans)",
|
|
2268
|
-
"--badge-trait-text-font-size": "var(--font-size-sm)",
|
|
2269
|
-
"--badge-trait-text-font-weight": "var(--font-weight-light)",
|
|
2270
|
-
"--badge-trait-text-line-height": "var(--line-height-none)",
|
|
2271
|
-
"--badge-trait-border": "var(--border-brand-medium)",
|
|
2272
|
-
"--badge-trait-border-width": "var(--border-width-1)",
|
|
2273
|
-
"--badge-trait-shadow": "transparent",
|
|
2274
|
-
"--sectiondivider-title": "var(--text-primary)",
|
|
2275
|
-
"--sectiondivider-title-font-family": "var(--font-display)",
|
|
2276
|
-
"--sectiondivider-title-font-size": "var(--font-size-5xl)",
|
|
2277
|
-
"--sectiondivider-title-font-weight": "var(--font-weight-normal)",
|
|
2278
|
-
"--sectiondivider-title-line-height": "var(--line-height-none)",
|
|
2279
|
-
"--sectiondivider-title-border-width": "var(--border-width-4)",
|
|
2280
|
-
"--sectiondivider-title-stroke-color": "var(--surface-canvas-lowest)",
|
|
2281
|
-
"--sectiondivider-description": "var(--text-secondary)",
|
|
2282
|
-
"--sectiondivider-description-font-family": "var(--font-sans)",
|
|
2283
|
-
"--sectiondivider-description-font-size": "var(--font-size-md)",
|
|
2284
|
-
"--sectiondivider-description-font-weight": "var(--font-weight-normal)",
|
|
2285
|
-
"--sectiondivider-description-line-height": "var(--line-height-normal)",
|
|
2286
|
-
"--dialog-primary-default-surface": "var(--surface-neutral-high)",
|
|
2287
|
-
"--dialog-primary-default-text": "var(--text-primary)",
|
|
2288
|
-
"--dialog-primary-default-border": "var(--border-neutral-medium)",
|
|
2289
|
-
"--dialog-primary-default-border-width": "var(--border-width-1)",
|
|
2290
|
-
"--dialog-primary-hover-surface": "var(--surface-neutral-higher)",
|
|
2291
|
-
"--dialog-primary-hover-text": "var(--text-primary)",
|
|
2292
|
-
"--dialog-primary-hover-border": "var(--border-neutral-strong)",
|
|
2293
|
-
"--dialog-primary-hover-border-width": "var(--border-width-1)",
|
|
2294
|
-
"--dialog-secondary-default-text": "var(--text-primary)",
|
|
2295
|
-
"--dialog-secondary-default-border": "var(--border-neutral-medium)",
|
|
2296
|
-
"--dialog-secondary-default-border-width": "var(--border-width-1)",
|
|
2297
|
-
"--dialog-secondary-hover-surface": "var(--surface-neutral-lower)",
|
|
2298
|
-
"--dialog-secondary-hover-text": "var(--text-primary)",
|
|
2299
|
-
"--dialog-secondary-hover-border": "var(--border-neutral-strong)",
|
|
2300
|
-
"--dialog-secondary-hover-border-width": "var(--border-width-1)",
|
|
2301
2265
|
"--columns-count": "12",
|
|
2302
2266
|
"--columns-max-width": "1440px",
|
|
2303
2267
|
"--columns-gutter": "32px",
|
|
@@ -2559,5 +2523,5 @@
|
|
|
2559
2523
|
"family": null
|
|
2560
2524
|
}
|
|
2561
2525
|
],
|
|
2562
|
-
"schemaVersion":
|
|
2526
|
+
"schemaVersion": 8
|
|
2563
2527
|
}
|