@viraui/react 2026.3.10 → 2026.4.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 (307) hide show
  1. package/dist/catalog.json +50 -50
  2. package/dist/components/dialog/dialog-sheet.js +2 -1
  3. package/dist/components/separator/separator.d.ts +2 -2
  4. package/dist/components/separator/separator.js +2 -2
  5. package/dist/components/surface/surface.css +1 -1
  6. package/dist/components/surface/surface.js +2 -0
  7. package/dist/components/textarea/textarea.js +2 -2
  8. package/dist/components/textfield/textfield.js +2 -2
  9. package/dist/specs/PROTOCOL.md +48 -0
  10. package/dist/specs/activity-hints.xml +42 -0
  11. package/dist/specs/components/accordion/a11y.xml +6 -0
  12. package/dist/specs/components/accordion/meta.xml +20 -0
  13. package/dist/specs/components/accordion/patterns.xml +9 -0
  14. package/dist/specs/components/accordion/props.xml +48 -0
  15. package/dist/specs/components/accordion/usage.xml +8 -0
  16. package/dist/specs/components/annotate/a11y.xml +6 -0
  17. package/dist/specs/components/annotate/meta.xml +19 -0
  18. package/dist/specs/components/annotate/patterns.xml +7 -0
  19. package/dist/specs/components/annotate/props.xml +88 -0
  20. package/dist/specs/components/annotate/usage.xml +10 -0
  21. package/dist/specs/components/autocomplete/a11y.xml +6 -0
  22. package/dist/specs/components/autocomplete/meta.xml +22 -0
  23. package/dist/specs/components/autocomplete/patterns.xml +14 -0
  24. package/dist/specs/components/autocomplete/props.xml +81 -0
  25. package/dist/specs/components/autocomplete/usage.xml +11 -0
  26. package/dist/specs/components/avatar/a11y.xml +5 -0
  27. package/dist/specs/components/avatar/meta.xml +17 -0
  28. package/dist/specs/components/avatar/patterns.xml +7 -0
  29. package/dist/specs/components/avatar/props.xml +38 -0
  30. package/dist/specs/components/avatar/usage.xml +7 -0
  31. package/dist/specs/components/avatar-group/a11y.xml +6 -0
  32. package/dist/specs/components/avatar-group/meta.xml +16 -0
  33. package/dist/specs/components/avatar-group/patterns.xml +7 -0
  34. package/dist/specs/components/avatar-group/props.xml +39 -0
  35. package/dist/specs/components/avatar-group/usage.xml +10 -0
  36. package/dist/specs/components/badge/a11y.xml +7 -0
  37. package/dist/specs/components/badge/meta.xml +19 -0
  38. package/dist/specs/components/badge/patterns.xml +7 -0
  39. package/dist/specs/components/badge/props.xml +37 -0
  40. package/dist/specs/components/badge/usage.xml +9 -0
  41. package/dist/specs/components/beam/a11y.xml +7 -0
  42. package/dist/specs/components/beam/meta.xml +18 -0
  43. package/dist/specs/components/beam/patterns.xml +7 -0
  44. package/dist/specs/components/beam/props.xml +90 -0
  45. package/dist/specs/components/beam/usage.xml +11 -0
  46. package/dist/specs/components/bleed/a11y.xml +7 -0
  47. package/dist/specs/components/bleed/meta.xml +18 -0
  48. package/dist/specs/components/bleed/patterns.xml +7 -0
  49. package/dist/specs/components/bleed/props.xml +22 -0
  50. package/dist/specs/components/bleed/usage.xml +10 -0
  51. package/dist/specs/components/breakpoints/a11y.xml +5 -0
  52. package/dist/specs/components/breakpoints/meta.xml +17 -0
  53. package/dist/specs/components/breakpoints/patterns.xml +9 -0
  54. package/dist/specs/components/breakpoints/props.xml +20 -0
  55. package/dist/specs/components/breakpoints/usage.xml +9 -0
  56. package/dist/specs/components/button/a11y.xml +9 -0
  57. package/dist/specs/components/button/meta.xml +20 -0
  58. package/dist/specs/components/button/patterns.xml +11 -0
  59. package/dist/specs/components/button/props.xml +101 -0
  60. package/dist/specs/components/button/usage.xml +18 -0
  61. package/dist/specs/components/checkbox/a11y.xml +6 -0
  62. package/dist/specs/components/checkbox/meta.xml +21 -0
  63. package/dist/specs/components/checkbox/patterns.xml +7 -0
  64. package/dist/specs/components/checkbox/props.xml +48 -0
  65. package/dist/specs/components/checkbox/usage.xml +10 -0
  66. package/dist/specs/components/chip/a11y.xml +6 -0
  67. package/dist/specs/components/chip/meta.xml +19 -0
  68. package/dist/specs/components/chip/patterns.xml +7 -0
  69. package/dist/specs/components/chip/props.xml +49 -0
  70. package/dist/specs/components/chip/usage.xml +11 -0
  71. package/dist/specs/components/clamp-text/a11y.xml +6 -0
  72. package/dist/specs/components/clamp-text/meta.xml +17 -0
  73. package/dist/specs/components/clamp-text/patterns.xml +7 -0
  74. package/dist/specs/components/clamp-text/props.xml +27 -0
  75. package/dist/specs/components/clamp-text/usage.xml +8 -0
  76. package/dist/specs/components/dialog/a11y.xml +7 -0
  77. package/dist/specs/components/dialog/meta.xml +21 -0
  78. package/dist/specs/components/dialog/patterns.xml +19 -0
  79. package/dist/specs/components/dialog/props.xml +49 -0
  80. package/dist/specs/components/dialog/usage.xml +12 -0
  81. package/dist/specs/components/elevator/a11y.xml +6 -0
  82. package/dist/specs/components/elevator/meta.xml +16 -0
  83. package/dist/specs/components/elevator/patterns.xml +7 -0
  84. package/dist/specs/components/elevator/props.xml +31 -0
  85. package/dist/specs/components/elevator/usage.xml +8 -0
  86. package/dist/specs/components/fieldset/a11y.xml +6 -0
  87. package/dist/specs/components/fieldset/meta.xml +22 -0
  88. package/dist/specs/components/fieldset/patterns.xml +7 -0
  89. package/dist/specs/components/fieldset/props.xml +26 -0
  90. package/dist/specs/components/fieldset/usage.xml +11 -0
  91. package/dist/specs/components/fit-text/a11y.xml +6 -0
  92. package/dist/specs/components/fit-text/meta.xml +18 -0
  93. package/dist/specs/components/fit-text/patterns.xml +7 -0
  94. package/dist/specs/components/fit-text/props.xml +19 -0
  95. package/dist/specs/components/fit-text/usage.xml +9 -0
  96. package/dist/specs/components/glow/a11y.xml +6 -0
  97. package/dist/specs/components/glow/meta.xml +19 -0
  98. package/dist/specs/components/glow/patterns.xml +7 -0
  99. package/dist/specs/components/glow/props.xml +74 -0
  100. package/dist/specs/components/glow/usage.xml +12 -0
  101. package/dist/specs/components/grid/a11y.xml +6 -0
  102. package/dist/specs/components/grid/meta.xml +18 -0
  103. package/dist/specs/components/grid/patterns.xml +9 -0
  104. package/dist/specs/components/grid/props.xml +101 -0
  105. package/dist/specs/components/grid/usage.xml +10 -0
  106. package/dist/specs/components/icon-button/a11y.xml +9 -0
  107. package/dist/specs/components/icon-button/meta.xml +18 -0
  108. package/dist/specs/components/icon-button/patterns.xml +11 -0
  109. package/dist/specs/components/icon-button/props.xml +95 -0
  110. package/dist/specs/components/icon-button/usage.xml +14 -0
  111. package/dist/specs/components/linear-progress/a11y.xml +6 -0
  112. package/dist/specs/components/linear-progress/meta.xml +21 -0
  113. package/dist/specs/components/linear-progress/patterns.xml +7 -0
  114. package/dist/specs/components/linear-progress/props.xml +31 -0
  115. package/dist/specs/components/linear-progress/usage.xml +11 -0
  116. package/dist/specs/components/masonry/a11y.xml +6 -0
  117. package/dist/specs/components/masonry/meta.xml +18 -0
  118. package/dist/specs/components/masonry/patterns.xml +9 -0
  119. package/dist/specs/components/masonry/props.xml +32 -0
  120. package/dist/specs/components/masonry/usage.xml +9 -0
  121. package/dist/specs/components/menu/a11y.xml +7 -0
  122. package/dist/specs/components/menu/meta.xml +25 -0
  123. package/dist/specs/components/menu/patterns.xml +25 -0
  124. package/dist/specs/components/menu/props.xml +73 -0
  125. package/dist/specs/components/menu/usage.xml +15 -0
  126. package/dist/specs/components/meter/a11y.xml +6 -0
  127. package/dist/specs/components/meter/meta.xml +19 -0
  128. package/dist/specs/components/meter/patterns.xml +7 -0
  129. package/dist/specs/components/meter/props.xml +31 -0
  130. package/dist/specs/components/meter/usage.xml +10 -0
  131. package/dist/specs/components/popover/a11y.xml +7 -0
  132. package/dist/specs/components/popover/meta.xml +22 -0
  133. package/dist/specs/components/popover/patterns.xml +15 -0
  134. package/dist/specs/components/popover/props.xml +37 -0
  135. package/dist/specs/components/popover/usage.xml +12 -0
  136. package/dist/specs/components/progressive-blur/a11y.xml +6 -0
  137. package/dist/specs/components/progressive-blur/meta.xml +17 -0
  138. package/dist/specs/components/progressive-blur/patterns.xml +7 -0
  139. package/dist/specs/components/progressive-blur/props.xml +28 -0
  140. package/dist/specs/components/progressive-blur/usage.xml +10 -0
  141. package/dist/specs/components/radio/a11y.xml +6 -0
  142. package/dist/specs/components/radio/meta.xml +20 -0
  143. package/dist/specs/components/radio/patterns.xml +9 -0
  144. package/dist/specs/components/radio/props.xml +44 -0
  145. package/dist/specs/components/radio/usage.xml +12 -0
  146. package/dist/specs/components/select/a11y.xml +6 -0
  147. package/dist/specs/components/select/meta.xml +21 -0
  148. package/dist/specs/components/select/patterns.xml +13 -0
  149. package/dist/specs/components/select/props.xml +83 -0
  150. package/dist/specs/components/select/usage.xml +14 -0
  151. package/dist/specs/components/separator/a11y.xml +6 -0
  152. package/dist/specs/components/separator/meta.xml +18 -0
  153. package/dist/specs/components/separator/patterns.xml +7 -0
  154. package/dist/specs/components/separator/props.xml +39 -0
  155. package/dist/specs/components/separator/usage.xml +8 -0
  156. package/dist/specs/components/shimmer/a11y.xml +6 -0
  157. package/dist/specs/components/shimmer/meta.xml +18 -0
  158. package/dist/specs/components/shimmer/patterns.xml +7 -0
  159. package/dist/specs/components/shimmer/props.xml +40 -0
  160. package/dist/specs/components/shimmer/usage.xml +9 -0
  161. package/dist/specs/components/skeleton/a11y.xml +8 -0
  162. package/dist/specs/components/skeleton/meta.xml +17 -0
  163. package/dist/specs/components/skeleton/patterns.xml +8 -0
  164. package/dist/specs/components/skeleton/props.xml +73 -0
  165. package/dist/specs/components/skeleton/usage.xml +10 -0
  166. package/dist/specs/components/slider/a11y.xml +6 -0
  167. package/dist/specs/components/slider/meta.xml +19 -0
  168. package/dist/specs/components/slider/patterns.xml +7 -0
  169. package/dist/specs/components/slider/props.xml +45 -0
  170. package/dist/specs/components/slider/usage.xml +8 -0
  171. package/dist/specs/components/spinner/a11y.xml +7 -0
  172. package/dist/specs/components/spinner/meta.xml +17 -0
  173. package/dist/specs/components/spinner/patterns.xml +7 -0
  174. package/dist/specs/components/spinner/props.xml +24 -0
  175. package/dist/specs/components/spinner/usage.xml +8 -0
  176. package/dist/specs/components/stack/a11y.xml +6 -0
  177. package/dist/specs/components/stack/meta.xml +19 -0
  178. package/dist/specs/components/stack/patterns.xml +7 -0
  179. package/dist/specs/components/stack/props.xml +94 -0
  180. package/dist/specs/components/stack/usage.xml +14 -0
  181. package/dist/specs/components/static-noise/a11y.xml +6 -0
  182. package/dist/specs/components/static-noise/meta.xml +17 -0
  183. package/dist/specs/components/static-noise/patterns.xml +7 -0
  184. package/dist/specs/components/static-noise/props.xml +27 -0
  185. package/dist/specs/components/static-noise/usage.xml +10 -0
  186. package/dist/specs/components/surface/a11y.xml +6 -0
  187. package/dist/specs/components/surface/meta.xml +17 -0
  188. package/dist/specs/components/surface/patterns.xml +7 -0
  189. package/dist/specs/components/surface/props.xml +92 -0
  190. package/dist/specs/components/surface/usage.xml +16 -0
  191. package/dist/specs/components/switch/a11y.xml +6 -0
  192. package/dist/specs/components/switch/meta.xml +19 -0
  193. package/dist/specs/components/switch/patterns.xml +7 -0
  194. package/dist/specs/components/switch/props.xml +48 -0
  195. package/dist/specs/components/switch/usage.xml +8 -0
  196. package/dist/specs/components/tabs/a11y.xml +6 -0
  197. package/dist/specs/components/tabs/meta.xml +19 -0
  198. package/dist/specs/components/tabs/patterns.xml +14 -0
  199. package/dist/specs/components/tabs/props.xml +24 -0
  200. package/dist/specs/components/tabs/usage.xml +8 -0
  201. package/dist/specs/components/text/a11y.xml +6 -0
  202. package/dist/specs/components/text/meta.xml +17 -0
  203. package/dist/specs/components/text/patterns.xml +7 -0
  204. package/dist/specs/components/text/props.xml +129 -0
  205. package/dist/specs/components/text/usage.xml +7 -0
  206. package/dist/specs/components/textarea/a11y.xml +6 -0
  207. package/dist/specs/components/textarea/meta.xml +19 -0
  208. package/dist/specs/components/textarea/patterns.xml +7 -0
  209. package/dist/specs/components/textarea/props.xml +39 -0
  210. package/dist/specs/components/textarea/usage.xml +10 -0
  211. package/dist/specs/components/textfield/a11y.xml +6 -0
  212. package/dist/specs/components/textfield/meta.xml +21 -0
  213. package/dist/specs/components/textfield/patterns.xml +7 -0
  214. package/dist/specs/components/textfield/props.xml +51 -0
  215. package/dist/specs/components/textfield/usage.xml +9 -0
  216. package/dist/specs/components/title/a11y.xml +7 -0
  217. package/dist/specs/components/title/meta.xml +17 -0
  218. package/dist/specs/components/title/patterns.xml +7 -0
  219. package/dist/specs/components/title/props.xml +124 -0
  220. package/dist/specs/components/title/usage.xml +10 -0
  221. package/dist/specs/components/toast/a11y.xml +7 -0
  222. package/dist/specs/components/toast/meta.xml +20 -0
  223. package/dist/specs/components/toast/patterns.xml +15 -0
  224. package/dist/specs/components/toast/props.xml +42 -0
  225. package/dist/specs/components/toast/usage.xml +10 -0
  226. package/dist/specs/components/toggle-button/a11y.xml +6 -0
  227. package/dist/specs/components/toggle-button/meta.xml +20 -0
  228. package/dist/specs/components/toggle-button/patterns.xml +7 -0
  229. package/dist/specs/components/toggle-button/props.xml +61 -0
  230. package/dist/specs/components/toggle-button/usage.xml +10 -0
  231. package/dist/specs/components/toggle-group/a11y.xml +6 -0
  232. package/dist/specs/components/toggle-group/meta.xml +19 -0
  233. package/dist/specs/components/toggle-group/patterns.xml +9 -0
  234. package/dist/specs/components/toggle-group/props.xml +15 -0
  235. package/dist/specs/components/toggle-group/usage.xml +9 -0
  236. package/dist/specs/components/tooltip/a11y.xml +6 -0
  237. package/dist/specs/components/tooltip/meta.xml +21 -0
  238. package/dist/specs/components/tooltip/patterns.xml +12 -0
  239. package/dist/specs/components/tooltip/props.xml +20 -0
  240. package/dist/specs/components/tooltip/usage.xml +10 -0
  241. package/dist/specs/components/typewriter/a11y.xml +7 -0
  242. package/dist/specs/components/typewriter/meta.xml +18 -0
  243. package/dist/specs/components/typewriter/patterns.xml +7 -0
  244. package/dist/specs/components/typewriter/props.xml +43 -0
  245. package/dist/specs/components/typewriter/usage.xml +11 -0
  246. package/dist/specs/foundation/attributes.xml +127 -0
  247. package/dist/specs/foundation/bootstrap.xml +62 -0
  248. package/dist/specs/foundation/elevation.xml +21 -0
  249. package/dist/specs/foundation/meta.xml +20 -0
  250. package/dist/specs/foundation/modules.xml +62 -0
  251. package/dist/specs/foundation/theme-topics.xml +60 -0
  252. package/dist/specs/foundation/toggles.xml +25 -0
  253. package/dist/specs/index.xml +538 -0
  254. package/dist/specs/patterns/settings-row.xml +19 -0
  255. package/package.json +12 -11
  256. package/dist/components/accordion/accordion.guide.json +0 -69
  257. package/dist/components/annotate/annotate.guide.json +0 -110
  258. package/dist/components/autocomplete/autocomplete.guide.json +0 -103
  259. package/dist/components/avatar/avatar.guide.json +0 -53
  260. package/dist/components/avatar-group/avatar-group.guide.json +0 -56
  261. package/dist/components/badge/badge.guide.json +0 -59
  262. package/dist/components/beam/beam.guide.json +0 -123
  263. package/dist/components/bleed/bleed.guide.json +0 -43
  264. package/dist/components/breakpoints/breakpoints.guide.json +0 -40
  265. package/dist/components/button/button-link.guide.json +0 -69
  266. package/dist/components/button/button.guide.json +0 -78
  267. package/dist/components/checkbox/checkbox.guide.json +0 -68
  268. package/dist/components/chip/chip.guide.json +0 -69
  269. package/dist/components/clamp-text/clamp-text.guide.json +0 -47
  270. package/dist/components/dialog/dialog.guide.json +0 -72
  271. package/dist/components/elevator/elevator.guide.json +0 -46
  272. package/dist/components/fieldset/fieldset.guide.json +0 -43
  273. package/dist/components/fit-text/fit-text.guide.json +0 -38
  274. package/dist/components/glow/glow.guide.json +0 -108
  275. package/dist/components/grid/grid.guide.json +0 -120
  276. package/dist/components/icon-button/icon-button-link.guide.json +0 -73
  277. package/dist/components/icon-button/icon-button.guide.json +0 -72
  278. package/dist/components/linear-progress/linear-progress.guide.json +0 -53
  279. package/dist/components/masonry/masonry.guide.json +0 -50
  280. package/dist/components/menu/menu.guide.json +0 -94
  281. package/dist/components/meter/meter.guide.json +0 -52
  282. package/dist/components/popover/popover.guide.json +0 -58
  283. package/dist/components/progressive-blur/progressive-blur.guide.json +0 -50
  284. package/dist/components/radio/radio.guide.json +0 -65
  285. package/dist/components/select/select.guide.json +0 -105
  286. package/dist/components/separator/separator.guide.json +0 -58
  287. package/dist/components/shimmer/shimmer.guide.json +0 -67
  288. package/dist/components/skeleton/skeleton.guide.json +0 -98
  289. package/dist/components/slider/slider.guide.json +0 -64
  290. package/dist/components/spinner/spinner.guide.json +0 -43
  291. package/dist/components/stack/stack.guide.json +0 -116
  292. package/dist/components/static-noise/static-noise.guide.json +0 -44
  293. package/dist/components/surface/surface.guide.json +0 -114
  294. package/dist/components/switch/switch.guide.json +0 -71
  295. package/dist/components/tabs/tabs.guide.json +0 -43
  296. package/dist/components/text/text.guide.json +0 -152
  297. package/dist/components/textarea/textarea.guide.json +0 -55
  298. package/dist/components/textfield/textfield.guide.json +0 -70
  299. package/dist/components/title/title.guide.json +0 -149
  300. package/dist/components/toast/toast.guide.json +0 -60
  301. package/dist/components/toggle-button/toggle-button.guide.json +0 -81
  302. package/dist/components/toggle-group/toggle-group.guide.json +0 -27
  303. package/dist/components/tooltip/tooltip.guide.json +0 -40
  304. package/dist/components/typewriter/typewriter.guide.json +0 -65
  305. package/dist/consumption.json +0 -84
  306. package/dist/preflight-surface.json +0 -233
  307. package/dist/theme-surface.json +0 -71
