@viraui/react 2026.6.0 → 2026.6.2
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/dist/catalog.json +5 -5
- package/dist/components/radio/radio-group.d.ts +1 -1
- package/dist/components/stack/stack.d.ts +4 -1
- package/dist/components/tabs/tabs.css +1 -1
- package/dist/components/text/text.css +1 -1
- package/dist/components/text/text.d.ts +12 -2
- package/dist/components/text/text.js +2 -1
- package/dist/components/textfield/textfield.d.ts +1 -0
- package/dist/components/title/title.css +1 -1
- package/dist/components/title/title.d.ts +12 -2
- package/dist/components/title/title.js +2 -1
- package/dist/specs/PROTOCOL.md +1 -1
- package/dist/specs/activity-hints.xml +18 -3
- package/dist/specs/components/accordion/patterns.xml +69 -5
- package/dist/specs/components/accordion/props.xml +4 -4
- package/dist/specs/components/accordion/usage.xml +8 -4
- package/dist/specs/components/annotate/patterns.xml +50 -3
- package/dist/specs/components/annotate/props.xml +22 -22
- package/dist/specs/components/annotate/usage.xml +7 -6
- package/dist/specs/components/autocomplete/patterns.xml +123 -7
- package/dist/specs/components/autocomplete/props.xml +14 -14
- package/dist/specs/components/autocomplete/usage.xml +11 -6
- package/dist/specs/components/avatar/patterns.xml +78 -3
- package/dist/specs/components/avatar/props.xml +8 -8
- package/dist/specs/components/avatar/usage.xml +9 -3
- package/dist/specs/components/avatar-group/patterns.xml +65 -3
- package/dist/specs/components/avatar-group/props.xml +8 -8
- package/dist/specs/components/avatar-group/usage.xml +10 -7
- package/dist/specs/components/badge/patterns.xml +57 -3
- package/dist/specs/components/badge/props.xml +8 -8
- package/dist/specs/components/badge/usage.xml +5 -3
- package/dist/specs/components/beam/meta.xml +1 -1
- package/dist/specs/components/beam/patterns.xml +68 -3
- package/dist/specs/components/beam/props.xml +22 -22
- package/dist/specs/components/beam/usage.xml +7 -7
- package/dist/specs/components/bleed/patterns.xml +54 -3
- package/dist/specs/components/bleed/props.xml +2 -2
- package/dist/specs/components/bleed/usage.xml +6 -3
- package/dist/specs/components/breakpoints/meta.xml +1 -1
- package/dist/specs/components/breakpoints/patterns.xml +1 -6
- package/dist/specs/components/breakpoints/props.xml +4 -2
- package/dist/specs/components/breakpoints/usage.xml +10 -2
- package/dist/specs/components/button/patterns.xml +124 -6
- package/dist/specs/components/button/props.xml +33 -32
- package/dist/specs/components/button/usage.xml +13 -13
- package/dist/specs/components/checkbox/patterns.xml +83 -3
- package/dist/specs/components/checkbox/props.xml +10 -10
- package/dist/specs/components/checkbox/usage.xml +11 -6
- package/dist/specs/components/chip/patterns.xml +74 -3
- package/dist/specs/components/chip/props.xml +14 -14
- package/dist/specs/components/chip/usage.xml +10 -6
- package/dist/specs/components/clamp-text/patterns.xml +1 -4
- package/dist/specs/components/clamp-text/props.xml +2 -2
- package/dist/specs/components/clamp-text/usage.xml +8 -5
- package/dist/specs/components/dialog/patterns.xml +136 -15
- package/dist/specs/components/dialog/props.xml +2 -2
- package/dist/specs/components/dialog/usage.xml +9 -7
- package/dist/specs/components/elevator/patterns.xml +54 -3
- package/dist/specs/components/elevator/usage.xml +8 -5
- package/dist/specs/components/fieldset/patterns.xml +97 -3
- package/dist/specs/components/fieldset/usage.xml +7 -5
- package/dist/specs/components/fit-text/patterns.xml +1 -4
- package/dist/specs/components/fit-text/props.xml +2 -2
- package/dist/specs/components/fit-text/usage.xml +8 -6
- package/dist/specs/components/glow/meta.xml +1 -1
- package/dist/specs/components/glow/patterns.xml +74 -3
- package/dist/specs/components/glow/props.xml +16 -16
- package/dist/specs/components/glow/usage.xml +8 -7
- package/dist/specs/components/grid/patterns.xml +88 -5
- package/dist/specs/components/grid/props.xml +23 -23
- package/dist/specs/components/grid/usage.xml +9 -5
- package/dist/specs/components/icon-button/patterns.xml +97 -6
- package/dist/specs/components/icon-button/props.xml +32 -32
- package/dist/specs/components/icon-button/usage.xml +11 -9
- package/dist/specs/components/linear-progress/patterns.xml +58 -3
- package/dist/specs/components/linear-progress/props.xml +6 -6
- package/dist/specs/components/linear-progress/usage.xml +9 -8
- package/dist/specs/components/masonry/patterns.xml +68 -5
- package/dist/specs/components/masonry/props.xml +2 -2
- package/dist/specs/components/masonry/usage.xml +9 -4
- package/dist/specs/components/menu/patterns.xml +179 -15
- package/dist/specs/components/menu/usage.xml +8 -7
- package/dist/specs/components/meter/patterns.xml +49 -3
- package/dist/specs/components/meter/props.xml +6 -6
- package/dist/specs/components/meter/usage.xml +10 -7
- package/dist/specs/components/popover/patterns.xml +118 -9
- package/dist/specs/components/popover/props.xml +2 -2
- package/dist/specs/components/popover/usage.xml +9 -8
- package/dist/specs/components/progressive-blur/meta.xml +1 -1
- package/dist/specs/components/progressive-blur/patterns.xml +1 -4
- package/dist/specs/components/progressive-blur/props.xml +2 -2
- package/dist/specs/components/progressive-blur/usage.xml +7 -6
- package/dist/specs/components/radio/patterns.xml +55 -5
- package/dist/specs/components/radio/props.xml +8 -8
- package/dist/specs/components/radio/usage.xml +9 -6
- package/dist/specs/components/select/patterns.xml +124 -8
- package/dist/specs/components/select/props.xml +18 -18
- package/dist/specs/components/select/usage.xml +11 -10
- package/dist/specs/components/separator/patterns.xml +121 -3
- package/dist/specs/components/separator/props.xml +4 -4
- package/dist/specs/components/separator/usage.xml +8 -5
- package/dist/specs/components/shimmer/patterns.xml +23 -3
- package/dist/specs/components/shimmer/props.xml +8 -8
- package/dist/specs/components/shimmer/usage.xml +7 -5
- package/dist/specs/components/skeleton/patterns.xml +172 -4
- package/dist/specs/components/skeleton/props.xml +14 -14
- package/dist/specs/components/skeleton/usage.xml +11 -7
- package/dist/specs/components/slider/patterns.xml +111 -3
- package/dist/specs/components/slider/props.xml +10 -10
- package/dist/specs/components/slider/usage.xml +11 -5
- package/dist/specs/components/spinner/patterns.xml +35 -3
- package/dist/specs/components/spinner/props.xml +2 -2
- package/dist/specs/components/spinner/usage.xml +8 -5
- package/dist/specs/components/stack/patterns.xml +359 -3
- package/dist/specs/components/stack/props.xml +24 -22
- package/dist/specs/components/stack/usage.xml +16 -10
- package/dist/specs/components/static-noise/meta.xml +1 -1
- package/dist/specs/components/static-noise/patterns.xml +20 -3
- package/dist/specs/components/static-noise/usage.xml +5 -5
- package/dist/specs/components/surface/patterns.xml +188 -3
- package/dist/specs/components/surface/props.xml +26 -26
- package/dist/specs/components/surface/usage.xml +15 -12
- package/dist/specs/components/switch/patterns.xml +73 -3
- package/dist/specs/components/switch/props.xml +12 -12
- package/dist/specs/components/switch/usage.xml +10 -5
- package/dist/specs/components/tabs/patterns.xml +111 -6
- package/dist/specs/components/tabs/props.xml +2 -2
- package/dist/specs/components/tabs/usage.xml +7 -3
- package/dist/specs/components/text/patterns.xml +97 -3
- package/dist/specs/components/text/props.xml +48 -43
- package/dist/specs/components/text/usage.xml +11 -4
- package/dist/specs/components/textarea/patterns.xml +49 -3
- package/dist/specs/components/textarea/props.xml +7 -6
- package/dist/specs/components/textarea/usage.xml +8 -5
- package/dist/specs/components/textfield/patterns.xml +163 -3
- package/dist/specs/components/textfield/props.xml +12 -11
- package/dist/specs/components/textfield/usage.xml +9 -3
- package/dist/specs/components/title/patterns.xml +74 -3
- package/dist/specs/components/title/props.xml +48 -43
- package/dist/specs/components/title/usage.xml +10 -7
- package/dist/specs/components/toast/patterns.xml +85 -8
- package/dist/specs/components/toast/usage.xml +8 -5
- package/dist/specs/components/toggle-button/patterns.xml +101 -3
- package/dist/specs/components/toggle-button/props.xml +16 -16
- package/dist/specs/components/toggle-button/usage.xml +9 -5
- package/dist/specs/components/toggle-group/patterns.xml +34 -5
- package/dist/specs/components/toggle-group/usage.xml +9 -5
- package/dist/specs/components/tooltip/patterns.xml +110 -6
- package/dist/specs/components/tooltip/props.xml +2 -2
- package/dist/specs/components/tooltip/usage.xml +8 -5
- package/dist/specs/components/typewriter/patterns.xml +18 -3
- package/dist/specs/components/typewriter/props.xml +2 -2
- package/dist/specs/components/typewriter/usage.xml +9 -8
- package/dist/specs/foundation/attributes.xml +67 -37
- package/dist/specs/foundation/bootstrap.xml +6 -6
- package/dist/specs/foundation/elevation.xml +51 -3
- package/dist/specs/foundation/modules.xml +117 -40
- package/dist/specs/foundation/theme-topics.xml +62 -27
- package/dist/specs/foundation/toggles.xml +2 -2
- package/dist/specs/index.xml +42 -6
- package/dist/specs/patterns/card-grid.xml +35 -0
- package/dist/specs/patterns/compose-layout-first.xml +32 -0
- package/dist/specs/patterns/equal-width-actions.xml +22 -0
- package/dist/specs/patterns/page-chrome.xml +34 -0
- package/dist/specs/patterns/settings-panel.xml +30 -0
- package/dist/specs/patterns/settings-row.xml +9 -7
- package/dist/specs/patterns/stack-as-surface.xml +37 -0
- package/package.json +9 -9
|
@@ -1,7 +1,87 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<patterns surface="checkbox">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
<!-- Sources: viraui-app / design-kitchen preview-grid — cleaned (no handlers, no app state). -->
|
|
4
|
+
|
|
5
|
+
<example title="Notifications list (select-all)">
|
|
6
|
+
<tsx><![CDATA[
|
|
7
|
+
<Surface overflow="hidden" border="all" color={1} radius="l">
|
|
8
|
+
<Stack rowGap="m">
|
|
9
|
+
<Stack rowGap="m" hPadding="m" vPadding="m">
|
|
10
|
+
<Stack rowGap="xs" vPadding={[0, 'm']}>
|
|
11
|
+
<Title size="6" render={<h2 />}>
|
|
12
|
+
Notifications
|
|
13
|
+
</Title>
|
|
14
|
+
<Text size="s" tone="muted">
|
|
15
|
+
Choose what you want to be notified about.
|
|
16
|
+
</Text>
|
|
17
|
+
</Stack>
|
|
18
|
+
|
|
19
|
+
<Field.Root name="select-all-notifications">
|
|
20
|
+
<Checkbox checked label="Select all" />
|
|
21
|
+
</Field.Root>
|
|
22
|
+
|
|
23
|
+
<Field.Root name="transaction-alerts">
|
|
24
|
+
<Checkbox
|
|
25
|
+
checked
|
|
26
|
+
description="Deposits, withdrawals, and transfers."
|
|
27
|
+
label="Transaction alerts"
|
|
28
|
+
/>
|
|
29
|
+
</Field.Root>
|
|
30
|
+
|
|
31
|
+
<Field.Root name="security-alerts">
|
|
32
|
+
<Checkbox
|
|
33
|
+
checked
|
|
34
|
+
description="Login attempts and account changes."
|
|
35
|
+
label="Security alerts"
|
|
36
|
+
/>
|
|
37
|
+
</Field.Root>
|
|
38
|
+
|
|
39
|
+
<Field.Root name="goal-milestones">
|
|
40
|
+
<Checkbox
|
|
41
|
+
description="Updates at 25%, 50%, 75%, and 100%."
|
|
42
|
+
label="Goal milestones"
|
|
43
|
+
/>
|
|
44
|
+
</Field.Root>
|
|
45
|
+
|
|
46
|
+
<Field.Root name="market-updates">
|
|
47
|
+
<Checkbox
|
|
48
|
+
description="Daily portfolio summary and price alerts."
|
|
49
|
+
label="Market updates"
|
|
50
|
+
/>
|
|
51
|
+
</Field.Root>
|
|
52
|
+
</Stack>
|
|
53
|
+
|
|
54
|
+
<Surface color={2} hPadding="l" vPadding="m">
|
|
55
|
+
<Button>Save Preferences</Button>
|
|
56
|
+
</Surface>
|
|
57
|
+
</Stack>
|
|
58
|
+
</Surface>
|
|
59
|
+
]]></tsx>
|
|
60
|
+
<notes>From `editor/preview-grid/blocks/notifications`. Each option is its own `Field.Root` + `Checkbox` (label/description on the control). Parent can drive `indeterminate` on a select-all row — drop handlers from the hint.</notes>
|
|
61
|
+
</example>
|
|
62
|
+
|
|
63
|
+
<example title="Form footer boolean">
|
|
64
|
+
<tsx><![CDATA[
|
|
65
|
+
<Stack rowGap="l" hPadding="m" vPadding="m">
|
|
66
|
+
<Textfield label="Street address" required />
|
|
67
|
+
<Textfield label="Apt / Suite" />
|
|
68
|
+
|
|
69
|
+
<Field.Root name="save-as-default">
|
|
70
|
+
<Checkbox checked label="Save as default address" />
|
|
71
|
+
</Field.Root>
|
|
72
|
+
</Stack>
|
|
73
|
+
]]></tsx>
|
|
74
|
+
<notes>From `editor/preview-grid/blocks/shipping-address`. Standalone boolean under fields — wrap in `Field.Root`; no Fieldset needed without a shared legend.</notes>
|
|
75
|
+
</example>
|
|
76
|
+
|
|
77
|
+
<example title="Disabled on nested surface">
|
|
78
|
+
<tsx><![CDATA[
|
|
79
|
+
<Surface border="all" color={1} hPadding="s" radius="auto" vPadding="s">
|
|
80
|
+
<Field.Root disabled name="send-notifications">
|
|
81
|
+
<Checkbox checked disabled label="Send notifications" />
|
|
82
|
+
</Field.Root>
|
|
83
|
+
</Surface>
|
|
84
|
+
]]></tsx>
|
|
85
|
+
<notes>From `editor/preview-grid/blocks/disabled-surface-contrast`. Disable via `Field.Root` and/or `Checkbox` `disabled` so contrast holds on nested Surface colors.</notes>
|
|
6
86
|
</example>
|
|
7
87
|
</patterns>
|
|
@@ -30,19 +30,19 @@
|
|
|
30
30
|
<prop name="vPadding" kind="react">
|
|
31
31
|
<description>Sets block padding using one token for both sides or a `[start, end]` tuple.</description>
|
|
32
32
|
</prop>
|
|
33
|
-
<
|
|
33
|
+
<prop name="background" kind="css">
|
|
34
34
|
<description>Checkbox control background color.</description>
|
|
35
|
-
</
|
|
36
|
-
<
|
|
35
|
+
</prop>
|
|
36
|
+
<prop name="border-color" kind="css">
|
|
37
37
|
<description>Checkbox control border color; invalid and checked states override.</description>
|
|
38
|
-
</
|
|
39
|
-
<
|
|
38
|
+
</prop>
|
|
39
|
+
<prop name="indicator-color" kind="css">
|
|
40
40
|
<description>Checkbox check/minus indicator color.</description>
|
|
41
|
-
</
|
|
42
|
-
<
|
|
41
|
+
</prop>
|
|
42
|
+
<prop name="radius" kind="css">
|
|
43
43
|
<description>Checkbox control corner radius.</description>
|
|
44
|
-
</
|
|
45
|
-
<
|
|
44
|
+
</prop>
|
|
45
|
+
<prop name="size" kind="css">
|
|
46
46
|
<description>Checkbox control box size; size presets adjust footprint and radius.</description>
|
|
47
|
-
</
|
|
47
|
+
</prop>
|
|
48
48
|
</props>
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<usage surface="checkbox">
|
|
3
|
-
<do>
|
|
3
|
+
<do>Standalone boolean under form fields — wrap each Checkbox in Field.Root; put label/description on Checkbox (no Fieldset without a shared legend)</do>
|
|
4
|
+
<do>Form footers with Textfield rows in a Stack — Field.Root > Checkbox for “save as default” style booleans</do>
|
|
5
|
+
<do>Multi-select with shared legend or group copy — Field.Root > Fieldset render={<CheckboxGroup />} with Checkbox children</do>
|
|
4
6
|
<do>CheckboxGroup alone inside Field.Root when each Checkbox has its own label and no shared group legend is needed</do>
|
|
5
|
-
<do>
|
|
6
|
-
<do>
|
|
7
|
-
<dont>Rendering a checkbox without label and without aria-label
|
|
8
|
-
<dont>Using Checkbox without Field.Root for standalone validated fields</dont>
|
|
9
|
-
<dont>Expecting description to stay visible when invalid without an error message</dont>
|
|
7
|
+
<do>Settings / notification lists inside Surface + Stack — one Field.Root + Checkbox per row; drive select-all with Base UI `indeterminate` when needed</do>
|
|
8
|
+
<do>Settings row without built-in copy — Stack `direction="row"` `hAlign="space-between"` + Text + Checkbox (`aria-label` if unlabeled)</do>
|
|
9
|
+
<dont>Rendering a checkbox without `label` and without `aria-label`</dont>
|
|
10
|
+
<dont>Using Checkbox without Field.Root for standalone named or validated fields</dont>
|
|
11
|
+
<dont>Expecting `description` to stay visible when invalid without an `error` message</dont>
|
|
12
|
+
<dont>Mutually exclusive options — use Radio + RadioGroup</dont>
|
|
13
|
+
<dont>Putting group legend, description, or validation on CheckboxGroup props — use Field.Root and Fieldset</dont>
|
|
14
|
+
<dont>Assuming Fieldset is mandatory for every CheckboxGroup — add it only for shared legend or group copy</dont>
|
|
10
15
|
</usage>
|
|
@@ -1,7 +1,78 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<patterns surface="chip">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
<!-- Sources: viraui-app/components — cleaned (no handlers, no app-only chrome). Chip = non-interactive label; actions use Button/IconButton. -->
|
|
4
|
+
|
|
5
|
+
<example title="Status row with addons">
|
|
6
|
+
<tsx><![CDATA[
|
|
7
|
+
<Stack columnGap="s" rowGap="s" direction="row" wrap>
|
|
8
|
+
<Chip variant="green">Live</Chip>
|
|
9
|
+
<Chip variant="blue" addon={<Spinner size="s" />} addonPosition="end">
|
|
10
|
+
Deploying
|
|
11
|
+
</Chip>
|
|
12
|
+
<Chip variant="yellow">Queued</Chip>
|
|
13
|
+
<Chip variant="red" addon={<Xmark size={14} />}>
|
|
14
|
+
Failed
|
|
15
|
+
</Chip>
|
|
16
|
+
<Chip variant="salmon">Rolled back</Chip>
|
|
17
|
+
</Stack>
|
|
18
|
+
]]></tsx>
|
|
19
|
+
<notes>From `editor/preview-grid/blocks/environment-variables` deployStatuses. Highlight variants + optional `addon` / `addonPosition`. Non-interactive — no click handlers.</notes>
|
|
20
|
+
</example>
|
|
21
|
+
|
|
22
|
+
<example title="Pending status with mark">
|
|
23
|
+
<tsx><![CDATA[
|
|
24
|
+
<Stack rowGap="m" hPadding="m" vPadding="m">
|
|
25
|
+
<Stack rowGap="s">
|
|
26
|
+
<Text size="s" tone="muted">
|
|
27
|
+
Claimable Balance
|
|
28
|
+
</Text>
|
|
29
|
+
<Title size="1" lineHeight="s">
|
|
30
|
+
$0.00
|
|
31
|
+
</Title>
|
|
32
|
+
</Stack>
|
|
33
|
+
<Chip variant="outline" addon={<CircleCross size={8} color="var(--highlight-yellow)" />}>
|
|
34
|
+
Pending Setup
|
|
35
|
+
</Chip>
|
|
36
|
+
</Stack>
|
|
37
|
+
]]></tsx>
|
|
38
|
+
<notes>From `editor/preview-grid/blocks/claimable-balance`. Outline Chip + small leading status mark.</notes>
|
|
39
|
+
</example>
|
|
40
|
+
|
|
41
|
+
<example title="Metadata tag on row">
|
|
42
|
+
<tsx><![CDATA[
|
|
43
|
+
<Stack direction="row" vAlign="center" columnGap="m" hAlign="space-between">
|
|
44
|
+
<Stack data-grow rowGap="s">
|
|
45
|
+
<Text weight="semibold">Acme Corp</Text>
|
|
46
|
+
<Text family="mono" size="xs" tone="muted">
|
|
47
|
+
ACME · NASDAQ
|
|
48
|
+
</Text>
|
|
49
|
+
</Stack>
|
|
50
|
+
<Stack direction="row" data-grow="false" columnGap="m" vAlign="center">
|
|
51
|
+
<Chip variant="outline">Stock</Chip>
|
|
52
|
+
<Text weight="semibold" size="s">
|
|
53
|
+
$184.20
|
|
54
|
+
</Text>
|
|
55
|
+
</Stack>
|
|
56
|
+
</Stack>
|
|
57
|
+
]]></tsx>
|
|
58
|
+
<notes>From `editor/preview-grid/blocks/holdings` HoldingRow. Outline Chip as kind/metadata beside values.</notes>
|
|
59
|
+
</example>
|
|
60
|
+
|
|
61
|
+
<example title="Centered caption chip">
|
|
62
|
+
<tsx><![CDATA[
|
|
63
|
+
<Stack hAlign="center" vPadding={['l', 's']} expandChildren>
|
|
64
|
+
<Chip variant="blue">+3000 more icons</Chip>
|
|
65
|
+
</Stack>
|
|
66
|
+
]]></tsx>
|
|
67
|
+
<notes>From `editor/preview-grid/blocks/action-toolbar` footer. Single highlight Chip as caption under a grid.</notes>
|
|
68
|
+
</example>
|
|
69
|
+
|
|
70
|
+
<example title="Button addon (inverted)">
|
|
71
|
+
<tsx><![CDATA[
|
|
72
|
+
<Button variant="primary" addon={<Chip data-mode="inverted">New</Chip>} addonPosition="end" pill>
|
|
73
|
+
Notifications
|
|
74
|
+
</Button>
|
|
75
|
+
]]></tsx>
|
|
76
|
+
<notes>Cross-ref button `usage.xml` / `props.xml`. Primary Chip inside primary Button needs `data-mode="inverted"` so fill contrasts.</notes>
|
|
6
77
|
</example>
|
|
7
78
|
</patterns>
|
|
@@ -25,25 +25,25 @@
|
|
|
25
25
|
<prop name="variant" kind="react">
|
|
26
26
|
<description>Selects the visual treatment for the chip.</description>
|
|
27
27
|
</prop>
|
|
28
|
-
<
|
|
28
|
+
<prop name="background" kind="css">
|
|
29
29
|
<description>Chip fill; variant presets via data attributes.</description>
|
|
30
|
-
</
|
|
31
|
-
<
|
|
30
|
+
</prop>
|
|
31
|
+
<prop name="border-color" kind="css">
|
|
32
32
|
<description>Chip border color.</description>
|
|
33
|
-
</
|
|
34
|
-
<
|
|
33
|
+
</prop>
|
|
34
|
+
<prop name="color" kind="css">
|
|
35
35
|
<description>Chip label and icon color.</description>
|
|
36
|
-
</
|
|
37
|
-
<
|
|
36
|
+
</prop>
|
|
37
|
+
<prop name="color-bg-opacity" kind="css">
|
|
38
38
|
<description>Highlight variant background opacity mix.</description>
|
|
39
|
-
</
|
|
40
|
-
<
|
|
39
|
+
</prop>
|
|
40
|
+
<prop name="color-border-opacity" kind="css">
|
|
41
41
|
<description>Highlight variant border opacity mix.</description>
|
|
42
|
-
</
|
|
43
|
-
<
|
|
42
|
+
</prop>
|
|
43
|
+
<prop name="height" kind="css">
|
|
44
44
|
<description>Fixed chip block size.</description>
|
|
45
|
-
</
|
|
46
|
-
<
|
|
45
|
+
</prop>
|
|
46
|
+
<prop name="icon-size" kind="css">
|
|
47
47
|
<description>Decorative addon icon size.</description>
|
|
48
|
-
</
|
|
48
|
+
</prop>
|
|
49
49
|
</props>
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<usage surface="chip">
|
|
3
3
|
<do>Short, non-interactive labels that need a compact pill treatment</do>
|
|
4
|
-
<do>Metadata, category, status, or inline tag-like presentation</do>
|
|
5
|
-
<do>Color-coded
|
|
6
|
-
<do>
|
|
7
|
-
<
|
|
8
|
-
<
|
|
4
|
+
<do>Metadata, category, status, or inline tag-like presentation in Stack rows with Text / Title</do>
|
|
5
|
+
<do>Color-coded status via highlight `variant` values (`green`, `red`, `yellow`, …) or `primary` / `secondary` / `outline`</do>
|
|
6
|
+
<do>Primary Chip as Button `addon` — set `data-mode="inverted"` on the Chip when the Button is primary so fills contrast</do>
|
|
7
|
+
<do>Equal-width Chip clusters: wrap in Stack with `fullWidth` and/or `expandChildren` — never per-Chip width CSS</do>
|
|
8
|
+
<do>Polymorphic label root via `render` (default `div`)</do>
|
|
9
|
+
<dont>Using Chip as a button replacement for clickable actions — use Button or IconButton</dont>
|
|
10
|
+
<dont>Expecting `addonPosition` to have any effect when `addon` is omitted</dont>
|
|
9
11
|
<dont>Introducing custom size variants instead of the fixed compact height</dont>
|
|
10
|
-
<dont>Re-adding a one-off destructive variant instead of
|
|
12
|
+
<dont>Re-adding a one-off destructive variant instead of `variant="red"`</dont>
|
|
13
|
+
<dont>Primary Chip inside a primary Button without `data-mode="inverted"` — chip fill matches the button and disappears</dont>
|
|
14
|
+
<dont>Inventing `width: 100%` / `w-full` CSS on Chip when a parent Stack `fullWidth` / `expandChildren` can own the fill</dont>
|
|
11
15
|
</usage>
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<patterns surface="clamp-text">
|
|
3
|
-
|
|
4
|
-
<tsx><![CDATA[<ClampText>…</ClampText>]]></tsx>
|
|
5
|
-
<notes>Public assembly hint from legacy guide; not API authority.</notes>
|
|
6
|
-
</example>
|
|
3
|
+
<!-- Skip: zero viraui-app and design-kitchen usage. Package stories cover Text/Title compose; no consumer extract to promote. -->
|
|
7
4
|
</patterns>
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
<prop name="rows" kind="react">
|
|
22
22
|
<description>Sets how many lines of text remain visible before truncation.</description>
|
|
23
23
|
</prop>
|
|
24
|
-
<
|
|
24
|
+
<prop name="rows" kind="css">
|
|
25
25
|
<description>WebKit line-clamp row count on the root.</description>
|
|
26
|
-
</
|
|
26
|
+
</prop>
|
|
27
27
|
</props>
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<usage surface="clamp-text">
|
|
3
|
-
<do>Single- or multi-line ellipsis
|
|
4
|
-
<do>
|
|
5
|
-
<do>
|
|
6
|
-
<
|
|
7
|
-
<dont>
|
|
3
|
+
<do>Single- or multi-line ellipsis — set `rows` (default 1); pass `inline` for inline `-webkit-inline-box`</do>
|
|
4
|
+
<do>Compose typography through `render`: ClampText `render={<Text tone="muted" size="s" />}` or `render={<Title size=… render={<h* />} />}`</do>
|
|
5
|
+
<do>Constrain width with parent Surface / Stack (`fullWidth` / `maxWidth` on Text/Title) — ClampText only owns line count</do>
|
|
6
|
+
<do>Pick ClampText when overflow must truncate; FitText when short copy must scale to fill width; Title alone when no clamp/fit needed</do>
|
|
7
|
+
<dont>Using ClampText as a heading primitive without Title via `render`</dont>
|
|
8
|
+
<dont>Expecting children or font size to drive truncation — `rows` sets visible lines</dont>
|
|
9
|
+
<dont>Using ClampText for fit-to-width scaling — that is FitText</dont>
|
|
10
|
+
<dont>Relying on clamped copy alone for critical instructions or legal text</dont>
|
|
8
11
|
</usage>
|
|
@@ -1,19 +1,140 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<patterns surface="dialog">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
<
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
<notes>
|
|
3
|
+
<!-- Sources: viraui-app/components + design-kitchen preview-grid — cleaned (no handlers, no portal/preview chrome). -->
|
|
4
|
+
|
|
5
|
+
<example title="App shell indent providers">
|
|
6
|
+
<tsx><![CDATA[
|
|
7
|
+
<Dialog.Provider>
|
|
8
|
+
<Dialog.IndentBackground>
|
|
9
|
+
<Dialog.Indent>
|
|
10
|
+
<Tooltip.Provider>
|
|
11
|
+
{/* app tree */}
|
|
12
|
+
</Tooltip.Provider>
|
|
13
|
+
</Dialog.Indent>
|
|
14
|
+
</Dialog.IndentBackground>
|
|
15
|
+
</Dialog.Provider>
|
|
16
|
+
]]></tsx>
|
|
17
|
+
<notes>From `providers/providers` (+ preview `preview-providers`). Wrap shell once so sheets can indent the page. Portal/backdrop live inside `Dialog.Sheet` — not public parts.</notes>
|
|
18
|
+
</example>
|
|
19
|
+
|
|
20
|
+
<example title="Import preset form">
|
|
21
|
+
<tsx><![CDATA[
|
|
22
|
+
<Dialog>
|
|
23
|
+
<Dialog.Trigger
|
|
24
|
+
render={
|
|
25
|
+
<Button size="s" variant="secondary" addon={<FileArrowIn />}>
|
|
26
|
+
Import
|
|
27
|
+
</Button>
|
|
28
|
+
}
|
|
29
|
+
/>
|
|
30
|
+
<Dialog.Sheet
|
|
31
|
+
title="Import preset"
|
|
32
|
+
description="Paste preset code."
|
|
33
|
+
showCloseButton
|
|
34
|
+
headerAlign="center"
|
|
35
|
+
>
|
|
36
|
+
<Stack rowGap="m" hAlign="center" hPadding="m" vPadding={['s', 0]}>
|
|
37
|
+
<Textfield size={40} placeholder="Paste preset…" aria-label="Preset code" />
|
|
38
|
+
<Stack direction="row" hAlign="end" columnGap="s">
|
|
39
|
+
<Button>Apply</Button>
|
|
40
|
+
<Dialog.Close render={<Button variant="secondary">Cancel</Button>} />
|
|
41
|
+
</Stack>
|
|
42
|
+
</Stack>
|
|
43
|
+
</Dialog.Sheet>
|
|
44
|
+
</Dialog>
|
|
45
|
+
]]></tsx>
|
|
46
|
+
<notes>From `editor/import-preset-dialog`. Trigger + titled Sheet + body Stack + `Dialog.Close`. Drop open-state wiring.</notes>
|
|
47
|
+
</example>
|
|
48
|
+
|
|
49
|
+
<example title="Export sheet with snap points">
|
|
50
|
+
<tsx><![CDATA[
|
|
51
|
+
<Dialog open={true} snapPoints={[0.35, 1]} snapPoint={0.35}>
|
|
52
|
+
<Dialog.Trigger render={<Button size="l">Export</Button>} />
|
|
53
|
+
<Dialog.Sheet
|
|
54
|
+
title="Export theme"
|
|
55
|
+
description="Download or share your preset."
|
|
56
|
+
showCloseButton
|
|
57
|
+
headerAlign="center"
|
|
58
|
+
maxContentWidth="min(950px, 90vw)"
|
|
59
|
+
>
|
|
60
|
+
<Stack rowGap="m" hPadding="m" vPadding={['s', 0]}>
|
|
61
|
+
<Stack direction="row" hAlign="center" columnGap="m">
|
|
62
|
+
<Button size="l" addon={<FileDownload />}>
|
|
63
|
+
Download
|
|
64
|
+
</Button>
|
|
65
|
+
<ButtonLink size="l" variant="secondary" href="#">
|
|
66
|
+
Share
|
|
67
|
+
</ButtonLink>
|
|
68
|
+
<Button size="l" variant="secondary" addon={<Code2 />}>
|
|
69
|
+
View code
|
|
70
|
+
</Button>
|
|
71
|
+
</Stack>
|
|
72
|
+
<Stack vPadding={['s', '3xl']}>
|
|
73
|
+
<Textfield fitContent readOnly value="vira-preset_…" aria-label="Preset code" />
|
|
74
|
+
</Stack>
|
|
75
|
+
{/* optional Tabs preview below */}
|
|
76
|
+
</Stack>
|
|
77
|
+
</Dialog.Sheet>
|
|
78
|
+
</Dialog>
|
|
79
|
+
]]></tsx>
|
|
80
|
+
<notes>From `editor/export-dialog`. Snap points live on `Dialog` root; Sheet owns title/close. `open={true}` for demo structure only.</notes>
|
|
81
|
+
</example>
|
|
82
|
+
|
|
83
|
+
<example title="Adjust goal (nested sheet)">
|
|
84
|
+
<tsx><![CDATA[
|
|
85
|
+
<Dialog open={true}>
|
|
86
|
+
<Dialog.Trigger render={<Button>Adjust Goal</Button>} />
|
|
87
|
+
<Dialog.Sheet
|
|
88
|
+
headerAlign="center"
|
|
89
|
+
title="Move Goal"
|
|
90
|
+
description="Set your daily activity goal."
|
|
91
|
+
>
|
|
92
|
+
<Stack hAlign="center" rowGap="3xl" hPadding="l">
|
|
93
|
+
<Stack direction="row" hAlign="center" vAlign="center" columnGap="l" expandChildren>
|
|
94
|
+
<IconButton aria-label="Decrease goal" icon={<Minus />} size="l" variant="secondary" />
|
|
95
|
+
<Stack hAlign="center" rowGap="2xs">
|
|
96
|
+
<Title align="center" size="display" lineHeight="s" whiteSpace="nowrap">
|
|
97
|
+
350
|
|
98
|
+
</Title>
|
|
99
|
+
<Text align="center" size="xs" tone="muted">
|
|
100
|
+
CALORIES/DAY
|
|
101
|
+
</Text>
|
|
102
|
+
</Stack>
|
|
103
|
+
<IconButton aria-label="Increase goal" icon={<Plus />} size="l" variant="secondary" />
|
|
104
|
+
</Stack>
|
|
105
|
+
|
|
106
|
+
<Dialog>
|
|
107
|
+
<Dialog.Trigger render={<Button variant="secondary">Goal tips</Button>} />
|
|
108
|
+
<Dialog.Sheet
|
|
109
|
+
headerAlign="center"
|
|
110
|
+
title="Goal tips"
|
|
111
|
+
description="Nested sheet — Escape closes this layer only."
|
|
112
|
+
>
|
|
113
|
+
<Stack hPadding="l" rowGap="m">
|
|
114
|
+
<Surface color={2} radius="l" hPadding="m" vPadding="m">
|
|
115
|
+
<Text size="s" tone="muted">
|
|
116
|
+
Pick a target you can clear on ordinary weeks.
|
|
117
|
+
</Text>
|
|
118
|
+
</Surface>
|
|
119
|
+
<Dialog.Close render={<Button variant="secondary">Got it</Button>} />
|
|
120
|
+
</Stack>
|
|
121
|
+
</Dialog.Sheet>
|
|
122
|
+
</Dialog>
|
|
123
|
+
|
|
124
|
+
<Stack columnGap="s" direction="row" expandChildren>
|
|
125
|
+
<Dialog.Close render={<Button size="l">Submit</Button>} />
|
|
126
|
+
<Dialog.Close
|
|
127
|
+
render={
|
|
128
|
+
<Button size="l" variant="secondary">
|
|
129
|
+
Cancel
|
|
130
|
+
</Button>
|
|
131
|
+
}
|
|
132
|
+
/>
|
|
133
|
+
</Stack>
|
|
134
|
+
</Stack>
|
|
135
|
+
</Dialog.Sheet>
|
|
136
|
+
</Dialog>
|
|
137
|
+
]]></tsx>
|
|
138
|
+
<notes>From preview-grid `daily-activity-goal`. Nest a second `Dialog` inside Sheet children for drill-down. Drop Meter/Beam kitchen chrome from this hint.</notes>
|
|
18
139
|
</example>
|
|
19
140
|
</patterns>
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
<prop name="Sheet.title" kind="react">
|
|
44
44
|
<description>Accessible dialog title rendered as the modal heading.</description>
|
|
45
45
|
</prop>
|
|
46
|
-
<
|
|
46
|
+
<prop name="max-block-size" kind="css">
|
|
47
47
|
<description>Max block size of Dialog.Sheet popup root.</description>
|
|
48
|
-
</
|
|
48
|
+
</prop>
|
|
49
49
|
</props>
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<usage surface="dialog">
|
|
3
|
-
<do>
|
|
4
|
-
<do>
|
|
5
|
-
<do>Bottom
|
|
6
|
-
<do>Drill-down
|
|
7
|
-
<do>App-shell indent
|
|
8
|
-
<do>Custom portal host (iframe preview, shadow root, or app overlay root) via `container` on
|
|
3
|
+
<do>Page-blocking edge sheets for focused tasks, confirmations, or short forms — not anchored hints (Popover) or command lists (Menu)</do>
|
|
4
|
+
<do>Compose `Dialog.Trigger` (`render` Button/IconButton) + titled `Dialog.Sheet` + body Stack (Textfield, Button, Tabs, …) + `Dialog.Close` for footer actions</do>
|
|
5
|
+
<do>Bottom-sheet snap/swipe: pass `snapPoints`, `snapPoint`/`onSnapPointChange`, or `defaultSnapPoint` on `Dialog` root</do>
|
|
6
|
+
<do>Drill-down flows by nesting another `Dialog` inside `Dialog.Sheet` children (Escape closes the inner layer only)</do>
|
|
7
|
+
<do>App-shell indent: wrap page once in `Dialog.Provider`, `Dialog.IndentBackground`, and `Dialog.Indent`</do>
|
|
8
|
+
<do>Custom portal host (iframe preview, shadow root, or app overlay root) via `container` on `Dialog.Sheet`</do>
|
|
9
9
|
<dont>Opening a sheet without `title` copy for assistive technologies</dont>
|
|
10
10
|
<dont>Relying only on backdrop press or swipe when a footer action is the primary close path</dont>
|
|
11
|
-
<dont>
|
|
11
|
+
<dont>Expecting public Portal / Backdrop / Viewport / Popup / Title / Description parts — they live inside `Dialog.Sheet`</dont>
|
|
12
|
+
<dont>Using Dialog for small anchored panels (Popover) or action menus (Menu)</dont>
|
|
13
|
+
<dont>Using Dialog for centered non-edge modals that should not slide from the screen edge</dont>
|
|
12
14
|
</usage>
|
|
@@ -1,7 +1,58 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<patterns surface="elevator">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
<!-- Sources: viraui-app/components — cleaned (no handlers, no i18n, no app-only chrome). -->
|
|
4
|
+
|
|
5
|
+
<example title="Elevated placeholder card">
|
|
6
|
+
<tsx><![CDATA[
|
|
7
|
+
<Elevator resting={1}>
|
|
8
|
+
<Surface border="all" overflow="hidden" radius="l">
|
|
9
|
+
<Stack hPadding="m" rowGap="s" vPadding="m">
|
|
10
|
+
<Skeleton animate={false} aria-hidden height="8rem" radius="m" width="100%" />
|
|
11
|
+
<Skeleton animate={false} aria-hidden height="1rem" radius="full" width="70%" />
|
|
12
|
+
<Skeleton animate={false} aria-hidden height="0.75rem" radius="m" width="45%" />
|
|
13
|
+
</Stack>
|
|
14
|
+
</Surface>
|
|
15
|
+
</Elevator>
|
|
16
|
+
]]></tsx>
|
|
17
|
+
<notes>From `prompts/prompts-info-state` PlaceholderCard. Elevator merges elevation hooks onto the Surface root — no extra wrapper DOM for shadow.</notes>
|
|
18
|
+
</example>
|
|
19
|
+
|
|
20
|
+
<example title="Elevated card wall cell">
|
|
21
|
+
<tsx><![CDATA[
|
|
22
|
+
<Elevator resting={1}>
|
|
23
|
+
<Surface border="all" hoverColor={3} color={2} radius="m">
|
|
24
|
+
<Stack expandChildren hPadding="l" vPadding="l" rowGap="s">
|
|
25
|
+
<Title size="5" render={<h3 />}>
|
|
26
|
+
Atlas
|
|
27
|
+
</Title>
|
|
28
|
+
<Text tone="muted" size="s">
|
|
29
|
+
Short block for baseline column packing.
|
|
30
|
+
</Text>
|
|
31
|
+
</Stack>
|
|
32
|
+
</Surface>
|
|
33
|
+
</Elevator>
|
|
34
|
+
]]></tsx>
|
|
35
|
+
<notes>Same compose shape as Grid/Masonry story cards and the prompts backdrop tiles. Resting elevation on Surface; hoverColor is Surface chrome, not Elevator hover.</notes>
|
|
36
|
+
</example>
|
|
37
|
+
|
|
38
|
+
<example title="Hover lift on Surface">
|
|
39
|
+
<tsx><![CDATA[
|
|
40
|
+
<Elevator resting={1} hover={4}>
|
|
41
|
+
<Surface
|
|
42
|
+
color={1}
|
|
43
|
+
radius="m"
|
|
44
|
+
hPadding="l"
|
|
45
|
+
vPadding="l"
|
|
46
|
+
border="all"
|
|
47
|
+
render={<Stack rowGap="s" minWidth="14rem" />}
|
|
48
|
+
>
|
|
49
|
+
<Text size="m">Elevated card</Text>
|
|
50
|
+
<Text size="s" tone="muted">
|
|
51
|
+
Hover to lift from 1 to 4
|
|
52
|
+
</Text>
|
|
53
|
+
</Surface>
|
|
54
|
+
</Elevator>
|
|
55
|
+
]]></tsx>
|
|
56
|
+
<notes>Idiomatic Elevator + Surface pair (`hover` elevation). Prefer this over inventing box-shadow CSS. App uses resting-only on placeholders; hover lift matches docs/demo compose.</notes>
|
|
6
57
|
</example>
|
|
7
58
|
</patterns>
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<usage surface="elevator">
|
|
3
|
-
<do>
|
|
4
|
-
<do>
|
|
5
|
-
<do>
|
|
6
|
-
<
|
|
7
|
-
<dont>
|
|
3
|
+
<do>Wrap a Surface (with nested Stack/Title/Text) — Elevator merges `data-elevation` hooks onto the child root with no extra wrapper DOM</do>
|
|
4
|
+
<do>Prefer Elevator over inventing box-shadow CSS; Surface has no `elevation` prop</do>
|
|
5
|
+
<do>Set `resting` and optional `hover` for animated lift on interactive cards</do>
|
|
6
|
+
<do>Use `getElevationProps` when you need the same `data-elevation` / style mapping without the Elevator component</do>
|
|
7
|
+
<dont>Passing `elevation={…}` on Surface — wrap with Elevator or spread `getElevationProps`</dont>
|
|
8
|
+
<dont>Hand-authoring parallel elevation shadows instead of preflight `data-elevation` hooks</dont>
|
|
9
|
+
<dont>Wrapping invalid or non-element nodes expecting elevation — only valid element children receive merged props</dont>
|
|
10
|
+
<dont>Overwriting child `transition` shorthand without composing `box-shadow` when elevation hooks are present</dont>
|
|
8
11
|
</usage>
|