opui-css 5.4.3 → 6.0.0-rc.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 (740) hide show
  1. package/CHANGELOG.md +1015 -373
  2. package/LICENSE +21 -21
  3. package/MIGRATING-legacy.md +159 -0
  4. package/MIGRATING.md +1362 -138
  5. package/README.md +238 -87
  6. package/astro/index.ts +175 -46
  7. package/bin/opui-css.mjs +68 -0
  8. package/components/Accordion/Accordion.astro +21 -48
  9. package/components/Accordion/Accordion.react.tsx +23 -0
  10. package/components/Accordion/Accordion.svelte +27 -0
  11. package/components/Accordion/Accordion.vue +21 -38
  12. package/components/Accordion/AccordionActions.astro +16 -0
  13. package/components/Accordion/AccordionActions.react.tsx +15 -0
  14. package/components/Accordion/AccordionActions.svelte +23 -0
  15. package/components/Accordion/AccordionActions.vue +18 -0
  16. package/components/Accordion/AccordionContent.astro +9 -0
  17. package/components/Accordion/AccordionContent.react.tsx +6 -0
  18. package/components/Accordion/AccordionContent.svelte +15 -0
  19. package/components/Accordion/AccordionContent.vue +12 -0
  20. package/components/Accordion/AccordionSummary.astro +19 -0
  21. package/components/Accordion/AccordionSummary.react.tsx +30 -0
  22. package/components/Accordion/AccordionSummary.svelte +24 -0
  23. package/components/Accordion/AccordionSummary.vue +27 -0
  24. package/components/Accordion/icons.ts +2 -0
  25. package/components/Accordion/types.astro.ts +13 -4
  26. package/components/Accordion/types.react.ts +14 -0
  27. package/components/Accordion/types.svelte.ts +15 -7
  28. package/components/Accordion/types.ts +16 -10
  29. package/components/Accordion/types.vue-props.ts +22 -0
  30. package/components/Anchor/Anchor.astro +37 -49
  31. package/components/Anchor/Anchor.react.tsx +38 -0
  32. package/components/Anchor/Anchor.svelte +47 -0
  33. package/components/Anchor/Anchor.vue +43 -41
  34. package/components/Anchor/AnchorContent.astro +17 -0
  35. package/components/Anchor/AnchorContent.react.tsx +18 -0
  36. package/components/Anchor/AnchorContent.svelte +23 -0
  37. package/components/Anchor/AnchorContent.vue +20 -0
  38. package/components/Anchor/context.astro.ts +4 -0
  39. package/components/Anchor/context.react.ts +8 -0
  40. package/components/Anchor/context.svelte.ts +7 -0
  41. package/components/Anchor/context.vue.ts +4 -0
  42. package/components/Anchor/root.ts +12 -0
  43. package/components/Anchor/types.astro.ts +7 -4
  44. package/components/Anchor/types.react.ts +7 -0
  45. package/components/Anchor/types.svelte.ts +7 -7
  46. package/components/Anchor/types.ts +18 -9
  47. package/components/Anchor/types.vue-props.ts +15 -0
  48. package/components/Avatar/Avatar.astro +33 -29
  49. package/components/Avatar/Avatar.react.tsx +34 -0
  50. package/components/Avatar/Avatar.svelte +39 -0
  51. package/components/Avatar/Avatar.vue +26 -24
  52. package/components/Avatar/AvatarGroup.astro +9 -0
  53. package/components/Avatar/AvatarGroup.react.tsx +12 -0
  54. package/components/Avatar/AvatarGroup.svelte +15 -0
  55. package/components/Avatar/AvatarGroup.vue +12 -0
  56. package/components/Avatar/types.astro.ts +11 -10
  57. package/components/Avatar/types.react.ts +11 -0
  58. package/components/Avatar/types.svelte.ts +11 -12
  59. package/components/Avatar/types.ts +32 -29
  60. package/components/Avatar/types.vue-props.ts +11 -0
  61. package/components/Badge/Badge.astro +56 -51
  62. package/components/Badge/Badge.react.tsx +50 -0
  63. package/components/Badge/Badge.svelte +48 -0
  64. package/components/Badge/Badge.vue +36 -40
  65. package/components/Badge/types.astro.ts +4 -4
  66. package/components/Badge/types.react.ts +6 -0
  67. package/components/Badge/types.svelte.ts +7 -4
  68. package/components/Badge/types.ts +12 -12
  69. package/components/Badge/types.vue-props.ts +7 -0
  70. package/components/Button/Button.astro +36 -36
  71. package/components/Button/Button.react.tsx +33 -0
  72. package/components/Button/Button.svelte +37 -0
  73. package/components/Button/Button.vue +27 -27
  74. package/components/Button/types.astro.ts +6 -6
  75. package/components/Button/types.react.ts +11 -0
  76. package/components/Button/types.svelte.ts +15 -6
  77. package/components/Button/types.ts +32 -16
  78. package/components/Button/types.vue-props.ts +6 -0
  79. package/components/ButtonGroup/ButtonGroup.astro +33 -29
  80. package/components/ButtonGroup/ButtonGroup.react.tsx +30 -0
  81. package/components/ButtonGroup/ButtonGroup.svelte +34 -0
  82. package/components/ButtonGroup/ButtonGroup.vue +25 -22
  83. package/components/ButtonGroup/types.astro.ts +4 -4
  84. package/components/ButtonGroup/types.react.ts +4 -0
  85. package/components/ButtonGroup/types.svelte.ts +4 -4
  86. package/components/ButtonGroup/types.ts +7 -7
  87. package/components/ButtonGroup/types.vue-props.ts +6 -0
  88. package/components/Callout/Callout.astro +24 -76
  89. package/components/Callout/Callout.react.tsx +26 -0
  90. package/components/Callout/Callout.svelte +32 -0
  91. package/components/Callout/Callout.vue +23 -63
  92. package/components/Callout/CalloutContent.astro +9 -0
  93. package/components/Callout/CalloutContent.react.tsx +6 -0
  94. package/components/Callout/CalloutContent.svelte +15 -0
  95. package/components/Callout/CalloutContent.vue +12 -0
  96. package/components/Callout/CalloutIcon.astro +25 -0
  97. package/components/Callout/CalloutIcon.react.tsx +26 -0
  98. package/components/Callout/CalloutIcon.svelte +24 -0
  99. package/components/Callout/CalloutIcon.vue +25 -0
  100. package/components/Callout/context.astro.ts +4 -0
  101. package/components/Callout/context.react.ts +8 -0
  102. package/components/Callout/context.svelte.ts +7 -0
  103. package/components/Callout/context.vue.ts +4 -0
  104. package/components/Callout/icons.ts +23 -0
  105. package/components/Callout/types.astro.ts +9 -4
  106. package/components/Callout/types.react.ts +9 -0
  107. package/components/Callout/types.svelte.ts +9 -7
  108. package/components/Callout/types.ts +10 -10
  109. package/components/Callout/types.vue-props.ts +14 -0
  110. package/components/Card/Card.astro +18 -34
  111. package/components/Card/Card.react.tsx +15 -0
  112. package/components/Card/Card.svelte +23 -0
  113. package/components/Card/Card.vue +18 -28
  114. package/components/Card/CardActions.astro +16 -0
  115. package/components/Card/CardActions.react.tsx +15 -0
  116. package/components/Card/CardActions.svelte +23 -0
  117. package/components/Card/CardActions.vue +18 -0
  118. package/components/Card/CardContent.astro +9 -0
  119. package/components/Card/CardContent.react.tsx +6 -0
  120. package/components/Card/CardContent.svelte +15 -0
  121. package/components/Card/CardContent.vue +12 -0
  122. package/components/Card/CardHeader.astro +9 -0
  123. package/components/Card/CardHeader.react.tsx +6 -0
  124. package/components/Card/CardHeader.svelte +15 -0
  125. package/components/Card/CardHeader.vue +12 -0
  126. package/components/Card/types.astro.ts +10 -4
  127. package/components/Card/types.react.ts +10 -0
  128. package/components/Card/types.svelte.ts +11 -7
  129. package/components/Card/types.ts +11 -11
  130. package/components/Card/types.vue-props.ts +17 -0
  131. package/components/Carousel/Carousel.astro +44 -0
  132. package/components/Carousel/Carousel.react.tsx +47 -0
  133. package/components/Carousel/Carousel.svelte +45 -0
  134. package/components/Carousel/Carousel.vue +44 -0
  135. package/components/Carousel/types.astro.ts +4 -0
  136. package/components/Carousel/types.react.ts +4 -0
  137. package/components/Carousel/types.svelte.ts +4 -0
  138. package/components/Carousel/types.ts +11 -0
  139. package/components/Carousel/types.vue-props.ts +6 -0
  140. package/components/Checkbox/Checkbox.astro +58 -46
  141. package/components/Checkbox/Checkbox.react.tsx +51 -0
  142. package/components/Checkbox/Checkbox.svelte +61 -0
  143. package/components/Checkbox/Checkbox.vue +64 -43
  144. package/components/Checkbox/CheckboxInput.astro +20 -16
  145. package/components/Checkbox/CheckboxInput.react.tsx +39 -0
  146. package/components/Checkbox/CheckboxInput.svelte +34 -0
  147. package/components/Checkbox/CheckboxInput.vue +50 -32
  148. package/components/Checkbox/types.astro.ts +7 -8
  149. package/components/Checkbox/types.react.ts +11 -0
  150. package/components/Checkbox/types.svelte.ts +16 -12
  151. package/components/Checkbox/types.ts +20 -16
  152. package/components/Checkbox/types.vue-props.ts +15 -0
  153. package/components/Chip/Chip.astro +47 -31
  154. package/components/Chip/Chip.react.tsx +45 -0
  155. package/components/Chip/Chip.svelte +45 -0
  156. package/components/Chip/Chip.vue +44 -37
  157. package/components/Chip/types.astro.ts +9 -9
  158. package/components/Chip/types.react.ts +15 -0
  159. package/components/Chip/types.svelte.ts +16 -14
  160. package/components/Chip/types.ts +30 -13
  161. package/components/Chip/types.vue-props.ts +11 -0
  162. package/components/DescriptionList/DescriptionList.astro +22 -18
  163. package/components/DescriptionList/DescriptionList.react.tsx +25 -0
  164. package/components/DescriptionList/DescriptionList.svelte +29 -0
  165. package/components/DescriptionList/DescriptionList.vue +22 -23
  166. package/components/DescriptionList/DescriptionListDescription.astro +9 -0
  167. package/components/DescriptionList/DescriptionListDescription.react.tsx +9 -0
  168. package/components/DescriptionList/DescriptionListDescription.svelte +15 -0
  169. package/components/DescriptionList/{Description.vue → DescriptionListDescription.vue} +15 -12
  170. package/components/DescriptionList/DescriptionListItem.astro +9 -0
  171. package/components/DescriptionList/DescriptionListItem.react.tsx +6 -0
  172. package/components/DescriptionList/DescriptionListItem.svelte +15 -0
  173. package/components/DescriptionList/{Item.vue → DescriptionListItem.vue} +15 -12
  174. package/components/DescriptionList/DescriptionListTerm.astro +9 -0
  175. package/components/DescriptionList/DescriptionListTerm.react.tsx +6 -0
  176. package/components/DescriptionList/DescriptionListTerm.svelte +15 -0
  177. package/components/DescriptionList/{Term.vue → DescriptionListTerm.vue} +15 -12
  178. package/components/DescriptionList/types.astro.ts +10 -10
  179. package/components/DescriptionList/types.react.ts +10 -0
  180. package/components/DescriptionList/types.svelte.ts +10 -4
  181. package/components/DescriptionList/types.ts +5 -3
  182. package/components/DescriptionList/types.vue-props.ts +12 -0
  183. package/components/Dialog/Dialog.astro +24 -38
  184. package/components/Dialog/Dialog.react.tsx +23 -0
  185. package/components/Dialog/Dialog.svelte +33 -0
  186. package/components/Dialog/Dialog.vue +25 -35
  187. package/components/Dialog/DialogContent.astro +9 -0
  188. package/components/Dialog/DialogContent.react.tsx +6 -0
  189. package/components/Dialog/DialogContent.svelte +15 -0
  190. package/components/Dialog/DialogContent.vue +12 -0
  191. package/components/Dialog/DialogFooter.astro +16 -0
  192. package/components/Dialog/DialogFooter.react.tsx +15 -0
  193. package/components/Dialog/DialogFooter.svelte +23 -0
  194. package/components/Dialog/DialogFooter.vue +18 -0
  195. package/components/Dialog/DialogHeader.astro +9 -0
  196. package/components/Dialog/DialogHeader.react.tsx +6 -0
  197. package/components/Dialog/DialogHeader.svelte +15 -0
  198. package/components/Dialog/DialogHeader.vue +12 -0
  199. package/components/Dialog/DialogTitle.astro +14 -0
  200. package/components/Dialog/DialogTitle.react.tsx +13 -0
  201. package/components/Dialog/DialogTitle.svelte +23 -0
  202. package/components/Dialog/DialogTitle.vue +18 -0
  203. package/components/Dialog/context.astro.ts +4 -0
  204. package/components/Dialog/context.react.ts +8 -0
  205. package/components/Dialog/context.svelte.ts +7 -0
  206. package/components/Dialog/context.vue.ts +4 -0
  207. package/components/Dialog/types.astro.ts +12 -4
  208. package/components/Dialog/types.react.ts +12 -0
  209. package/components/Dialog/types.svelte.ts +15 -7
  210. package/components/Dialog/types.ts +17 -10
  211. package/components/Dialog/types.vue-props.ts +24 -0
  212. package/components/Divider/Divider.astro +34 -12
  213. package/components/Divider/Divider.react.tsx +36 -0
  214. package/components/Divider/Divider.svelte +40 -0
  215. package/components/Divider/Divider.vue +30 -12
  216. package/components/Divider/types.astro.ts +4 -4
  217. package/components/Divider/types.react.ts +4 -0
  218. package/components/Divider/types.svelte.ts +4 -4
  219. package/components/Divider/types.ts +5 -3
  220. package/components/Divider/types.vue-props.ts +6 -0
  221. package/components/Drawer/Drawer.astro +42 -47
  222. package/components/Drawer/Drawer.react.tsx +40 -0
  223. package/components/Drawer/Drawer.svelte +50 -0
  224. package/components/Drawer/Drawer.vue +41 -46
  225. package/components/Drawer/DrawerContent.astro +9 -0
  226. package/components/Drawer/DrawerContent.react.tsx +6 -0
  227. package/components/Drawer/DrawerContent.svelte +15 -0
  228. package/components/Drawer/DrawerContent.vue +12 -0
  229. package/components/Drawer/DrawerFooter.astro +16 -11
  230. package/components/Drawer/DrawerFooter.react.tsx +15 -0
  231. package/components/Drawer/DrawerFooter.svelte +23 -0
  232. package/components/Drawer/DrawerFooter.vue +18 -16
  233. package/components/Drawer/DrawerHeader.astro +35 -27
  234. package/components/Drawer/DrawerHeader.react.tsx +41 -0
  235. package/components/Drawer/DrawerHeader.svelte +42 -0
  236. package/components/Drawer/DrawerHeader.vue +35 -36
  237. package/components/Drawer/DrawerTitle.astro +14 -0
  238. package/components/Drawer/DrawerTitle.react.tsx +13 -0
  239. package/components/Drawer/DrawerTitle.svelte +23 -0
  240. package/components/Drawer/DrawerTitle.vue +18 -0
  241. package/components/Drawer/context.astro.ts +4 -0
  242. package/components/Drawer/context.react.ts +8 -0
  243. package/components/Drawer/context.svelte.ts +7 -0
  244. package/components/Drawer/context.vue.ts +4 -0
  245. package/components/Drawer/icons.ts +2 -0
  246. package/components/Drawer/types.astro.ts +12 -8
  247. package/components/Drawer/types.react.ts +13 -0
  248. package/components/Drawer/types.svelte.ts +16 -15
  249. package/components/Drawer/types.ts +25 -20
  250. package/components/Drawer/types.vue-props.ts +24 -0
  251. package/components/FieldDescription/FieldDescription.astro +9 -9
  252. package/components/FieldDescription/FieldDescription.react.tsx +6 -0
  253. package/components/FieldDescription/FieldDescription.svelte +15 -0
  254. package/components/FieldDescription/FieldDescription.vue +12 -12
  255. package/components/FieldDescription/types.astro.ts +4 -4
  256. package/components/FieldDescription/types.react.ts +4 -0
  257. package/components/FieldDescription/types.svelte.ts +4 -4
  258. package/components/FieldDescription/types.ts +1 -1
  259. package/components/FieldDescription/types.vue-props.ts +6 -0
  260. package/components/FieldGroup/FieldGroup.astro +24 -24
  261. package/components/FieldGroup/FieldGroup.react.tsx +27 -0
  262. package/components/FieldGroup/FieldGroup.svelte +32 -0
  263. package/components/FieldGroup/FieldGroup.vue +23 -25
  264. package/components/FieldGroup/context.astro.ts +4 -0
  265. package/components/FieldGroup/context.react.ts +8 -0
  266. package/components/FieldGroup/context.svelte.ts +8 -0
  267. package/components/FieldGroup/context.vue.ts +4 -0
  268. package/components/FieldGroup/types.astro.ts +4 -4
  269. package/components/FieldGroup/types.react.ts +4 -0
  270. package/components/FieldGroup/types.svelte.ts +4 -4
  271. package/components/FieldGroup/types.ts +6 -4
  272. package/components/FieldGroup/types.vue-props.ts +6 -0
  273. package/components/FieldLegend/FieldLegend.astro +11 -11
  274. package/components/FieldLegend/FieldLegend.react.tsx +14 -0
  275. package/components/FieldLegend/FieldLegend.svelte +20 -0
  276. package/components/FieldLegend/FieldLegend.vue +20 -18
  277. package/components/FieldLegend/types.astro.ts +6 -6
  278. package/components/FieldLegend/types.react.ts +6 -0
  279. package/components/FieldLegend/types.svelte.ts +6 -6
  280. package/components/FieldLegend/types.ts +1 -1
  281. package/components/FieldLegend/types.vue-props.ts +9 -0
  282. package/components/{FieldSet/FieldSet.astro → Fieldset/Fieldset.astro} +15 -11
  283. package/components/Fieldset/Fieldset.react.tsx +15 -0
  284. package/components/Fieldset/Fieldset.svelte +21 -0
  285. package/components/Fieldset/Fieldset.vue +21 -0
  286. package/components/{FieldSet → Fieldset}/types.astro.ts +6 -6
  287. package/components/Fieldset/types.react.ts +6 -0
  288. package/components/Fieldset/types.svelte.ts +6 -0
  289. package/components/Fieldset/types.ts +1 -0
  290. package/components/Fieldset/types.vue-props.ts +9 -0
  291. package/components/Form/Form.astro +10 -10
  292. package/components/Form/Form.react.tsx +9 -0
  293. package/components/Form/Form.svelte +16 -0
  294. package/components/Form/Form.vue +16 -14
  295. package/components/Form/types.astro.ts +6 -6
  296. package/components/Form/types.react.ts +6 -0
  297. package/components/Form/types.svelte.ts +6 -7
  298. package/components/Form/types.ts +1 -1
  299. package/components/Form/types.vue-props.ts +9 -0
  300. package/components/List/List.astro +29 -29
  301. package/components/List/List.react.tsx +27 -0
  302. package/components/List/List.svelte +31 -0
  303. package/components/List/List.vue +23 -28
  304. package/components/List/types.astro.ts +4 -4
  305. package/components/List/types.react.ts +4 -0
  306. package/components/List/types.svelte.ts +4 -4
  307. package/components/List/types.ts +6 -7
  308. package/components/List/types.vue-props.ts +6 -0
  309. package/components/ListItem/ListItem.astro +115 -108
  310. package/components/ListItem/ListItem.react.tsx +65 -0
  311. package/components/ListItem/ListItem.svelte +80 -0
  312. package/components/ListItem/ListItem.vue +93 -98
  313. package/components/ListItem/types.astro.ts +9 -10
  314. package/components/ListItem/types.react.ts +17 -0
  315. package/components/ListItem/types.svelte.ts +17 -14
  316. package/components/ListItem/types.ts +35 -32
  317. package/components/ListItem/types.vue-props.ts +14 -0
  318. package/components/Menu/Menu.astro +86 -0
  319. package/components/Menu/Menu.react.tsx +87 -0
  320. package/components/Menu/Menu.svelte +71 -0
  321. package/components/Menu/Menu.vue +76 -0
  322. package/components/Menu/context.astro.ts +4 -0
  323. package/components/Menu/context.react.ts +8 -0
  324. package/components/Menu/context.svelte.ts +7 -0
  325. package/components/Menu/context.vue.ts +4 -0
  326. package/components/Menu/types.astro.ts +12 -0
  327. package/components/Menu/types.react.ts +12 -0
  328. package/components/Menu/types.svelte.ts +12 -0
  329. package/components/Menu/types.ts +23 -0
  330. package/components/Menu/types.vue-props.ts +16 -0
  331. package/components/Progress/Progress.astro +20 -31
  332. package/components/Progress/Progress.react.tsx +27 -0
  333. package/components/Progress/Progress.svelte +30 -0
  334. package/components/Progress/Progress.vue +30 -34
  335. package/components/Progress/types.astro.ts +5 -4
  336. package/components/Progress/types.react.ts +5 -0
  337. package/components/Progress/types.svelte.ts +5 -4
  338. package/components/Progress/types.ts +5 -10
  339. package/components/Progress/types.vue-props.ts +6 -0
  340. package/components/Radio/Radio.astro +58 -44
  341. package/components/Radio/Radio.react.tsx +51 -0
  342. package/components/Radio/Radio.svelte +59 -0
  343. package/components/Radio/Radio.vue +62 -41
  344. package/components/Radio/RadioInput.astro +10 -7
  345. package/components/Radio/RadioInput.react.tsx +10 -0
  346. package/components/Radio/RadioInput.svelte +27 -0
  347. package/components/Radio/RadioInput.vue +39 -14
  348. package/components/Radio/types.astro.ts +7 -6
  349. package/components/Radio/types.react.ts +11 -0
  350. package/components/Radio/types.svelte.ts +16 -12
  351. package/components/Radio/types.ts +17 -12
  352. package/components/Radio/types.vue-props.ts +15 -0
  353. package/components/Range/Range.astro +139 -128
  354. package/components/Range/Range.react.tsx +157 -0
  355. package/components/Range/Range.svelte +136 -0
  356. package/components/Range/Range.vue +169 -85
  357. package/components/Range/types.astro.ts +1 -3
  358. package/components/Range/types.react.ts +10 -0
  359. package/components/Range/types.svelte.ts +8 -3
  360. package/components/Range/types.ts +24 -25
  361. package/components/Range/types.vue-props.ts +16 -0
  362. package/components/Range/value.ts +27 -0
  363. package/components/Select/Select.astro +147 -108
  364. package/components/Select/Select.react.tsx +124 -0
  365. package/components/Select/Select.svelte +123 -0
  366. package/components/Select/Select.vue +157 -85
  367. package/components/Select/selection.ts +11 -0
  368. package/components/Select/types.react.ts +6 -0
  369. package/components/Select/types.svelte.ts +1 -1
  370. package/components/Select/types.ts +16 -13
  371. package/components/Select/types.vue-props.ts +20 -0
  372. package/components/Switch/Switch.astro +72 -76
  373. package/components/Switch/Switch.react.tsx +63 -0
  374. package/components/Switch/Switch.svelte +73 -0
  375. package/components/Switch/Switch.vue +81 -63
  376. package/components/Switch/SwitchInput.astro +10 -7
  377. package/components/Switch/SwitchInput.react.tsx +12 -0
  378. package/components/Switch/SwitchInput.svelte +30 -0
  379. package/components/Switch/SwitchInput.vue +36 -14
  380. package/components/Switch/types.astro.ts +7 -5
  381. package/components/Switch/types.react.ts +11 -0
  382. package/components/Switch/types.svelte.ts +16 -9
  383. package/components/Switch/types.ts +19 -16
  384. package/components/Switch/types.vue-props.ts +17 -0
  385. package/components/Table/Table.astro +27 -14
  386. package/components/Table/Table.react.tsx +24 -0
  387. package/components/Table/Table.svelte +28 -0
  388. package/components/Table/Table.vue +20 -19
  389. package/components/Table/TableBody.astro +9 -0
  390. package/components/Table/TableBody.react.tsx +5 -0
  391. package/components/Table/TableBody.svelte +9 -0
  392. package/components/Table/TableBody.vue +12 -0
  393. package/components/Table/TableCaption.astro +9 -0
  394. package/components/Table/TableCaption.react.tsx +5 -0
  395. package/components/Table/TableCaption.svelte +9 -0
  396. package/components/Table/TableCaption.vue +12 -0
  397. package/components/Table/TableCell.astro +9 -0
  398. package/components/Table/TableCell.react.tsx +6 -0
  399. package/components/Table/TableCell.svelte +16 -0
  400. package/components/Table/TableCell.vue +12 -0
  401. package/components/Table/TableColumn.astro +8 -0
  402. package/components/Table/TableColumn.react.tsx +7 -0
  403. package/components/Table/TableColumn.svelte +8 -0
  404. package/components/Table/TableColumn.vue +12 -0
  405. package/components/Table/TableColumnGroup.astro +9 -0
  406. package/components/Table/TableColumnGroup.react.tsx +5 -0
  407. package/components/Table/TableColumnGroup.svelte +9 -0
  408. package/components/Table/TableColumnGroup.vue +12 -0
  409. package/components/Table/TableFoot.astro +9 -0
  410. package/components/Table/TableFoot.react.tsx +5 -0
  411. package/components/Table/TableFoot.svelte +9 -0
  412. package/components/Table/TableFoot.vue +12 -0
  413. package/components/Table/TableHead.astro +9 -0
  414. package/components/Table/TableHead.react.tsx +5 -0
  415. package/components/Table/TableHead.svelte +9 -0
  416. package/components/Table/TableHead.vue +12 -0
  417. package/components/Table/TableHeaderCell.astro +9 -0
  418. package/components/Table/TableHeaderCell.react.tsx +10 -0
  419. package/components/Table/TableHeaderCell.svelte +16 -0
  420. package/components/Table/TableHeaderCell.vue +12 -0
  421. package/components/Table/TableRow.astro +9 -0
  422. package/components/Table/TableRow.react.tsx +5 -0
  423. package/components/Table/TableRow.svelte +9 -0
  424. package/components/Table/TableRow.vue +12 -0
  425. package/components/Table/types.astro.ts +22 -16
  426. package/components/Table/types.react.ts +22 -0
  427. package/components/Table/types.svelte.ts +23 -11
  428. package/components/Table/types.ts +14 -9
  429. package/components/Table/types.vue-props.ts +28 -0
  430. package/components/Tabs/Tabs.astro +34 -24
  431. package/components/Tabs/Tabs.react.tsx +43 -0
  432. package/components/Tabs/Tabs.svelte +43 -0
  433. package/components/Tabs/Tabs.vue +30 -20
  434. package/components/Tabs/TabsItem.astro +28 -40
  435. package/components/Tabs/TabsItem.react.tsx +47 -0
  436. package/components/Tabs/TabsItem.svelte +52 -0
  437. package/components/Tabs/TabsItem.vue +41 -39
  438. package/components/Tabs/TabsLabel.astro +16 -0
  439. package/components/Tabs/TabsLabel.react.tsx +17 -0
  440. package/components/Tabs/TabsLabel.svelte +19 -0
  441. package/components/Tabs/TabsLabel.vue +16 -0
  442. package/components/Tabs/TabsPanel.astro +9 -16
  443. package/components/Tabs/TabsPanel.react.tsx +6 -0
  444. package/components/Tabs/TabsPanel.svelte +15 -0
  445. package/components/Tabs/TabsPanel.vue +12 -31
  446. package/components/Tabs/context.astro.ts +4 -0
  447. package/components/Tabs/context.react.ts +8 -0
  448. package/components/Tabs/context.svelte.ts +7 -0
  449. package/components/Tabs/context.vue.ts +4 -0
  450. package/components/Tabs/types.astro.ts +13 -11
  451. package/components/Tabs/types.react.ts +12 -0
  452. package/components/Tabs/types.svelte.ts +10 -10
  453. package/components/Tabs/types.ts +21 -19
  454. package/components/Tabs/types.vue-props.ts +25 -0
  455. package/components/TextField/TextField.astro +108 -124
  456. package/components/TextField/TextField.react.tsx +70 -0
  457. package/components/TextField/TextField.svelte +84 -0
  458. package/components/TextField/TextField.vue +94 -74
  459. package/components/TextField/types.astro.ts +15 -17
  460. package/components/TextField/types.react.ts +12 -0
  461. package/components/TextField/types.svelte.ts +2 -4
  462. package/components/TextField/types.ts +11 -25
  463. package/components/TextField/types.vue-props.ts +21 -0
  464. package/components/Textarea/Textarea.astro +104 -118
  465. package/components/Textarea/Textarea.react.tsx +64 -0
  466. package/components/Textarea/Textarea.svelte +80 -0
  467. package/components/Textarea/Textarea.vue +88 -64
  468. package/components/Textarea/types.astro.ts +8 -10
  469. package/components/Textarea/types.react.ts +8 -0
  470. package/components/Textarea/types.svelte.ts +13 -21
  471. package/components/Textarea/types.ts +21 -33
  472. package/components/Textarea/types.vue-props.ts +20 -0
  473. package/components/ToggleButton/ToggleButton.astro +43 -43
  474. package/components/ToggleButton/ToggleButton.react.tsx +57 -0
  475. package/components/ToggleButton/ToggleButton.svelte +58 -0
  476. package/components/ToggleButton/ToggleButton.vue +65 -41
  477. package/components/ToggleButton/types.astro.ts +4 -4
  478. package/components/ToggleButton/types.react.ts +4 -0
  479. package/components/ToggleButton/types.svelte.ts +5 -7
  480. package/components/ToggleButton/types.ts +6 -10
  481. package/components/ToggleButton/types.vue-props.ts +11 -0
  482. package/components/ToggleGroup/ToggleGroup.astro +40 -42
  483. package/components/ToggleGroup/ToggleGroup.react.tsx +54 -0
  484. package/components/ToggleGroup/ToggleGroup.svelte +54 -0
  485. package/components/ToggleGroup/ToggleGroup.vue +45 -36
  486. package/components/ToggleGroup/context.astro.ts +5 -0
  487. package/components/ToggleGroup/context.react.ts +8 -0
  488. package/components/ToggleGroup/context.svelte.ts +8 -0
  489. package/components/ToggleGroup/context.vue.ts +4 -0
  490. package/components/ToggleGroup/selection.ts +12 -0
  491. package/components/ToggleGroup/types.astro.ts +4 -4
  492. package/components/ToggleGroup/types.react.ts +12 -0
  493. package/components/ToggleGroup/types.svelte.ts +6 -9
  494. package/components/ToggleGroup/types.ts +17 -15
  495. package/components/ToggleGroup/types.vue-props.ts +6 -0
  496. package/components/Tooltip/Tooltip.astro +22 -23
  497. package/components/Tooltip/Tooltip.react.tsx +24 -0
  498. package/components/Tooltip/Tooltip.svelte +29 -0
  499. package/components/Tooltip/Tooltip.vue +21 -22
  500. package/components/Tooltip/types.astro.ts +4 -4
  501. package/components/Tooltip/types.react.ts +4 -0
  502. package/components/Tooltip/types.svelte.ts +4 -7
  503. package/components/Tooltip/types.ts +5 -11
  504. package/components/Tooltip/types.vue-props.ts +6 -0
  505. package/components/content.svelte +9 -0
  506. package/components/context.astro.ts +15 -0
  507. package/components/cx.ts +12 -0
  508. package/components/dev.ts +63 -0
  509. package/components/group.ts +2 -0
  510. package/components/id.ts +9 -0
  511. package/components/style.ts +33 -0
  512. package/components/tag.ts +6 -0
  513. package/components/vue.ts +18 -0
  514. package/core/normalize.css +191 -214
  515. package/core/palette.css +131 -314
  516. package/core/utils.css +55 -68
  517. package/css/compat/avatar.css +7 -0
  518. package/css/compat/menu.css +20 -0
  519. package/css/compat.css +3 -0
  520. package/css/components/accordion.css +237 -173
  521. package/css/components/anchor.css +40 -27
  522. package/css/components/avatar.css +105 -65
  523. package/css/components/badge.css +146 -107
  524. package/css/components/button-group.css +170 -179
  525. package/css/components/button.css +422 -212
  526. package/css/components/callout.css +153 -112
  527. package/css/components/card.css +234 -116
  528. package/css/components/carousel.css +399 -0
  529. package/css/components/checkbox.css +90 -211
  530. package/css/components/chip.css +215 -92
  531. package/css/components/choice.css +291 -0
  532. package/css/components/description-list.css +91 -81
  533. package/css/components/dialog.css +154 -64
  534. package/css/components/divider.css +73 -20
  535. package/css/components/drawer.css +300 -170
  536. package/css/components/form.css +131 -146
  537. package/css/components/layout.css +92 -0
  538. package/css/components/link.css +53 -21
  539. package/css/components/list.css +460 -343
  540. package/css/components/menu.css +174 -0
  541. package/css/components/progress.css +107 -99
  542. package/css/components/radio.css +61 -170
  543. package/css/components/range.css +463 -320
  544. package/css/components/select.css +189 -170
  545. package/css/components/spinner.css +57 -38
  546. package/css/components/switch.css +197 -270
  547. package/css/components/table.css +214 -173
  548. package/css/components/tabs.css +278 -84
  549. package/css/components/text-field.css +559 -449
  550. package/css/components/textarea.css +20 -26
  551. package/css/components/toggle-button.css +131 -91
  552. package/css/components/toggle-group.css +86 -56
  553. package/css/components/tooltip.css +125 -68
  554. package/css/components/typography.css +801 -580
  555. package/css/components.css +48 -41
  556. package/css/imports.css +15 -17
  557. package/css/js/checkbox.d.ts +3 -0
  558. package/css/js/checkbox.js +31 -21
  559. package/css/js/range.d.ts +1 -0
  560. package/css/js/range.js +44 -0
  561. package/css/layers.css +2 -0
  562. package/css/theme.css +750 -124
  563. package/dist/op.css +16 -241
  564. package/dist/op.css.map +1 -1
  565. package/dist/opui.baseline-2023.css +9209 -0
  566. package/dist/opui.baseline-2023.css.map +1 -0
  567. package/dist/opui.baseline-2024.css +9209 -0
  568. package/dist/opui.baseline-2024.css.map +1 -0
  569. package/dist/opui.baseline-2025.css +9209 -0
  570. package/dist/opui.baseline-2025.css.map +1 -0
  571. package/dist/opui.baseline-2026.css +9209 -0
  572. package/dist/opui.baseline-2026.css.map +1 -0
  573. package/dist/opui.components.css +7346 -5140
  574. package/dist/opui.components.css.map +1 -1
  575. package/dist/opui.css +8489 -6128
  576. package/dist/opui.css.map +1 -1
  577. package/dist/opui.no-compat.css +9182 -0
  578. package/dist/opui.no-compat.css.map +1 -0
  579. package/env.d.ts +17 -14
  580. package/open-props.css +15 -6
  581. package/package.json +136 -90
  582. package/react/elements.ts +13 -0
  583. package/react/index.ts +176 -0
  584. package/skills/opui/SKILL.md +75 -0
  585. package/skills/opui/references/accordion.md +253 -0
  586. package/skills/opui/references/anchor.md +213 -0
  587. package/skills/opui/references/avatar.md +202 -0
  588. package/skills/opui/references/badge.md +199 -0
  589. package/skills/opui/references/button-group.md +239 -0
  590. package/skills/opui/references/button.md +242 -0
  591. package/skills/opui/references/callout.md +221 -0
  592. package/skills/opui/references/card.md +222 -0
  593. package/skills/opui/references/carousel.md +269 -0
  594. package/skills/opui/references/checkbox.md +241 -0
  595. package/skills/opui/references/chip.md +135 -0
  596. package/skills/opui/references/customizing.md +85 -0
  597. package/skills/opui/references/description-list.md +191 -0
  598. package/skills/opui/references/dialog.md +301 -0
  599. package/skills/opui/references/divider.md +112 -0
  600. package/skills/opui/references/drawer.md +802 -0
  601. package/skills/opui/references/form.md +260 -0
  602. package/skills/opui/references/getting-started.md +398 -0
  603. package/skills/opui/references/index.md +89 -0
  604. package/skills/opui/references/layout.md +161 -0
  605. package/skills/opui/references/list.md +216 -0
  606. package/skills/opui/references/menu.md +248 -0
  607. package/skills/opui/references/progress.md +114 -0
  608. package/skills/opui/references/radio.md +234 -0
  609. package/skills/opui/references/range.md +150 -0
  610. package/skills/opui/references/select.md +255 -0
  611. package/skills/opui/references/spinner.md +85 -0
  612. package/skills/opui/references/switch.md +223 -0
  613. package/skills/opui/references/table.md +480 -0
  614. package/skills/opui/references/tabs.md +257 -0
  615. package/skills/opui/references/text-field.md +167 -0
  616. package/skills/opui/references/textarea.md +169 -0
  617. package/skills/opui/references/theming.md +278 -0
  618. package/skills/opui/references/toggle.md +222 -0
  619. package/skills/opui/references/tooltip.md +167 -0
  620. package/skills/opui/references/typography.md +159 -0
  621. package/svelte/elements.ts +7 -0
  622. package/svelte/index.ts +177 -0
  623. package/themes/bootstrap.css +223 -0
  624. package/themes/brutalist.css +105 -0
  625. package/themes/m3.css +152 -0
  626. package/themes/shadcn.css +125 -0
  627. package/tokens.json +3729 -0
  628. package/vue/index.ts +175 -54
  629. package/components/AGENTS.md +0 -247
  630. package/components/Accordion/types.d.vue.ts +0 -15
  631. package/components/Accordion/types.solid.ts +0 -6
  632. package/components/Anchor/types.d.vue.ts +0 -10
  633. package/components/Anchor/types.solid.ts +0 -6
  634. package/components/Avatar/types.d.vue.ts +0 -12
  635. package/components/Avatar/types.solid.ts +0 -11
  636. package/components/Badge/types.d.vue.ts +0 -10
  637. package/components/Badge/types.solid.ts +0 -4
  638. package/components/Button/types.d.vue.ts +0 -10
  639. package/components/Button/types.solid.ts +0 -8
  640. package/components/ButtonGroup/types.d.vue.ts +0 -10
  641. package/components/ButtonGroup/types.solid.ts +0 -4
  642. package/components/Callout/types.d.vue.ts +0 -10
  643. package/components/Callout/types.solid.ts +0 -6
  644. package/components/Card/types.d.vue.ts +0 -10
  645. package/components/Card/types.solid.ts +0 -6
  646. package/components/Checkbox/types.d.vue.ts +0 -11
  647. package/components/Checkbox/types.solid.ts +0 -9
  648. package/components/Chip/types.d.vue.ts +0 -10
  649. package/components/Chip/types.solid.ts +0 -10
  650. package/components/ClassicSelect/ClassicSelect.astro +0 -60
  651. package/components/ClassicSelect/ClassicSelect.vue +0 -54
  652. package/components/ClassicSelect/types.astro.ts +0 -8
  653. package/components/ClassicSelect/types.d.vue.ts +0 -10
  654. package/components/ClassicSelect/types.solid.ts +0 -5
  655. package/components/ClassicSelect/types.svelte.ts +0 -5
  656. package/components/ClassicSelect/types.ts +0 -15
  657. package/components/DescriptionList/Description.astro +0 -9
  658. package/components/DescriptionList/Item.astro +0 -9
  659. package/components/DescriptionList/Term.astro +0 -9
  660. package/components/DescriptionList/index.ts +0 -12
  661. package/components/DescriptionList/types.d.vue.ts +0 -10
  662. package/components/DescriptionList/types.solid.ts +0 -4
  663. package/components/Dialog/types.d.vue.ts +0 -10
  664. package/components/Dialog/types.solid.ts +0 -8
  665. package/components/Divider/types.d.vue.ts +0 -6
  666. package/components/Divider/types.solid.ts +0 -4
  667. package/components/Drawer/types.d.vue.ts +0 -31
  668. package/components/Drawer/types.solid.ts +0 -12
  669. package/components/FieldDescription/types.d.vue.ts +0 -10
  670. package/components/FieldDescription/types.solid.ts +0 -5
  671. package/components/FieldGroup/types.d.vue.ts +0 -12
  672. package/components/FieldGroup/types.solid.ts +0 -5
  673. package/components/FieldLegend/types.d.vue.ts +0 -11
  674. package/components/FieldLegend/types.solid.ts +0 -5
  675. package/components/FieldSet/FieldSet.vue +0 -18
  676. package/components/FieldSet/types.d.vue.ts +0 -11
  677. package/components/FieldSet/types.solid.ts +0 -5
  678. package/components/FieldSet/types.svelte.ts +0 -8
  679. package/components/FieldSet/types.ts +0 -5
  680. package/components/Form/types.d.vue.ts +0 -11
  681. package/components/Form/types.solid.ts +0 -5
  682. package/components/IconButton/IconButton.astro +0 -24
  683. package/components/IconButton/IconButton.vue +0 -24
  684. package/components/IconButton/types.astro.ts +0 -6
  685. package/components/IconButton/types.d.vue.ts +0 -10
  686. package/components/IconButton/types.solid.ts +0 -8
  687. package/components/IconButton/types.svelte.ts +0 -6
  688. package/components/IconButton/types.ts +0 -16
  689. package/components/List/types.d.vue.ts +0 -10
  690. package/components/List/types.solid.ts +0 -4
  691. package/components/ListItem/types.d.vue.ts +0 -10
  692. package/components/ListItem/types.solid.ts +0 -12
  693. package/components/Progress/types.d.vue.ts +0 -10
  694. package/components/Progress/types.solid.ts +0 -4
  695. package/components/Radio/types.d.vue.ts +0 -11
  696. package/components/Radio/types.solid.ts +0 -9
  697. package/components/Range/types.d.vue.ts +0 -14
  698. package/components/Range/types.solid.ts +0 -6
  699. package/components/Select/types.d.vue.ts +0 -17
  700. package/components/Select/types.solid.ts +0 -6
  701. package/components/Switch/types.d.vue.ts +0 -13
  702. package/components/Switch/types.solid.ts +0 -9
  703. package/components/Table/Body.astro +0 -11
  704. package/components/Table/Body.vue +0 -5
  705. package/components/Table/Cell.astro +0 -11
  706. package/components/Table/Cell.vue +0 -5
  707. package/components/Table/Column.astro +0 -12
  708. package/components/Table/Column.vue +0 -19
  709. package/components/Table/ColumnGroup.astro +0 -11
  710. package/components/Table/ColumnGroup.vue +0 -5
  711. package/components/Table/Head.astro +0 -11
  712. package/components/Table/Head.vue +0 -5
  713. package/components/Table/HeaderCell.astro +0 -11
  714. package/components/Table/HeaderCell.vue +0 -5
  715. package/components/Table/Row.astro +0 -11
  716. package/components/Table/Row.vue +0 -5
  717. package/components/Table/index.ts +0 -20
  718. package/components/Table/types.d.vue.ts +0 -10
  719. package/components/Table/types.solid.ts +0 -8
  720. package/components/Tabs/TabsTab.astro +0 -15
  721. package/components/Tabs/TabsTab.vue +0 -24
  722. package/components/Tabs/index.ts +0 -14
  723. package/components/Tabs/types.d.vue.ts +0 -31
  724. package/components/Tabs/types.solid.ts +0 -12
  725. package/components/TextField/types.d.vue.ts +0 -20
  726. package/components/TextField/types.solid.ts +0 -22
  727. package/components/Textarea/types.d.vue.ts +0 -19
  728. package/components/Textarea/types.solid.ts +0 -6
  729. package/components/Toast/Toast.astro +0 -42
  730. package/components/Toast/Toast.vue +0 -48
  731. package/components/ToggleButton/types.d.vue.ts +0 -10
  732. package/components/ToggleButton/types.solid.ts +0 -7
  733. package/components/ToggleGroup/types.d.vue.ts +0 -15
  734. package/components/ToggleGroup/types.solid.ts +0 -4
  735. package/components/Tooltip/types.d.vue.ts +0 -10
  736. package/components/Tooltip/types.solid.ts +0 -6
  737. package/css/components/icon-button.css +0 -139
  738. package/css/components/text-input.css +0 -68
  739. package/css/components/toast.css +0 -157
  740. package/css/js/toast.js +0 -94
