@viraui/react 2026.5.0 → 2026.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/catalog.json +5 -5
  2. package/dist/components/avatar/avatar.js +1 -1
  3. package/dist/components/stack/stack.d.ts +4 -1
  4. package/dist/components/tabs/tabs.css +1 -1
  5. package/dist/components/text/text.css +1 -1
  6. package/dist/components/text/text.d.ts +16 -5
  7. package/dist/components/text/text.js +2 -1
  8. package/dist/components/textfield/textfield.d.ts +1 -0
  9. package/dist/components/title/title.css +1 -1
  10. package/dist/components/title/title.d.ts +12 -2
  11. package/dist/components/title/title.js +2 -1
  12. package/dist/preflight.css +4 -1
  13. package/dist/specs/PROTOCOL.md +23 -19
  14. package/dist/specs/activity-hints.xml +18 -3
  15. package/dist/specs/components/accordion/patterns.xml +69 -5
  16. package/dist/specs/components/accordion/props.xml +4 -4
  17. package/dist/specs/components/accordion/usage.xml +8 -4
  18. package/dist/specs/components/annotate/patterns.xml +50 -3
  19. package/dist/specs/components/annotate/props.xml +22 -22
  20. package/dist/specs/components/annotate/usage.xml +7 -6
  21. package/dist/specs/components/autocomplete/patterns.xml +123 -7
  22. package/dist/specs/components/autocomplete/props.xml +14 -14
  23. package/dist/specs/components/autocomplete/usage.xml +11 -6
  24. package/dist/specs/components/avatar/patterns.xml +78 -3
  25. package/dist/specs/components/avatar/props.xml +8 -8
  26. package/dist/specs/components/avatar/usage.xml +9 -3
  27. package/dist/specs/components/avatar-group/patterns.xml +65 -3
  28. package/dist/specs/components/avatar-group/props.xml +8 -8
  29. package/dist/specs/components/avatar-group/usage.xml +10 -7
  30. package/dist/specs/components/badge/patterns.xml +57 -3
  31. package/dist/specs/components/badge/props.xml +8 -8
  32. package/dist/specs/components/badge/usage.xml +5 -3
  33. package/dist/specs/components/beam/meta.xml +1 -1
  34. package/dist/specs/components/beam/patterns.xml +68 -3
  35. package/dist/specs/components/beam/props.xml +22 -22
  36. package/dist/specs/components/beam/usage.xml +7 -7
  37. package/dist/specs/components/bleed/patterns.xml +54 -3
  38. package/dist/specs/components/bleed/props.xml +2 -2
  39. package/dist/specs/components/bleed/usage.xml +6 -3
  40. package/dist/specs/components/breakpoints/meta.xml +1 -1
  41. package/dist/specs/components/breakpoints/patterns.xml +1 -6
  42. package/dist/specs/components/breakpoints/props.xml +4 -2
  43. package/dist/specs/components/breakpoints/usage.xml +10 -2
  44. package/dist/specs/components/button/patterns.xml +124 -6
  45. package/dist/specs/components/button/props.xml +33 -32
  46. package/dist/specs/components/button/usage.xml +13 -13
  47. package/dist/specs/components/checkbox/patterns.xml +83 -3
  48. package/dist/specs/components/checkbox/props.xml +10 -10
  49. package/dist/specs/components/checkbox/usage.xml +11 -6
  50. package/dist/specs/components/chip/patterns.xml +74 -3
  51. package/dist/specs/components/chip/props.xml +14 -14
  52. package/dist/specs/components/chip/usage.xml +10 -6
  53. package/dist/specs/components/clamp-text/patterns.xml +1 -4
  54. package/dist/specs/components/clamp-text/props.xml +2 -2
  55. package/dist/specs/components/clamp-text/usage.xml +8 -5
  56. package/dist/specs/components/dialog/patterns.xml +136 -15
  57. package/dist/specs/components/dialog/props.xml +2 -2
  58. package/dist/specs/components/dialog/usage.xml +9 -7
  59. package/dist/specs/components/elevator/patterns.xml +54 -3
  60. package/dist/specs/components/elevator/usage.xml +8 -5
  61. package/dist/specs/components/fieldset/patterns.xml +97 -3
  62. package/dist/specs/components/fieldset/usage.xml +7 -5
  63. package/dist/specs/components/fit-text/patterns.xml +1 -4
  64. package/dist/specs/components/fit-text/props.xml +2 -2
  65. package/dist/specs/components/fit-text/usage.xml +8 -6
  66. package/dist/specs/components/glow/meta.xml +1 -1
  67. package/dist/specs/components/glow/patterns.xml +74 -3
  68. package/dist/specs/components/glow/props.xml +16 -16
  69. package/dist/specs/components/glow/usage.xml +8 -7
  70. package/dist/specs/components/grid/patterns.xml +88 -5
  71. package/dist/specs/components/grid/props.xml +23 -23
  72. package/dist/specs/components/grid/usage.xml +9 -5
  73. package/dist/specs/components/icon-button/patterns.xml +97 -6
  74. package/dist/specs/components/icon-button/props.xml +32 -32
  75. package/dist/specs/components/icon-button/usage.xml +11 -9
  76. package/dist/specs/components/linear-progress/patterns.xml +58 -3
  77. package/dist/specs/components/linear-progress/props.xml +6 -6
  78. package/dist/specs/components/linear-progress/usage.xml +9 -8
  79. package/dist/specs/components/masonry/patterns.xml +68 -5
  80. package/dist/specs/components/masonry/props.xml +2 -2
  81. package/dist/specs/components/masonry/usage.xml +9 -4
  82. package/dist/specs/components/menu/patterns.xml +179 -15
  83. package/dist/specs/components/menu/usage.xml +8 -7
  84. package/dist/specs/components/meter/patterns.xml +49 -3
  85. package/dist/specs/components/meter/props.xml +6 -6
  86. package/dist/specs/components/meter/usage.xml +10 -7
  87. package/dist/specs/components/popover/patterns.xml +118 -9
  88. package/dist/specs/components/popover/props.xml +2 -2
  89. package/dist/specs/components/popover/usage.xml +9 -8
  90. package/dist/specs/components/progressive-blur/meta.xml +1 -1
  91. package/dist/specs/components/progressive-blur/patterns.xml +1 -4
  92. package/dist/specs/components/progressive-blur/props.xml +2 -2
  93. package/dist/specs/components/progressive-blur/usage.xml +7 -6
  94. package/dist/specs/components/radio/patterns.xml +55 -5
  95. package/dist/specs/components/radio/props.xml +8 -8
  96. package/dist/specs/components/radio/usage.xml +9 -6
  97. package/dist/specs/components/select/patterns.xml +124 -8
  98. package/dist/specs/components/select/props.xml +18 -18
  99. package/dist/specs/components/select/usage.xml +11 -10
  100. package/dist/specs/components/separator/patterns.xml +121 -3
  101. package/dist/specs/components/separator/props.xml +4 -4
  102. package/dist/specs/components/separator/usage.xml +8 -5
  103. package/dist/specs/components/shimmer/patterns.xml +23 -3
  104. package/dist/specs/components/shimmer/props.xml +8 -8
  105. package/dist/specs/components/shimmer/usage.xml +7 -5
  106. package/dist/specs/components/skeleton/patterns.xml +172 -4
  107. package/dist/specs/components/skeleton/props.xml +14 -14
  108. package/dist/specs/components/skeleton/usage.xml +11 -7
  109. package/dist/specs/components/slider/patterns.xml +111 -3
  110. package/dist/specs/components/slider/props.xml +10 -10
  111. package/dist/specs/components/slider/usage.xml +11 -5
  112. package/dist/specs/components/spinner/patterns.xml +35 -3
  113. package/dist/specs/components/spinner/props.xml +2 -2
  114. package/dist/specs/components/spinner/usage.xml +8 -5
  115. package/dist/specs/components/stack/patterns.xml +359 -3
  116. package/dist/specs/components/stack/props.xml +24 -22
  117. package/dist/specs/components/stack/usage.xml +16 -10
  118. package/dist/specs/components/static-noise/meta.xml +1 -1
  119. package/dist/specs/components/static-noise/patterns.xml +20 -3
  120. package/dist/specs/components/static-noise/usage.xml +5 -5
  121. package/dist/specs/components/surface/patterns.xml +188 -3
  122. package/dist/specs/components/surface/props.xml +26 -26
  123. package/dist/specs/components/surface/usage.xml +15 -12
  124. package/dist/specs/components/switch/patterns.xml +73 -3
  125. package/dist/specs/components/switch/props.xml +12 -12
  126. package/dist/specs/components/switch/usage.xml +10 -5
  127. package/dist/specs/components/tabs/patterns.xml +111 -6
  128. package/dist/specs/components/tabs/props.xml +2 -2
  129. package/dist/specs/components/tabs/usage.xml +7 -3
  130. package/dist/specs/components/text/patterns.xml +97 -3
  131. package/dist/specs/components/text/props.xml +48 -43
  132. package/dist/specs/components/text/usage.xml +11 -4
  133. package/dist/specs/components/textarea/patterns.xml +49 -3
  134. package/dist/specs/components/textarea/props.xml +7 -6
  135. package/dist/specs/components/textarea/usage.xml +8 -5
  136. package/dist/specs/components/textfield/patterns.xml +163 -3
  137. package/dist/specs/components/textfield/props.xml +12 -11
  138. package/dist/specs/components/textfield/usage.xml +9 -3
  139. package/dist/specs/components/title/patterns.xml +74 -3
  140. package/dist/specs/components/title/props.xml +48 -43
  141. package/dist/specs/components/title/usage.xml +10 -7
  142. package/dist/specs/components/toast/patterns.xml +85 -8
  143. package/dist/specs/components/toast/usage.xml +8 -5
  144. package/dist/specs/components/toggle-button/patterns.xml +101 -3
  145. package/dist/specs/components/toggle-button/props.xml +16 -16
  146. package/dist/specs/components/toggle-button/usage.xml +9 -5
  147. package/dist/specs/components/toggle-group/patterns.xml +34 -5
  148. package/dist/specs/components/toggle-group/usage.xml +9 -5
  149. package/dist/specs/components/tooltip/patterns.xml +110 -6
  150. package/dist/specs/components/tooltip/props.xml +2 -2
  151. package/dist/specs/components/tooltip/usage.xml +8 -5
  152. package/dist/specs/components/typewriter/patterns.xml +18 -3
  153. package/dist/specs/components/typewriter/props.xml +2 -2
  154. package/dist/specs/components/typewriter/usage.xml +9 -8
  155. package/dist/specs/foundation/attributes.xml +67 -37
  156. package/dist/specs/foundation/bootstrap.xml +6 -6
  157. package/dist/specs/foundation/elevation.xml +51 -3
  158. package/dist/specs/foundation/modules.xml +117 -40
  159. package/dist/specs/foundation/theme-topics.xml +62 -27
  160. package/dist/specs/foundation/toggles.xml +2 -2
  161. package/dist/specs/index.xml +42 -6
  162. package/dist/specs/patterns/card-grid.xml +35 -0
  163. package/dist/specs/patterns/compose-layout-first.xml +32 -0
  164. package/dist/specs/patterns/equal-width-actions.xml +22 -0
  165. package/dist/specs/patterns/page-chrome.xml +34 -0
  166. package/dist/specs/patterns/settings-panel.xml +30 -0
  167. package/dist/specs/patterns/settings-row.xml +9 -7
  168. package/dist/specs/patterns/stack-as-surface.xml +37 -0
  169. package/package.json +2 -2
