@viraui/react 2026.3.11 → 2026.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,127 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <attributes>
3
+ <summary>Data attributes and related CSS custom properties exposed by @viraui/react/preflight.css.</summary>
4
+ <prerequisite>Import compatible theme CSS, then @viraui/react/preflight.css. See foundation/bootstrap.xml.</prerequisite>
5
+ <attr name="data-mode">
6
+ <presence>value required</presence>
7
+ <effect>Narrows color-scheme on the element subtree: light forces light, dark forces dark, inverted flips color-scheme relative to the active theme using --is-light-mode on the root container.</effect>
8
+ <values>
9
+ <value>light</value>
10
+ <value>dark</value>
11
+ <value>inverted</value>
12
+ </values>
13
+ <when>Toggle runtime light or dark mode on html, body, or a layout wrapper</when>
14
+ <when>Scope a subtree to one mode while the rest of the page stays unchanged</when>
15
+ <when>Invert color-scheme on a nested surface that must contrast the active theme, for example a primary Chip addon inside a primary Button</when>
16
+ <when_not>As a substitute for loading compatible theme CSS</when_not>
17
+ <when_not>To swap brand stylesheets; use theme CSS imports instead</when_not>
18
+ <gotcha>data-mode is independent from brand stylesheet selection; see runtime-enhancements.md</gotcha>
19
+ </attr>
20
+ <attr name="data-no-link-style">
21
+ <presence>boolean attribute on anchor elements</presence>
22
+ <effect>Excludes the anchor from preflight default link styling (interactive color, no underline, animated underline on unclassed links).</effect>
23
+ <values>
24
+ <value>(boolean presence)</value>
25
+ </values>
26
+ <when>Links that must keep component-owned or custom link chrome</when>
27
+ <when>Anchors inside Button, IconButton, or other interactive surfaces</when>
28
+ <when_not>Standard inline prose links that should inherit preflight link styling</when_not>
29
+
30
+ </attr>
31
+ <attr name="data-elevation">
32
+ <presence>value required</presence>
33
+ <effect>When the active theme sets --effect-shadows, applies resting box-shadow stack for the chosen elevation level.</effect>
34
+ <values>
35
+ <value>0</value>
36
+ <value>1</value>
37
+ <value>2</value>
38
+ <value>3</value>
39
+ <value>4</value>
40
+ </values>
41
+ <when>Static surfaces such as cards, panels, and popovers</when>
42
+ <when>Direct DOM usage without the Elevator component</when>
43
+ <when_not>When Elevator or getElevationProps already sets elevation hooks on the target element</when_not>
44
+ <when_not>When the theme sets --effect-shadows: initial (attr is a no-op for box-shadow)</when_not>
45
+ <gotcha>Elevator</gotcha>
46
+ <gotcha>Surface</gotcha>
47
+ <gotcha>getElevationProps</gotcha>
48
+ <gotcha>--effect-shadows</gotcha>
49
+ </attr>
50
+ <attr name="data-elevation-hover">
51
+ <presence>optional value</presence>
52
+ <effect>When the active theme sets --effect-shadows, applies a different elevation level on :hover than the resting data-elevation value.</effect>
53
+ <values>
54
+ <value>0</value>
55
+ <value>1</value>
56
+ <value>2</value>
57
+ <value>3</value>
58
+ <value>4</value>
59
+ </values>
60
+ <when>Interactive surfaces that should lift on hover</when>
61
+ <when>Pair with data-elevation for resting and hover shadow levels</when>
62
+ <when_not>When hover elevation is not desired; omit the attribute entirely</when_not>
63
+ <when_not>When the theme sets --effect-shadows: initial (attr is a no-op for box-shadow)</when_not>
64
+ <gotcha>Elevator</gotcha>
65
+ <gotcha>getElevationProps</gotcha>
66
+ <gotcha>--effect-shadows</gotcha>
67
+ </attr>
68
+ <attr name="data-elevation-direction">
69
+ <presence>optional; defaults to bottom when data-elevation is present</presence>
70
+ <effect>When the active theme sets --effect-shadows, casts the shadow downward, upward, to the left, or to the right.</effect>
71
+ <values>
72
+ <value>bottom</value>
73
+ <value>top</value>
74
+ <value>left</value>
75
+ <value>right</value>
76
+ </values>
77
+ <when>Side drawers, top bars, or lateral panels where shadow direction matters</when>
78
+ <when_not>When default bottom cast is sufficient</when_not>
79
+ <when_not>When the theme sets --effect-shadows: initial (attr is a no-op for box-shadow)</when_not>
80
+ <gotcha>Elevator</gotcha>
81
+ <gotcha>getElevationProps</gotcha>
82
+ <gotcha>--effect-shadows</gotcha>
83
+ </attr>
84
+ <attr name="data-grow">
85
+ <presence>optional; omit for default flex growth</presence>
86
+ <effect>Affects only the element: true sets --vira-flex-grow: 1 and flex-grow: 1; false sets --vira-flex-grow: 0 and flex-grow: 0. Custom props are registered inherits: false so ancestors do not poison nested Stack expandChildren.</effect>
87
+ <values>
88
+ <value>true</value>
89
+ <value>false</value>
90
+ </values>
91
+ <when>Force grow or opt out on an expandChildren direct child</when>
92
+ <when>Fixed-width icons, indicators, or trailing slots (false)</when>
93
+ <when_not>When default flex growth is already correct</when_not>
94
+ <when_not>Expecting ancestor data-grow to change nested expandChildren children</when_not>
95
+ <gotcha>Stack</gotcha>
96
+ <gotcha>--vira-flex-grow</gotcha>
97
+ </attr>
98
+ <attr name="data-shrink">
99
+ <presence>optional; omit for default flex shrink</presence>
100
+ <effect>Affects only the element: true sets --vira-flex-shrink: 1 and flex-shrink: 1; false sets --vira-flex-shrink: 0 and flex-shrink: 0. Custom props are registered inherits: false.</effect>
101
+ <values>
102
+ <value>true</value>
103
+ <value>false</value>
104
+ </values>
105
+ <when>Force shrink or resist shrink on that flex item</when>
106
+ <when>Labels, icons, or controls that must keep intrinsic width (false)</when>
107
+ <when_not>When default flex shrink is already correct</when_not>
108
+ <when_not>Expecting ancestor data-shrink to change nested flex consumers</when_not>
109
+ <gotcha>Stack</gotcha>
110
+ <gotcha>--vira-flex-shrink</gotcha>
111
+ </attr>
112
+ <attr name="data-vibrant">
113
+ <presence>boolean attribute; value ignored</presence>
114
+ <effect>When the active theme sets --effect-vibrancy, applies vibrancy backdrop-filter (brightness/blur/saturate). Surface with data-vibrant translucifies its fill via component CSS: without color, frosted shell from --global-background; with color, 80% tint from --vui-surface-background.</effect>
115
+ <values>
116
+ <value>(boolean presence)</value>
117
+ </values>
118
+ <when>Glass / frosted panels on Surface or other hosts over busy backgrounds</when>
119
+ <when>Match overlay chrome (Dialog/Popover/Menu/Toast) that ships with data-vibrant</when>
120
+ <when_not>When the theme does not expose --effect-vibrancy (attr is a no-op for filters)</when_not>
121
+ <when_not>Hand-rolling backdrop-filter CSS instead of the documented attr</when_not>
122
+ <gotcha>Surface</gotcha>
123
+ <gotcha>--effect-vibrancy</gotcha>
124
+ <gotcha>--vibrancy-blur</gotcha>
125
+ <gotcha>--vibrancy-brightness</gotcha>
126
+ </attr>
127
+ </attributes>
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <bootstrap>
3
+ <summary>Minimal bootstrap for external apps consuming @viraui/react.</summary>
4
+ <required_packages>
5
+ <package name="@viraui/react">Public components, preflight CSS, and package specs.</package>
6
+ <package name="react">Peer dependency.</package>
7
+ <package name="react-dom">Peer dependency.</package>
8
+ <package name="@base-ui/react">Peer dependency for wrapped primitives.</package>
9
+ </required_packages>
10
+ <optional_packages>
11
+ <package name="@viraui/foundation">Preset Vira brand theme CSS, ThemeTypes, and JSON only.</package>
12
+ <package name="@viraui/icons">Optional Vira content glyphs (@viraui/icons/react). Icon slots accept any ReactNode.</package>
13
+ </optional_packages>
14
+ <import_order>
15
+ <step>Compatible theme CSS (preset @viraui/foundation/vira.css, custom theme CSS, or future theme-builder export)</step>
16
+ <step>Consumer font CSS or @font-face rules matching theme font-family strings</step>
17
+ <step>@viraui/react/preflight.css</step>
18
+ </import_order>
19
+ <component_css>
20
+ <rule>Import public components from the @viraui/react root barrel. Component CSS follows the JS module graph through side-effect CSS imports.</rule>
21
+ <optional_explicit_import>@viraui/react/&lt;component&gt;.css for tree-shaking or debugging only; not part of default bootstrap.</optional_explicit_import>
22
+ </component_css>
23
+ <cascade_layers>
24
+ <order>viraui.preflight, viraui.components, viraui.overrides</order>
25
+ <rule>Preflight owns the canonical @layer order; component CSS re-declares the same order. Unlayered app CSS beats all Vira layers.</rule>
26
+ </cascade_layers>
27
+ <import_mechanism>
28
+ <rule>Load theme CSS, font CSS, and preflight through JavaScript side-effect imports in the app root entry module.</rule>
29
+ <forbidden>Do not bootstrap Vira theme, font, or preflight CSS with CSS @import in a global stylesheet. Do not require per-component CSS imports in app bootstrap.</forbidden>
30
+ </import_mechanism>
31
+ <root_providers>
32
+ <rule>After CSS bootstrap, wrap the app tree once in Dialog.Provider, Dialog.IndentBackground, Dialog.Indent, Tooltip.Provider, and Toast.Provider. Toast.createToastManager() stays at module scope. Map Toast.useToastManager().toasts to Toast.Banner inside Toast.Portal and Toast.Viewport.</rule>
33
+ <tree>Dialog.Provider</tree>
34
+ <tree>Dialog.IndentBackground (sibling of Indent)</tree>
35
+ <tree>Dialog.Indent (wraps app + toast viewport)</tree>
36
+ <tree>Tooltip.Provider</tree>
37
+ <tree>Toast.Provider toastManager={toastManager}</tree>
38
+ <tree>children</tree>
39
+ <tree>Toast.Portal &gt; Toast.Viewport &gt; Toast.Banner per toast</tree>
40
+ <next_js>Keep CSS side-effect imports in the Server Component root layout. Put the provider tree in a Client Component that wraps children.</next_js>
41
+ <astro>React context does not cross Astro islands. Providers must live in the same island as the Vira overlays that consume them.</astro>
42
+ <rtl>For RTL menus and popups, wrap with Base UI DirectionProvider direction="rtl" and set dir="rtl" on a portal ancestor (usually html).</rtl>
43
+ </root_providers>
44
+ <next_js_app_router>
45
+ <rule>In Next.js App Router apps, import theme CSS, font CSS, and @viraui/react/preflight.css as JavaScript side-effect imports in root app/layout.tsx; never bootstrap them with CSS @import in globals.css.</rule>
46
+ <entry_module>app/layout.tsx</entry_module>
47
+ <tsx><![CDATA[
48
+ import '@viraui/foundation/vira.css';
49
+ import '@fontsource-variable/geist/wght.css';
50
+ import '@fontsource-variable/geist-mono/wght.css';
51
+ import '@viraui/react/preflight.css';
52
+ import './globals.css';
53
+ ]]></tsx>
54
+ </next_js_app_router>
55
+ <discovery>
56
+ <path>@viraui/react/catalog.json</path>
57
+ <path>@viraui/react/specs/PROTOCOL.md</path>
58
+ <path>@viraui/react/specs/index.xml</path>
59
+ <path>@viraui/react/specs/foundation/*.xml</path>
60
+ <path>@viraui/react/specs/components/&lt;id&gt;/*.xml</path>
61
+ </discovery>
62
+ </bootstrap>
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <elevation>
3
+ <summary>Elevation on React nodes prefers Elevator or getElevationProps; raw data-elevation* only when those do not fit. Surface has no elevation prop.</summary>
4
+ <do>Use Elevator or getElevationProps for React elements that need resting/hover shadow stacks.</do>
5
+ <do>Pass data-elevation / data-elevation-hover values 0–4 and data-elevation-direction bottom|top|left|right on raw DOM when utilities do not fit.</do>
6
+ <dont>Do not pass elevation={…} on Surface — use Elevator / getElevationProps / data-elevation*.</dont>
7
+ <dont>Do not hand-roll box-shadow; elevation needs --effect-shadows on the active theme.</dont>
8
+ <api name="getElevationProps">
9
+ <description>Returns data-elevation* attributes plus --shadow-color / --extra-shadow style hooks from resting, hover, direction, shadowColor, and extraShadow.</description>
10
+ <tsx><![CDATA[
11
+ import { getElevationProps } from '@viraui/react';
12
+
13
+ const { attributes, style } = getElevationProps({ resting: 2, hover: 3 });
14
+ <div {...attributes} style={style} />
15
+ ]]></tsx>
16
+ </api>
17
+ <related>
18
+ <ref id="elevator" />
19
+ <ref id="foundation-attributes" />
20
+ </related>
21
+ </elevation>
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <meta id="core" title="Core / preflight" category="foundation" shared_contract="core">
3
+ <summary>Preflight CSS, consumer bootstrap, data-* hooks, core CSS toggles (polarity + effects), elevation helpers, and theme token topic map shipping with @viraui/react.</summary>
4
+ <exports>
5
+ <export name="getElevationProps" />
6
+ </exports>
7
+ <related>
8
+ <ref id="elevator" />
9
+ <ref id="surface" />
10
+ <ref id="stack" />
11
+ </related>
12
+ <units>
13
+ <unit kind="bootstrap" href="bootstrap.xml" />
14
+ <unit kind="attributes" href="attributes.xml" />
15
+ <unit kind="toggles" href="toggles.xml" />
16
+ <unit kind="theme-topics" href="theme-topics.xml" />
17
+ <unit kind="elevation" href="elevation.xml" />
18
+ <unit kind="modules" href="modules.xml" />
19
+ </units>
20
+ </meta>
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <modules>
3
+ <summary>Preflight CSS modules under packages/react/src/core/preflight/ that compose @viraui/react/preflight.css.</summary>
4
+ <module id="themes" file="modes.css">
5
+ <purpose>Runtime color-scheme hints for light, dark, and inverted mode.</purpose>
6
+ </module>
7
+ <module id="core" file="core.css">
8
+ <purpose>Root baseline including html font-size from --font-root-size, --is-light-mode registration, global element defaults, and corner-shape gate via var(--__corner-shape, var(--corner-shape)).</purpose>
9
+ </module>
10
+ <module id="typography" file="typography.css">
11
+ <purpose>Semantic HTML element typography and link styling opt-out.</purpose>
12
+ </module>
13
+ <module id="elevations" file="elevations.css">
14
+ <purpose>Theme-gated resting and hover box-shadow elevation stacks plus unlayered box-shadow transitions.</purpose>
15
+ </module>
16
+ <module id="layout" file="layout.css">
17
+ <purpose>Flex growth and shrink utilities via data-grow / data-shrink for Stack and component children.</purpose>
18
+ </module>
19
+ <module id="vibrancy" file="vibrancy.css">
20
+ <purpose>Theme-gated backdrop-filter vibrancy on elements that opt in with data-vibrant.</purpose>
21
+ </module>
22
+ <custom_property name="--is-light-mode">
23
+ <purpose>Registers the active theme polarity for @container root queries; data-mode=&quot;inverted&quot; flips color-scheme against this value.</purpose>
24
+ <default>black</default>
25
+ <set_by>html root in core.css from contrast-color(var(--global-background))</set_by>
26
+ </custom_property>
27
+ <custom_property name="--shadow-color">
28
+ <purpose>Shadow tint for data-elevation stacks.</purpose>
29
+ <default>oklch(0% 0 0)</default>
30
+ <set_by>inline style or component elevation mapping</set_by>
31
+ </custom_property>
32
+ <custom_property name="--extra-shadow">
33
+ <purpose>Additional box-shadow layer appended to elevation stacks, for example hairline borders.</purpose>
34
+ <default>0 0 0 1px transparent</default>
35
+ <set_by>inline style or component elevation mapping</set_by>
36
+ </custom_property>
37
+ <custom_property name="--elevation-transition-duration">
38
+ <purpose>Duration for data-elevation box-shadow transitions.</purpose>
39
+ <default>160ms</default>
40
+ <set_by>inline style or theme override</set_by>
41
+ </custom_property>
42
+ <custom_property name="--elevation-transition-easing">
43
+ <purpose>Timing function for data-elevation box-shadow transitions.</purpose>
44
+ <default>ease</default>
45
+ <set_by>inline style or theme override</set_by>
46
+ </custom_property>
47
+ <custom_property name="--vira-flex-grow">
48
+ <purpose>Local grow signal for Stack expandChildren / child flex defaults; does not inherit so ancestor data-grow cannot poison nested stacks.</purpose>
49
+ <default>1 (initial-value); inherits: false; Stack expandChildren uses var(--vira-flex-grow, 1)</default>
50
+ <set_by>data-grow=&quot;true&quot; or data-grow=&quot;false&quot;; registered in global-properties.css</set_by>
51
+ </custom_property>
52
+ <custom_property name="--vira-flex-shrink">
53
+ <purpose>Local shrink signal for flex defaults; does not inherit so ancestor data-shrink cannot poison descendants.</purpose>
54
+ <default>1 (initial-value); inherits: false</default>
55
+ <set_by>data-shrink=&quot;true&quot; or data-shrink=&quot;false&quot;; registered in global-properties.css</set_by>
56
+ </custom_property>
57
+ <custom_property name="--__corner-shape">
58
+ <purpose>Internal override for the preflight corner-shape gate so infinite radius keeps round pill arcs when --effect-corner-shape is on. Not a consumer data-* or public theme recipe. Consumers must disable corner-shape when using infinite radius.</purpose>
59
+ <default>guaranteed-invalid (no initial-value); inherits: false; preflight uses var(--__corner-shape, var(--corner-shape))</default>
60
+ <set_by>ViraUI components on the same element as infinite / pill radius (CSS modules or React style); registered in global-properties.css</set_by>
61
+ </custom_property>
62
+ </modules>
@@ -0,0 +1,60 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <theme_topics>
3
+ <summary>Public semantic CSS custom properties required by @viraui/react components.</summary>
4
+ <compatibility>Custom and builder-generated themes must keep documented semantic variable names stable while values may change.</compatibility>
5
+ <topic id="bootstrap-order">
6
+ <summary>Load compatible theme CSS, then consumer fonts, then @viraui/react/preflight.css via JS side-effect imports.</summary>
7
+ </topic>
8
+ <topic id="base">
9
+ <pattern>--base-*</pattern>
10
+ <summary>Semantic neutral ramp for surfaces and text on themed backgrounds.</summary>
11
+ </topic>
12
+ <topic id="global">
13
+ <pattern>--global-*</pattern>
14
+ <summary>App-facing foreground, background, primary, muted, interactive, disabled, and contrast colors.</summary>
15
+ </topic>
16
+ <topic id="effects">
17
+ <pattern>--effect-vibrancy | --effect-corner-shape | --effect-holofoil | --effect-shadows</pattern>
18
+ <summary>Optional effect toggles; empty/unset = on, initial = off. Brand holofoil defaults to initial (off); vibrancy, corner-shape, and shadows default empty (on). Holofoil on paints a fixed body::after foil overlay; shadows off disables preflight data-elevation box-shadow stacks.</summary>
19
+ </topic>
20
+ <topic id="vibrancy">
21
+ <pattern>--vibrancy-blur | --vibrancy-brightness</pattern>
22
+ <summary>Vibrancy glass params; blur is a numeric amount consumed as pixels, brightness is a percent string.</summary>
23
+ </topic>
24
+ <topic id="highlight">
25
+ <pattern>--highlight-*</pattern>
26
+ <summary>Status and decorative highlight palette.</summary>
27
+ </topic>
28
+ <topic id="radius">
29
+ <pattern>--radius-* | --corner-shape</pattern>
30
+ <summary>Semantic radius scale plus corner-shape value for component chrome. Infinite/pill radius with --effect-corner-shape on can cap true pills; ViraUI sets internal --__corner-shape (preflight-owned, not a consumer data-*) beside infinite radius.</summary>
31
+ </topic>
32
+ <topic id="space">
33
+ <pattern>--space-*</pattern>
34
+ <summary>Semantic spacing scale for layout and component padding.</summary>
35
+ </topic>
36
+ <topic id="font-root-size">
37
+ <pattern>--font-root-size</pattern>
38
+ <summary>Root html font-size as a percentage of the user-agent default; preflight applies it on html so rem-based scales inherit the brand baseline.</summary>
39
+ </topic>
40
+ <topic id="font-scale">
41
+ <pattern>--font-scale-*</pattern>
42
+ <summary>Semantic typography sizes including display, headings, and body steps.</summary>
43
+ </topic>
44
+ <topic id="font-family">
45
+ <pattern>--font-family-heading | --font-family-body | --font-family-mono</pattern>
46
+ <summary>Semantic font-family touchpoints; consumers must provide matching @font-face rules.</summary>
47
+ </topic>
48
+ <topic id="font-leading">
49
+ <pattern>--font-leading-*</pattern>
50
+ <summary>Semantic line-height scale for text and title components.</summary>
51
+ </topic>
52
+ <topic id="color-primitives">
53
+ <pattern>--color-{palette}-{step}</pattern>
54
+ <summary>Raw palette steps 0–70 by tens referenced by semantic aliases; not the primary consumer override API.</summary>
55
+ </topic>
56
+ <topic id="motion">
57
+ <pattern>--duration-* | --easing-*</pattern>
58
+ <summary>Duration and easing tokens for component motion.</summary>
59
+ </topic>
60
+ </theme_topics>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <toggles>
3
+ <summary>Core polarity and theme effect gates shipped with preflight. Polarity: --is-light-mode is a &lt;color&gt; on the root container (black = light theme, white = dark theme); query it with @container root style(--is-light-mode: black|white). Effect toggles: empty/unset = on, initial = off; brand holofoil defaults to initial (off); vibrancy, corner-shape, and shadows default empty (on). Gate effects with @container root not style(--effect-*: initial). Holofoil on paints a fixed body::after foil overlay; shadows off disables preflight data-elevation box-shadow stacks.</summary>
4
+ <toggle name="--is-light-mode">
5
+ <when>html registers polarity via contrast-color(var(--global-background)) so light backgrounds resolve to black and dark backgrounds to white; container name is root (see core.css).</when>
6
+ <when>data-mode=&quot;light&quot; forces --is-light-mode: black and color-scheme: light; data-mode=&quot;dark&quot; forces white and color-scheme: dark.</when>
7
+ <when>data-mode=&quot;inverted&quot; flips color-scheme against the root value: @container root style(--is-light-mode: black) → dark; style(--is-light-mode: white) → light.</when>
8
+ <when>Component/preflight CSS branches on polarity with @container root style(--is-light-mode: black) or white — e.g. vibrancy brightness, holofoil mix-blend, Button/Chip secondary fills. Do not invent alternate light/dark hooks.</when>
9
+ </toggle>
10
+ <toggle name="--effect-shadows">
11
+ <when>Empty/unset enables data-elevation box-shadow stacks; set to initial to disable. Preflight gates with @container root not style(--effect-shadows: initial). Do not hand-roll box-shadow.</when>
12
+ </toggle>
13
+ <toggle name="--effect-vibrancy">
14
+ <when>Empty/unset enables data-vibrant backdrop filters; set to initial to disable. Preflight gates with @container root not style(--effect-vibrancy: initial); vibrancy may further branch on --is-light-mode. Do not hand-roll backdrop-filter.</when>
15
+ </toggle>
16
+ <toggle name="--effect-corner-shape">
17
+ <when>Empty/unset enables theme corner-shape on *; set to initial to disable. Preflight gates with @container root not style(--effect-corner-shape: initial) and applies var(--__corner-shape, var(--corner-shape)). Pair with --corner-shape token.</when>
18
+ </toggle>
19
+ <toggle name="--effect-holofoil">
20
+ <when>Brand default is initial (off). When on, paints a fixed body::after foil overlay gated by @container root not style(--effect-holofoil: initial); foil blend adjusts under @container root style(--is-light-mode: white). Do not invent alternate foil hooks.</when>
21
+ </toggle>
22
+ <toggle name="--corner-shape">
23
+ <when>Theme corner shape token; preflight may set internal --__corner-shape beside infinite radius. Not a consumer data-*.</when>
24
+ </toggle>
25
+ </toggles>