@@ -0,0 +1,101 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <props surface="grid">
3
+ <when_to_use>
4
+ <item>Responsive card or tile walls that need true CSS Grid tracks (auto-fill/fit or fixed columns)</item>
5
+ <item>Fixed-count columns that keep a given track breadth — pair `columns` with an explicit `colMinWidth` so a parent with `overflow: auto` can scroll</item>
6
+ <item>Layouts where items must span full row or full column tracks</item>
7
+ <item>Token-spaced grids with optional axis padding without custom grid CSS</item>
8
+ </when_to_use>
9
+ <when_not_to_use>
10
+ <item>Uneven-height presentational walls where reading order can follow columns — prefer Masonry</item>
11
+ <item>Simple one-axis flex spacing — prefer Stack</item>
12
+ <item>Expecting Masonry-style React column packing instead of CSS Grid tracks</item>
13
+ </when_not_to_use>
14
+ <prop name="colMinWidth" kind="react">
15
+ <description>Minimum column track width for `filling` auto-fill/auto-fit tracks. When `columns` is also set, an explicit value opts into fixed-breadth tracks (`repeat(N, var(--vui-grid-column-min-w))`) and sets `data-grid-fixed-breadth`; omit this prop to keep fluid `1fr` tracks.</description>
16
+ </prop>
17
+ <prop name="columnGap" kind="react">
18
+ <description>Sets the gap between grid columns using the Vira space token scale.</description>
19
+ </prop>
20
+ <prop name="columns" kind="react">
21
+ <description>Fixes the number of column tracks. When set, `filling` is ignored and `data-grid-filling-type` is omitted. Bare `columns={N}` uses fluid `repeat(N, minmax(0, 1fr))` tracks. Pass an explicit `colMinWidth` as well for fixed-breadth tracks and `data-grid-fixed-breadth=&quot;true&quot;` (`inline-size: max-content`).</description>
22
+ </prop>
23
+ <prop name="filling" kind="react">
24
+ <description>Controls `repeat(auto-fill|auto-fit, …)` when `columns` is unset. Pass `false` to skip the filling data attribute.</description>
25
+ </prop>
26
+ <prop name="hPadding" kind="react">
27
+ <description>Sets inline padding using one token for both sides or a `[start, end]` tuple.</description>
28
+ </prop>
29
+ <prop name="Item.column" kind="react">
30
+ <description>Sets explicit `grid-column` placement via `--vui-grid-item-column`.</description>
31
+ </prop>
32
+ <prop name="Item.fullHeight" kind="react">
33
+ <description>Spans the item across every row track (`grid-row: 1 / -1`). Wins over `row` when both are set.</description>
34
+ </prop>
35
+ <prop name="Item.fullWidth" kind="react">
36
+ <description>Spans the item across every column track (`grid-column: 1 / -1`). Wins over `column` when both are set.</description>
37
+ </prop>
38
+ <prop name="Item.ref" kind="react">
39
+ <description>Ref forwarded to the rendered item root element.</description>
40
+ </prop>
41
+ <prop name="Item.render" kind="react">
42
+ <description>Replaces the default `div` item root using Base UI render semantics.</description>
43
+ </prop>
44
+ <prop name="Item.row" kind="react">
45
+ <description>Sets explicit `grid-row` placement via `--vui-grid-item-row`.</description>
46
+ </prop>
47
+ <prop name="Item.subgrid" kind="react">
48
+ <description>Opts the item into a nested CSS grid that inherits parent tracks via `subgrid`. Sets `display: grid` and `grid-template-columns` and/or `grid-template-rows` to `subgrid`. Pass `true` for both axes, or `&apos;column&apos;` / `&apos;row&apos;` for one axis. Pair with `fullWidth` / `fullHeight` or a `column` / `row` span so the item covers the tracks to inherit.</description>
49
+ </prop>
50
+ <prop name="ref" kind="react">
51
+ <description>Ref forwarded to the rendered grid root element.</description>
52
+ </prop>
53
+ <prop name="render" kind="react">
54
+ <description>Replaces the default `div` root using Base UI render semantics.</description>
55
+ </prop>
56
+ <prop name="rowGap" kind="react">
57
+ <description>Sets the gap between grid rows using the Vira space token scale.</description>
58
+ </prop>
59
+ <prop name="rowMinHeight" kind="react">
60
+ <description>Minimum row track size used when `rows` is set.</description>
61
+ </prop>
62
+ <prop name="rows" kind="react">
63
+ <description>Fixes the number of row tracks via `--vui-grid-rows`.</description>
64
+ </prop>
65
+ <prop name="vPadding" kind="react">
66
+ <description>Sets block padding using one token for both sides or a `[start, end]` tuple.</description>
67
+ </prop>
68
+ <css_var suffix="column-gap">
69
+ <description>Grid column gap on the root.</description>
70
+ </css_var>
71
+ <css_var suffix="column-min-w">
72
+ <description>Minimum column track width for auto-fill/auto-fit track sizing, and the fixed track breadth when `columns` is set with an explicit `colMinWidth`.</description>
73
+ </css_var>
74
+ <css_var suffix="column-size">
75
+ <description>Resolved column track size (`minmax` formula) used by auto-fill/fit.</description>
76
+ </css_var>
77
+ <css_var suffix="columns">
78
+ <description>Fixed column track count when `columns` is set and filling is inactive; bare `columns` sizes tracks as `minmax(0, 1fr)`; with explicit `colMinWidth`, tracks use `var(--vui-grid-column-min-w)` under `data-grid-fixed-breadth`.</description>
79
+ </css_var>
80
+ <css_var suffix="padding-block-end">
81
+ <description>Block-end padding when padding is enabled.</description>
82
+ </css_var>
83
+ <css_var suffix="padding-block-start">
84
+ <description>Block-start padding when padding is enabled.</description>
85
+ </css_var>
86
+ <css_var suffix="padding-inline-end">
87
+ <description>Inline-end padding when padding is enabled.</description>
88
+ </css_var>
89
+ <css_var suffix="padding-inline-start">
90
+ <description>Inline-start padding when padding is enabled.</description>
91
+ </css_var>
92
+ <css_var suffix="row-gap">
93
+ <description>Grid row gap on the root.</description>
94
+ </css_var>
95
+ <css_var suffix="row-min-h">
96
+ <description>Minimum row track size when fixed rows are enabled.</description>
97
+ </css_var>
98
+ <css_var suffix="rows">
99
+ <description>Fixed row track count when `rows` is set.</description>
100
+ </css_var>
101
+ </props>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <usage surface="grid">
3
+ <do>Responsive card or tile walls that need true CSS Grid tracks (auto-fill/fit or fixed columns)</do>
4
+ <do>Fixed-count columns that keep a given track breadth — pair `columns` with an explicit `colMinWidth` so a parent with `overflow: auto` can scroll</do>
5
+ <do>Layouts where items must span full row or full column tracks</do>
6
+ <do>Token-spaced grids with optional axis padding without custom grid CSS</do>
7
+ <dont>Using Masonry when you need explicit row/column placement or full-width/full-height spans</dont>
8
+ <dont>Re-declaring grid-template and gap in app CSS when Grid can own the layout</dont>
9
+ <dont>Setting both fullWidth and column (or fullHeight and row) and expecting the explicit placement to win — full-* data attrs override</dont>
10
+ </usage>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <a11y surface="icon-button">
3
+ <rule>Provide aria-label or aria-labelledby on every IconButton — icon alone is not a name</rule>
4
+ <rule>Loading sets aria-busy on the control; Spinner is decorative</rule>
5
+ <rule>Keep the accessible name stable when loading state changes</rule>
6
+ <rule>Provide aria-label or aria-labelledby on every IconButtonLink — icon alone is not a name</rule>
7
+ <rule>Renders a real link root so assistive tech get link role</rule>
8
+ <rule>loading sets aria-disabled / aria-busy for loading chrome; no disabled prop — native links stay activatable</rule>
9
+ </a11y>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <meta id="icon-button" title="IconButton" category="action" shared_contract="button">
3
+ <summary>Icon-only button that shares Button visual chrome (--vui-button-* CSS) and requires an accessible name through aria-label or aria-labelledby.</summary>
4
+ <exports>
5
+ <export name="IconButton" />
6
+ <export name="IconButtonLink" />
7
+ </exports>
8
+ <related>
9
+ <ref id="button" />
10
+ <ref id="spinner" />
11
+ </related>
12
+ <units>
13
+ <unit kind="a11y" href="a11y.xml" />
14
+ <unit kind="props" href="props.xml" />
15
+ <unit kind="usage" href="usage.xml" />
16
+ <unit kind="patterns" href="patterns.xml" />
17
+ </units>
18
+ </meta>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <patterns surface="icon-button">
3
+ <example title="IconButton structure">
4
+ <tsx><![CDATA[<IconButton icon={<Plus />} aria-label="Add" />]]></tsx>
5
+ <notes>Public assembly hint from legacy guide; not API authority.</notes>
6
+ </example>
7
+ <example title="IconButtonLink structure">
8
+ <tsx><![CDATA[<IconButtonLink href="#" icon={<Plus />} aria-label="Add" />]]></tsx>
9
+ <notes>Public assembly hint from legacy guide; not API authority.</notes>
10
+ </example>
11
+ </patterns>
@@ -0,0 +1,95 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <props surface="icon-button">
3
+ <when_to_use>
4
+ <item>Compact toolbar or chrome actions identified only by icon</item>
5
+ <item>Same size, variant, and loading model as Button without visible label</item>
6
+ <item>Decorative glyph with explicit accessible naming on the root button</item>
7
+ </when_to_use>
8
+ <when_not_to_use>
9
+ <item>Actions that need visible text — use Button</item>
10
+ <item>Missing both aria-label and aria-labelledby</item>
11
+ <item>Navigation or non-button semantics — use IconButtonLink</item>
12
+ <item>Temporally swap icons after user interactions with temporal pressed state, like copy feedback. Use ToggleButton instead</item>
13
+ </when_not_to_use>
14
+ <prop name="icon" kind="react">
15
+ <description>Icon rendered as the sole visible control content.</description>
16
+ </prop>
17
+ <prop name="loading" kind="react">
18
+ <description>Shows a centered spinner overlay while preserving the original content width.</description>
19
+ </prop>
20
+ <prop name="pill" kind="react">
21
+ <description>Applies a fully rounded pill shape to the button.</description>
22
+ </prop>
23
+ <prop name="size" kind="react">
24
+ <description>Controls the visual button size.</description>
25
+ </prop>
26
+ <prop name="variant" kind="react">
27
+ <description>Selects the visual treatment for the button.</description>
28
+ </prop>
29
+ <prop name="icon" kind="react">
30
+ <description>Icon rendered as the sole visible control content. (icon-button-link)</description>
31
+ </prop>
32
+ <prop name="loading" kind="react">
33
+ <description>Shows a centered spinner overlay while preserving the original content width. Sets `aria-disabled` / `aria-busy` for loading chrome; link stays activatable. (icon-button-link)</description>
34
+ </prop>
35
+ <prop name="pill" kind="react">
36
+ <description>Applies a fully rounded pill shape. (icon-button-link)</description>
37
+ </prop>
38
+ <prop name="render" kind="react">
39
+ <description>Replaces the default `a` root using Base UI render semantics (e.g. Next.js `Link`). (icon-button-link)</description>
40
+ </prop>
41
+ <prop name="size" kind="react">
42
+ <description>Controls the visual button size. (icon-button-link)</description>
43
+ </prop>
44
+ <prop name="variant" kind="react">
45
+ <description>Selects the visual treatment matching Button. (icon-button-link)</description>
46
+ </prop>
47
+ <css_var suffix="background">
48
+ <description>Button fill; variant and state selectors preset this.</description>
49
+ </css_var>
50
+ <css_var suffix="color">
51
+ <description>Button label and icon color.</description>
52
+ </css_var>
53
+ <css_var suffix="height">
54
+ <description>Button block size; size prop presets via data attributes.</description>
55
+ </css_var>
56
+ <css_var suffix="icon-size">
57
+ <description>Addon icon size inside the button.</description>
58
+ </css_var>
59
+ <css_var suffix="padding-block">
60
+ <description>Vertical padding inside the button.</description>
61
+ </css_var>
62
+ <css_var suffix="padding-inline">
63
+ <description>Horizontal padding inside the button.</description>
64
+ </css_var>
65
+ <css_var suffix="radius">
66
+ <description>Corner radius; pill sets infinite radius via data-pill.</description>
67
+ </css_var>
68
+ <css_var suffix="spinner-color">
69
+ <description>Loading spinner color on the root.</description>
70
+ </css_var>
71
+ <css_var suffix="background">
72
+ <description>Button fill; variant and state selectors preset this. (icon-button-link)</description>
73
+ </css_var>
74
+ <css_var suffix="color">
75
+ <description>Button label and icon color. (icon-button-link)</description>
76
+ </css_var>
77
+ <css_var suffix="height">
78
+ <description>Button block size; size prop presets via data attributes. (icon-button-link)</description>
79
+ </css_var>
80
+ <css_var suffix="icon-size">
81
+ <description>Addon icon size inside the button. (icon-button-link)</description>
82
+ </css_var>
83
+ <css_var suffix="padding-block">
84
+ <description>Vertical padding inside the button. (icon-button-link)</description>
85
+ </css_var>
86
+ <css_var suffix="padding-inline">
87
+ <description>Horizontal padding inside the button. (icon-button-link)</description>
88
+ </css_var>
89
+ <css_var suffix="radius">
90
+ <description>Corner radius; pill sets infinite radius via data-pill. (icon-button-link)</description>
91
+ </css_var>
92
+ <css_var suffix="spinner-color">
93
+ <description>Loading spinner color on the root. (icon-button-link)</description>
94
+ </css_var>
95
+ </props>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <usage surface="icon-button">
3
+ <do>Compact toolbar or chrome actions identified only by icon</do>
4
+ <do>Same size, variant, and loading model as Button without visible label</do>
5
+ <do>Decorative glyph with explicit accessible naming on the root button</do>
6
+ <do>Compact toolbar or chrome navigation identified only by icon</do>
7
+ <do>Same size, variant, and loading model as IconButton without button semantics</do>
8
+ <do>Compose with framework Link via ButtonLink render prop</do>
9
+ <dont>Passing children, addon, or addonPosition — not part of the public API</dont>
10
+ <dont>Using icon-only Button instead of IconButton</dont>
11
+ <dont>Using IconButton with render={&lt;a /&gt;} for links — use IconButtonLink</dont>
12
+ <dont>Passing children, addon, or addonPosition — not part of the public API</dont>
13
+ <dont>Using IconButton with render={&lt;a /&gt;} instead of IconButtonLink</dont>
14
+ </usage>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <a11y surface="linear-progress">
3
+ <rule>Provide a visible `label` or an accessible name through Base UI progress props when the task is not otherwise clear.</rule>
4
+ <rule>Use determinate numeric `value` when actual progress is known.</rule>
5
+ <rule>Use `value={null}` only for truly indeterminate work.</rule>
6
+ </a11y>
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <meta id="linear-progress" title="LinearProgress" category="feedback" shared_contract="linear-progress">
3
+ <summary>Shows determinate or indeterminate progress for a task in a compact horizontal track.</summary>
4
+ <exports>
5
+ <export name="LinearProgress" />
6
+ </exports>
7
+ <related>
8
+ <ref id="slider" />
9
+ <ref id="spinner" />
10
+ <ref id="skeleton" />
11
+ <ref id="text" />
12
+ <ref id="meter" />
13
+ </related>
14
+ <units>
15
+ <unit kind="a11y" href="a11y.xml" />
16
+ <unit kind="props" href="props.xml" />
17
+ <unit kind="usage" href="usage.xml" />
18
+ <unit kind="patterns" href="patterns.xml" />
19
+ </units>
20
+ <base_ui href="https://base-ui.com/react/components/progress#api-reference" />
21
+ </meta>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <patterns surface="linear-progress">
3
+ <example title="LinearProgress structure">
4
+ <tsx><![CDATA[<LinearProgress value={40} />]]></tsx>
5
+ <notes>Public assembly hint from legacy guide; not API authority.</notes>
6
+ </example>
7
+ </patterns>
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <props surface="linear-progress">
3
+ <when_to_use>
4
+ <item>Use for task completion with a known percentage or bounded numeric value.</item>
5
+ <item>Use with `value={null}` when progress is active but the amount complete is unknown.</item>
6
+ <item>Use with a label when the progress bar needs a visible task name.</item>
7
+ </when_to_use>
8
+ <when_not_to_use>
9
+ <item>Use Spinner for a small standalone loading affordance without task context.</item>
10
+ <item>Use Skeleton when representing loading content layout.</item>
11
+ <item>Use Slider when the user needs to choose or adjust a value.</item>
12
+ </when_not_to_use>
13
+ <prop name="description" kind="react">
14
+ <description>Static helper copy rendered with `Text` below the progress track.</description>
15
+ </prop>
16
+ <prop name="label" kind="react">
17
+ <description>Visible label rendered through `Progress.Label` with shared internal `FieldLabel`.</description>
18
+ </prop>
19
+ <prop name="renderValue" kind="react">
20
+ <description>Shows the current value beside the label. Pass `true` for Base UI default formatting, or a function matching `Progress.Value` `children` to customize the printed label.</description>
21
+ </prop>
22
+ <css_var suffix="indicator-color">
23
+ <description>Progress indicator color for determinate fill and indeterminate sweep.</description>
24
+ </css_var>
25
+ <css_var suffix="track-background">
26
+ <description>Progress track background color.</description>
27
+ </css_var>
28
+ <css_var suffix="track-size">
29
+ <description>Progress track thickness on the root.</description>
30
+ </css_var>
31
+ </props>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <usage surface="linear-progress">
3
+ <do>Use for task completion with a known percentage or bounded numeric value.</do>
4
+ <do>Use with `value={null}` when progress is active but the amount complete is unknown.</do>
5
+ <do>Use with a label when the progress bar needs a visible task name.</do>
6
+ <dont>Do not use LinearProgress as an interactive value control.</dont>
7
+ <dont>Do not add fake percentages for work where progress is unknown.</dont>
8
+ <dont>Do not model invalid progress; Base UI Progress does not expose an invalid state.</dont>
9
+ <dont>Do not model disabled progress; Base UI Progress does not expose a disabled state.</dont>
10
+ <dont>Do not hide the task label when multiple progress indicators are visible.</dont>
11
+ </usage>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <a11y surface="masonry">
3
+ <rule>Masonry distributes items round-robin into React column wrappers, so DOM, screen-reader, and keyboard order follow columns rather than original child order</rule>
4
+ <rule>Avoid interactive descendants when the visual arrangement could mislead keyboard users</rule>
5
+ <rule>Choose semantic item roots with Masonry.Item render when list or article semantics matter</rule>
6
+ </a11y>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <meta id="masonry" title="Masonry" category="layout" shared_contract="masonry">
3
+ <summary>Responsive React-column layout primitive for read-only mixed-height content walls; root is a named CSS container query context (`masonry` / inline-size).</summary>
4
+ <exports>
5
+ <export name="Masonry" />
6
+ </exports>
7
+ <related>
8
+ <ref id="stack" />
9
+ <ref id="surface" />
10
+ <ref id="text" />
11
+ </related>
12
+ <units>
13
+ <unit kind="a11y" href="a11y.xml" />
14
+ <unit kind="props" href="props.xml" />
15
+ <unit kind="usage" href="usage.xml" />
16
+ <unit kind="patterns" href="patterns.xml" />
17
+ </units>
18
+ </meta>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <patterns surface="masonry">
3
+ <example title="Masonry structure">
4
+ <tsx><![CDATA[<Masonry>
5
+ <Masonry.Item>…</Masonry.Item>
6
+ </Masonry>]]></tsx>
7
+ <notes>Public assembly hint from legacy guide; not API authority.</notes>
8
+ </example>
9
+ </patterns>
@@ -0,0 +1,32 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <props surface="masonry">
3
+ <when_to_use>
4
+ <item>Card walls, gallery-like collections, and editorial layouts with uneven item heights</item>
5
+ <item>Presentational walls where responsive column count matters more than source-order reading</item>
6
+ <item>Read-only collections composed from Surface, Stack, Text, and similar content primitives</item>
7
+ <item>Style descendants with @container masonry queries when layout should respond to the Masonry root&apos;s inline-size (peer Surface/Stack named containers)</item>
8
+ </when_to_use>
9
+ <when_not_to_use>
10
+ <item>Interactive collections where keyboard tab order must match source order</item>
11
+ <item>Layouts that need strict row alignment or item-to-item placement control</item>
12
+ <item>Cases where Stack or another linear layout already preserves the intended reading sequence</item>
13
+ </when_not_to_use>
14
+ <prop name="breakpointCols" kind="react">
15
+ <description>Sets the mobile-first column count at each CSS px container breakpoint. Each non-`default` key is a unitless `min-width` in px against the Masonry root&apos;s content-box inline size. Keys may be in any order; the largest matching breakpoint wins. Non-finite keys are ignored.</description>
16
+ </prop>
17
+ <prop name="gap" kind="react">
18
+ <description>Sets the gap between columns (`--vui-masonry-gap`) and the `rowGap` on each column `Stack`.</description>
19
+ </prop>
20
+ <prop name="Item.ref" kind="react">
21
+ <description>Ref forwarded to the rendered item root element.</description>
22
+ </prop>
23
+ <prop name="Item.render" kind="react">
24
+ <description>Replaces the default `div` item root using Base UI render semantics.</description>
25
+ </prop>
26
+ <prop name="render" kind="react">
27
+ <description>Replaces the default `div` root using Base UI render semantics.</description>
28
+ </prop>
29
+ <css_var suffix="gap">
30
+ <description>Column gap only (`--vui-masonry-gap` on the flex root). Within-column item spacing uses Stack `rowGap`, not this custom property.</description>
31
+ </css_var>
32
+ </props>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <usage surface="masonry">
3
+ <do>Card walls, gallery-like collections, and editorial layouts with uneven item heights</do>
4
+ <do>Presentational walls where responsive column count matters more than source-order reading</do>
5
+ <do>Read-only collections composed from Surface, Stack, Text, and similar content primitives</do>
6
+ <do>Style descendants with @container masonry queries when layout should respond to the Masonry root&apos;s inline-size (peer Surface/Stack named containers)</do>
7
+ <dont>Treating React columns as a true interactive grid with predictable source-order keyboard traversal</dont>
8
+ <dont>Using arbitrary child margins instead of the gap contract (column flex gap + Stack rowGap)</dont>
9
+ </usage>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <a11y surface="menu">
3
+ <rule>Give the trigger an accessible name (`Button` label, visible text in a Surface trigger rendered as `&lt;button&gt;`, or `aria-label` on IconButton)</rule>
4
+ <rule>Use `Menu.Group` `label` for grouped sections so assistive tech gets a group name</rule>
5
+ <rule>Prefer Base UI keyboard navigation; do not trap focus outside the menu pattern</rule>
6
+ <rule>`Menu.Popup` may include static non-item children (e.g. profile header); keep them non-interactive so focus roving stays on menu items</rule>
7
+ </a11y>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <meta id="menu" title="Menu" category="overlay" shared_contract="menu">
3
+ <summary>Compound menu built on Base UI Menu with `Menu.Trigger`, `Menu.Popup`, unified item rows, groups, checkbox/radio items, nested submenus, destructive sentiment, and `Menu.createHandle` for detached triggers; `Popup` owns Portal + Positioner + Elevator/Surface Select-like list chrome.</summary>
4
+ <exports>
5
+ <export name="Menu" />
6
+ </exports>
7
+ <related>
8
+ <ref id="avatar" />
9
+ <ref id="button" />
10
+ <ref id="icon-button" />
11
+ <ref id="popover" />
12
+ <ref id="select" />
13
+ <ref id="stack" />
14
+ <ref id="surface" />
15
+ <ref id="text" />
16
+ <ref id="tooltip" />
17
+ </related>
18
+ <units>
19
+ <unit kind="a11y" href="a11y.xml" />
20
+ <unit kind="props" href="props.xml" />
21
+ <unit kind="usage" href="usage.xml" />
22
+ <unit kind="patterns" href="patterns.xml" />
23
+ </units>
24
+ <base_ui href="https://base-ui.com/react/components/menu#api-reference" />
25
+ </meta>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <patterns surface="menu">
3
+ <example title="Menu structure">
4
+ <tsx><![CDATA[<Menu>
5
+ <Menu.Trigger />
6
+ <Menu.Popup>
7
+ <Menu.Item />
8
+ <Menu.LinkItem />
9
+ <Menu.CheckboxItem />
10
+ <Menu.Group label="…">
11
+ <Menu.Item />
12
+ </Menu.Group>
13
+ <Menu.RadioGroup>
14
+ <Menu.RadioItem value="…" />
15
+ </Menu.RadioGroup>
16
+ <Menu.Separator />
17
+ <Menu.Submenu>
18
+ <Menu.SubmenuTrigger />
19
+ <Menu.Popup>…</Menu.Popup>
20
+ </Menu.Submenu>
21
+ </Menu.Popup>
22
+ </Menu>]]></tsx>
23
+ <notes>Public assembly hint from legacy guide; not API authority.</notes>
24
+ </example>
25
+ </patterns>
@@ -0,0 +1,73 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <props surface="menu">
3
+ <when_to_use>
4
+ <item>Action menus anchored to a button or icon button</item>
5
+ <item>Nested command lists with checkbox or radio options that stay open on toggle</item>
6
+ <item>Link rows mixed with actions in one menu surface</item>
7
+ <item>Detached or multi-trigger menus via `Menu.createHandle`</item>
8
+ <item>Account / user widgets: `Menu.Trigger` as a Surface chip (avatar + name + email) opening a Popup with a static profile header plus action items</item>
9
+ <item>Custom portal host (iframe preview, shadow root, or app overlay root) via `container` on the portal-owning public part</item>
10
+ </when_to_use>
11
+ <when_not_to_use>
12
+ <item>Page-blocking modal flows (use Dialog)</item>
13
+ <item>Form field single-select from a long list (use Select)</item>
14
+ <item>Context menu or menubar chrome (not in this surface)</item>
15
+ <item>System-wide transient alerts (use Toast)</item>
16
+ <item>Rich non-menu panels with forms or free layout (use Popover / Dialog — do not wrap Menu in Popover)</item>
17
+ </when_not_to_use>
18
+ <prop name="CheckboxItem.addon" kind="react">
19
+ <description>Decorative leading node rendered before the item label.</description>
20
+ </prop>
21
+ <prop name="CheckboxItem.note" kind="react">
22
+ <description>End-aligned secondary text (e.g. keyboard shortcut) before the check indicator. Rendered muted `x-small`.</description>
23
+ </prop>
24
+ <prop name="CheckboxItem.sentiment" kind="react">
25
+ <description>Visual sentiment. `destructive` uses highlight-red wash + text.</description>
26
+ </prop>
27
+ <prop name="Group.label" kind="react">
28
+ <description>Accessible group label rendered with `Menu.GroupLabel`.</description>
29
+ </prop>
30
+ <prop name="Item.addon" kind="react">
31
+ <description>Decorative leading node rendered before the item label.</description>
32
+ </prop>
33
+ <prop name="Item.note" kind="react">
34
+ <description>End-aligned secondary text (e.g. keyboard shortcut). Rendered muted `x-small`.</description>
35
+ </prop>
36
+ <prop name="Item.sentiment" kind="react">
37
+ <description>Visual sentiment. `destructive` uses highlight-red wash + text.</description>
38
+ </prop>
39
+ <prop name="LinkItem.addon" kind="react">
40
+ <description>Decorative leading node rendered before the item label.</description>
41
+ </prop>
42
+ <prop name="LinkItem.note" kind="react">
43
+ <description>End-aligned secondary text (e.g. keyboard shortcut). Rendered muted `x-small`.</description>
44
+ </prop>
45
+ <prop name="LinkItem.sentiment" kind="react">
46
+ <description>Visual sentiment. `destructive` uses highlight-red wash + text.</description>
47
+ </prop>
48
+ <prop name="Popup.children" kind="react">
49
+ <description>Menu items and optional static, non-interactive content rendered inside the popup.</description>
50
+ </prop>
51
+ <prop name="Popup.container" kind="react">
52
+ <description>Portal mount node (iframe body, shadow root, or app overlay root). Omit for Base UI default (`document.body` from the module window — iframe hosts must pass the iframe document body explicitly).</description>
53
+ </prop>
54
+ <prop name="RadioGroup.label" kind="react">
55
+ <description>Optional accessible group label rendered with `Menu.GroupLabel`.</description>
56
+ </prop>
57
+ <prop name="RadioItem.addon" kind="react">
58
+ <description>Decorative leading node rendered before the item label.</description>
59
+ </prop>
60
+ <prop name="RadioItem.note" kind="react">
61
+ <description>End-aligned secondary text (e.g. keyboard shortcut) before the check indicator. Rendered muted `x-small`.</description>
62
+ </prop>
63
+ <prop name="RadioItem.sentiment" kind="react">
64
+ <description>Visual sentiment. `destructive` uses highlight-red wash + text.</description>
65
+ </prop>
66
+ <prop name="SubmenuTrigger.addon" kind="react">
67
+ <description>Decorative leading node rendered before the item label.</description>
68
+ </prop>
69
+ <prop name="SubmenuTrigger.sentiment" kind="react">
70
+ <description>Visual sentiment. `destructive` uses highlight-red wash + text.</description>
71
+ </prop>
72
+
73
+ </props>
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <usage surface="menu">
3
+ <do>Action menus anchored to a button or icon button</do>
4
+ <do>Nested command lists with checkbox or radio options that stay open on toggle</do>
5
+ <do>Link rows mixed with actions in one menu surface</do>
6
+ <do>Detached or multi-trigger menus via `Menu.createHandle`</do>
7
+ <do>Account / user widgets: `Menu.Trigger` as a Surface chip (avatar + name + email) opening a Popup with a static profile header plus action items</do>
8
+ <do>Custom portal host (iframe preview, shadow root, or app overlay root) via `container` on the portal-owning public part</do>
9
+ <dont>Expecting `Menu.Arrow`, `Menu.Backdrop`, or public Portal/Positioner/Viewport exports</dont>
10
+ <dont>Closing checkbox/radio items on click by default when the menu should stay open for multi-toggle</dont>
11
+ <dont>Using physical left/right CSS that breaks RTL submenu chevrons</dont>
12
+ <dont>Expecting RTL item rows / left-opening submenus without Base UI `DirectionProvider direction=&quot;rtl&quot;` plus app `dir=&quot;rtl&quot;` on a portal ancestor (usually `&lt;html&gt;` / document root — a local wrapper alone does not reach body-mounted popups)</dont>
13
+ <dont>Nesting Menu inside Popover for an account menu — Menu already owns portal, positioning, and listbox keyboard behavior</dont>
14
+ <dont>Putting focusable controls (inputs, nested buttons) in `Menu.Popup` outside `Menu.Item` / `Menu.LinkItem` / checkbox / radio / submenu trigger parts</dont>
15
+ </usage>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <a11y surface="meter">
3
+ <rule>Provide a visible `label` or an accessible name through `aria-label` / `aria-labelledby` when the metric is not otherwise clear.</rule>
4
+ <rule>Keep `value` numeric and within `min` / `max` for accurate `aria-valuenow` semantics.</rule>
5
+ <rule>Use `description` for supplementary context that should not replace the accessible name.</rule>
6
+ </a11y>
@@ -0,0 +1,19 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <meta id="meter" title="Meter" category="feedback" shared_contract="meter">
3
+ <summary>Shows a determinate metric in a compact horizontal track for static capacity, level, or score values.</summary>
4
+ <exports>
5
+ <export name="Meter" />
6
+ </exports>
7
+ <related>
8
+ <ref id="linear-progress" />
9
+ <ref id="slider" />
10
+ <ref id="text" />
11
+ </related>
12
+ <units>
13
+ <unit kind="a11y" href="a11y.xml" />
14
+ <unit kind="props" href="props.xml" />
15
+ <unit kind="usage" href="usage.xml" />
16
+ <unit kind="patterns" href="patterns.xml" />
17
+ </units>
18
+ <base_ui href="https://base-ui.com/react/components/meter#api-reference" />
19
+ </meta>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <patterns surface="meter">
3
+ <example title="Meter structure">
4
+ <tsx><![CDATA[<Meter value={40} />]]></tsx>
5
+ <notes>Public assembly hint from legacy guide; not API authority.</notes>
6
+ </example>
7
+ </patterns>