@@ -1,7 +1,87 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <patterns surface="checkbox">
3
- <example title="Checkbox structure">
4
- <tsx><![CDATA[<Checkbox label="…" />]]></tsx>
5
- <notes>Public assembly hint from legacy guide; not API authority.</notes>
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
- <css_var suffix="background">
33
+ <prop name="background" kind="css">
34
34
  <description>Checkbox control background color.</description>
35
- </css_var>
36
- <css_var suffix="border-color">
35
+ </prop>
36
+ <prop name="border-color" kind="css">
37
37
  <description>Checkbox control border color; invalid and checked states override.</description>
38
- </css_var>
39
- <css_var suffix="indicator-color">
38
+ </prop>
39
+ <prop name="indicator-color" kind="css">
40
40
  <description>Checkbox check/minus indicator color.</description>
41
- </css_var>
42
- <css_var suffix="radius">
41
+ </prop>
42
+ <prop name="radius" kind="css">
43
43
  <description>Checkbox control corner radius.</description>
44
- </css_var>
45
- <css_var suffix="size">
44
+ </prop>
45
+ <prop name="size" kind="css">
46
46
  <description>Checkbox control box size; size presets adjust footprint and radius.</description>
47
- </css_var>
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>Single boolean fields wrapped in Field.Root with optional label and helper text — no Fieldset required</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 &gt; Checkbox for “save as default” style booleans</do>
5
+ <do>Multi-select with shared legend or group copy — Field.Root &gt; Fieldset render={&lt;CheckboxGroup /&gt;} 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>Multi-select sets with shared legend or group copy — Field.Root &gt; Fieldset render={&lt;CheckboxGroup /&gt;} with Checkbox children</do>
6
- <do>Invalid and disabled states with Switch-parity focus treatment</do>
7
- <dont>Rendering a checkbox without label and without aria-label</dont>
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=&quot;row&quot;` `hAlign=&quot;space-between&quot;` + 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
- <example title="Chip structure">
4
- <tsx><![CDATA[<Chip>Label</Chip>]]></tsx>
5
- <notes>Public assembly hint from legacy guide; not API authority.</notes>
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
- <css_var suffix="background">
28
+ <prop name="background" kind="css">
29
29
  <description>Chip fill; variant presets via data attributes.</description>
30
- </css_var>
31
- <css_var suffix="border-color">
30
+ </prop>
31
+ <prop name="border-color" kind="css">
32
32
  <description>Chip border color.</description>
33
- </css_var>
34
- <css_var suffix="color">
33
+ </prop>
34
+ <prop name="color" kind="css">
35
35
  <description>Chip label and icon color.</description>
36
- </css_var>
37
- <css_var suffix="color-bg-opacity">
36
+ </prop>
37
+ <prop name="color-bg-opacity" kind="css">
38
38
  <description>Highlight variant background opacity mix.</description>
39
- </css_var>
40
- <css_var suffix="color-border-opacity">
39
+ </prop>
40
+ <prop name="color-border-opacity" kind="css">
41
41
  <description>Highlight variant border opacity mix.</description>
42
- </css_var>
43
- <css_var suffix="height">
42
+ </prop>
43
+ <prop name="height" kind="css">
44
44
  <description>Fixed chip block size.</description>
45
- </css_var>
46
- <css_var suffix="icon-size">
45
+ </prop>
46
+ <prop name="icon-size" kind="css">
47
47
  <description>Decorative addon icon size.</description>
48
- </css_var>
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 badges using the semantic highlight palette</do>
6
- <do>Polymorphic label content that should render as div by default or as another semantic tag through render</do>
7
- <dont>Using Chip as a button replacement for clickable actions</dont>
8
- <dont>Expecting addonPosition to have any effect when addon is omitted</dont>
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=&quot;inverted&quot;` 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 using the red highlight color</dont>
12
+ <dont>Re-adding a one-off destructive variant instead of `variant=&quot;red&quot;`</dont>
13
+ <dont>Primary Chip inside a primary Button without `data-mode=&quot;inverted&quot;` — 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
- <example title="ClampText structure">
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
- <css_var suffix="rows">
24
+ <prop name="rows" kind="css">
25
25
  <description>WebKit line-clamp row count on the root.</description>
