ropav 0.0.10 → 0.0.12

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 (276) hide show
  1. package/README.md +9 -0
  2. package/dist/accordion.css +115 -111
  3. package/dist/accordion.js +60 -16
  4. package/dist/alert.css +110 -108
  5. package/dist/alert.js +48 -26
  6. package/dist/aspect-ratio.css +17 -15
  7. package/dist/aspect-ratio.js +20 -6
  8. package/dist/avatar.css +98 -96
  9. package/dist/avatar.js +27 -16
  10. package/dist/badge.css +95 -93
  11. package/dist/badge.js +29 -16
  12. package/dist/base.css +672 -671
  13. package/dist/button-group.css +39 -37
  14. package/dist/button-group.js +23 -12
  15. package/dist/button-link.css +160 -158
  16. package/dist/button-link.js +43 -24
  17. package/dist/button.css +160 -158
  18. package/dist/button.js +37 -19
  19. package/dist/card.css +109 -107
  20. package/dist/card.js +42 -17
  21. package/dist/checkbox.css +139 -137
  22. package/dist/checkbox.js +103 -33
  23. package/dist/collapse.css +29 -27
  24. package/dist/collapse.js +44 -10
  25. package/dist/color-input.css +137 -107
  26. package/dist/color-input.js +117 -30
  27. package/dist/color-picker.css +309 -303
  28. package/dist/color-picker.js +147 -54
  29. package/dist/color-picker2.js +9 -1
  30. package/dist/color-swatch.css +48 -46
  31. package/dist/color-swatch.js +15 -11
  32. package/dist/color-swatch2.js +4 -0
  33. package/dist/components/accordion/accordion-item.d.ts +13 -1
  34. package/dist/components/accordion/index.d.ts +2 -1
  35. package/dist/components/accordion/index.js +2 -2
  36. package/dist/components/accordion/types.d.ts +9 -4
  37. package/dist/components/alert/alert.d.ts +2 -2
  38. package/dist/components/alert/index.d.ts +2 -2
  39. package/dist/components/alert/index.js +2 -2
  40. package/dist/components/alert/types.d.ts +4 -1
  41. package/dist/components/aspect-ratio/index.d.ts +2 -1
  42. package/dist/components/aspect-ratio/index.js +2 -2
  43. package/dist/components/aspect-ratio/types.d.ts +4 -1
  44. package/dist/components/avatar/index.d.ts +2 -2
  45. package/dist/components/avatar/index.js +2 -2
  46. package/dist/components/avatar/types.d.ts +4 -1
  47. package/dist/components/badge/index.d.ts +2 -2
  48. package/dist/components/badge/index.js +2 -2
  49. package/dist/components/badge/types.d.ts +4 -1
  50. package/dist/components/button/index.d.ts +2 -1
  51. package/dist/components/button/index.js +2 -2
  52. package/dist/components/button/types.d.ts +4 -1
  53. package/dist/components/button-group/index.d.ts +2 -1
  54. package/dist/components/button-group/index.js +2 -2
  55. package/dist/components/button-group/types.d.ts +4 -1
  56. package/dist/components/button-link/index.d.ts +2 -1
  57. package/dist/components/button-link/index.js +2 -2
  58. package/dist/components/button-link/types.d.ts +4 -1
  59. package/dist/components/card/index.d.ts +2 -1
  60. package/dist/components/card/index.js +2 -2
  61. package/dist/components/card/types.d.ts +5 -1
  62. package/dist/components/checkbox/checkbox.d.ts +4 -1
  63. package/dist/components/checkbox/index.d.ts +2 -1
  64. package/dist/components/checkbox/index.js +2 -2
  65. package/dist/components/checkbox/types.d.ts +11 -2
  66. package/dist/components/checkbox/useCheckbox.d.ts +3 -1
  67. package/dist/components/collapse/collapse.d.ts +2 -2
  68. package/dist/components/collapse/index.d.ts +2 -1
  69. package/dist/components/collapse/index.js +2 -2
  70. package/dist/components/collapse/types.d.ts +9 -2
  71. package/dist/components/color-input/index.d.ts +2 -1
  72. package/dist/components/color-input/index.js +2 -2
  73. package/dist/components/color-input/types.d.ts +8 -2
  74. package/dist/components/color-input/useColorInput.d.ts +1 -1
  75. package/dist/components/color-input/useColorInputValue.d.ts +1 -1
  76. package/dist/components/color-picker/index.d.ts +2 -2
  77. package/dist/components/color-picker/index.js +2 -2
  78. package/dist/components/color-picker/types.d.ts +13 -1
  79. package/dist/components/color-swatch/index.d.ts +2 -1
  80. package/dist/components/color-swatch/index.js +2 -1
  81. package/dist/components/color-swatch/types.d.ts +4 -1
  82. package/dist/components/dialog/dialog-close.d.ts +21 -0
  83. package/dist/components/dialog/dialog-content.d.ts +32 -0
  84. package/dist/components/dialog/dialog-core.d.ts +27 -0
  85. package/dist/components/dialog/dialog-description.d.ts +21 -0
  86. package/dist/components/dialog/dialog-overlay.d.ts +21 -0
  87. package/dist/components/dialog/dialog-portal.d.ts +21 -0
  88. package/dist/components/dialog/dialog-root.d.ts +28 -0
  89. package/dist/components/dialog/dialog-title.d.ts +21 -0
  90. package/dist/components/dialog/dialog-trigger.d.ts +23 -0
  91. package/dist/components/dialog/index.d.ts +9 -0
  92. package/dist/components/dialog/index.js +2 -0
  93. package/dist/components/dialog/types.d.ts +61 -0
  94. package/dist/components/dropdown-menu/dropdown-menu-checkbox-item.d.ts +24 -0
  95. package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +34 -0
  96. package/dist/components/dropdown-menu/dropdown-menu-context-trigger.d.ts +23 -0
  97. package/dist/components/dropdown-menu/dropdown-menu-item-indicator.d.ts +24 -0
  98. package/dist/components/dropdown-menu/dropdown-menu-item-row.d.ts +28 -0
  99. package/dist/components/dropdown-menu/dropdown-menu-item.d.ts +23 -0
  100. package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +24 -22
  101. package/dist/components/dropdown-menu/dropdown-menu-label.d.ts +21 -0
  102. package/dist/components/dropdown-menu/dropdown-menu-outside.d.ts +3 -0
  103. package/dist/components/dropdown-menu/dropdown-menu-portal.d.ts +21 -0
  104. package/dist/components/dropdown-menu/dropdown-menu-primitive-core.d.ts +110 -0
  105. package/dist/components/dropdown-menu/dropdown-menu-primitives.d.ts +15 -0
  106. package/dist/components/dropdown-menu/dropdown-menu-radio-group.d.ts +25 -0
  107. package/dist/components/dropdown-menu/dropdown-menu-radio-item.d.ts +23 -0
  108. package/dist/components/dropdown-menu/dropdown-menu-root.d.ts +30 -0
  109. package/dist/components/dropdown-menu/dropdown-menu-separator.d.ts +19 -0
  110. package/dist/components/dropdown-menu/dropdown-menu-sub-content.d.ts +34 -0
  111. package/dist/components/dropdown-menu/dropdown-menu-sub-trigger.d.ts +28 -0
  112. package/dist/components/dropdown-menu/dropdown-menu-sub.d.ts +28 -0
  113. package/dist/components/dropdown-menu/dropdown-menu-trigger.d.ts +23 -0
  114. package/dist/components/dropdown-menu/dropdown-menu.d.ts +6 -3
  115. package/dist/components/dropdown-menu/index.d.ts +32 -1
  116. package/dist/components/dropdown-menu/index.js +2 -2
  117. package/dist/components/dropdown-menu/types.d.ts +145 -6
  118. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +15 -3
  119. package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +10 -3
  120. package/dist/components/dropdown-menu/useDropdownMenuDom.d.ts +2 -1
  121. package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +4 -4
  122. package/dist/components/dropdown-menu/useDropdownMenuPortalPosition.d.ts +19 -0
  123. package/dist/components/dropdown-menu/useDropdownMenuPrimitiveContent.d.ts +27 -0
  124. package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +14 -2
  125. package/dist/components/field/index.d.ts +2 -1
  126. package/dist/components/field/index.js +2 -2
  127. package/dist/components/field/types.d.ts +4 -1
  128. package/dist/components/floating/index.d.ts +3 -0
  129. package/dist/components/floating/index.js +3 -0
  130. package/dist/components/floating/types.d.ts +105 -0
  131. package/dist/components/floating/useFloatingPosition.d.ts +15 -0
  132. package/dist/components/floating/useHoverDisclosure.d.ts +2 -0
  133. package/dist/components/focus-trap/focus-trap.d.ts +31 -0
  134. package/dist/components/focus-trap/index.d.ts +4 -0
  135. package/dist/components/focus-trap/index.js +3 -0
  136. package/dist/components/focus-trap/types.d.ts +41 -0
  137. package/dist/components/focus-trap/useFocusTrap.d.ts +2 -0
  138. package/dist/components/icon-button/index.d.ts +2 -1
  139. package/dist/components/icon-button/index.js +2 -1
  140. package/dist/components/icon-button/types.d.ts +4 -1
  141. package/dist/components/input/index.d.ts +2 -1
  142. package/dist/components/input/index.js +2 -1
  143. package/dist/components/input/input.d.ts +4 -1
  144. package/dist/components/input/types.d.ts +7 -2
  145. package/dist/components/modal/index.d.ts +2 -1
  146. package/dist/components/modal/index.js +2 -2
  147. package/dist/components/modal/modal.d.ts +3 -1
  148. package/dist/components/modal/types.d.ts +11 -1
  149. package/dist/components/modal/useModal.d.ts +7 -4
  150. package/dist/components/number-input/index.d.ts +2 -1
  151. package/dist/components/number-input/index.js +2 -2
  152. package/dist/components/number-input/types.d.ts +7 -2
  153. package/dist/components/number-input/useNumberInput.d.ts +2 -1
  154. package/dist/components/overlay/index.d.ts +2 -1
  155. package/dist/components/overlay/index.js +2 -1
  156. package/dist/components/overlay/types.d.ts +4 -1
  157. package/dist/components/popover/index.d.ts +2 -2
  158. package/dist/components/popover/index.js +2 -2
  159. package/dist/components/popover/popover.d.ts +2 -2
  160. package/dist/components/popover/types.d.ts +20 -11
  161. package/dist/components/popover/usePopover.d.ts +9 -1
  162. package/dist/components/progress/index.d.ts +2 -2
  163. package/dist/components/progress/index.js +2 -2
  164. package/dist/components/progress/types.d.ts +4 -1
  165. package/dist/components/radio/index.d.ts +2 -1
  166. package/dist/components/radio/index.js +2 -2
  167. package/dist/components/radio/radio.d.ts +8 -3
  168. package/dist/components/radio/types.d.ts +37 -4
  169. package/dist/components/radio/useRadio.d.ts +12 -4
  170. package/dist/components/select/index.d.ts +2 -1
  171. package/dist/components/select/index.js +2 -2
  172. package/dist/components/select/select.d.ts +4 -1
  173. package/dist/components/select/types.d.ts +10 -2
  174. package/dist/components/select/useSelect.d.ts +3 -1
  175. package/dist/components/slider/index.d.ts +2 -2
  176. package/dist/components/slider/index.js +2 -2
  177. package/dist/components/slider/range-slider-tooltip.d.ts +3 -0
  178. package/dist/components/slider/range-slider.d.ts +7 -4
  179. package/dist/components/slider/slider.d.ts +4 -1
  180. package/dist/components/slider/sliderCore.d.ts +4 -4
  181. package/dist/components/slider/types.d.ts +22 -4
  182. package/dist/components/slider/useRangeSlider.d.ts +2 -2
  183. package/dist/components/slider/useSlider.d.ts +2 -2
  184. package/dist/components/switch/index.d.ts +2 -1
  185. package/dist/components/switch/index.js +2 -2
  186. package/dist/components/switch/switch.d.ts +4 -1
  187. package/dist/components/switch/types.d.ts +11 -2
  188. package/dist/components/switch/useSwitch.d.ts +3 -1
  189. package/dist/components/tabs/index.d.ts +2 -1
  190. package/dist/components/tabs/index.js +2 -2
  191. package/dist/components/tabs/types.d.ts +13 -4
  192. package/dist/components/teleport-provider/index.d.ts +3 -0
  193. package/dist/components/teleport-provider/index.js +3 -0
  194. package/dist/components/teleport-provider/teleport-provider.d.ts +21 -0
  195. package/dist/components/teleport-provider/types.d.ts +4 -0
  196. package/dist/components/teleport-provider/useTeleportTarget.d.ts +6 -0
  197. package/dist/components/textarea/index.d.ts +2 -1
  198. package/dist/components/textarea/index.js +2 -2
  199. package/dist/components/textarea/textarea.d.ts +4 -1
  200. package/dist/components/textarea/types.d.ts +10 -2
  201. package/dist/components/textarea/useTextarea.d.ts +2 -1
  202. package/dist/components/toast/index.d.ts +3 -2
  203. package/dist/components/toast/index.js +2 -2
  204. package/dist/components/toast/toast-store.d.ts +2 -0
  205. package/dist/components/toast/toast.d.ts +2 -2
  206. package/dist/components/toast/types.d.ts +20 -10
  207. package/dist/components/toast/useToast.d.ts +2 -2
  208. package/dist/components/tooltip/index.d.ts +2 -1
  209. package/dist/components/tooltip/index.js +2 -1
  210. package/dist/components/tooltip/tooltip.d.ts +2 -2
  211. package/dist/components/tooltip/types.d.ts +13 -12
  212. package/dist/components/tooltip/useTooltip.d.ts +12 -2
  213. package/dist/composables/useOverlayLayer.d.ts +32 -0
  214. package/dist/dialog.js +510 -0
  215. package/dist/dropdown-menu.css +191 -108
  216. package/dist/dropdown-menu.js +1954 -198
  217. package/dist/field.css +41 -39
  218. package/dist/field.js +40 -16
  219. package/dist/floating.js +403 -0
  220. package/dist/focus-trap.js +80 -0
  221. package/dist/icon-button.css +193 -189
  222. package/dist/icon-button.js +23 -18
  223. package/dist/icon-button2.js +8 -0
  224. package/dist/index.d.ts +5 -0
  225. package/dist/index.js +39 -32
  226. package/dist/input.css +122 -120
  227. package/dist/input.js +63 -40
  228. package/dist/input2.js +9 -0
  229. package/dist/legacy-unlayered.css +5382 -0
  230. package/dist/modal.css +129 -127
  231. package/dist/modal.js +182 -281
  232. package/dist/number-input.css +87 -85
  233. package/dist/number-input.js +98 -26
  234. package/dist/overlay.css +26 -24
  235. package/dist/overlay.js +17 -9
  236. package/dist/overlay2.js +4 -0
  237. package/dist/popover.css +140 -107
  238. package/dist/popover.js +276 -196
  239. package/dist/popover2.js +6 -1
  240. package/dist/progress.css +101 -99
  241. package/dist/progress.js +50 -28
  242. package/dist/radio.css +114 -105
  243. package/dist/radio.js +237 -61
  244. package/dist/select.css +255 -242
  245. package/dist/select.js +257 -94
  246. package/dist/slider.css +1090 -1031
  247. package/dist/slider.js +443 -175
  248. package/dist/styles-api.d.ts +22 -0
  249. package/dist/styles-api.js +49 -0
  250. package/dist/switch.css +120 -108
  251. package/dist/switch.js +112 -38
  252. package/dist/tabs.css +286 -278
  253. package/dist/tabs.js +60 -21
  254. package/dist/teleport-provider.js +15 -0
  255. package/dist/textarea.css +132 -130
  256. package/dist/textarea.js +83 -31
  257. package/dist/toast.css +229 -225
  258. package/dist/toast.js +189 -118
  259. package/dist/tooltip.css +61 -106
  260. package/dist/tooltip.js +184 -228
  261. package/dist/tooltip2.js +8 -0
  262. package/dist/useControlState.js +4 -0
  263. package/dist/useFloatingPosition.js +1317 -0
  264. package/dist/useFocusTrap.js +130 -0
  265. package/dist/useFormControl.js +107 -0
  266. package/dist/useOverlayLayer.js +262 -0
  267. package/dist/useTeleportTarget.js +40 -0
  268. package/docs/public-floating-api.md +148 -0
  269. package/docs/public-styles-api.md +134 -0
  270. package/docs/public-tokens.md +545 -0
  271. package/package.json +37 -9
  272. package/src/styles/_tokens.scss +33 -28
  273. package/src/styles/_utilities.scss +11 -9
  274. package/src/styles/styles-manifest.json +4125 -0
  275. package/dist/rafScheduler.js +0 -34
  276. package/dist/useClickOutside.js +0 -24
