@viraui/react 2026.7.1 → 2026.9.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.
Files changed (223) hide show
  1. package/dist/catalog.json +9 -3
  2. package/dist/components/button/button.css +1 -1
  3. package/dist/components/direction-provider/index.d.ts +2 -0
  4. package/dist/components/direction-provider/index.js +2 -0
  5. package/dist/components/index.d.ts +1 -0
  6. package/dist/components/menu/menu-popup.d.ts +2 -2
  7. package/dist/components/menu/menu.css +1 -1
  8. package/dist/components/progressive-blur/progressive-blur.css +1 -1
  9. package/dist/components/prose/prose.d.ts +4 -1
  10. package/dist/components/select/select-group.js +1 -1
  11. package/dist/components/select/select.css +1 -1
  12. package/dist/components/select/select.js +4 -1
  13. package/dist/components/spinner/spinner.d.ts +6 -1
  14. package/dist/components/spinner/variants/arc.css +1 -0
  15. package/dist/components/spinner/variants/arc.d.ts +2 -0
  16. package/dist/components/spinner/variants/arc.js +19 -0
  17. package/dist/components/spinner/variants/arc.module.js +8 -0
  18. package/dist/components/spinner/variants/atom.css +1 -0
  19. package/dist/components/spinner/variants/atom.d.ts +6 -0
  20. package/dist/components/spinner/variants/atom.js +40 -0
  21. package/dist/components/spinner/variants/atom.module.js +8 -0
  22. package/dist/components/spinner/variants/blocks.css +1 -0
  23. package/dist/components/spinner/variants/blocks.d.ts +2 -0
  24. package/dist/components/spinner/variants/blocks.js +25 -0
  25. package/dist/components/spinner/variants/blocks.module.js +8 -0
  26. package/dist/components/spinner/variants/bouncing-dots.css +1 -0
  27. package/dist/components/spinner/variants/bouncing-dots.d.ts +2 -0
  28. package/dist/components/spinner/variants/bouncing-dots.js +21 -0
  29. package/dist/components/spinner/variants/bouncing-dots.module.js +8 -0
  30. package/dist/components/spinner/variants/cascade.css +1 -0
  31. package/dist/components/spinner/variants/cascade.d.ts +2 -0
  32. package/dist/components/spinner/variants/cascade.js +34 -0
  33. package/dist/components/spinner/variants/cascade.module.js +8 -0
  34. package/dist/components/spinner/variants/circular-dots.css +1 -0
  35. package/dist/components/spinner/variants/circular-dots.d.ts +2 -0
  36. package/dist/components/spinner/variants/circular-dots.js +26 -0
  37. package/dist/components/spinner/variants/circular-dots.module.js +8 -0
  38. package/dist/components/spinner/variants/classic-v2.css +1 -0
  39. package/dist/components/spinner/variants/classic-v2.d.ts +2 -0
  40. package/dist/components/spinner/variants/classic-v2.js +24 -0
  41. package/dist/components/spinner/variants/classic-v2.module.js +8 -0
  42. package/dist/components/spinner/variants/classic.css +1 -0
  43. package/dist/components/spinner/variants/classic.d.ts +2 -0
  44. package/dist/components/spinner/variants/classic.js +22 -0
  45. package/dist/components/spinner/variants/classic.module.js +8 -0
  46. package/dist/components/spinner/variants/clock.css +1 -0
  47. package/dist/components/spinner/variants/clock.d.ts +2 -0
  48. package/dist/components/spinner/variants/clock.js +18 -0
  49. package/dist/components/spinner/variants/clock.module.js +8 -0
  50. package/dist/components/spinner/variants/comet.css +1 -0
  51. package/dist/components/spinner/variants/comet.d.ts +2 -0
  52. package/dist/components/spinner/variants/comet.js +33 -0
  53. package/dist/components/spinner/variants/comet.module.js +10 -0
  54. package/dist/components/spinner/variants/compass.css +1 -0
  55. package/dist/components/spinner/variants/compass.d.ts +2 -0
  56. package/dist/components/spinner/variants/compass.js +16 -0
  57. package/dist/components/spinner/variants/compass.module.js +8 -0
  58. package/dist/components/spinner/variants/dual.css +1 -0
  59. package/dist/components/spinner/variants/dual.d.ts +2 -0
  60. package/dist/components/spinner/variants/dual.js +25 -0
  61. package/dist/components/spinner/variants/dual.module.js +10 -0
  62. package/dist/components/spinner/variants/eclipse.css +1 -0
  63. package/dist/components/spinner/variants/eclipse.d.ts +6 -0
  64. package/dist/components/spinner/variants/eclipse.js +21 -0
  65. package/dist/components/spinner/variants/eclipse.module.js +9 -0
  66. package/dist/components/spinner/variants/flip.css +1 -0
  67. package/dist/components/spinner/variants/flip.d.ts +2 -0
  68. package/dist/components/spinner/variants/flip.js +17 -0
  69. package/dist/components/spinner/variants/flip.module.js +8 -0
  70. package/dist/components/spinner/variants/gather.css +1 -0
  71. package/dist/components/spinner/variants/gather.d.ts +2 -0
  72. package/dist/components/spinner/variants/gather.js +50 -0
  73. package/dist/components/spinner/variants/gather.module.js +11 -0
  74. package/dist/components/spinner/variants/index.d.ts +9 -1
  75. package/dist/components/spinner/variants/index.js +96 -10
  76. package/dist/components/spinner/variants/leap.css +1 -0
  77. package/dist/components/spinner/variants/leap.d.ts +6 -0
  78. package/dist/components/spinner/variants/leap.js +27 -0
  79. package/dist/components/spinner/variants/leap.module.js +8 -0
  80. package/dist/components/spinner/variants/linear-dots.css +1 -0
  81. package/dist/components/spinner/variants/linear-dots.d.ts +2 -0
  82. package/dist/components/spinner/variants/linear-dots.js +21 -0
  83. package/dist/components/spinner/variants/linear-dots.module.js +8 -0
  84. package/dist/components/spinner/variants/loading.css +1 -0
  85. package/dist/components/spinner/variants/loading.d.ts +2 -0
  86. package/dist/components/spinner/variants/loading.js +50 -0
  87. package/dist/components/spinner/variants/loading.module.js +8 -0
  88. package/dist/components/spinner/variants/morph.css +1 -0
  89. package/dist/components/spinner/variants/morph.d.ts +2 -0
  90. package/dist/components/spinner/variants/morph.js +17 -0
  91. package/dist/components/spinner/variants/morph.module.js +8 -0
  92. package/dist/components/spinner/variants/orbit.css +1 -0
  93. package/dist/components/spinner/variants/orbit.d.ts +2 -0
  94. package/dist/components/spinner/variants/orbit.js +24 -0
  95. package/dist/components/spinner/variants/orbit.module.js +8 -0
  96. package/dist/components/spinner/variants/pulse.css +1 -0
  97. package/dist/components/spinner/variants/pulse.d.ts +2 -0
  98. package/dist/components/spinner/variants/pulse.js +19 -0
  99. package/dist/components/spinner/variants/pulse.module.js +8 -0
  100. package/dist/components/spinner/variants/radar.css +1 -0
  101. package/dist/components/spinner/variants/radar.d.ts +2 -0
  102. package/dist/components/spinner/variants/radar.js +53 -0
  103. package/dist/components/spinner/variants/radar.module.js +8 -0
  104. package/dist/components/spinner/variants/ring.css +1 -0
  105. package/dist/components/spinner/variants/ring.d.ts +2 -0
  106. package/dist/components/spinner/variants/ring.js +24 -0
  107. package/dist/components/spinner/variants/ring.module.js +8 -0
  108. package/dist/components/spinner/variants/ripple.css +1 -0
  109. package/dist/components/spinner/variants/ripple.d.ts +2 -0
  110. package/dist/components/spinner/variants/ripple.js +23 -0
  111. package/dist/components/spinner/variants/ripple.module.js +8 -0
  112. package/dist/components/spinner/variants/slide.css +1 -0
  113. package/dist/components/spinner/variants/slide.d.ts +2 -0
  114. package/dist/components/spinner/variants/slide.js +24 -0
  115. package/dist/components/spinner/variants/slide.module.js +8 -0
  116. package/dist/components/spinner/variants/snake.css +1 -0
  117. package/dist/components/spinner/variants/snake.d.ts +2 -0
  118. package/dist/components/spinner/variants/snake.js +19 -0
  119. package/dist/components/spinner/variants/snake.module.js +11 -0
  120. package/dist/components/spinner/variants/swirl.css +1 -0
  121. package/dist/components/spinner/variants/swirl.d.ts +2 -0
  122. package/dist/components/spinner/variants/swirl.js +35 -0
  123. package/dist/components/spinner/variants/swirl.module.js +8 -0
  124. package/dist/components/spinner/variants/trace.css +1 -0
  125. package/dist/components/spinner/variants/trace.d.ts +2 -0
  126. package/dist/components/spinner/variants/trace.js +28 -0
  127. package/dist/components/spinner/variants/trace.module.js +8 -0
  128. package/dist/components/spinner/variants/wave.css +1 -0
  129. package/dist/components/spinner/variants/wave.d.ts +2 -0
  130. package/dist/components/spinner/variants/wave.js +25 -0
  131. package/dist/components/spinner/variants/wave.module.js +8 -0
  132. package/dist/components/stack/stack.css +1 -1
  133. package/dist/components/stack/stack.d.ts +15 -3
  134. package/dist/components/stack/stack.js +2 -1
  135. package/dist/components/surface/surface.css +1 -1
  136. package/dist/components/text/text.css +1 -1
  137. package/dist/components/text/text.d.ts +10 -2
  138. package/dist/components/title/title.d.ts +7 -0
  139. package/dist/index.js +2 -1
  140. package/dist/preflight.css +1 -1
  141. package/dist/specs/PROTOCOL.md +1 -1
  142. package/dist/specs/activity-hints.xml +4 -4
  143. package/dist/specs/components/accordion/props.xml +2 -2
  144. package/dist/specs/components/accordion/usage.xml +2 -0
  145. package/dist/specs/components/autocomplete/patterns.xml +4 -4
  146. package/dist/specs/components/autocomplete/props.xml +2 -2
  147. package/dist/specs/components/autocomplete/usage.xml +1 -1
  148. package/dist/specs/components/button/patterns.xml +2 -2
  149. package/dist/specs/components/button/props.xml +4 -4
  150. package/dist/specs/components/button/usage.xml +2 -1
  151. package/dist/specs/components/chip/patterns.xml +2 -2
  152. package/dist/specs/components/chip/props.xml +2 -2
  153. package/dist/specs/components/chip/usage.xml +2 -0
  154. package/dist/specs/components/direction-provider/a11y.xml +6 -0
  155. package/dist/specs/components/direction-provider/meta.xml +20 -0
  156. package/dist/specs/components/direction-provider/patterns.xml +27 -0
  157. package/dist/specs/components/direction-provider/props.xml +18 -0
  158. package/dist/specs/components/direction-provider/usage.xml +10 -0
  159. package/dist/specs/components/disclosure/patterns.xml +2 -2
  160. package/dist/specs/components/disclosure/props.xml +2 -2
  161. package/dist/specs/components/disclosure/usage.xml +2 -0
  162. package/dist/specs/components/glow/patterns.xml +1 -1
  163. package/dist/specs/components/grid/patterns.xml +3 -3
  164. package/dist/specs/components/icon-button/props.xml +4 -4
  165. package/dist/specs/components/icon-button/usage.xml +3 -1
  166. package/dist/specs/components/menu/patterns.xml +18 -18
  167. package/dist/specs/components/menu/props.xml +5 -5
  168. package/dist/specs/components/menu/usage.xml +3 -1
  169. package/dist/specs/components/meter/patterns.xml +1 -1
  170. package/dist/specs/components/progressive-blur/usage.xml +2 -0
  171. package/dist/specs/components/prose/meta.xml +1 -1
  172. package/dist/specs/components/prose/patterns.xml +34 -10
  173. package/dist/specs/components/prose/props.xml +3 -1
  174. package/dist/specs/components/prose/usage.xml +4 -1
  175. package/dist/specs/components/select/patterns.xml +2 -2
  176. package/dist/specs/components/select/props.xml +2 -2
  177. package/dist/specs/components/select/usage.xml +1 -0
  178. package/dist/specs/components/slider/patterns.xml +1 -1
  179. package/dist/specs/components/spinner/props.xml +1 -1
  180. package/dist/specs/components/spinner/usage.xml +1 -1
  181. package/dist/specs/components/stack/patterns.xml +102 -4
  182. package/dist/specs/components/stack/props.xml +9 -3
  183. package/dist/specs/components/stack/usage.xml +7 -3
  184. package/dist/specs/components/surface/patterns.xml +3 -3
  185. package/dist/specs/components/surface/usage.xml +1 -1
  186. package/dist/specs/components/tabs/patterns.xml +3 -3
  187. package/dist/specs/components/tabs/props.xml +1 -1
  188. package/dist/specs/components/tabs/usage.xml +2 -1
  189. package/dist/specs/components/text/meta.xml +2 -1
  190. package/dist/specs/components/text/patterns.xml +19 -16
  191. package/dist/specs/components/text/props.xml +8 -6
  192. package/dist/specs/components/text/usage.xml +9 -3
  193. package/dist/specs/components/textfield/patterns.xml +3 -3
  194. package/dist/specs/components/textfield/props.xml +2 -2
  195. package/dist/specs/components/textfield/usage.xml +2 -1
  196. package/dist/specs/components/title/meta.xml +2 -1
  197. package/dist/specs/components/title/patterns.xml +11 -10
  198. package/dist/specs/components/title/props.xml +5 -4
  199. package/dist/specs/components/title/usage.xml +8 -3
  200. package/dist/specs/components/toggle-button/patterns.xml +8 -8
  201. package/dist/specs/components/toggle-button/props.xml +3 -3
  202. package/dist/specs/components/toggle-button/usage.xml +2 -0
  203. package/dist/specs/components/toggle-group/patterns.xml +3 -3
  204. package/dist/specs/components/tooltip/patterns.xml +7 -7
  205. package/dist/specs/foundation/attributes.xml +24 -4
  206. package/dist/specs/foundation/bootstrap.xml +1 -1
  207. package/dist/specs/foundation/modules.xml +14 -5
  208. package/dist/specs/foundation/theme-topics.xml +3 -3
  209. package/dist/specs/foundation/toggles.xml +3 -3
  210. package/dist/specs/index.xml +14 -22
  211. package/dist/specs/patterns/compose-layout-first.xml +1 -1
  212. package/package.json +2 -2
  213. package/dist/components/spinner/variants/bars.d.ts +0 -2
  214. package/dist/components/spinner/variants/bars.js +0 -134
  215. package/dist/components/spinner/variants/dot-grid.css +0 -1
  216. package/dist/components/spinner/variants/dot-grid.d.ts +0 -2
  217. package/dist/components/spinner/variants/dot-grid.js +0 -57
  218. package/dist/components/spinner/variants/dot-grid.module.js +0 -16
  219. package/dist/components/spinner/variants/dots.d.ts +0 -2
  220. package/dist/components/spinner/variants/dots.js +0 -189
  221. package/dist/specs/patterns/equal-width-actions.xml +0 -22
  222. package/dist/specs/patterns/page-chrome.xml +0 -34
  223. package/dist/specs/patterns/stack-as-surface.xml +0 -37