@@ -0,0 +1,257 @@
1
+ # Tabs
2
+
3
+ The Tabs are radio inputs and the Panels are just divs that show and hide based on the radio inputs' :checked state. Use Tabs to switch between panels of content. To pick an option, like a list or grid view, use a Toggle group.
4
+
5
+ - CSS: `opui-css/css/components/tabs.css`.
6
+ - Full docs with every example: [HTML](https://open-props-ui.netlify.app/html/components/tabs.md), [Astro](https://open-props-ui.netlify.app/astro/components/tabs.md), [React](https://open-props-ui.netlify.app/react/components/tabs.md), [Svelte](https://open-props-ui.netlify.app/svelte/components/tabs.md), [Vue](https://open-props-ui.netlify.app/vue/components/tabs.md).
7
+
8
+ ## Tabs
9
+
10
+ ### Parts
11
+
12
+ - `.ui-tabs` (root): Container element.
13
+ - `.ui-input` (`TabsItem`): A visually hidden radio input that holds a tab's state. The tab is its label.
14
+ - `.ui-label` (`TabsLabel`): A tab.
15
+ - `.ui-panel` (`TabsPanel`): The panel of the selected tab.
16
+
17
+ ### Props and modifiers
18
+
19
+ - `defaultValue` (React): `string`. The `value` of the tab selected at the start, when `value` is omitted.
20
+ - `name`: `string`, `.ui-input[name]`. The name shared by the tab inputs. Generated when omitted.
21
+ - `onValueChange` (React): `(value: string) => void`. Called with the `value` of the tab when one is selected.
22
+ - `overflow`: `"scroll"` (`.ui-overflow-scroll`), `"wrap"` (default). What the tabs do when they don't fit. `"wrap"` wraps them onto more rows, and `"scroll"` keeps them on one row and scrolls it sideways.
23
+ - `value` (Astro and React): `string`. The `value` of the selected tab. The item whose `value` matches is checked, and the items' own `checked` is ignored.
24
+ - `variant`: `"filled"` (`.ui-filled`), `"line"` (`.ui-line`), `"outlined"` (`.ui-outlined`), `"tonal"` (default). The variant to use. The default `tonal` tabs sit on a tonal track and the selected tab is a raised pill.
25
+
26
+ ### Slots
27
+
28
+ - `default`: The tab items.
29
+
30
+ Model: `value` (`string`), the `value` of the selected tab. Astro and React `value`, Svelte `bind:value`, Vue `v-model`.
31
+
32
+ ### Notes
33
+
34
+ - HTML: Each tab is three elements, in this order: `input.ui-input[type="radio"]`, `label.ui-label` and `.ui-panel`.
35
+ - Astro: `value` selects the item whose `value` matches on the server. After that the selection lives in the inputs: read it from the form, or listen for `change` in a script.
36
+ - React: Use `value` with `onValueChange`, or `defaultValue`. Without them the items keep their own state, and `onValueChange` still reports changes.
37
+ - Svelte: Bind `value` with a starting value to control the selection. Without it, or bound to `undefined`, the items keep their own state.
38
+ - Vue: Bind `v-model` with a starting value to control the selection. Without it, or bound to `undefined`, the items keep their own state.
39
+
40
+ ## TabsItem
41
+
42
+ ### Parts
43
+
44
+ - `input.ui-input` (root): The radio input for a tab, followed by the tab and the panel.
45
+
46
+ ### Props and modifiers
47
+
48
+ - `checked`: `boolean`, `[checked]`. Selects the tab.
49
+ - `id`: `string`, `[id]`. The id of the input. Generated when omitted.
50
+ - `name`: `string`. Overrides the name shared by the tab inputs.
51
+ - `value`: `string`, `[value]`. The value of the input. The tab is selected while it matches the `value` of `Tabs`.
52
+
53
+ ### Slots
54
+
55
+ - `default`: The tab and the panel.
56
+
57
+ ### Notes
58
+
59
+ - React: `defaultChecked` selects the starting tab. A tab that loses its check to another one fires no `onChange` of its own, so to control the tabs, give each item a `value` and set `value` with `onValueChange` on `Tabs`. The `Tabs` value then wins and an item's own `checked` and `defaultChecked` are ignored.
60
+ - Svelte: `checked` selects the starting tab. A tab that loses its check to another one fires no `change` of its own, so to control the tabs, give each item a `value` and bind `value` on `Tabs`. The `Tabs` value then wins and an item's own `checked` is ignored.
61
+ - Vue: `checked` selects the starting tab. A tab that loses its check to another one fires no `change` of its own, so to control the tabs, give each item a `value` and bind `v-model` on `Tabs`. The `Tabs` value then wins and an item's own `checked` is ignored.
62
+
63
+ ## TabsLabel
64
+
65
+ ### Parts
66
+
67
+ - `label.ui-label` (root): The tab.
68
+
69
+ ### Props and modifiers
70
+
71
+ - `for` (Astro, Svelte and Vue): `string`, `[for]`. The id of the input it labels. Set by the item.
72
+ - `htmlFor` (React): `string`. The id of the input it labels, as `htmlFor` like on the element. Set by the item.
73
+
74
+ ### Slots
75
+
76
+ - `default`: The tab label.
77
+
78
+ ## TabsPanel
79
+
80
+ ### Parts
81
+
82
+ - `.ui-panel` (root): The panel.
83
+
84
+ ### Slots
85
+
86
+ - `default`: The panel content.
87
+
88
+ ## Component properties
89
+
90
+ Set inputs on the component, inline or in your CSS. Outputs follow the variant and state, so never override them.
91
+
92
+ ### tabs.css
93
+
94
+ - `--_ease`: Easing of the transitions and focus ring. Defaults to `--ui-ease`.
95
+ - `--_indicator-bg-color`: Color of the line under the selected tab. `transparent` unless `.ui-line`, which reads `--ui-tabs-accent` and falls back to `--ui-text-strong`.
96
+ - `--_indicator-size`: Thickness of the line under the selected tab.
97
+ - `--_inset`: Gap between the track edge and the selected tab's background. `0px` in `.ui-line`.
98
+ - `--_motion`: Motion multiplier for the transitions. `0` turns them off.
99
+ - `--_radius`: Corner radius of the track. The selected tab's radius is reduced by `--_inset` and `--_track-border-width`.
100
+ - `--_selected-bg-color`: Background of the selected tab. Defaults to `--ui-surface`, a translucent white in dark mode; the variant classes set it.
101
+ - `--_selected-border-color`: Border color of the selected tab. `--ui-control-border-color`, or `--ui-field-border-color` when the theme doesn't set it, so the pill reaches 3:1 against the track; the variant classes set it to `transparent`.
102
+ - `--_selected-shadow`: Shadow of the selected tab. Defaults to `--ui-shadow-selected`. `.ui-line` and `.ui-outlined` remove it.
103
+ - `--_selected-text-color`: Text color of the selected tab. Defaults to `--ui-tabs-accent`, or `--ui-text-strong` when a theme leaves it unset. `.ui-filled` sets it to `--ui-on-selected-strong`.
104
+ - `--_text-color`: Text color of the unselected tabs. Defaults to `--ui-text-subtle`.
105
+ - `--_track-bg-color`: Background of the track behind the tabs. Defaults to `--ui-surface-tonal`.
106
+ - `--_track-border-color`: Border color of the track. `.ui-outlined` sets it to `--ui-control-border-color`, or `--ui-border-color` when the theme doesn't set it.
107
+ - `--_track-border-width`: Border width of the track. `0px` in `.ui-line`.
108
+
109
+ Outputs: `--_duration` and `--_focus-ring-duration`.
110
+
111
+ ## Theme tokens
112
+
113
+ The stylesheets read `--ui-border-color`, `--ui-border-width`, `--ui-border-width-thick`, `--ui-control-border-color`, `--ui-duration`, `--ui-duration-fast`, `--ui-ease`, `--ui-field-border-color`, `--ui-focus-ring-color`, `--ui-focus-ring-inset`, `--ui-focus-ring-offset`, `--ui-focus-ring-style`, `--ui-focus-ring-width`, `--ui-font-size-control`, `--ui-font-weight-medium`, `--ui-line-height-relaxed`, `--ui-motion`, `--ui-on-selected-strong`, `--ui-radius`, `--ui-selected-strong`, `--ui-shadow-selected`, `--ui-space-1`, `--ui-space-2`, `--ui-space-3`, `--ui-state-hover-alpha-dark`, `--ui-surface`, `--ui-surface-tonal`, `--ui-tabs-accent`, `--ui-text-strong` and `--ui-text-subtle`. `theming.md` and `tokens.json` describe them.
114
+
115
+ ## HTML
116
+
117
+ ### Example: Basics
118
+
119
+ ```html
120
+ <div class="ui-tabs">
121
+ <input
122
+ type="radio"
123
+ name="basic-tabs"
124
+ id="tabs-basics-1"
125
+ class="ui-input"
126
+ checked
127
+ />
128
+ <label for="tabs-basics-1" class="ui-label">Profile</label>
129
+ <div class="ui-panel">Profile settings and information.</div>
130
+
131
+ <input type="radio" name="basic-tabs" id="tabs-basics-2" class="ui-input" />
132
+ <label for="tabs-basics-2" class="ui-label">Settings</label>
133
+ <div class="ui-panel">General account settings.</div>
134
+
135
+ <input type="radio" name="basic-tabs" id="tabs-basics-3" class="ui-input" />
136
+ <label for="tabs-basics-3" class="ui-label">Notifications</label>
137
+ <div class="ui-panel">Manage your notifications.</div>
138
+ </div>
139
+ ```
140
+
141
+ ## Astro
142
+
143
+ `import { Tabs, TabsItem, TabsLabel, TabsPanel } from "opui-css/astro"`
144
+
145
+ ### Example: Basics
146
+
147
+ ```astro
148
+ ---
149
+ import { Tabs, TabsItem, TabsLabel, TabsPanel } from "opui-css/astro"
150
+ ---
151
+
152
+ <Tabs name="basic-tabs">
153
+ <TabsItem checked>
154
+ <TabsLabel>Profile</TabsLabel>
155
+ <TabsPanel>Profile settings and information.</TabsPanel>
156
+ </TabsItem>
157
+ <TabsItem>
158
+ <TabsLabel>Settings</TabsLabel>
159
+ <TabsPanel>General account settings.</TabsPanel>
160
+ </TabsItem>
161
+ <TabsItem>
162
+ <TabsLabel>Notifications</TabsLabel>
163
+ <TabsPanel>Manage your notifications.</TabsPanel>
164
+ </TabsItem>
165
+ </Tabs>
166
+ ```
167
+
168
+ ## React
169
+
170
+ `import { Tabs, TabsItem, TabsLabel, TabsPanel } from "opui-css/react"`
171
+
172
+ - Client components (`"use client"`): `Tabs`, `TabsItem` and `TabsLabel`.
173
+
174
+ ### Example: Basics
175
+
176
+ ```tsx
177
+ import { Tabs, TabsItem, TabsLabel, TabsPanel } from "opui-css/react"
178
+
179
+ export default function Basics() {
180
+ return (
181
+ <Tabs name="basic-tabs">
182
+ <TabsItem defaultChecked>
183
+ <TabsLabel>Profile</TabsLabel>
184
+ <TabsPanel>Profile settings and information.</TabsPanel>
185
+ </TabsItem>
186
+ <TabsItem>
187
+ <TabsLabel>Settings</TabsLabel>
188
+ <TabsPanel>General account settings.</TabsPanel>
189
+ </TabsItem>
190
+ <TabsItem>
191
+ <TabsLabel>Notifications</TabsLabel>
192
+ <TabsPanel>Manage your notifications.</TabsPanel>
193
+ </TabsItem>
194
+ </Tabs>
195
+ )
196
+ }
197
+ ```
198
+
199
+ ## Svelte
200
+
201
+ `import { Tabs, TabsItem, TabsLabel, TabsPanel } from "opui-css/svelte"`
202
+
203
+ - Hydration: `bind:value` on `Tabs`. The bound value only updates on the client. The native control still changes and submits with its form. Without hydration: Read the value from the form instead.
204
+
205
+ ### Example: Basics
206
+
207
+ ```svelte
208
+ <script lang="ts">
209
+ import { Tabs, TabsItem, TabsLabel, TabsPanel } from "opui-css/svelte"
210
+ </script>
211
+
212
+ <Tabs name="basic-tabs">
213
+ <TabsItem checked>
214
+ <TabsLabel>Profile</TabsLabel>
215
+ <TabsPanel>Profile settings and information.</TabsPanel>
216
+ </TabsItem>
217
+ <TabsItem>
218
+ <TabsLabel>Settings</TabsLabel>
219
+ <TabsPanel>General account settings.</TabsPanel>
220
+ </TabsItem>
221
+ <TabsItem>
222
+ <TabsLabel>Notifications</TabsLabel>
223
+ <TabsPanel>Manage your notifications.</TabsPanel>
224
+ </TabsItem>
225
+ </Tabs>
226
+ ```
227
+
228
+ ## Vue
229
+
230
+ `import { Tabs, TabsItem, TabsLabel, TabsPanel } from "opui-css/vue"`
231
+
232
+ - Hydration: `v-model` on `Tabs`. The bound value only updates on the client. The native control still changes and submits with its form. Without hydration: Read the value from the form instead.
233
+
234
+ ### Example: Basics
235
+
236
+ ```vue
237
+ <script setup lang="ts">
238
+ import { Tabs, TabsItem, TabsLabel, TabsPanel } from "opui-css/vue"
239
+ </script>
240
+
241
+ <template>
242
+ <Tabs name="basic-tabs">
243
+ <TabsItem checked>
244
+ <TabsLabel>Profile</TabsLabel>
245
+ <TabsPanel>Profile settings and information.</TabsPanel>
246
+ </TabsItem>
247
+ <TabsItem>
248
+ <TabsLabel>Settings</TabsLabel>
249
+ <TabsPanel>General account settings.</TabsPanel>
250
+ </TabsItem>
251
+ <TabsItem>
252
+ <TabsLabel>Notifications</TabsLabel>
253
+ <TabsPanel>Manage your notifications.</TabsPanel>
254
+ </TabsItem>
255
+ </Tabs>
256
+ </template>
257
+ ```
@@ -0,0 +1,167 @@
1
+ # Text field
2
+
3
+ An input for single-line text data. Basic text fields with labels, field descriptions, and validation states.
4
+
5
+ - CSS: `opui-css/css/components/text-field.css`.
6
+ - Full docs with every example: [HTML](https://open-props-ui.netlify.app/html/components/text-field.md), [Astro](https://open-props-ui.netlify.app/astro/components/text-field.md), [React](https://open-props-ui.netlify.app/react/components/text-field.md), [Svelte](https://open-props-ui.netlify.app/svelte/components/text-field.md), [Vue](https://open-props-ui.netlify.app/vue/components/text-field.md).
7
+
8
+ ## TextField
9
+
10
+ ### Parts
11
+
12
+ - `label.ui-text-field` (root): Container element.
13
+ - `.ui-label` (prop `label`, slot `label`): The label for the field.
14
+ - `.ui-start-text` (prop `startText`, slot `start-text`): Start text displayed above the field.
15
+ - `.ui-field`: The boxed input area.
16
+ - `.ui-field > .ui-top` (slot `top`): Content above the input, inside the border, with a divider.
17
+ - `.ui-field > .ui-start` (slot `start`): Content at the inline-start of the field, inside the border.
18
+ - `<input>` (model): The input element.
19
+ - `.ui-field > .ui-end` (slot `end`): Content at the inline-end of the field, inside the border.
20
+ - `.ui-field > .ui-bottom` (slot `bottom`): Content below the input, inside the border, with a divider.
21
+ - `.ui-end-text` (prop `endText`, slot `end-text`): Supporting text displayed below the field.
22
+
23
+ ### Props and modifiers
24
+
25
+ - `autoFit`: `boolean`, `.ui-auto-fit`. Lets the width follow the content, from `25ch`.
26
+ - `disabled`: `boolean`, `input[disabled]`. Dims the field and blocks input.
27
+ - `error`: `boolean`, `input[aria-invalid="true"]`. Marks the control invalid and shows error styles.
28
+ - `hideLabel`: `boolean`, `.ui-text-field > span.ui-sr-only`. Visually hides the label, `.ui-sr-only` instead of `.ui-label`. The field keeps it as its accessible name.
29
+ - `id`: `string`. The id of the `<input>`.
30
+ - `name`: `string`. The name of the `<input>`. Inside a `FieldGroup`, the group's `name` applies.
31
+ - `required`: `boolean`, `input[required]`. Adds a required mark after the label. The form won't submit while the field is empty.
32
+ - `size`: `"large"` (`.ui-large`), `"medium"` (default), `"small"` (`.ui-small`), `"x-small"` (`.ui-x-small`). The size of the element.
33
+ - `spread`: `boolean`, `.ui-spread`. Pushes the label and start text to one side and the input to the other.
34
+ - `type`: `"numeric" | string`, default `"text"`. The input type. `"numeric"` renders a text input with a numeric keyboard.
35
+ - `variant`: `"filled"` (`.ui-filled`), `"outlined"` (default). The variant to use.
36
+
37
+ ### Slots
38
+
39
+ - `default`: Extra content inside the root, such as a `<datalist>`.
40
+
41
+ Model: `value` (`string | number`), the input value. Astro and React `value`, Svelte `bind:value`, Vue `v-model`.
42
+
43
+ ### Notes
44
+
45
+ - HTML: Use `.ui-select` for a `<select>` and `.ui-textarea` for a `<textarea>`. You can put a `<datalist>` inside the root.
46
+ - Astro, Svelte and Vue: Attributes that aren't props go to the `<input>`, like `autocomplete` and `placeholder`, and `class` and `style` go to the root `<label>`.
47
+ - React: Attributes that aren't props go to the `<input>`, like `autocomplete` and `placeholder`, and `className` and `style` go to the root `<label>`. Use `value` with `onChange`, or `defaultValue`.
48
+
49
+ ## Component properties
50
+
51
+ Set inputs on the component, inline or in your CSS. Outputs follow the variant and state, so never override them.
52
+
53
+ ### text-field.css
54
+
55
+ - `--_accent`: Border color of `.ui-field` when focused with a pointer; keyboard focus shows the focus ring instead. Defaults to `--ui-primary`, `--ui-invalid` when invalid.
56
+ - `--_arrow-inset`: Distance of the select arrow from the inline end.
57
+ - `--_chevron-image`: The select arrow, as an image used for a mask.
58
+ - `--_chevron-size`: Width and height of the select arrow.
59
+ - `--_ease`: Easing of the transitions. Defaults to `--ui-ease`.
60
+ - `--_field-padding-block`: The preferred block padding of the control. Set by the size classes.
61
+ - `--_field-padding-inline`: The inline padding of the control and affixes. `.ui-large` sets it.
62
+ - `--_font-size`: The font size of the control and affixes.
63
+ - `--_motion`: Motion multiplier for the transitions. `0` turns them off.
64
+ - `--_size`: The height of `.ui-field`, a minimum so a textarea can grow, and the width and height of a color field. Defaults to `--ui-field-size`, set by the size classes.
65
+
66
+ Outputs: `--_affix-text-color`, `--_arrow-padding`, `--_bg-color`, `--_border-color`, `--_duration`, `--_field-padding-block-fit` and `--_helper-text-color`.
67
+
68
+ ## Theme tokens
69
+
70
+ The stylesheets read `--ui-disabled-opacity`, `--ui-duration`, `--ui-ease`, `--ui-field-bg-color`, `--ui-field-border-color`, `--ui-field-border-width`, `--ui-field-helper-font-size`, `--ui-field-helper-line-height`, `--ui-field-helper-text-color`, `--ui-field-label-font-size`, `--ui-field-label-font-weight`, `--ui-field-label-text-color`, `--ui-field-padding-inline`, `--ui-field-radius`, `--ui-field-required-text-color`, `--ui-field-size`, `--ui-field-size-large`, `--ui-field-size-small`, `--ui-field-size-x-small`, `--ui-focus-ring-color`, `--ui-focus-ring-offset`, `--ui-focus-ring-style`, `--ui-focus-ring-width`, `--ui-font-body`, `--ui-font-size-caption`, `--ui-font-size-control`, `--ui-font-size-small`, `--ui-icon-size`, `--ui-icon-size-small`, `--ui-invalid`, `--ui-invalid-text`, `--ui-line-height-control`, `--ui-line-height-tight`, `--ui-motion`, `--ui-primary`, `--ui-radius`, `--ui-shadow-control`, `--ui-shadow-field`, `--ui-space-1`, `--ui-space-2`, `--ui-space-3`, `--ui-space-4`, `--ui-surface`, `--ui-surface-tonal`, `--ui-surface-tonal-hover`, `--ui-text` and `--ui-text-strong`. `theming.md` and `tokens.json` describe them.
71
+
72
+ ## HTML
73
+
74
+ ### Example: Variants
75
+
76
+ ```html
77
+ <label class="ui-text-field">
78
+ <span class="ui-label">Outlined</span>
79
+ <span class="ui-field">
80
+ <input type="text" placeholder="Placeholder" />
81
+ </span>
82
+ </label>
83
+
84
+ <label class="ui-text-field ui-filled">
85
+ <span class="ui-label">Filled</span>
86
+ <span class="ui-field">
87
+ <input type="text" placeholder="Placeholder" />
88
+ </span>
89
+ </label>
90
+ ```
91
+
92
+ ## Astro
93
+
94
+ `import { TextField } from "opui-css/astro"`
95
+
96
+ - `TextField` named slots: `bottom`, `end`, `end-text`, `label`, `start`, `start-text` and `top`. Fill one with `slot="bottom"` on a child.
97
+
98
+ ### Example: Variants
99
+
100
+ ```astro
101
+ ---
102
+ import { TextField } from "opui-css/astro"
103
+ ---
104
+
105
+ <TextField label="Outlined" placeholder="Placeholder" />
106
+ <TextField label="Filled" placeholder="Placeholder" variant="filled" />
107
+ ```
108
+
109
+ ## React
110
+
111
+ `import { TextField } from "opui-css/react"`
112
+
113
+ - `TextField` slot props (`ReactNode`): `bottom`, `children`, `end`, `endText`, `label`, `start`, `startText` and `top`.
114
+ - Client components (`"use client"`): `TextField`.
115
+
116
+ ### Example: Variants
117
+
118
+ ```tsx
119
+ import { TextField } from "opui-css/react"
120
+
121
+ export default function Variants() {
122
+ return (
123
+ <>
124
+ <TextField label="Outlined" placeholder="Placeholder" />
125
+ <TextField label="Filled" placeholder="Placeholder" variant="filled" />
126
+ </>
127
+ )
128
+ }
129
+ ```
130
+
131
+ ## Svelte
132
+
133
+ `import { TextField } from "opui-css/svelte"`
134
+
135
+ - `TextField` slot snippets: `bottom`, `children`, `end`, `endText`, `label`, `start`, `startText` and `top`.
136
+ - Hydration: `bind:value` on `TextField`. The bound value only updates on the client. The native control still changes and submits with its form. Without hydration: Read the value from the form instead.
137
+
138
+ ### Example: Variants
139
+
140
+ ```svelte
141
+ <script lang="ts">
142
+ import { TextField } from "opui-css/svelte"
143
+ </script>
144
+
145
+ <TextField label="Outlined" placeholder="Placeholder" />
146
+ <TextField label="Filled" placeholder="Placeholder" variant="filled" />
147
+ ```
148
+
149
+ ## Vue
150
+
151
+ `import { TextField } from "opui-css/vue"`
152
+
153
+ - `TextField` named slots: `bottom`, `end`, `end-text`, `label`, `start`, `start-text` and `top`. Fill one with `<template #bottom>`.
154
+ - Hydration: `v-model` on `TextField`. The bound value only updates on the client. The native control still changes and submits with its form. Without hydration: Read the value from the form instead.
155
+
156
+ ### Example: Variants
157
+
158
+ ```vue
159
+ <script setup lang="ts">
160
+ import { TextField } from "opui-css/vue"
161
+ </script>
162
+
163
+ <template>
164
+ <TextField label="Outlined" placeholder="Placeholder" />
165
+ <TextField label="Filled" placeholder="Placeholder" variant="filled" />
166
+ </template>
167
+ ```
@@ -0,0 +1,169 @@
1
+ # Textarea
2
+
3
+ An input for multi-line text data. Basic textareas with labels, supporting text, and validation states.
4
+
5
+ - CSS: `opui-css/css/components/text-field.css` and `opui-css/css/components/textarea.css`.
6
+ - Full docs with every example: [HTML](https://open-props-ui.netlify.app/html/components/textarea.md), [Astro](https://open-props-ui.netlify.app/astro/components/textarea.md), [React](https://open-props-ui.netlify.app/react/components/textarea.md), [Svelte](https://open-props-ui.netlify.app/svelte/components/textarea.md), [Vue](https://open-props-ui.netlify.app/vue/components/textarea.md).
7
+
8
+ ## Textarea
9
+
10
+ ### Parts
11
+
12
+ - `label.ui-textarea` (root): Container element.
13
+ - `.ui-label` (prop `label`, slot `label`): The label for the field.
14
+ - `.ui-start-text` (prop `startText`, slot `start-text`): Start text displayed above the field.
15
+ - `.ui-field`: The boxed textarea area.
16
+ - `.ui-field > .ui-top` (slot `top`): Content above the textarea, inside the border, with a divider.
17
+ - `.ui-field > .ui-start` (slot `start`): Content at the inline-start of the field, inside the border.
18
+ - `<textarea>` (model): The textarea element.
19
+ - `.ui-field > .ui-end` (slot `end`): Content at the inline-end of the field, inside the border.
20
+ - `.ui-field > .ui-bottom` (slot `bottom`): Content below the textarea, inside the border, with a divider.
21
+ - `.ui-end-text` (prop `endText`, slot `end-text`): Supporting text displayed below the field.
22
+
23
+ ### Props and modifiers
24
+
25
+ - `autoFit`: `boolean`, `.ui-auto-fit`. Lets the width follow the content and allows resizing in both directions.
26
+ - `disabled`: `boolean`, `textarea[disabled]`. Dims the field and blocks input.
27
+ - `error`: `boolean`, `textarea[aria-invalid="true"]`. Marks the control invalid and shows error styles.
28
+ - `hideLabel`: `boolean`, `.ui-textarea > span.ui-sr-only`. Visually hides the label, `.ui-sr-only` instead of `.ui-label`. The field keeps it as its accessible name.
29
+ - `id`: `string`. The id of the `<textarea>`.
30
+ - `name`: `string`. The name of the `<textarea>`. Inside a `FieldGroup`, the group's `name` applies.
31
+ - `required`: `boolean`, `textarea[required]`. Adds a required mark after the label. The form won't submit while the field is empty.
32
+ - `size`: `"large"` (`.ui-large`), `"medium"` (default), `"small"` (`.ui-small`), `"x-small"` (`.ui-x-small`). The size of the element.
33
+ - `spread`: `boolean`, `.ui-spread`. Pushes the label and start text to one side and the textarea to the other.
34
+ - `variant`: `"filled"` (`.ui-filled`), `"outlined"` (default). The variant to use.
35
+
36
+ ### Slots
37
+
38
+ - `default`: Extra content inside the root.
39
+
40
+ Model: `value` (`string`), the textarea value. Astro and React `value`, Svelte `bind:value`, Vue `v-model`.
41
+
42
+ ### Notes
43
+
44
+ - Astro, Svelte and Vue: Attributes that aren't props go to the `<textarea>`, like `placeholder` and `rows`, and `class` and `style` go to the root `<label>`.
45
+ - React: Attributes that aren't props go to the `<textarea>`, like `placeholder` and `rows`, and `className` and `style` go to the root `<label>`. Use `value` with `onChange`, or `defaultValue`.
46
+
47
+ ## Component properties
48
+
49
+ Set inputs on the component, inline or in your CSS. Outputs follow the variant and state, so never override them.
50
+
51
+ ### text-field.css
52
+
53
+ - `--_accent`: Border color of `.ui-field` when focused with a pointer; keyboard focus shows the focus ring instead. Defaults to `--ui-primary`, `--ui-invalid` when invalid.
54
+ - `--_arrow-inset`: Distance of the select arrow from the inline end.
55
+ - `--_chevron-image`: The select arrow, as an image used for a mask.
56
+ - `--_chevron-size`: Width and height of the select arrow.
57
+ - `--_ease`: Easing of the transitions. Defaults to `--ui-ease`.
58
+ - `--_field-padding-block`: The preferred block padding of the control. Set by the size classes.
59
+ - `--_field-padding-inline`: The inline padding of the control and affixes. `.ui-large` sets it.
60
+ - `--_font-size`: The font size of the control and affixes.
61
+ - `--_motion`: Motion multiplier for the transitions. `0` turns them off.
62
+ - `--_size`: The height of `.ui-field`, a minimum so a textarea can grow, and the width and height of a color field. Defaults to `--ui-field-size`, set by the size classes.
63
+
64
+ Outputs: `--_affix-text-color`, `--_arrow-padding`, `--_bg-color`, `--_border-color`, `--_duration`, `--_field-padding-block-fit` and `--_helper-text-color`.
65
+
66
+ ### textarea.css
67
+
68
+ - `--_max-block-size`: Maximum height the `textarea` grows to with its content.
69
+
70
+ ## Theme tokens
71
+
72
+ The stylesheets read `--ui-disabled-opacity`, `--ui-duration`, `--ui-ease`, `--ui-field-bg-color`, `--ui-field-border-color`, `--ui-field-border-width`, `--ui-field-helper-font-size`, `--ui-field-helper-line-height`, `--ui-field-helper-text-color`, `--ui-field-label-font-size`, `--ui-field-label-font-weight`, `--ui-field-label-text-color`, `--ui-field-padding-inline`, `--ui-field-radius`, `--ui-field-required-text-color`, `--ui-field-size`, `--ui-field-size-large`, `--ui-field-size-small`, `--ui-field-size-x-small`, `--ui-focus-ring-color`, `--ui-focus-ring-offset`, `--ui-focus-ring-style`, `--ui-focus-ring-width`, `--ui-font-body`, `--ui-font-size-caption`, `--ui-font-size-control`, `--ui-font-size-small`, `--ui-icon-size`, `--ui-icon-size-small`, `--ui-invalid`, `--ui-invalid-text`, `--ui-line-height-control`, `--ui-line-height-tight`, `--ui-motion`, `--ui-primary`, `--ui-radius`, `--ui-shadow-control`, `--ui-shadow-field`, `--ui-space-1`, `--ui-space-2`, `--ui-space-3`, `--ui-space-4`, `--ui-surface`, `--ui-surface-tonal`, `--ui-surface-tonal-hover`, `--ui-text` and `--ui-text-strong`. `theming.md` and `tokens.json` describe them.
73
+
74
+ ## HTML
75
+
76
+ ### Example: Variants
77
+
78
+ ```html
79
+ <label class="ui-textarea">
80
+ <span class="ui-label">Outlined</span>
81
+ <span class="ui-field">
82
+ <textarea placeholder="Placeholder"></textarea>
83
+ </span>
84
+ </label>
85
+
86
+ <label class="ui-textarea ui-filled">
87
+ <span class="ui-label">Filled</span>
88
+ <span class="ui-field">
89
+ <textarea placeholder="Placeholder"></textarea>
90
+ </span>
91
+ </label>
92
+ ```
93
+
94
+ ## Astro
95
+
96
+ `import { Textarea } from "opui-css/astro"`
97
+
98
+ - `Textarea` named slots: `bottom`, `end`, `end-text`, `label`, `start`, `start-text` and `top`. Fill one with `slot="bottom"` on a child.
99
+
100
+ ### Example: Variants
101
+
102
+ ```astro
103
+ ---
104
+ import { Textarea } from "opui-css/astro"
105
+ ---
106
+
107
+ <Textarea label="Outlined" placeholder="Placeholder" />
108
+ <Textarea label="Filled" placeholder="Placeholder" variant="filled" />
109
+ ```
110
+
111
+ ## React
112
+
113
+ `import { Textarea } from "opui-css/react"`
114
+
115
+ - `Textarea` slot props (`ReactNode`): `bottom`, `children`, `end`, `endText`, `label`, `start`, `startText` and `top`.
116
+ - Client components (`"use client"`): `Textarea`.
117
+
118
+ ### Example: Variants
119
+
120
+ ```tsx
121
+ import { Textarea } from "opui-css/react"
122
+
123
+ export default function Variants() {
124
+ return (
125
+ <>
126
+ <Textarea label="Outlined" placeholder="Placeholder" />
127
+ <Textarea label="Filled" placeholder="Placeholder" variant="filled" />
128
+ </>
129
+ )
130
+ }
131
+ ```
132
+
133
+ ## Svelte
134
+
135
+ `import { Textarea } from "opui-css/svelte"`
136
+
137
+ - `Textarea` slot snippets: `bottom`, `children`, `end`, `endText`, `label`, `start`, `startText` and `top`.
138
+ - Hydration: `bind:value` on `Textarea`. The bound value only updates on the client. The native control still changes and submits with its form. Without hydration: Read the value from the form instead.
139
+
140
+ ### Example: Variants
141
+
142
+ ```svelte
143
+ <script lang="ts">
144
+ import { Textarea } from "opui-css/svelte"
145
+ </script>
146
+
147
+ <Textarea label="Outlined" placeholder="Placeholder" />
148
+ <Textarea label="Filled" placeholder="Placeholder" variant="filled" />
149
+ ```
150
+
151
+ ## Vue
152
+
153
+ `import { Textarea } from "opui-css/vue"`
154
+
155
+ - `Textarea` named slots: `bottom`, `end`, `end-text`, `label`, `start`, `start-text` and `top`. Fill one with `<template #bottom>`.
156
+ - Hydration: `v-model` on `Textarea`. The bound value only updates on the client. The native control still changes and submits with its form. Without hydration: Read the value from the form instead.
157
+
158
+ ### Example: Variants
159
+
160
+ ```vue
161
+ <script setup lang="ts">
162
+ import { Textarea } from "opui-css/vue"
163
+ </script>
164
+
165
+ <template>
166
+ <Textarea label="Outlined" placeholder="Placeholder" />
167
+ <Textarea label="Filled" placeholder="Placeholder" variant="filled" />
168
+ </template>
169
+ ```