@viraui/react 2026.3.11 → 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 (302) hide show
  1. package/dist/catalog.json +50 -50
  2. package/dist/components/textarea/textarea.js +2 -2
  3. package/dist/components/textfield/textfield.js +2 -2
  4. package/dist/specs/PROTOCOL.md +48 -0
  5. package/dist/specs/activity-hints.xml +42 -0
  6. package/dist/specs/components/accordion/a11y.xml +6 -0
  7. package/dist/specs/components/accordion/meta.xml +20 -0
  8. package/dist/specs/components/accordion/patterns.xml +9 -0
  9. package/dist/specs/components/accordion/props.xml +48 -0
  10. package/dist/specs/components/accordion/usage.xml +8 -0
  11. package/dist/specs/components/annotate/a11y.xml +6 -0
  12. package/dist/specs/components/annotate/meta.xml +19 -0
  13. package/dist/specs/components/annotate/patterns.xml +7 -0
  14. package/dist/specs/components/annotate/props.xml +88 -0
  15. package/dist/specs/components/annotate/usage.xml +10 -0
  16. package/dist/specs/components/autocomplete/a11y.xml +6 -0
  17. package/dist/specs/components/autocomplete/meta.xml +22 -0
  18. package/dist/specs/components/autocomplete/patterns.xml +14 -0
  19. package/dist/specs/components/autocomplete/props.xml +81 -0
  20. package/dist/specs/components/autocomplete/usage.xml +11 -0
  21. package/dist/specs/components/avatar/a11y.xml +5 -0
  22. package/dist/specs/components/avatar/meta.xml +17 -0
  23. package/dist/specs/components/avatar/patterns.xml +7 -0
  24. package/dist/specs/components/avatar/props.xml +38 -0
  25. package/dist/specs/components/avatar/usage.xml +7 -0
  26. package/dist/specs/components/avatar-group/a11y.xml +6 -0
  27. package/dist/specs/components/avatar-group/meta.xml +16 -0
  28. package/dist/specs/components/avatar-group/patterns.xml +7 -0
  29. package/dist/specs/components/avatar-group/props.xml +39 -0
  30. package/dist/specs/components/avatar-group/usage.xml +10 -0
  31. package/dist/specs/components/badge/a11y.xml +7 -0
  32. package/dist/specs/components/badge/meta.xml +19 -0
  33. package/dist/specs/components/badge/patterns.xml +7 -0
  34. package/dist/specs/components/badge/props.xml +37 -0
  35. package/dist/specs/components/badge/usage.xml +9 -0
  36. package/dist/specs/components/beam/a11y.xml +7 -0
  37. package/dist/specs/components/beam/meta.xml +18 -0
  38. package/dist/specs/components/beam/patterns.xml +7 -0
  39. package/dist/specs/components/beam/props.xml +90 -0
  40. package/dist/specs/components/beam/usage.xml +11 -0
  41. package/dist/specs/components/bleed/a11y.xml +7 -0
  42. package/dist/specs/components/bleed/meta.xml +18 -0
  43. package/dist/specs/components/bleed/patterns.xml +7 -0
  44. package/dist/specs/components/bleed/props.xml +22 -0
  45. package/dist/specs/components/bleed/usage.xml +10 -0
  46. package/dist/specs/components/breakpoints/a11y.xml +5 -0
  47. package/dist/specs/components/breakpoints/meta.xml +17 -0
  48. package/dist/specs/components/breakpoints/patterns.xml +9 -0
  49. package/dist/specs/components/breakpoints/props.xml +20 -0
  50. package/dist/specs/components/breakpoints/usage.xml +9 -0
  51. package/dist/specs/components/button/a11y.xml +9 -0
  52. package/dist/specs/components/button/meta.xml +20 -0
  53. package/dist/specs/components/button/patterns.xml +11 -0
  54. package/dist/specs/components/button/props.xml +101 -0
  55. package/dist/specs/components/button/usage.xml +18 -0
  56. package/dist/specs/components/checkbox/a11y.xml +6 -0
  57. package/dist/specs/components/checkbox/meta.xml +21 -0
  58. package/dist/specs/components/checkbox/patterns.xml +7 -0
  59. package/dist/specs/components/checkbox/props.xml +48 -0
  60. package/dist/specs/components/checkbox/usage.xml +10 -0
  61. package/dist/specs/components/chip/a11y.xml +6 -0
  62. package/dist/specs/components/chip/meta.xml +19 -0
  63. package/dist/specs/components/chip/patterns.xml +7 -0
  64. package/dist/specs/components/chip/props.xml +49 -0
  65. package/dist/specs/components/chip/usage.xml +11 -0
  66. package/dist/specs/components/clamp-text/a11y.xml +6 -0
  67. package/dist/specs/components/clamp-text/meta.xml +17 -0
  68. package/dist/specs/components/clamp-text/patterns.xml +7 -0
  69. package/dist/specs/components/clamp-text/props.xml +27 -0
  70. package/dist/specs/components/clamp-text/usage.xml +8 -0
  71. package/dist/specs/components/dialog/a11y.xml +7 -0
  72. package/dist/specs/components/dialog/meta.xml +21 -0
  73. package/dist/specs/components/dialog/patterns.xml +19 -0
  74. package/dist/specs/components/dialog/props.xml +49 -0
  75. package/dist/specs/components/dialog/usage.xml +12 -0
  76. package/dist/specs/components/elevator/a11y.xml +6 -0
  77. package/dist/specs/components/elevator/meta.xml +16 -0
  78. package/dist/specs/components/elevator/patterns.xml +7 -0
  79. package/dist/specs/components/elevator/props.xml +31 -0
  80. package/dist/specs/components/elevator/usage.xml +8 -0
  81. package/dist/specs/components/fieldset/a11y.xml +6 -0
  82. package/dist/specs/components/fieldset/meta.xml +22 -0
  83. package/dist/specs/components/fieldset/patterns.xml +7 -0
  84. package/dist/specs/components/fieldset/props.xml +26 -0
  85. package/dist/specs/components/fieldset/usage.xml +11 -0
  86. package/dist/specs/components/fit-text/a11y.xml +6 -0
  87. package/dist/specs/components/fit-text/meta.xml +18 -0
  88. package/dist/specs/components/fit-text/patterns.xml +7 -0
  89. package/dist/specs/components/fit-text/props.xml +19 -0
  90. package/dist/specs/components/fit-text/usage.xml +9 -0
  91. package/dist/specs/components/glow/a11y.xml +6 -0
  92. package/dist/specs/components/glow/meta.xml +19 -0
  93. package/dist/specs/components/glow/patterns.xml +7 -0
  94. package/dist/specs/components/glow/props.xml +74 -0
  95. package/dist/specs/components/glow/usage.xml +12 -0
  96. package/dist/specs/components/grid/a11y.xml +6 -0
  97. package/dist/specs/components/grid/meta.xml +18 -0
  98. package/dist/specs/components/grid/patterns.xml +9 -0
  99. package/dist/specs/components/grid/props.xml +101 -0
  100. package/dist/specs/components/grid/usage.xml +10 -0
  101. package/dist/specs/components/icon-button/a11y.xml +9 -0
  102. package/dist/specs/components/icon-button/meta.xml +18 -0
  103. package/dist/specs/components/icon-button/patterns.xml +11 -0
  104. package/dist/specs/components/icon-button/props.xml +95 -0
  105. package/dist/specs/components/icon-button/usage.xml +14 -0
  106. package/dist/specs/components/linear-progress/a11y.xml +6 -0
  107. package/dist/specs/components/linear-progress/meta.xml +21 -0
  108. package/dist/specs/components/linear-progress/patterns.xml +7 -0
  109. package/dist/specs/components/linear-progress/props.xml +31 -0
  110. package/dist/specs/components/linear-progress/usage.xml +11 -0
  111. package/dist/specs/components/masonry/a11y.xml +6 -0
  112. package/dist/specs/components/masonry/meta.xml +18 -0
  113. package/dist/specs/components/masonry/patterns.xml +9 -0
  114. package/dist/specs/components/masonry/props.xml +32 -0
  115. package/dist/specs/components/masonry/usage.xml +9 -0
  116. package/dist/specs/components/menu/a11y.xml +7 -0
  117. package/dist/specs/components/menu/meta.xml +25 -0
  118. package/dist/specs/components/menu/patterns.xml +25 -0
  119. package/dist/specs/components/menu/props.xml +73 -0
  120. package/dist/specs/components/menu/usage.xml +15 -0
  121. package/dist/specs/components/meter/a11y.xml +6 -0
  122. package/dist/specs/components/meter/meta.xml +19 -0
  123. package/dist/specs/components/meter/patterns.xml +7 -0
  124. package/dist/specs/components/meter/props.xml +31 -0
  125. package/dist/specs/components/meter/usage.xml +10 -0
  126. package/dist/specs/components/popover/a11y.xml +7 -0
  127. package/dist/specs/components/popover/meta.xml +22 -0
  128. package/dist/specs/components/popover/patterns.xml +15 -0
  129. package/dist/specs/components/popover/props.xml +37 -0
  130. package/dist/specs/components/popover/usage.xml +12 -0
  131. package/dist/specs/components/progressive-blur/a11y.xml +6 -0
  132. package/dist/specs/components/progressive-blur/meta.xml +17 -0
  133. package/dist/specs/components/progressive-blur/patterns.xml +7 -0
  134. package/dist/specs/components/progressive-blur/props.xml +28 -0
  135. package/dist/specs/components/progressive-blur/usage.xml +10 -0
  136. package/dist/specs/components/radio/a11y.xml +6 -0
  137. package/dist/specs/components/radio/meta.xml +20 -0
  138. package/dist/specs/components/radio/patterns.xml +9 -0
  139. package/dist/specs/components/radio/props.xml +44 -0
  140. package/dist/specs/components/radio/usage.xml +12 -0
  141. package/dist/specs/components/select/a11y.xml +6 -0
  142. package/dist/specs/components/select/meta.xml +21 -0
  143. package/dist/specs/components/select/patterns.xml +13 -0
  144. package/dist/specs/components/select/props.xml +83 -0
  145. package/dist/specs/components/select/usage.xml +14 -0
  146. package/dist/specs/components/separator/a11y.xml +6 -0
  147. package/dist/specs/components/separator/meta.xml +18 -0
  148. package/dist/specs/components/separator/patterns.xml +7 -0
  149. package/dist/specs/components/separator/props.xml +39 -0
  150. package/dist/specs/components/separator/usage.xml +8 -0
  151. package/dist/specs/components/shimmer/a11y.xml +6 -0
  152. package/dist/specs/components/shimmer/meta.xml +18 -0
  153. package/dist/specs/components/shimmer/patterns.xml +7 -0
  154. package/dist/specs/components/shimmer/props.xml +40 -0
  155. package/dist/specs/components/shimmer/usage.xml +9 -0
  156. package/dist/specs/components/skeleton/a11y.xml +8 -0
  157. package/dist/specs/components/skeleton/meta.xml +17 -0
  158. package/dist/specs/components/skeleton/patterns.xml +8 -0
  159. package/dist/specs/components/skeleton/props.xml +73 -0
  160. package/dist/specs/components/skeleton/usage.xml +10 -0
  161. package/dist/specs/components/slider/a11y.xml +6 -0
  162. package/dist/specs/components/slider/meta.xml +19 -0
  163. package/dist/specs/components/slider/patterns.xml +7 -0
  164. package/dist/specs/components/slider/props.xml +45 -0
  165. package/dist/specs/components/slider/usage.xml +8 -0
  166. package/dist/specs/components/spinner/a11y.xml +7 -0
  167. package/dist/specs/components/spinner/meta.xml +17 -0
  168. package/dist/specs/components/spinner/patterns.xml +7 -0
  169. package/dist/specs/components/spinner/props.xml +24 -0
  170. package/dist/specs/components/spinner/usage.xml +8 -0
  171. package/dist/specs/components/stack/a11y.xml +6 -0
  172. package/dist/specs/components/stack/meta.xml +19 -0
  173. package/dist/specs/components/stack/patterns.xml +7 -0
  174. package/dist/specs/components/stack/props.xml +94 -0
  175. package/dist/specs/components/stack/usage.xml +14 -0
  176. package/dist/specs/components/static-noise/a11y.xml +6 -0
  177. package/dist/specs/components/static-noise/meta.xml +17 -0
  178. package/dist/specs/components/static-noise/patterns.xml +7 -0
  179. package/dist/specs/components/static-noise/props.xml +27 -0
  180. package/dist/specs/components/static-noise/usage.xml +10 -0
  181. package/dist/specs/components/surface/a11y.xml +6 -0
  182. package/dist/specs/components/surface/meta.xml +17 -0
  183. package/dist/specs/components/surface/patterns.xml +7 -0
  184. package/dist/specs/components/surface/props.xml +92 -0
  185. package/dist/specs/components/surface/usage.xml +16 -0
  186. package/dist/specs/components/switch/a11y.xml +6 -0
  187. package/dist/specs/components/switch/meta.xml +19 -0
  188. package/dist/specs/components/switch/patterns.xml +7 -0
  189. package/dist/specs/components/switch/props.xml +48 -0
  190. package/dist/specs/components/switch/usage.xml +8 -0
  191. package/dist/specs/components/tabs/a11y.xml +6 -0
  192. package/dist/specs/components/tabs/meta.xml +19 -0
  193. package/dist/specs/components/tabs/patterns.xml +14 -0
  194. package/dist/specs/components/tabs/props.xml +24 -0
  195. package/dist/specs/components/tabs/usage.xml +8 -0
  196. package/dist/specs/components/text/a11y.xml +6 -0
  197. package/dist/specs/components/text/meta.xml +17 -0
  198. package/dist/specs/components/text/patterns.xml +7 -0
  199. package/dist/specs/components/text/props.xml +129 -0
  200. package/dist/specs/components/text/usage.xml +7 -0
  201. package/dist/specs/components/textarea/a11y.xml +6 -0
  202. package/dist/specs/components/textarea/meta.xml +19 -0
  203. package/dist/specs/components/textarea/patterns.xml +7 -0
  204. package/dist/specs/components/textarea/props.xml +39 -0
  205. package/dist/specs/components/textarea/usage.xml +10 -0
  206. package/dist/specs/components/textfield/a11y.xml +6 -0
  207. package/dist/specs/components/textfield/meta.xml +21 -0
  208. package/dist/specs/components/textfield/patterns.xml +7 -0
  209. package/dist/specs/components/textfield/props.xml +51 -0
  210. package/dist/specs/components/textfield/usage.xml +9 -0
  211. package/dist/specs/components/title/a11y.xml +7 -0
  212. package/dist/specs/components/title/meta.xml +17 -0
  213. package/dist/specs/components/title/patterns.xml +7 -0
  214. package/dist/specs/components/title/props.xml +124 -0
  215. package/dist/specs/components/title/usage.xml +10 -0
  216. package/dist/specs/components/toast/a11y.xml +7 -0
  217. package/dist/specs/components/toast/meta.xml +20 -0
  218. package/dist/specs/components/toast/patterns.xml +15 -0
  219. package/dist/specs/components/toast/props.xml +42 -0
  220. package/dist/specs/components/toast/usage.xml +10 -0
  221. package/dist/specs/components/toggle-button/a11y.xml +6 -0
  222. package/dist/specs/components/toggle-button/meta.xml +20 -0
  223. package/dist/specs/components/toggle-button/patterns.xml +7 -0
  224. package/dist/specs/components/toggle-button/props.xml +61 -0
  225. package/dist/specs/components/toggle-button/usage.xml +10 -0
  226. package/dist/specs/components/toggle-group/a11y.xml +6 -0
  227. package/dist/specs/components/toggle-group/meta.xml +19 -0
  228. package/dist/specs/components/toggle-group/patterns.xml +9 -0
  229. package/dist/specs/components/toggle-group/props.xml +15 -0
  230. package/dist/specs/components/toggle-group/usage.xml +9 -0
  231. package/dist/specs/components/tooltip/a11y.xml +6 -0
  232. package/dist/specs/components/tooltip/meta.xml +21 -0
  233. package/dist/specs/components/tooltip/patterns.xml +12 -0
  234. package/dist/specs/components/tooltip/props.xml +20 -0
  235. package/dist/specs/components/tooltip/usage.xml +10 -0
  236. package/dist/specs/components/typewriter/a11y.xml +7 -0
  237. package/dist/specs/components/typewriter/meta.xml +18 -0
  238. package/dist/specs/components/typewriter/patterns.xml +7 -0
  239. package/dist/specs/components/typewriter/props.xml +43 -0
  240. package/dist/specs/components/typewriter/usage.xml +11 -0
  241. package/dist/specs/foundation/attributes.xml +127 -0
  242. package/dist/specs/foundation/bootstrap.xml +62 -0
  243. package/dist/specs/foundation/elevation.xml +21 -0
  244. package/dist/specs/foundation/meta.xml +20 -0
  245. package/dist/specs/foundation/modules.xml +62 -0
  246. package/dist/specs/foundation/theme-topics.xml +60 -0
  247. package/dist/specs/foundation/toggles.xml +25 -0
  248. package/dist/specs/index.xml +538 -0
  249. package/dist/specs/patterns/settings-row.xml +19 -0
  250. package/package.json +12 -11
  251. package/dist/components/accordion/accordion.guide.json +0 -69
  252. package/dist/components/annotate/annotate.guide.json +0 -110
  253. package/dist/components/autocomplete/autocomplete.guide.json +0 -103
  254. package/dist/components/avatar/avatar.guide.json +0 -53
  255. package/dist/components/avatar-group/avatar-group.guide.json +0 -56
  256. package/dist/components/badge/badge.guide.json +0 -59
  257. package/dist/components/beam/beam.guide.json +0 -123
  258. package/dist/components/bleed/bleed.guide.json +0 -43
  259. package/dist/components/breakpoints/breakpoints.guide.json +0 -40
  260. package/dist/components/button/button-link.guide.json +0 -69
  261. package/dist/components/button/button.guide.json +0 -78
  262. package/dist/components/checkbox/checkbox.guide.json +0 -68
  263. package/dist/components/chip/chip.guide.json +0 -69
  264. package/dist/components/clamp-text/clamp-text.guide.json +0 -47
  265. package/dist/components/dialog/dialog.guide.json +0 -72
  266. package/dist/components/elevator/elevator.guide.json +0 -46
  267. package/dist/components/fieldset/fieldset.guide.json +0 -43
  268. package/dist/components/fit-text/fit-text.guide.json +0 -38
  269. package/dist/components/glow/glow.guide.json +0 -108
  270. package/dist/components/grid/grid.guide.json +0 -120
  271. package/dist/components/icon-button/icon-button-link.guide.json +0 -73
  272. package/dist/components/icon-button/icon-button.guide.json +0 -72
  273. package/dist/components/linear-progress/linear-progress.guide.json +0 -53
  274. package/dist/components/masonry/masonry.guide.json +0 -50
  275. package/dist/components/menu/menu.guide.json +0 -94
  276. package/dist/components/meter/meter.guide.json +0 -52
  277. package/dist/components/popover/popover.guide.json +0 -58
  278. package/dist/components/progressive-blur/progressive-blur.guide.json +0 -50
  279. package/dist/components/radio/radio.guide.json +0 -65
  280. package/dist/components/select/select.guide.json +0 -105
  281. package/dist/components/separator/separator.guide.json +0 -58
  282. package/dist/components/shimmer/shimmer.guide.json +0 -67
  283. package/dist/components/skeleton/skeleton.guide.json +0 -98
  284. package/dist/components/slider/slider.guide.json +0 -64
  285. package/dist/components/spinner/spinner.guide.json +0 -43
  286. package/dist/components/stack/stack.guide.json +0 -116
  287. package/dist/components/static-noise/static-noise.guide.json +0 -44
  288. package/dist/components/surface/surface.guide.json +0 -115
  289. package/dist/components/switch/switch.guide.json +0 -71
  290. package/dist/components/tabs/tabs.guide.json +0 -43
  291. package/dist/components/text/text.guide.json +0 -152
  292. package/dist/components/textarea/textarea.guide.json +0 -55
  293. package/dist/components/textfield/textfield.guide.json +0 -70
  294. package/dist/components/title/title.guide.json +0 -149
  295. package/dist/components/toast/toast.guide.json +0 -60
  296. package/dist/components/toggle-button/toggle-button.guide.json +0 -81
  297. package/dist/components/toggle-group/toggle-group.guide.json +0 -27
  298. package/dist/components/tooltip/tooltip.guide.json +0 -40
  299. package/dist/components/typewriter/typewriter.guide.json +0 -65
  300. package/dist/consumption.json +0 -84
  301. package/dist/preflight-surface.json +0 -233
  302. package/dist/theme-surface.json +0 -71
