@scattered-light/loomiere 0.0.0-stage → 0.1.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/README.md +60 -2
- package/bin/loomiere.mjs +112 -0
- package/build/build-tokens.mjs +485 -0
- package/exporters/README.md +45 -0
- package/exporters/ag-grid-settings.mjs +177 -0
- package/exporters/ag-grid.mjs +112 -0
- package/exporters/chakra.mjs +630 -0
- package/exporters/component-styles.mjs +207 -0
- package/exporters/dtcg.mjs +31 -0
- package/exporters/figma.mjs +100 -0
- package/exporters/index.mjs +38 -0
- package/exporters/mui.mjs +666 -0
- package/exporters/tailwind.mjs +35 -0
- package/exporters/theme.mjs +93 -0
- package/generator/brand.mjs +328 -0
- package/generator/brand.schema.json +657 -0
- package/generator/color.mjs +130 -0
- package/generator/data-colors.mjs +104 -0
- package/generator/format-brand.mjs +60 -0
- package/generator/generate.mjs +43 -0
- package/generator/pairs.mjs +236 -0
- package/generator/roles.mjs +258 -0
- package/generator/vision.mjs +167 -0
- package/lib/config.mjs +71 -0
- package/lib/contrast.mjs +134 -0
- package/lib/lab.mjs +108 -0
- package/lib/studio.mjs +127 -0
- package/lib/tool-server.mjs +96 -0
- package/package.json +51 -4
- package/templates/brand.json +104 -0
- package/tokens/README.md +219 -0
- package/tokens/component/avatar.json +10 -0
- package/tokens/component/button.json +12 -0
- package/tokens/component/drawer.json +26 -0
- package/tokens/component/navigation-menu.json +13 -0
- package/tokens/component/popover.json +13 -0
- package/tokens/component/preview-card.json +13 -0
- package/tokens/component/slider.json +13 -0
- package/tokens/component/switch.json +41 -0
- package/tokens/component/toast.json +21 -0
- package/tokens/component/toggle.json +9 -0
- package/tokens/component/toolbar.json +9 -0
- package/tokens/component/tooltip.json +9 -0
- package/tokens/foundation/layering.json +57 -0
- package/tokens/foundation/layout.json +75 -0
- package/tokens/foundation/motion.json +41 -0
- package/tokens/foundation/type.json +92 -0
- package/tokens/semantic/accessibility.json +39 -0
- package/tokens/semantic/bar.json +45 -0
- package/tokens/semantic/check.json +57 -0
- package/tokens/semantic/color.json +270 -0
- package/tokens/semantic/content.json +124 -0
- package/tokens/semantic/disclosure.json +49 -0
- package/tokens/semantic/elevation.json +72 -0
- package/tokens/semantic/field.json +77 -0
- package/tokens/semantic/focus.json +36 -0
- package/tokens/semantic/gauge.json +45 -0
- package/tokens/semantic/icon-button.json +33 -0
- package/tokens/semantic/icon.json +30 -0
- package/tokens/semantic/item.json +65 -0
- package/tokens/semantic/modal.json +86 -0
- package/tokens/semantic/motion.json +20 -0
- package/tokens/semantic/notice.json +37 -0
- package/tokens/semantic/popup.json +89 -0
- package/tokens/semantic/scheme.json +11 -0
- package/tokens/semantic/shape.json +54 -0
- package/tokens/semantic/spacing.json +110 -0
- package/tokens/semantic/table.json +73 -0
- package/tokens/semantic/typography.json +312 -0
- package/tools/brand-builder/builder.js +1119 -0
- package/tools/brand-builder/index.html +329 -0
- package/tools/pair-lab/index.html +119 -0
- package/tools/pair-lab/lab.js +249 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"elevation": {
|
|
3
|
+
"2xl": {
|
|
4
|
+
"$value": "{shadow.2xl}",
|
|
5
|
+
"$extensions": {
|
|
6
|
+
"sl.modes": {
|
|
7
|
+
"reduced-motion": "{shadow.flat.2xl}"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"base": {
|
|
12
|
+
"$value": "{shadow.base}",
|
|
13
|
+
"$extensions": {
|
|
14
|
+
"sl.modes": {
|
|
15
|
+
"reduced-motion": "{shadow.flat.base}"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"lg": {
|
|
20
|
+
"$value": "{shadow.lg}",
|
|
21
|
+
"$extensions": {
|
|
22
|
+
"sl.modes": {
|
|
23
|
+
"reduced-motion": "{shadow.flat.lg}"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"md": {
|
|
28
|
+
"$value": "{shadow.md}",
|
|
29
|
+
"$extensions": {
|
|
30
|
+
"sl.modes": {
|
|
31
|
+
"reduced-motion": "{shadow.flat.md}"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"sm": {
|
|
36
|
+
"$value": "{shadow.sm}",
|
|
37
|
+
"$extensions": {
|
|
38
|
+
"sl.modes": {
|
|
39
|
+
"reduced-motion": "{shadow.flat.sm}"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"xl": {
|
|
44
|
+
"$value": "{shadow.xl}",
|
|
45
|
+
"$extensions": {
|
|
46
|
+
"sl.modes": {
|
|
47
|
+
"reduced-motion": "{shadow.flat.xl}"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"xs": {
|
|
52
|
+
"$value": "{shadow.xs}",
|
|
53
|
+
"$extensions": {
|
|
54
|
+
"sl.modes": {
|
|
55
|
+
"reduced-motion": "{shadow.flat.xs}"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"$description": "Shadows by height. Each one flattens to a 1px outline under prefers-reduced-motion, because large blurred shadows imply movement."
|
|
60
|
+
},
|
|
61
|
+
"shadow": {
|
|
62
|
+
"outline": {
|
|
63
|
+
"$value": "0 0 0 3px color-mix(in oklab, {focus.ring} 60%, transparent)",
|
|
64
|
+
"$description": "Focus halo for controls that use box-shadow instead of outline: the focus ring color at 60% opacity, so it follows the accent and the theme. Becomes currentColor under prefers-contrast: more.",
|
|
65
|
+
"$extensions": {
|
|
66
|
+
"sl.modes": {
|
|
67
|
+
"contrast-more": "0 0 0 3px currentColor"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"field": {
|
|
3
|
+
"$description": "A form field: label, control, description and error (the Field component), and the look of every control you type into or pick a value from (Input, Select trigger, Combobox, Autocomplete, Number field). Sizes come from control.*.",
|
|
4
|
+
"background": {
|
|
5
|
+
"$value": "{surface.base}",
|
|
6
|
+
"$description": "Field fill at rest."
|
|
7
|
+
},
|
|
8
|
+
"background-disabled": {
|
|
9
|
+
"$value": "{surface.overlay}",
|
|
10
|
+
"$description": "Disabled fields sink into a flat gray so they read as unavailable."
|
|
11
|
+
},
|
|
12
|
+
"border-color": {
|
|
13
|
+
"$value": "{border.control}",
|
|
14
|
+
"$description": "Field edge at rest. Passes 3:1 against the page (WCAG 1.4.11) so an empty field is still findable."
|
|
15
|
+
},
|
|
16
|
+
"border-color-hover": {
|
|
17
|
+
"$value": "{border.control-hover}",
|
|
18
|
+
"$description": "Field edge under the pointer."
|
|
19
|
+
},
|
|
20
|
+
"border-color-focus": {
|
|
21
|
+
"$value": "{focus.ring}",
|
|
22
|
+
"$description": "Field edge while typing, in the focus color."
|
|
23
|
+
},
|
|
24
|
+
"border-color-error": {
|
|
25
|
+
"$value": "{status.error}",
|
|
26
|
+
"$description": "Field edge when the value is invalid."
|
|
27
|
+
},
|
|
28
|
+
"border-width": {
|
|
29
|
+
"$value": "{stroke.default}",
|
|
30
|
+
"$description": "Field edge thickness."
|
|
31
|
+
},
|
|
32
|
+
"radius": {
|
|
33
|
+
"$value": "{radius.control}",
|
|
34
|
+
"$description": "Field corners, the same as every other control."
|
|
35
|
+
},
|
|
36
|
+
"color": {
|
|
37
|
+
"$value": "{text.primary}",
|
|
38
|
+
"$description": "The value you typed."
|
|
39
|
+
},
|
|
40
|
+
"color-disabled": {
|
|
41
|
+
"$value": "{text.disabled}",
|
|
42
|
+
"$description": "The value in a disabled field."
|
|
43
|
+
},
|
|
44
|
+
"placeholder-color": {
|
|
45
|
+
"$value": "{text.tertiary}",
|
|
46
|
+
"$description": "Hint text before anything is typed."
|
|
47
|
+
},
|
|
48
|
+
"shadow-focus": {
|
|
49
|
+
"$value": "{focus.shadow-3px-primary}",
|
|
50
|
+
"$description": "Soft halo while typing, on top of the focus border."
|
|
51
|
+
},
|
|
52
|
+
"shadow-focus-error": {
|
|
53
|
+
"$value": "{focus.shadow-3px-error}",
|
|
54
|
+
"$description": "Halo while typing in an invalid field."
|
|
55
|
+
},
|
|
56
|
+
"transition": {
|
|
57
|
+
"$value": "{transition.input}",
|
|
58
|
+
"$description": "Border and halo ease in, never snap."
|
|
59
|
+
},
|
|
60
|
+
"gap": {
|
|
61
|
+
"$value": "{space.1-5}",
|
|
62
|
+
"$description": "Between a field's label, control and messages."
|
|
63
|
+
},
|
|
64
|
+
"label-spacing": {
|
|
65
|
+
"$value": "{space.1}",
|
|
66
|
+
"$description": "Extra room under the label, so it reads as belonging to the control below it."
|
|
67
|
+
},
|
|
68
|
+
"message-spacing": {
|
|
69
|
+
"$value": "{space.1}",
|
|
70
|
+
"$description": "Extra room above a description or error, so it reads as a note on the control."
|
|
71
|
+
},
|
|
72
|
+
"opacity-disabled": {
|
|
73
|
+
"$value": "0.6",
|
|
74
|
+
"$description": "A disabled field fades as a whole, label included."
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"focus": {
|
|
3
|
+
"shadow-3px-error": {
|
|
4
|
+
"$value": "0 0 0 3px {status.error}",
|
|
5
|
+
"$description": "Focus halo for a field with an error."
|
|
6
|
+
},
|
|
7
|
+
"shadow-3px-primary": {
|
|
8
|
+
"$value": "0 0 0 3px {interactive.tint-hover}",
|
|
9
|
+
"$description": "Soft focus halo for inputs."
|
|
10
|
+
},
|
|
11
|
+
"shadow-3px-primary-soft": {
|
|
12
|
+
"$value": "0 0 0 3px {interactive.tint-active}",
|
|
13
|
+
"$description": "Slightly stronger focus halo for inputs on tinted surfaces."
|
|
14
|
+
},
|
|
15
|
+
"outline": {
|
|
16
|
+
"$value": "{a11y.focus-outline-width} solid {focus.ring}",
|
|
17
|
+
"$description": "The one keyboard focus ring. Every control uses it, outside or inset."
|
|
18
|
+
},
|
|
19
|
+
"outline-offset": {
|
|
20
|
+
"$value": "{a11y.focus-outline-offset}",
|
|
21
|
+
"$description": "Outside ring: a gap between the control and the ring so it never blends into the control border. The default."
|
|
22
|
+
},
|
|
23
|
+
"outline-offset-inset": {
|
|
24
|
+
"$value": "calc(-1 * {a11y.focus-outline-width})",
|
|
25
|
+
"$description": "Inset ring: drawn just inside the control's edge, for controls packed into a container (menus, tab lists, steppers) where an outside ring would be clipped or overlap a neighbor."
|
|
26
|
+
},
|
|
27
|
+
"halo-spread": {
|
|
28
|
+
"$value": "calc({a11y.focus-outline-offset} + {a11y.focus-outline-width} + 2px)",
|
|
29
|
+
"$description": "A soft glow just outside the focus ring: the gap, the ring, then 2px of tint. The ring carries the contrast (WCAG 1.4.11), so the glow can stay pale."
|
|
30
|
+
},
|
|
31
|
+
"halo-color": {
|
|
32
|
+
"$value": "{interactive.tint-hover}",
|
|
33
|
+
"$description": "The pale tint of the focus glow. Components on a colored scope use that scope's soft-hover instead."
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"gauge": {
|
|
3
|
+
"$description": "A bar that shows an amount: Meter and Progress. The fill is the solid color of the scope around it, so data-color on the root (success, warning, error or any palette) re-colors the fill and the default follows the brand's accent.",
|
|
4
|
+
"track-color": {
|
|
5
|
+
"$value": "{fill.track}",
|
|
6
|
+
"$description": "The empty part of the bar. Every palette's fill reads 3:1 on it, so the amount is clear in both themes."
|
|
7
|
+
},
|
|
8
|
+
"height-sm": {
|
|
9
|
+
"$value": "{space.1}",
|
|
10
|
+
"$description": "Thin bar for dense lists."
|
|
11
|
+
},
|
|
12
|
+
"height": {
|
|
13
|
+
"$value": "{space.2}",
|
|
14
|
+
"$description": "Default bar height."
|
|
15
|
+
},
|
|
16
|
+
"height-lg": {
|
|
17
|
+
"$value": "{space.3}",
|
|
18
|
+
"$description": "Thick bar when the amount is the main thing on screen."
|
|
19
|
+
},
|
|
20
|
+
"radius": {
|
|
21
|
+
"$value": "{radius.pill}",
|
|
22
|
+
"$description": "Round ends on the track and the fill."
|
|
23
|
+
},
|
|
24
|
+
"gap": {
|
|
25
|
+
"$value": "{space.2}",
|
|
26
|
+
"$description": "Space between the label row and the bar."
|
|
27
|
+
},
|
|
28
|
+
"label-color": {
|
|
29
|
+
"$value": "{text.primary}",
|
|
30
|
+
"$description": "What is being measured."
|
|
31
|
+
},
|
|
32
|
+
"value-color": {
|
|
33
|
+
"$value": "{text.secondary}",
|
|
34
|
+
"$description": "The number, quieter than its label."
|
|
35
|
+
},
|
|
36
|
+
"transition": {
|
|
37
|
+
"$value": "width {duration.slow} {easing.default}",
|
|
38
|
+
"$description": "The fill grows smoothly when the value changes."
|
|
39
|
+
},
|
|
40
|
+
"indeterminate-duration": {
|
|
41
|
+
"$value": "1.5s",
|
|
42
|
+
"$description": "One sweep of an indeterminate progress bar. Slow enough to read as waiting, not as an alarm."
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"icon-button": {
|
|
3
|
+
"$description": "Small icon-only buttons: the X that dismisses a popover, dialog or toast, and the clear and open buttons inside a field. One look everywhere, so people learn it once.",
|
|
4
|
+
"size": {
|
|
5
|
+
"$value": "{space.6}",
|
|
6
|
+
"$description": "Square hit area around the X icon."
|
|
7
|
+
},
|
|
8
|
+
"inset": {
|
|
9
|
+
"$value": "{space.2}",
|
|
10
|
+
"$description": "Distance from the container's top and end corner when the button sits in a corner."
|
|
11
|
+
},
|
|
12
|
+
"radius": {
|
|
13
|
+
"$value": "{radius.item}",
|
|
14
|
+
"$description": "Rounded like a menu item, since its hover fill reads as a highlighted item."
|
|
15
|
+
},
|
|
16
|
+
"color": {
|
|
17
|
+
"$value": "{text.tertiary}",
|
|
18
|
+
"$description": "Quiet at rest so it doesn't compete with the content."
|
|
19
|
+
},
|
|
20
|
+
"color-hover": {
|
|
21
|
+
"$value": "{text.primary}",
|
|
22
|
+
"$description": "Darkens on hover to confirm it's the target."
|
|
23
|
+
},
|
|
24
|
+
"background-hover": {
|
|
25
|
+
"$value": "{fill.subtle}",
|
|
26
|
+
"$description": "A light neutral wash on hover, the same as a hovered row."
|
|
27
|
+
},
|
|
28
|
+
"transition": {
|
|
29
|
+
"$value": "{transition.button}",
|
|
30
|
+
"$description": "Responds as fast as a button."
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"icon-size": {
|
|
3
|
+
"$description": "One icon size per text tier. An icon takes the size of the tier whose text it sits beside, so icons and text scale together. Fixed px so glyphs land on whole pixels.",
|
|
4
|
+
"minimize": {
|
|
5
|
+
"$value": "12px",
|
|
6
|
+
"$type": "dimension",
|
|
7
|
+
"$description": "Icons beside minimize text: tiny indicators and markers."
|
|
8
|
+
},
|
|
9
|
+
"condense": {
|
|
10
|
+
"$value": "14px",
|
|
11
|
+
"$type": "dimension",
|
|
12
|
+
"$description": "Icons beside condense text: chips, small controls, dense rows."
|
|
13
|
+
},
|
|
14
|
+
"base": {
|
|
15
|
+
"$value": "16px",
|
|
16
|
+
"$type": "dimension",
|
|
17
|
+
"$description": "Icons beside base text: menu and list indicators, field icons. The default."
|
|
18
|
+
},
|
|
19
|
+
"magnify": {
|
|
20
|
+
"$value": "20px",
|
|
21
|
+
"$type": "dimension",
|
|
22
|
+
"$description": "Icons beside magnify text, and icons that lead a block such as a toast or accordion row."
|
|
23
|
+
},
|
|
24
|
+
"maximize": {
|
|
25
|
+
"$value": "24px",
|
|
26
|
+
"$type": "dimension",
|
|
27
|
+
"$description": "Icons beside maximize headings, and the largest touch-size buttons."
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"item": {
|
|
3
|
+
"$description": "Rows inside menus and listboxes (Menu, Context menu, Select, Combobox, Autocomplete) share one look and one set of states.",
|
|
4
|
+
"color": {
|
|
5
|
+
"$value": "{text.primary}",
|
|
6
|
+
"$description": "Row text at rest."
|
|
7
|
+
},
|
|
8
|
+
"color-hover": {
|
|
9
|
+
"$value": "{text.on-tint}",
|
|
10
|
+
"$description": "Row text on the highlighted tint."
|
|
11
|
+
},
|
|
12
|
+
"color-selected": {
|
|
13
|
+
"$value": "{text.on-tint-strong}",
|
|
14
|
+
"$description": "Row text on the selected tint."
|
|
15
|
+
},
|
|
16
|
+
"color-disabled": {
|
|
17
|
+
"$value": "{text.disabled}",
|
|
18
|
+
"$description": "Row text when the row can't be picked."
|
|
19
|
+
},
|
|
20
|
+
"background-hover": {
|
|
21
|
+
"$value": "{interactive.tint-hover}",
|
|
22
|
+
"$description": "Highlighted row (pointer or keyboard)."
|
|
23
|
+
},
|
|
24
|
+
"background-selected": {
|
|
25
|
+
"$value": "{interactive.tint-active}",
|
|
26
|
+
"$description": "The chosen row."
|
|
27
|
+
},
|
|
28
|
+
"radius": {
|
|
29
|
+
"$value": "{radius.item}",
|
|
30
|
+
"$description": "Row corners inside the popup."
|
|
31
|
+
},
|
|
32
|
+
"padding-block": {
|
|
33
|
+
"$value": "{space.2-5}",
|
|
34
|
+
"$description": "Row height comes from this and the base text line."
|
|
35
|
+
},
|
|
36
|
+
"padding-block-dense": {
|
|
37
|
+
"$value": "{space.2}",
|
|
38
|
+
"$description": "Menu rows are a little tighter than listbox options, since menus are scanned, not read."
|
|
39
|
+
},
|
|
40
|
+
"padding-inline": {
|
|
41
|
+
"$value": "{space.3}",
|
|
42
|
+
"$description": "Space before and after row text."
|
|
43
|
+
},
|
|
44
|
+
"gap": {
|
|
45
|
+
"$value": "{space.2}",
|
|
46
|
+
"$description": "Between a row's icon, text and indicator."
|
|
47
|
+
},
|
|
48
|
+
"opacity-disabled": {
|
|
49
|
+
"$value": "0.5",
|
|
50
|
+
"$description": "Disabled rows fade as well as gray out."
|
|
51
|
+
},
|
|
52
|
+
"transition": {
|
|
53
|
+
"$value": "all 0.15s ease",
|
|
54
|
+
"$description": "Highlight follows the pointer quickly."
|
|
55
|
+
},
|
|
56
|
+
"indicator-color": {
|
|
57
|
+
"$value": "{interactive.default}",
|
|
58
|
+
"$description": "The check or dot that marks a chosen row."
|
|
59
|
+
},
|
|
60
|
+
"indicator-size": {
|
|
61
|
+
"$value": "{icon-size.base}",
|
|
62
|
+
"$description": "Square slot for the indicator, the same size as a row icon so text lines up with or without one."
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
{
|
|
2
|
+
"modal": {
|
|
3
|
+
"$description": "Dialogs, alert dialogs and drawers: layers that take over the page until they are dismissed. They share one surface, scrim, heading and motion so every modal reads as the same kind of thing.",
|
|
4
|
+
"background": {
|
|
5
|
+
"$value": "{surface.modal}",
|
|
6
|
+
"$description": "Modal fill."
|
|
7
|
+
},
|
|
8
|
+
"border-color": {
|
|
9
|
+
"$value": "{border.default}",
|
|
10
|
+
"$description": "Modal edge, the same quiet line as popups."
|
|
11
|
+
},
|
|
12
|
+
"border-width": {
|
|
13
|
+
"$value": "{stroke.default}",
|
|
14
|
+
"$description": "Modal edge thickness."
|
|
15
|
+
},
|
|
16
|
+
"radius": {
|
|
17
|
+
"$value": "{radius.modal}",
|
|
18
|
+
"$description": "The largest radius, so a modal reads as its own layer. A drawer rounds only the edge facing the page."
|
|
19
|
+
},
|
|
20
|
+
"shadow": {
|
|
21
|
+
"$value": "{elevation.xl}",
|
|
22
|
+
"$description": "The deepest shadow, because a modal sits above everything but popups and toasts."
|
|
23
|
+
},
|
|
24
|
+
"padding": {
|
|
25
|
+
"$value": "{space.6}",
|
|
26
|
+
"$description": "Space inside a modal."
|
|
27
|
+
},
|
|
28
|
+
"gap": {
|
|
29
|
+
"$value": "{space.4}",
|
|
30
|
+
"$description": "Space between a modal's title, description, content and form."
|
|
31
|
+
},
|
|
32
|
+
"actions-gap": {
|
|
33
|
+
"$value": "{space.3}",
|
|
34
|
+
"$description": "Space between the buttons in a modal's action row."
|
|
35
|
+
},
|
|
36
|
+
"actions-spacing": {
|
|
37
|
+
"$value": "{space.6}",
|
|
38
|
+
"$description": "Extra space above the action row, so the buttons sit apart from the content they act on."
|
|
39
|
+
},
|
|
40
|
+
"width": {
|
|
41
|
+
"$value": "90vw",
|
|
42
|
+
"$description": "A dialog fills most of a narrow screen."
|
|
43
|
+
},
|
|
44
|
+
"max-width": {
|
|
45
|
+
"$value": "500px",
|
|
46
|
+
"$description": "Widest a dialog gets, so its text stays an easy line length."
|
|
47
|
+
},
|
|
48
|
+
"max-height": {
|
|
49
|
+
"$value": "90vh",
|
|
50
|
+
"$description": "Tallest a dialog gets; longer content scrolls inside it."
|
|
51
|
+
},
|
|
52
|
+
"backdrop": {
|
|
53
|
+
"$value": "color-mix(in srgb, {overlay.base} 50%, transparent)",
|
|
54
|
+
"$type": "color",
|
|
55
|
+
"$description": "Scrim that dims the page behind a modal."
|
|
56
|
+
},
|
|
57
|
+
"backdrop-z-index": {
|
|
58
|
+
"$value": "{z-index.scrim}",
|
|
59
|
+
"$description": "The scrim covers the page and its sticky bars."
|
|
60
|
+
},
|
|
61
|
+
"z-index": {
|
|
62
|
+
"$value": "{z-index.modal}",
|
|
63
|
+
"$description": "Modals sit above the scrim; popups opened from inside them sit above modals."
|
|
64
|
+
},
|
|
65
|
+
"animation-duration": {
|
|
66
|
+
"$value": "{duration.normal}",
|
|
67
|
+
"$description": "How long a modal takes to open or close."
|
|
68
|
+
},
|
|
69
|
+
"animation-easing": {
|
|
70
|
+
"$value": "{easing.out}",
|
|
71
|
+
"$description": "Modals arrive quickly and settle."
|
|
72
|
+
},
|
|
73
|
+
"scale-closed": {
|
|
74
|
+
"$value": "{popup.scale-closed}",
|
|
75
|
+
"$description": "A dialog grows from just under full size as it opens, like a popup."
|
|
76
|
+
},
|
|
77
|
+
"title-color": {
|
|
78
|
+
"$value": "{text.primary}",
|
|
79
|
+
"$description": "Modal heading color."
|
|
80
|
+
},
|
|
81
|
+
"description-color": {
|
|
82
|
+
"$value": "{text.secondary}",
|
|
83
|
+
"$description": "Supporting text under the heading."
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"transition": {
|
|
3
|
+
"button": {
|
|
4
|
+
"$value": "all {duration.fast} {easing.default}",
|
|
5
|
+
"$description": "Buttons respond fast so clicks feel immediate."
|
|
6
|
+
},
|
|
7
|
+
"dropdown": {
|
|
8
|
+
"$value": "all {duration.fast} {easing.out}",
|
|
9
|
+
"$description": "Dropdowns open fast and ease out so they arrive softly."
|
|
10
|
+
},
|
|
11
|
+
"input": {
|
|
12
|
+
"$value": "all {duration.normal} {easing.default}",
|
|
13
|
+
"$description": "Inputs change state at normal speed so focus changes are noticeable but not slow."
|
|
14
|
+
},
|
|
15
|
+
"modal": {
|
|
16
|
+
"$value": "all {duration.normal} {easing.out}",
|
|
17
|
+
"$description": "Modals take longer and ease out because they cover the page."
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"notice": {
|
|
3
|
+
"$description": "A short message that arrives on its own: toasts now, banners and inline alerts later. It floats on the popup surface; data-color (or a toast's type) tints it with that palette's soft fill, edge and text, so a success always looks like a success.",
|
|
4
|
+
"padding": {
|
|
5
|
+
"$value": "{space.4}",
|
|
6
|
+
"$description": "Space inside the notice, roomier than a popup's because it is read, not picked from."
|
|
7
|
+
},
|
|
8
|
+
"gap": {
|
|
9
|
+
"$value": "{space.3}",
|
|
10
|
+
"$description": "Space between the icon and the text, and between stacked toasts."
|
|
11
|
+
},
|
|
12
|
+
"text-gap": {
|
|
13
|
+
"$value": "{space.1}",
|
|
14
|
+
"$description": "Space between the title and the description."
|
|
15
|
+
},
|
|
16
|
+
"description-color": {
|
|
17
|
+
"$value": "{text.secondary}",
|
|
18
|
+
"$description": "Description on the plain surface. A tinted notice uses its palette's text color for both lines."
|
|
19
|
+
},
|
|
20
|
+
"z-index": {
|
|
21
|
+
"$value": "{z-index.toast}",
|
|
22
|
+
"$description": "Toasts stay visible over modals."
|
|
23
|
+
},
|
|
24
|
+
"animation-duration": {
|
|
25
|
+
"$value": "{duration.slow}",
|
|
26
|
+
"$description": "Arriving and leaving. Slower than a popup because a toast slides in from the edge."
|
|
27
|
+
},
|
|
28
|
+
"animation-easing": {
|
|
29
|
+
"$value": "{easing.out}",
|
|
30
|
+
"$description": "Arrives fast and settles."
|
|
31
|
+
},
|
|
32
|
+
"peek": {
|
|
33
|
+
"$value": "{space.3}",
|
|
34
|
+
"$description": "How much of each toast behind the front one shows when the stack is collapsed."
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"popup": {
|
|
3
|
+
"$description": "Every floating layer that opens from a trigger (menus, listboxes, popovers, preview cards) shares one surface, so they read as the same kind of thing.",
|
|
4
|
+
"background": {
|
|
5
|
+
"$value": "{surface.base}",
|
|
6
|
+
"$description": "Popup fill."
|
|
7
|
+
},
|
|
8
|
+
"border-color": {
|
|
9
|
+
"$value": "{border.default}",
|
|
10
|
+
"$description": "Popup edge, a quiet line that separates it from the page under it."
|
|
11
|
+
},
|
|
12
|
+
"border-width": {
|
|
13
|
+
"$value": "{stroke.default}",
|
|
14
|
+
"$description": "Popup edge thickness."
|
|
15
|
+
},
|
|
16
|
+
"radius": {
|
|
17
|
+
"$value": "{radius.surface}",
|
|
18
|
+
"$description": "Corners of a free-floating popup."
|
|
19
|
+
},
|
|
20
|
+
"radius-field": {
|
|
21
|
+
"$value": "{radius.control}",
|
|
22
|
+
"$description": "Corners of a list that drops from a field, matching the field so the two read as one control."
|
|
23
|
+
},
|
|
24
|
+
"shadow": {
|
|
25
|
+
"$value": "{elevation.lg}",
|
|
26
|
+
"$description": "Lifts the popup above the page."
|
|
27
|
+
},
|
|
28
|
+
"padding": {
|
|
29
|
+
"$value": "{space.1}",
|
|
30
|
+
"$description": "Space around a list of items, small so highlighted rows almost reach the edge."
|
|
31
|
+
},
|
|
32
|
+
"padding-panel": {
|
|
33
|
+
"$value": "{space.4}",
|
|
34
|
+
"$description": "Space around free content such as a popover's text."
|
|
35
|
+
},
|
|
36
|
+
"z-index": {
|
|
37
|
+
"$value": "{z-index.popover}",
|
|
38
|
+
"$description": "Popups stack above modals, so a menu inside a dialog still shows."
|
|
39
|
+
},
|
|
40
|
+
"animation-duration": {
|
|
41
|
+
"$value": "{duration.normal}",
|
|
42
|
+
"$description": "How long a popup takes to open."
|
|
43
|
+
},
|
|
44
|
+
"animation-easing": {
|
|
45
|
+
"$value": "ease-out",
|
|
46
|
+
"$description": "Popups arrive quickly and settle."
|
|
47
|
+
},
|
|
48
|
+
"arrow-fill": {
|
|
49
|
+
"$value": "{popup.background}",
|
|
50
|
+
"$description": "The arrow is part of the popup, so it takes the popup's fill."
|
|
51
|
+
},
|
|
52
|
+
"arrow-stroke": {
|
|
53
|
+
"$value": "{popup.border-color}",
|
|
54
|
+
"$description": "Arrow edge, continuing the popup's border."
|
|
55
|
+
},
|
|
56
|
+
"scale-closed": {
|
|
57
|
+
"$value": "0.95",
|
|
58
|
+
"$description": "Popups grow from just under full size as they open, so they seem to come from the trigger."
|
|
59
|
+
},
|
|
60
|
+
"list-max-height": {
|
|
61
|
+
"$value": "300px",
|
|
62
|
+
"$description": "A long list scrolls inside the popup after about seven rows."
|
|
63
|
+
},
|
|
64
|
+
"separator-color": {
|
|
65
|
+
"$value": "{border.subtle}",
|
|
66
|
+
"$description": "Line between groups of rows, quieter than the popup edge."
|
|
67
|
+
},
|
|
68
|
+
"separator-spacing": {
|
|
69
|
+
"$value": "{space.1}",
|
|
70
|
+
"$description": "Space above and below a separator."
|
|
71
|
+
},
|
|
72
|
+
"group-label-padding-top": {
|
|
73
|
+
"$value": "{space.2}",
|
|
74
|
+
"$description": "Space above a group label, so it sits closer to its own rows than to the group before."
|
|
75
|
+
},
|
|
76
|
+
"group-label-padding-bottom": {
|
|
77
|
+
"$value": "{space.1}",
|
|
78
|
+
"$description": "Space between a group label and its first row."
|
|
79
|
+
},
|
|
80
|
+
"empty-padding-block": {
|
|
81
|
+
"$value": "{space.6}",
|
|
82
|
+
"$description": "Room around a 'No results' message, so an empty list doesn't collapse to a sliver."
|
|
83
|
+
},
|
|
84
|
+
"min-width": {
|
|
85
|
+
"$value": "200px",
|
|
86
|
+
"$description": "Narrowest a free-floating popup or menu gets, so short labels don't make a sliver."
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"color-scheme": {
|
|
3
|
+
"$value": "light",
|
|
4
|
+
"$description": "Which way native browser parts (scrollbars, date pickers, autofill) draw: light, or dark wherever the dark theme is on. Set as color-scheme on the root and handed to AG Grid's browserColorScheme, so they follow data-theme as well as the system setting.",
|
|
5
|
+
"$extensions": {
|
|
6
|
+
"sl.modes": {
|
|
7
|
+
"dark": "dark"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"radius": {
|
|
3
|
+
"box": {
|
|
4
|
+
"$value": "{radius.base}",
|
|
5
|
+
"$description": "Default rounding for boxes that are not controls or surfaces."
|
|
6
|
+
},
|
|
7
|
+
"chrome": {
|
|
8
|
+
"$value": "{radius.md}",
|
|
9
|
+
"$description": "App chrome such as toolbars and menubars."
|
|
10
|
+
},
|
|
11
|
+
"control": {
|
|
12
|
+
"$value": "{radius.sm}",
|
|
13
|
+
"$description": "Inputs, buttons and other controls you click or type in."
|
|
14
|
+
},
|
|
15
|
+
"focus": {
|
|
16
|
+
"$value": "{radius.sm}",
|
|
17
|
+
"$description": "Focus rings follow the control radius."
|
|
18
|
+
},
|
|
19
|
+
"item": {
|
|
20
|
+
"$value": "{radius.sm}",
|
|
21
|
+
"$description": "Rows inside menus and lists, so highlighted items keep a soft edge inside the popup."
|
|
22
|
+
},
|
|
23
|
+
"minimal": {
|
|
24
|
+
"$value": "{radius.none}",
|
|
25
|
+
"$description": "Square corners for things that tile edge to edge."
|
|
26
|
+
},
|
|
27
|
+
"modal": {
|
|
28
|
+
"$value": "{radius.xl}",
|
|
29
|
+
"$description": "Dialogs get the largest radius so they read as a separate layer."
|
|
30
|
+
},
|
|
31
|
+
"pill": {
|
|
32
|
+
"$value": "{radius.full}",
|
|
33
|
+
"$description": "Fully rounded ends for pills, badges and switches."
|
|
34
|
+
},
|
|
35
|
+
"surface": {
|
|
36
|
+
"$value": "{radius.lg}",
|
|
37
|
+
"$description": "Cards, popovers and panels."
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"stroke": {
|
|
41
|
+
"default": {
|
|
42
|
+
"$value": "{stroke.thin}",
|
|
43
|
+
"$description": "Normal borders."
|
|
44
|
+
},
|
|
45
|
+
"emphasis": {
|
|
46
|
+
"$value": "{stroke.medium}",
|
|
47
|
+
"$description": "Borders that mark a selected or focused state."
|
|
48
|
+
},
|
|
49
|
+
"strong": {
|
|
50
|
+
"$value": "{stroke.thick}",
|
|
51
|
+
"$description": "Borders that must hold up at a distance, such as dashed drop zones."
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|