@@ -1,189 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import { useId } from "react";
3
- //#region src/components/spinner/variants/dots.tsx
4
- /** Sanitize React useId for SVG id / begin references (strip `:`). */
5
- var smilId = (reactId, name) => `${reactId.replaceAll(":", "")}${name}`;
6
- var spline = {
7
- calcMode: "spline",
8
- dur: "0.5s",
9
- keySplines: ".36,.6,.31,1",
10
- fill: "freeze"
11
- };
12
- var DotsGlyph = () => {
13
- const reactId = useId();
14
- const z0Or = smilId(reactId, "z0Or");
15
- const lo66 = smilId(reactId, "lo66");
16
- const OLMs = smilId(reactId, "OLMs");
17
- const UHR2 = smilId(reactId, "UHR2");
18
- const Aguh = smilId(reactId, "Aguh");
19
- const JsnR = smilId(reactId, "JsnR");
20
- const hSjk = smilId(reactId, "hSjk");
21
- const v4v5M = smilId(reactId, "4v5M");
22
- return /* @__PURE__ */ jsxs("g", {
23
- fill: "currentColor",
24
- children: [
25
- /* @__PURE__ */ jsxs("circle", {
26
- cx: "4",
27
- cy: "12",
28
- r: "0",
29
- children: [
30
- /* @__PURE__ */ jsx("animate", {
31
- begin: `0;${z0Or}.end`,
32
- attributeName: "r",
33
- ...spline,
34
- values: "0;3"
35
- }),
36
- /* @__PURE__ */ jsx("animate", {
37
- begin: `${OLMs}.end`,
38
- attributeName: "cx",
39
- ...spline,
40
- values: "4;12"
41
- }),
42
- /* @__PURE__ */ jsx("animate", {
43
- begin: `${UHR2}.end`,
44
- attributeName: "cx",
45
- ...spline,
46
- values: "12;20"
47
- }),
48
- /* @__PURE__ */ jsx("animate", {
49
- id: lo66,
50
- begin: `${Aguh}.end`,
51
- attributeName: "r",
52
- ...spline,
53
- values: "3;0"
54
- }),
55
- /* @__PURE__ */ jsx("animate", {
56
- id: z0Or,
57
- begin: `${lo66}.end`,
58
- attributeName: "cx",
59
- dur: "0.001s",
60
- values: "20;4",
61
- fill: "freeze"
62
- })
63
- ]
64
- }),
65
- /* @__PURE__ */ jsxs("circle", {
66
- cx: "4",
67
- cy: "12",
68
- r: "3",
69
- children: [
70
- /* @__PURE__ */ jsx("animate", {
71
- begin: `0;${z0Or}.end`,
72
- attributeName: "cx",
73
- ...spline,
74
- values: "4;12"
75
- }),
76
- /* @__PURE__ */ jsx("animate", {
77
- begin: `${OLMs}.end`,
78
- attributeName: "cx",
79
- ...spline,
80
- values: "12;20"
81
- }),
82
- /* @__PURE__ */ jsx("animate", {
83
- id: JsnR,
84
- begin: `${UHR2}.end`,
85
- attributeName: "r",
86
- ...spline,
87
- values: "3;0"
88
- }),
89
- /* @__PURE__ */ jsx("animate", {
90
- id: Aguh,
91
- begin: `${JsnR}.end`,
92
- attributeName: "cx",
93
- dur: "0.001s",
94
- values: "20;4",
95
- fill: "freeze"
96
- }),
97
- /* @__PURE__ */ jsx("animate", {
98
- begin: `${Aguh}.end`,
99
- attributeName: "r",
100
- ...spline,
101
- values: "0;3"
102
- })
103
- ]
104
- }),
105
- /* @__PURE__ */ jsxs("circle", {
106
- cx: "12",
107
- cy: "12",
108
- r: "3",
109
- children: [
110
- /* @__PURE__ */ jsx("animate", {
111
- begin: `0;${z0Or}.end`,
112
- attributeName: "cx",
113
- ...spline,
114
- values: "12;20"
115
- }),
116
- /* @__PURE__ */ jsx("animate", {
117
- id: hSjk,
118
- begin: `${OLMs}.end`,
119
- attributeName: "r",
120
- ...spline,
121
- values: "3;0"
122
- }),
123
- /* @__PURE__ */ jsx("animate", {
124
- id: UHR2,
125
- begin: `${hSjk}.end`,
126
- attributeName: "cx",
127
- dur: "0.001s",
128
- values: "20;4",
129
- fill: "freeze"
130
- }),
131
- /* @__PURE__ */ jsx("animate", {
132
- begin: `${UHR2}.end`,
133
- attributeName: "r",
134
- ...spline,
135
- values: "0;3"
136
- }),
137
- /* @__PURE__ */ jsx("animate", {
138
- begin: `${Aguh}.end`,
139
- attributeName: "cx",
140
- ...spline,
141
- values: "4;12"
142
- })
143
- ]
144
- }),
145
- /* @__PURE__ */ jsxs("circle", {
146
- cx: "20",
147
- cy: "12",
148
- r: "3",
149
- children: [
150
- /* @__PURE__ */ jsx("animate", {
151
- id: v4v5M,
152
- begin: `0;${z0Or}.end`,
153
- attributeName: "r",
154
- ...spline,
155
- values: "3;0"
156
- }),
157
- /* @__PURE__ */ jsx("animate", {
158
- id: OLMs,
159
- begin: `${v4v5M}.end`,
160
- attributeName: "cx",
161
- dur: "0.001s",
162
- values: "20;4",
163
- fill: "freeze"
164
- }),
165
- /* @__PURE__ */ jsx("animate", {
166
- begin: `${OLMs}.end`,
167
- attributeName: "r",
168
- ...spline,
169
- values: "0;3"
170
- }),
171
- /* @__PURE__ */ jsx("animate", {
172
- begin: `${UHR2}.end`,
173
- attributeName: "cx",
174
- ...spline,
175
- values: "4;12"
176
- }),
177
- /* @__PURE__ */ jsx("animate", {
178
- begin: `${Aguh}.end`,
179
- attributeName: "cx",
180
- ...spline,
181
- values: "12;20"
182
- })
183
- ]
184
- })
185
- ]
186
- });
187
- };
188
- //#endregion
189
- export { DotsGlyph as default };
@@ -1,22 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <pattern id="equal-width-actions" title="Equal-width action row">
3
- <uses>
4
- <ref id="stack" units="meta,usage,props" />
5
- <ref id="button" units="meta,props" />
6
- </uses>
7
- <do>Span or share space with Stack `fullWidth` and/or `expandChildren` (and control `fullWidth` when the surface owns it). Orthogonal: `fullWidth` sizes the Stack; `expandChildren` grows direct children on the main axis.</do>
8
- <dont>Do not invent `width: 100%` / `w-full` / per-child `flex: 1` CSS on Button (or other content-sized controls) when Stack can own the fill.</dont>
9
- <tsx><![CDATA[
10
- {/* Full-bleed column CTAs */}
11
- <Stack fullWidth rowGap="s">
12
- <Button>Continue</Button>
13
- <Button variant="secondary">Cancel</Button>
14
- </Stack>
15
-
16
- {/* Equal-width row actions — children grow on the main axis. Add fullWidth when the Stack itself should fill its parent width */}
17
- <Stack expandChildren direction="row" columnGap="s">
18
- <Button>Continue</Button>
19
- <Button variant="secondary">Cancel</Button>
20
- </Stack>
21
- ]]></tsx>
22
- </pattern>
@@ -1,34 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <pattern id="page-chrome" title="Page chrome with Stack render">
3
- <uses>
4
- <ref id="stack" units="meta,usage,props" />
5
- <ref id="title" units="meta" />
6
- <ref id="button" units="meta" />
7
- </uses>
8
- <do>Own page/section flex with Stack. Pick semantic tags (`header`, `main`, `nav`, `section`, …) via `render={&lt;tag /&gt;}` — keep Stack as the layout engine. CSS modules may set min-block-size / scroll; never `display:flex`.</do>
9
- <dont>Do not use raw `header`/`main`/`nav` + `display:flex` / CSS gap for jobs Stack owns. Tag choice ≠ layout engine. Do not pass `render={&lt;div /&gt;}` — Stack already defaults to `div`; omit `render` unless the host changes.</dont>
10
- <tsx><![CDATA[
11
- <Stack rowGap="m" expandChildren>
12
- <Stack
13
- direction="row"
14
- hAlign="space-between"
15
- vAlign="center"
16
- columnGap="m"
17
- hPadding="m"
18
- vPadding="m"
19
- render={<header />}
20
- >
21
- <Title render={<h1 />}>Settings</Title>
22
- <Button>Save</Button>
23
- </Stack>
24
- <Stack direction="row" columnGap="m" expandChildren render={<main />}>
25
- <Stack rowGap="xs" hPadding="s" vPadding="s" render={<nav aria-label="Settings" />}>
26
- {/* nav links */}
27
- </Stack>
28
- <Stack rowGap="l" expandChildren>
29
- {/* content */}
30
- </Stack>
31
- </Stack>
32
- </Stack>
33
- ]]></tsx>
34
- </pattern>
@@ -1,37 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <pattern id="stack-as-surface" title="Stack as Surface (avoid extra DOM)">
3
- <uses>
4
- <ref id="stack" units="meta,usage,props" />
5
- <ref id="surface" units="meta,usage,props" />
6
- <ref id="text" units="meta" />
7
- <ref id="chip" units="meta" />
8
- </uses>
9
- <do>When a flex cluster also needs Surface chrome (border, color, radius, padding), prefer `Stack render={&lt;Surface … /&gt;}` so layout + chrome share one root. Put gap/align/`fullWidth`/`expandChildren` on Stack; put `border` / `color` / `radius` / padding on the Surface in `render`.</do>
10
- <dont>Do not add a CSS class for border/background/radius on a Stack when Surface owns that chrome. Do not wrap Stack in an extra Surface solely for those props when `render` merge is enough. Nest Surface→Stack only when you need separate roots (e.g. Elevator around Surface, concentric nested Surfaces, or chrome that must not sit on the flex host).</dont>
11
- <tsx><![CDATA[
12
- {/* Preferred: single node */}
13
- <Stack
14
- direction="row"
15
- columnGap="s"
16
- vAlign="center"
17
- fullWidth
18
- render={<Surface border="all" color={1} radius="m" hPadding="m" vPadding="s" />}
19
- >
20
- <Text size="sm" color="muted">
21
- Status
22
- </Text>
23
- <Chip>Active</Chip>
24
- </Stack>
25
-
26
- {/* OK when a separate Surface root is required (Elevator, nested radius="auto", …) */}
27
- {/*
28
- <Elevator elevation={1}>
29
- <Surface border="all" color={1} radius="m" hPadding="m" vPadding="s">
30
- <Stack direction="row" columnGap="s" vAlign="center" fullWidth>
31
- …
32
- </Stack>
33
- </Surface>
34
- </Elevator>
35
- */}
36
- ]]></tsx>
37
- </pattern>