@@ -0,0 +1,134 @@
1
+ # Public Styles API
2
+
3
+ The Public Styles API is the supported way to restyle Ropav without depending on component DOM nesting or internal selectors. Its compatibility baseline is commit `5102a40`.
4
+
5
+ ## Typed component API
6
+
7
+ Each component in the [semantic part catalog](#semantic-part-catalog) exports a runtime `*Parts` constant and its matching `*Part` union from both `ropav` and the component subpath. `classNames` and `styles` accept only those keys.
8
+
9
+ This contract applies to the cataloged, styled components, not every export from their subpaths. Headless compound primitives such as `DropdownMenuRoot`, `DropdownMenuTrigger` and `DropdownMenuContent` do not export `*Parts` or accept `classNames` and `styles`. When a primitive renders a host, style it with the forwarded `class` and `style` attributes instead.
10
+
11
+ ```vue
12
+ <Button
13
+ :class-names="{ root: $style.action, label: $style.label }"
14
+ :styles="{ root: { minWidth: '12rem' } }"
15
+ loading
16
+ >
17
+ Save
18
+ </Button>
19
+ ```
20
+
21
+ Objects and their values may be reactive Vue values. Values are normal Vue class and style values; they do not receive a state callback. Use the documented state attributes for state-dependent CSS.
22
+
23
+ Ropav does not expose a `vars` prop. Public CSS variables are set through CSS, the root `style` attribute, or `styles.root`.
24
+
25
+ ## Merge and forwarding contract
26
+
27
+ - Classes merge as internal classes, compatibility classes, `classNames`, then root `class` attributes.
28
+ - Styles merge as internal styles, compatibility styles, `styles`, then root `style` attributes. Later stages win a duplicate property.
29
+ - `Card.bodyClass`, `inputAttrs` styling and `thumbStyle` are compatibility stages. `Card.bodyClass` is deprecated; the other escape hatches remain because they also carry non-styling behavior.
30
+ - Attributes and native listeners are forwarded exactly once to the public root host. Internal native handlers run before consumer handlers.
31
+ - Declared component events remain component events. Component-owned roles, ARIA and behavioral attributes remain authoritative.
32
+ - Composite components do not copy root attributes into their child components. Teleported roots receive attributes on the rendered host, not on the virtual teleport node.
33
+
34
+ ## Semantic part catalog
35
+
36
+ Only independently useful semantic elements are public parts. Conditional parts exist only when their slot or prop renders them; consumer-owned slot content is not automatically a part.
37
+
38
+ | Component | Public parts |
39
+ | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
40
+ | Accordion | `root` |
41
+ | AccordionItem | `root`, `trigger`, `title`, `icon`, `content` |
42
+ | Alert | `root`, `icon`, `title`, `description`, `body`, `action`, `close` |
43
+ | AspectRatio | `root` |
44
+ | Avatar | `root`, `image`, `fallback` |
45
+ | Badge | `root`, `left`, `label`, `right` |
46
+ | Button, ButtonLink | `root`, `loader`, `left`, `label`, `right` |
47
+ | IconButton | `root`, `loader`, `icon` |
48
+ | ButtonGroup | `root` |
49
+ | Card | `root`, `header`, `title`, `description`, `body`, `footer` |
50
+ | Checkbox | `root`, `input`, `indicator`, `label` |
51
+ | Collapse | `root`, `trigger`, `content` |
52
+ | ColorInput | `root`, `control`, `input`, `preview`, `eyeDropper`, `content`, `picker`, `pickerControl`, `pickerHandle`, `pickerSwatches`, `pickerSwatch` |
53
+ | ColorPicker | `root`, `label`, `control`, `handle`, `swatches`, `swatch` |
54
+ | ColorSwatch | `root` |
55
+ | DropdownMenu | `root`, `trigger`, `content`, `item`, `label`, `shortcut`, `submenu`, `submenuIndicator`, `empty` |
56
+ | Field | `root`, `label`, `required`, `control`, `description` |
57
+ | FocusTrap | `root` |
58
+ | Input | `root`, `input`, `left`, `right` |
59
+ | Modal | `root`, `overlay`, `panel`, `header`, `title`, `description`, `body`, `footer`, `close` |
60
+ | NumberInput | `root`, `input`, `control` |
61
+ | Overlay | `root` |
62
+ | Popover, Tooltip | `root`, `trigger`, `content` |
63
+ | Progress | `root`, `label`, `value`, `track`, `indicator` |
64
+ | Radio | `root`, `input`, `indicator`, `label` |
65
+ | RadioGroup | `root` |
66
+ | Select | `root`, `trigger`, `value`, `indicator`, `clear`, `content`, `option`, `empty` |
67
+ | Slider, RangeSlider | `root`, `label`, `value`, `track`, `range`, `input`, `thumb`, `mark`, `markLabel`, `tooltip` |
68
+ | Switch | `root`, `input`, `track`, `thumb`, `label` |
69
+ | Tabs, TabsList, TabsTrigger, TabsContent | `root` on each component |
70
+ | Textarea | `root`, `input` |
71
+ | Toast | `root`, `icon`, `title`, `description`, `body`, `action`, `close` |
72
+ | ToastViewport | `root`, `item`, `toast`, `toastIcon`, `toastTitle`, `toastDescription`, `toastBody`, `toastAction`, `toastClose` |
73
+
74
+ `ToastProvider` renders no DOM and therefore has no Styles API.
75
+
76
+ ## State attributes
77
+
78
+ Boolean states use presence semantics: the attribute value is empty when true and the attribute is absent when false or unknown. Enum values are lowercase kebab-case.
79
+
80
+ - `data-state="open|closed"`: AccordionItem, Collapse, DropdownMenu and submenus, Modal, Popover, Select and Tooltip.
81
+ - `data-state="checked|unchecked|indeterminate"`: Checkbox.
82
+ - `data-state="checked|unchecked"`: Radio and Switch.
83
+ - `data-state="active|inactive"`: TabsTrigger and TabsContent.
84
+ - `data-state="determinate|indeterminate"`: Progress.
85
+ - `data-disabled`: the effective disabled state on each applicable control, trigger, item or option.
86
+ - `data-readonly`: Input, Textarea, ColorInput and ColorPicker controls.
87
+ - `data-invalid`: form-control roots and their public input parts.
88
+ - `data-loading`: Button, ButtonLink and IconButton.
89
+ - `data-active` and `data-paused`: FocusTrap.
90
+ - `data-selected`: Select options and ColorPicker swatches.
91
+ - `data-highlighted`: Select options and DropdownMenu items.
92
+ - `data-filled`: Slider and RangeSlider marks.
93
+ - `data-submenu`: DropdownMenu items that own children.
94
+ - `data-orientation="horizontal|vertical"`: Accordion, ButtonGroup, RadioGroup, Slider, RangeSlider, Tabs and TabsList.
95
+ - `data-placement`: the final placement after collision handling; twelve placements for Popover and DropdownMenu, and a side (`top`, `right`, `bottom`, `left`) for Tooltip.
96
+ - `data-side="top|right|bottom|left"`: the side component of the final placement for Popover, DropdownMenu and Tooltip.
97
+ - `data-control="increment|decrement"`: NumberInput controls.
98
+ - `data-control="saturation|hue|opacity"`: ColorPicker controls and handles.
99
+ - `data-thumb="lower|upper|merged"`: RangeSlider inputs, thumbs and tooltips; `data-active-thumb="lower|upper"` is present on its root only while a thumb is active.
100
+ - `data-type="default|success|error|warning|info"`: toast items and Toast roots rendered by ToastViewport.
101
+ - `data-position="top-left|top-center|top-right|bottom-left|bottom-center|bottom-right"`: ToastViewport.
102
+
103
+ Active menu and listbox descendants use `data-highlighted`. Actual DOM keyboard focus should be styled with `:focus-visible`.
104
+
105
+ ## Public CSS variables
106
+
107
+ The exact entries in [`styles-manifest.json`](../src/styles/styles-manifest.json) are the public contract. A design token enters that manifest only when it opts in with `$extensions.ropav.public: true`. Emitting a CSS variable is a separate runtime concern: neither emission nor a name prefix makes a variable public. Undocumented variables, underscore-prefixed variables, DOM structure and internal component selectors are not part of the public contract and may change.
108
+
109
+ The manifest contains design tokens plus a deliberately small component-geometry allowlist. Slider and RangeSlider share the `--rp-slider-*` namespace. Size presets provide fallbacks, while a consumer value wins for the individual dimension. See the generated [token table](./public-tokens.md).
110
+
111
+ Palette shades and their `*-contrast` companions are required override groups because `autoContrast` consumes the companion selected at build time. The [color override contract](./public-tokens.md#color-override-contract) documents the paired override and preset-role requirements.
112
+
113
+ ## Cascade layers and migration
114
+
115
+ The layered stylesheet declares `ropav.tokens` before `ropav.components`. A layered application can establish its full order before imports:
116
+
117
+ ```css
118
+ @layer reset, ropav.tokens, ropav.components, app;
119
+ ```
120
+
121
+ Place global resets in `reset` and application overrides in `app`. Import order does not change precedence once the order is declared. Unlayered application rules still outrank named Ropav layers.
122
+
123
+ Layer adoption changes cascade precedence. Consumers whose reset cannot yet be layered can temporarily import `ropav/legacy-unlayered.css` after that reset. The aggregate fallback is deprecated from its introduction and is intended only as a migration aid.
124
+
125
+ ## Compatibility
126
+
127
+ - Typed parts, state attributes, manifest entries, geometry variables and cascade layers form the current Public Styles API.
128
+ - Renaming or removing a documented part, state attribute or variable changes the public contract.
129
+ - Adding a public part, state attribute or variable extends the public contract.
130
+ - `tokens:check` compares the current manifest with the latest reachable `v*` release tag that contains one. Until the first such release, it uses the immutable manifest from the initial Public Styles API commit (`f16e826`). Released variables cannot be removed, renamed or changed semantically; adding a variable requires incrementing the manifest's `contractVersion`.
131
+ - Release tags must be available in the Git checkout that runs the check. `PUBLIC_STYLES_BASELINE_REF` can explicitly pin a commit or tag that contains a manifest.
132
+ - Internal DOM, selectors and undocumented variables are outside the public contract.
133
+ - `Card.bodyClass` is a deprecated compatibility escape hatch; prefer `classNames.body`.
134
+ - The legacy unlayered stylesheet is a temporary migration fallback for consumers that cannot yet adopt cascade layers.