26
- </css_var>
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 in constrained layouts</do>
4
- <do>Clamp Text or Title roots through render</do>
5
- <do>Inline or block clamped typography</do>
6
- <dont>Using ClampText as a heading primitive without Title render</dont>
7
- <dont>Expecting children-driven sizing instead of rows</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={&lt;Text tone=&quot;muted&quot; size=&quot;s&quot; /&gt;}` or `render={&lt;Title size=… render={&lt;h* /&gt;} /&gt;}`</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
- <example title="Dialog structure">
4
- <tsx><![CDATA[<Dialog.Provider>
5
- <Dialog.IndentBackground />
6
- <Dialog.Indent>
7
- …
8
- <Dialog>
9
- <Dialog.Trigger />
10
- <Dialog.Sheet title="…">
11
- …
12
- <Dialog.Close />
13
- </Dialog.Sheet>
14
- </Dialog>
15
- </Dialog.Indent>
16
- </Dialog.Provider>]]></tsx>
17
- <notes>Public assembly hint from legacy guide; not API authority.</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
- <css_var suffix="max-block-size">
46
+ <prop name="max-block-size" kind="css">
47
47
  <description>Max block size of Dialog.Sheet popup root.</description>
48
- </css_var>
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>Focused tasks or confirmations that interrupt the current page without navigation</do>
4
- <do>Short forms or read-only content that needs a modal layer above the app</do>
5
- <do>Bottom sheets where swipe dismissal or snap points are useful (pass `snapPoints`, `snapPoint`/`onSnapPointChange`, or `defaultSnapPoint` directly on `Dialog`)</do>
6
- <do>Drill-down sheet flows (for example settings sub-pages) by nesting a `Dialog` inside `Dialog.Sheet` children</do>
7
- <do>App-shell indent effects by wrapping page content 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 the portal-owning public part</do>
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>Using Dialog when a centered non-gesture modal is enough and a future Dialog primitive is available</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
- <example title="Elevator structure">
4
- <tsx><![CDATA[<Elevator resting={1}>…</Elevator>]]></tsx>
5
- <notes>Public assembly hint from legacy guide; not API authority.</notes>
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>Apply resting and optional hover elevation to existing elements</do>
4
- <do>Compose animated box-shadow transitions with data-elevation hooks</do>
5
- <do>Use getElevationProps when you need the mapping directly</do>
6
- <dont>Wrapping invalid or non-element nodes</dont>
7
- <dont>Overwriting child transition shorthand without composing box-shadow</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>