@@ -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>
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <props surface="meter">
3
+ <when_to_use>
4
+ <item>Use for storage usage, battery level, capacity, or score within a known range.</item>
5
+ <item>Use with a label when the metric needs a visible name.</item>
6
+ <item>Use with `renderValue` when the formatted value should appear beside the label.</item>
7
+ </when_to_use>
8
+ <when_not_to_use>
9
+ <item>Use LinearProgress for in-progress tasks or indeterminate work.</item>
10
+ <item>Use Slider when the user needs to choose or adjust a value.</item>
11
+ <item>Use Spinner for a small standalone loading affordance without metric context.</item>
12
+ </when_not_to_use>
13
+ <prop name="description" kind="react">
14
+ <description>Static helper copy rendered with `Text` below the meter track.</description>
15
+ </prop>
16
+ <prop name="label" kind="react">
17
+ <description>Visible label rendered through `Meter.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 `Meter.Value` `children` to customize the printed label.</description>
21
+ </prop>
22
+ <css_var suffix="indicator-color">
23
+ <description>Determinate meter indicator color.</description>
24
+ </css_var>
25
+ <css_var suffix="track-background">
26
+ <description>Meter track background color.</description>
27
+ </css_var>
28
+ <css_var suffix="track-size">
29
+ <description>Meter track thickness on the root.</description>
30
+ </css_var>
31
+ </props>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <usage surface="meter">
3
+ <do>Use for storage usage, battery level, capacity, or score within a known range.</do>
4
+ <do>Use with a label when the metric needs a visible name.</do>
5
+ <do>Use with `renderValue` when the formatted value should appear beside the label.</do>
6
+ <dont>Do not use Meter as an interactive value control.</dont>
7
+ <dont>Do not use Meter for indeterminate or in-progress work.</dont>
8
+ <dont>Do not hide the metric label when multiple meters are visible.</dont>
9
+ <dont>Do not model invalid or disabled meter state; Base UI Meter does not expose those states.</dont>
10
+ </usage>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <a11y surface="popover">
3
+ <rule>Always pass `title`; add `description` when the heading alone is not enough context</rule>
4
+ <rule>With `unstyled`, render `Popover.Title` inside `children` (and `Popover.Description` when needed) so the popup keeps an accessible name</rule>
5
+ <rule>Compose `Popover.Close` with an accessible name when a visible close control is needed, or set `showCloseButton` for the built-in one</rule>
6
+ <rule>Use `modal` to control focus trap and outside interaction; render a `Popover.Close` inside the popup when `modal` is `true` or `&apos;trap-focus&apos;` so touch screen readers can escape</rule>
7
+ </a11y>
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <meta id="popover" title="Popover" category="overlay" shared_contract="popover">
3
+ <summary>Compound popover built on Base UI Popover with `Popover.Trigger`, `Popover.Sheet`, `Popover.Close`, `Popover.Title`, `Popover.Description`, and `Popover.createHandle` for detached and multiple triggers; `Sheet` encapsulates Portal + Positioner + Popup + Viewport + Title + Description and animates position, size, and content between triggers; `Sheet` with `unstyled` skips the built-in Surface and header so the consumer composes the popup chrome, including `Popover.Title` and `Popover.Description`.</summary>
4
+ <exports>
5
+ <export name="Popover" />
6
+ </exports>
7
+ <related>
8
+ <ref id="surface" />
9
+ <ref id="button" />
10
+ <ref id="icon-button" />
11
+ <ref id="stack" />
12
+ <ref id="dialog" />
13
+ <ref id="tabs" />
14
+ </related>
15
+ <units>
16
+ <unit kind="a11y" href="a11y.xml" />
17
+ <unit kind="props" href="props.xml" />
18
+ <unit kind="usage" href="usage.xml" />
19
+ <unit kind="patterns" href="patterns.xml" />
20
+ </units>
21
+ <base_ui href="https://base-ui.com/react/components/popover#api-reference" />
22
+ </meta>
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <patterns surface="popover">
3
+ <example title="Popover structure">
4
+ <tsx><![CDATA[<Popover>
5
+ <Popover.Trigger />
6
+ <Popover.Sheet unstyled>
7
+ <Popover.Title>…</Popover.Title>
8
+ <Popover.Description>…</Popover.Description>
9
+ …
10
+ <Popover.Close />
11
+ </Popover.Sheet>
12
+ </Popover>]]></tsx>
13
+ <notes>Public assembly hint from legacy guide; not API authority.</notes>
14
+ </example>
15
+ </patterns>
@@ -0,0 +1,37 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <props surface="popover">
3
+ <when_to_use>
4
+ <item>Anchored quick actions or contextual hints next to a triggering control</item>
5
+ <item>Lightweight forms or confirmations that float beside the trigger without blocking the page</item>
6
+ <item>Multi-trigger panels that swap content with direction-aware animations using `Popover.createHandle` and trigger `payload`</item>
7
+ <item>Hover-revealed hints via `openOnHover` with `delay` and `closeDelay`</item>
8
+ <item>Fully custom popup chrome via `Sheet` `unstyled` composed with `Popover.Title` and `Popover.Description`</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>Modal tasks that must block the page and demand focused attention (use Dialog)</item>
13
+ <item>Nested drill-down sheet flows (use Dialog)</item>
14
+ <item>System-wide transient alerts and confirmations (use Toast)</item>
15
+ </when_not_to_use>
16
+ <prop name="Sheet.container" kind="react">
17
+ <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>
18
+ </prop>
19
+ <prop name="Sheet.description" kind="react">
20
+ <description>Supporting copy announced with the title.</description>
21
+ </prop>
22
+ <prop name="Sheet.headerAlign" kind="react">
23
+ <description>Aligns the header content.</description>
24
+ </prop>
25
+ <prop name="Sheet.showCloseButton" kind="react">
26
+ <description>Whether to show the built-in flat IconButton close control.</description>
27
+ </prop>
28
+ <prop name="Sheet.title" kind="react">
29
+ <description>Accessible popover title rendered as the popup heading.</description>
30
+ </prop>
31
+ <prop name="Sheet.unstyled" kind="react">
32
+ <description>Whether to skip the built-in Surface, header, and close chrome and render only the positioning/animation shell (Portal + Positioner + Popup + Viewport).</description>
33
+ </prop>
34
+ <css_var suffix="content-fade-duration">
35
+ <description>content fade duration custom property on the component root.</description>
36
+ </css_var>
37
+ </props>