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
package/README.md CHANGED
@@ -1,87 +1,238 @@
1
- # Open Props UI
2
-
3
- A CSS UI library exploring how next-gen HTML & CSS features can change the way we create components. Built on top of [Open Props](https://open-props.style/) and ships HTML, [Astro](https://astro.build/) and [Vue](https://vuejs.org/) components alongside framework-agnostic CSS.
4
-
5
- - Docs: [open-props-ui.netlify.app](https://open-props-ui.netlify.app/)
6
- - Source: [github.com/felix-bohlin/ui](https://github.com/felix-bohlin/ui)
7
-
8
- ## Install
9
-
10
- ```bash
11
- pnpm add opui-css open-props
12
- ```
13
-
14
- Peer dependencies:
15
-
16
- - `astro` `^6` (only required if you use the Astro components)
17
- - `vue` `^3` (only required if you use the Vue components)
18
- - `open-props` `^1`
19
-
20
- ## Usage
21
-
22
- ### Astro components
23
-
24
- ```astro
25
- ---
26
- import "opui-css/css/imports.css"
27
- import { Button, Card } from "opui-css/astro"
28
- ---
29
-
30
- <Card>
31
- <Button variant="primary">Click me</Button>
32
- </Card>
33
- ```
34
-
35
- ### Plain HTML + CSS (no build step)
36
-
37
- Drop a pre-bundled stylesheet into any page and use the documented class names:
38
-
39
- ```html
40
- <link
41
- rel="stylesheet"
42
- href="https://cdn.jsdelivr.net/npm/opui-css/dist/opui.css"
43
- />
44
-
45
- <button class="ui-button ui-primary">Click me</button>
46
- ```
47
-
48
- `dist/opui.css` is a single self-contained file (Open Props + normalize + theme + every component + utils, in the correct cascade layers). `dist/opui.components.css` is the same minus tokens and reset for users who already have those.
49
-
50
- If you do have a bundler that resolves CSS `@import`s (Vite, Astro, webpack, …), import the source instead so you only ship what you use:
51
-
52
- ```css
53
- @import "opui-css/css/imports.css"; /* same content as dist/opui.css */
54
- @import "opui-css/css/components/button.css"; /* or pick à la carte */
55
- ```
56
-
57
- ### Cascade layers
58
-
59
- The library defines this layer order:
60
-
61
- ```css
62
- @layer openprops, theme, normalize, components.root, components.extended, utils;
63
- ```
64
-
65
- Wrap your own styles in a layer above `utils` (or unlayered) to override.
66
-
67
- ## Entry points
68
-
69
- | Import | What it gives you |
70
- | ----------------------------------- | --------------------------------------------- |
71
- | `opui-css` | Pre-bundled: everything in one file (default) |
72
- | `opui-css/open-props` | Pre-bundled: Open Props tokens only |
73
- | `opui-css/dist/opui.css` | Same as default - explicit path |
74
- | `opui-css/dist/opui.components.css` | Pre-bundled: components only |
75
- | `opui-css/dist/op.css` | Same as `opui-css/open-props` - explicit path |
76
- | `opui-css/css/imports.css` | Source: everything (resolved by your bundler) |
77
- | `opui-css/css/components.css` | All component styles (no tokens / reset) |
78
- | `opui-css/css/components/*.css` | One component at a time |
79
- | `opui-css/core/normalize.css` | CSS reset |
80
- | `opui-css/core/palette.css` | Extra OKLCH palette |
81
- | `opui-css/core/utils.css` | Utility classes |
82
- | `opui-css/astro` | All Astro components |
83
- | `opui-css/components/*` | Individual Astro component sources |
84
-
85
- ## License
86
-
87
- [MIT](./LICENSE) © Felix Bohlin
1
+ # Open Props UI
2
+
3
+ Design system. Components. Modern HTML & CSS.
4
+
5
+ HTML, [Astro](https://astro.build/), [React](https://react.dev/), [Svelte](https://svelte.dev/) and [Vue](https://vuejs.org/) components alongside framework-agnostic CSS. The theme tokens started from [Open Props](https://open-props.style/), and the components don't need it: it ships as an optional companion for your own CSS.
6
+
7
+ - Docs: [open-props-ui.netlify.app](https://open-props-ui.netlify.app/)
8
+ - Source: [github.com/felix-bohlin/ui](https://github.com/felix-bohlin/ui)
9
+
10
+ ## Install
11
+
12
+ ```bash
13
+ pnpm add opui-css
14
+ ```
15
+
16
+ Peer dependencies:
17
+
18
+ - `astro` `^7` (only required if you use the Astro components)
19
+ - `open-props` `^1.7.23` (only required if you import `opui-css/open-props.css`, the Open Props source)
20
+ - `react` and `react-dom` `^19` (only required if you use the React components)
21
+ - `svelte` `^5.57` (only required if you use the Svelte components)
22
+ - `vue` `^3.5` (only required if you use the Vue components)
23
+
24
+ ## Usage
25
+
26
+ ### Astro components
27
+
28
+ ```astro
29
+ ---
30
+ import "opui-css/css/imports.css"
31
+ import { Button, Card } from "opui-css/astro"
32
+ ---
33
+
34
+ <Card>
35
+ <Button color="primary" variant="filled">Click me</Button>
36
+ </Card>
37
+ ```
38
+
39
+ ### React components
40
+
41
+ React components ship markup only, so import the CSS once in your app entry:
42
+
43
+ ```css
44
+ @import "opui-css/css/imports.css";
45
+ ```
46
+
47
+ ```tsx
48
+ import { Button, Card } from "opui-css/react"
49
+
50
+ export default function App() {
51
+ return (
52
+ <Card>
53
+ <Button color="primary" variant="filled">
54
+ Click me
55
+ </Button>
56
+ </Card>
57
+ )
58
+ }
59
+ ```
60
+
61
+ Containers take parts, such as `CardHeader` and `DialogFooter`. Other slots are props: `children`, and camelCased names such as `endText`. Form controls take the native `value`/`defaultValue`, `checked`/`defaultChecked` and `onChange` props. Components that need context, state or effects (Anchor, Callout, Dialog, Drawer, FieldGroup, Menu, Range, Select, Tabs, TextField, Textarea, ToggleButton and ToggleGroup, and the CheckboxInput, RadioInput and SwitchInput parts) are marked `"use client"`; the rest also render as React Server Components.
62
+
63
+ ### Svelte components
64
+
65
+ Svelte components ship markup only, so import the CSS once in your root layout or app entry:
66
+
67
+ ```css
68
+ @import "opui-css/css/imports.css";
69
+ ```
70
+
71
+ ```svelte
72
+ <script lang="ts">
73
+ import { Button, Card } from "opui-css/svelte"
74
+ </script>
75
+
76
+ <Card>
77
+ <Button color="primary" variant="filled">Click me</Button>
78
+ </Card>
79
+ ```
80
+
81
+ ### Vue components
82
+
83
+ Vue components ship markup only, so import the CSS once in your app entry:
84
+
85
+ ```css
86
+ @import "opui-css/css/imports.css";
87
+ ```
88
+
89
+ ```vue
90
+ <script setup lang="ts">
91
+ import { Button, Card } from "opui-css/vue"
92
+ </script>
93
+
94
+ <template>
95
+ <Card>
96
+ <Button color="primary" variant="filled">Click me</Button>
97
+ </Card>
98
+ </template>
99
+ ```
100
+
101
+ `opui-css/astro`, `opui-css/react`, `opui-css/svelte` and `opui-css/vue` export uncompiled sources (`.astro`, `.tsx`, `.svelte`, `.vue`, `.ts`), so they need a bundler that compiles them, e.g. Astro, or Vite with `@vitejs/plugin-react`, `@sveltejs/vite-plugin-svelte` or `@vitejs/plugin-vue`. In Next.js, add `transpilePackages: ["opui-css"]` to `next.config`.
102
+
103
+ Vite's server build loads dependencies from `node_modules` without compiling them, and Node can't load `.svelte`, `.vue` or `.tsx`, so the package has to go through the bundler on the server too. Astro does this on its own, and SvelteKit through the package's `svelte` field. In Vite SSR, add `ssr: { noExternal: ["opui-css"] }` to `vite.config`, and in Nuxt, add `build: { transpile: ["opui-css"] }` to `nuxt.config`.
104
+
105
+ #### TypeScript
106
+
107
+ The components ship their TypeScript sources instead of `.d.ts` files, so your `tsconfig.json` type-checks them with your own `compilerOptions`. They are checked with `strict: true`, `verbatimModuleSyntax` and `isolatedModules`, and resolve with `moduleResolution: "bundler"`, `"node16"` or `"nodenext"` (not `"node10"`). The React components need `jsx: "react-jsx"` or `"preserve"`. `exactOptionalPropertyTypes` and `noUncheckedIndexedAccess` aren't checked, so they can report errors in the package, and `skipLibCheck` doesn't skip its `.ts` files.
108
+
109
+ #### Ids in Astro
110
+
111
+ Components that link elements with ids (form fields, Tabs, Drawer, Menu, …) read `Astro.locals.$id` when it exists and otherwise generate a random id per render. For stable, per-request ids (useful for snapshot tests), define it in a middleware:
112
+
113
+ ```ts
114
+ // src/middleware.ts
115
+ import { defineMiddleware } from "astro:middleware"
116
+
117
+ export const onRequest = defineMiddleware((context, next) => {
118
+ const counts = new Map<string, number>()
119
+ context.locals.$id = (prefix) => {
120
+ const count = (counts.get(prefix) ?? 0) + 1
121
+ counts.set(prefix, count)
122
+ return `${prefix}-${count}`
123
+ }
124
+ return next()
125
+ })
126
+ ```
127
+
128
+ Add `/// <reference types="opui-css/env.d.ts" />` to your `env.d.ts` to type `$id` and the `interestfor` attribute on `<a>` and `<button>`.
129
+
130
+ #### Astro runtime
131
+
132
+ The Astro components pass settings to their parts with `AsyncLocalStorage` (`node:async_hooks`), so they run on Node, Deno and Bun. On Cloudflare, enable the `nodejs_compat` compatibility flag.
133
+
134
+ ### Plain HTML + CSS (no build step)
135
+
136
+ Drop a pre-bundled stylesheet into any page and use the documented class names:
137
+
138
+ ```html
139
+ <link
140
+ rel="stylesheet"
141
+ href="https://cdn.jsdelivr.net/npm/opui-css@6/dist/opui.css"
142
+ />
143
+
144
+ <button class="ui-button ui-primary">Click me</button>
145
+ ```
146
+
147
+ `dist/opui.css` is a single self-contained file (Open Props + palette + theme + normalize + every component + browser fallbacks + utils, in the correct cascade layers). `dist/opui.components.css` has only the layer order, the component styles, their browser fallbacks and the `Layout` classes. The components need `core/palette.css` and `css/theme.css` to look right, and `core/utils.css` holds `.ui-sr-only` and the motion and contrast classes, so load those yourself when you use it. Nothing in the package reads Open Props: `theme.css` holds its own values, and Open Props is in the bundle for your own CSS.
148
+
149
+ The browser fallbacks are the `components.compat` layer, which only applies in browsers without a feature. `dist/opui.no-compat.css` is `dist/opui.css` without them, and `dist/opui.baseline-<year>.css` keeps only the ones that browsers of that Baseline year need ([Compat layer](https://open-props-ui.netlify.app/html/guide/browser-support/#compat)).
150
+
151
+ If you do have a bundler that resolves CSS `@import`s (Vite, Astro, webpack, …), import the source instead so you only ship what you use:
152
+
153
+ ```css
154
+ @import "opui-css/css/imports.css"; /* dist/opui.css without Open Props */
155
+ @import "opui-css/css/components/button.css"; /* or pick à la carte */
156
+ ```
157
+
158
+ ### Cascade layers
159
+
160
+ The library defines this layer order:
161
+
162
+ ```css
163
+ @layer openprops, theme, normalize, components.prose, components.root, components.extended, components.compat, utils;
164
+ @layer theme.palette, theme.base, theme.custom, theme.severity;
165
+ ```
166
+
167
+ Import `opui-css/css/layers.css` first to set this order when you import single files, and `opui-css/css/compat.css` after the components for the browser fallbacks.
168
+
169
+ Put your theme tokens in `@layer theme.custom`, which beats the defaults in `theme.base`. `theme.severity` comes after it and only holds the palette source of the severity classes, so a theme that sets `--ui-palette-source` doesn't recolor a `.ui-critical` on the same element. Wrap other overrides in a layer above `utils` (or unlayered).
170
+
171
+ ## Upgrading
172
+
173
+ Breaking changes and how to update your code are in [MIGRATING.md](./MIGRATING.md) (also on the docs site: [Migrating to v6](https://open-props-ui.netlify.app/html/guide/migrating/)), with every change listed in [CHANGELOG.md](./CHANGELOG.md).
174
+
175
+ ## Entry points
176
+
177
+ | Import | What it gives you |
178
+ | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
179
+ | `opui-css` | Pre-bundled: everything in one file (default) |
180
+ | `opui-css/open-props` | Pre-bundled: Open Props tokens only, for your own CSS (the components don't read them) |
181
+ | `opui-css/open-props.css` | Source: the Open Props imports (needs `open-props` installed) |
182
+ | `opui-css/dist/opui.css` | Same as default - explicit path |
183
+ | `opui-css/dist/opui.baseline-<year>.css` | Pre-bundled: everything, with only the browser fallbacks that browsers of that Baseline year need |
184
+ | `opui-css/dist/opui.components.css` | Pre-bundled: components only (no Open Props, palette, theme, reset or utils) |
185
+ | `opui-css/dist/opui.no-compat.css` | Pre-bundled: everything but the browser fallbacks |
186
+ | `opui-css/dist/op.css` | Same as `opui-css/open-props` - explicit path |
187
+ | `opui-css/css/imports.css` | Source: everything but Open Props (resolved by your bundler) |
188
+ | `opui-css/css/layers.css` | `@layer` order only |
189
+ | `opui-css/css/compat.css` | All browser fallbacks, in the `components.compat` layer |
190
+ | `opui-css/css/compat/*.css` | The browser fallbacks of one component |
191
+ | `opui-css/css/components.css` | All component styles (no Open Props, palette, theme, reset or utils) |
192
+ | `opui-css/css/components/*.css` | One component at a time |
193
+ | `opui-css/css/theme.css` | Theme tokens (colors, sizes, motion, state) |
194
+ | `opui-css/core/normalize.css` | CSS reset |
195
+ | `opui-css/core/palette.css` | OKLCH palette (required by the components) |
196
+ | `opui-css/core/utils.css` | Utility classes |
197
+ | `opui-css/css/js/checkbox.js` | `activateIndeterminate()`, `initCheckbox()` and `syncIndeterminate()` for indeterminate checkboxes without a framework |
198
+ | `opui-css/css/js/range.js` | `initRange()` keeps a `.ui-range` `<output data-live>` in sync with its slider without a framework |
199
+ | `opui-css/themes/*` | Example themes (`bootstrap`, `brutalist`, `m3`, `shadcn`), with or without `.css` |
200
+ | `opui-css/tokens.json` | Every theme token in the W3C design tokens format |
201
+ | `opui-css/astro` | All Astro components |
202
+ | `opui-css/react` | All React components |
203
+ | `opui-css/svelte` | All Svelte components |
204
+ | `opui-css/vue` | All Vue components |
205
+ | `opui-css/components/*` | Individual Astro, React, Svelte and Vue component sources. The files at the top of `components/` (`cx.ts`, `dev.ts`, `group.ts`, `id.ts`, `style.ts`, `tag.ts`, `vue.ts`, `context.astro.ts` and `content.svelte`) are internal helpers that can change in any release |
206
+ | `opui-css/env.d.ts` | Astro types for `Astro.locals.$id` and `interestfor` (see [Ids in Astro](#ids-in-astro)) |
207
+ | `opui-css/package.json` | The package manifest, for tools that read it |
208
+
209
+ Importing a React component from `opui-css/components/*` skips the type augmentation in `opui-css/react`, which adds `command`, `commandfor` and `interestfor` to React's element types. `Menu` and `DrawerHeader` need it, so add `import type {} from "opui-css/react"` once in your app.
210
+
211
+ ## Themes
212
+
213
+ Put your own tokens in `@layer theme.custom`, which beats the defaults and loses to everything else. Example themes ship in `themes/`: `bootstrap` (Bootstrap 5), `brutalist` (neobrutalism), `m3` (Material 3) and `shadcn` (shadcn/ui). They name their fonts (DM Sans, Roboto and Geist) but don't load them.
214
+
215
+ ```css
216
+ @import "opui-css/css/imports.css";
217
+ @import "opui-css/themes/brutalist.css";
218
+ ```
219
+
220
+ ## Design tokens
221
+
222
+ `opui-css/tokens.json` lists every theme token in the [W3C design tokens](https://www.designtokens.org/) format: its `$type`, description and default as `$value`, and under `$extensions.opui` its CSS variable, tier (`role`, `component` or `hook`), contrast promise and dark and more-contrast values. A plain number, a `px` or `rem` length and an alias of another token are native values (`0.41`, `{"unit": "px", "value": 1}`, `{typography.ui-font-size-100}`) with the CSS beside them as `$extensions.opui.css`. Every other value is the CSS expression, since a color or size that follows another token or the color scheme has no single resolved value, so a design tool resolves those first. Tokens that are unset by default have no `$value`, only an `example`.
223
+
224
+ ## AI assistants
225
+
226
+ The package ships an agent skill in `skills/opui`, with one reference per component for every framework, matching the installed version. Agents don't load skills from `node_modules` on their own, so copy it into your project:
227
+
228
+ ```bash
229
+ npx opui-css skill
230
+ ```
231
+
232
+ It writes `.claude/skills/opui` and prints the version it copied. Pass `--dir <path>` to copy it into another agent's skills folder (`<path>/opui`), and `--force` to replace an older copy after an upgrade. Without the command: `mkdir -p .claude/skills && cp -r node_modules/opui-css/skills/opui .claude/skills/opui`.
233
+
234
+ The docs are also available as [llms.txt](https://open-props-ui.netlify.app/llms.txt), and every docs page has a Markdown version, e.g. [/html/components/button.md](https://open-props-ui.netlify.app/html/components/button.md).
235
+
236
+ ## License
237
+
238
+ [MIT](./LICENSE) © Felix Bohlin
package/astro/index.ts CHANGED
@@ -1,46 +1,175 @@
1
- export { default as Accordion } from "../components/Accordion/Accordion.astro"
2
- export { default as Anchor } from "../components/Anchor/Anchor.astro"
3
- export { default as Avatar } from "../components/Avatar/Avatar.astro"
4
- export { default as Badge } from "../components/Badge/Badge.astro"
5
- export { default as Button } from "../components/Button/Button.astro"
6
- export { default as ButtonGroup } from "../components/ButtonGroup/ButtonGroup.astro"
7
- export { default as Callout } from "../components/Callout/Callout.astro"
8
- export { default as Card } from "../components/Card/Card.astro"
9
- export { default as Checkbox } from "../components/Checkbox/Checkbox.astro"
10
- export { default as CheckboxInput } from "../components/Checkbox/CheckboxInput.astro"
11
- export { default as Chip } from "../components/Chip/Chip.astro"
12
- export { default as ClassicSelect } from "../components/ClassicSelect/ClassicSelect.astro"
13
- export { default as DescriptionList } from "../components/DescriptionList/index"
14
- export { default as Dialog } from "../components/Dialog/Dialog.astro"
15
- export { default as Divider } from "../components/Divider/Divider.astro"
16
- export { default as Drawer } from "../components/Drawer/Drawer.astro"
17
- export { default as DrawerFooter } from "../components/Drawer/DrawerFooter.astro"
18
- export { default as DrawerHeader } from "../components/Drawer/DrawerHeader.astro"
19
- export { default as FieldDescription } from "../components/FieldDescription/FieldDescription.astro"
20
- export { default as FieldGroup } from "../components/FieldGroup/FieldGroup.astro"
21
- export { default as FieldLegend } from "../components/FieldLegend/FieldLegend.astro"
22
- export { default as FieldSet } from "../components/FieldSet/FieldSet.astro"
23
- export { default as Form } from "../components/Form/Form.astro"
24
- export { default as IconButton } from "../components/IconButton/IconButton.astro"
25
- export { default as List } from "../components/List/List.astro"
26
- export { default as ListItem } from "../components/ListItem/ListItem.astro"
27
- export { default as Progress } from "../components/Progress/Progress.astro"
28
- export { default as Radio } from "../components/Radio/Radio.astro"
29
- export { default as RadioInput } from "../components/Radio/RadioInput.astro"
30
- export { default as Range } from "../components/Range/Range.astro"
31
- export { default as Select } from "../components/Select/Select.astro"
32
- export { default as Switch } from "../components/Switch/Switch.astro"
33
- export { default as SwitchInput } from "../components/Switch/SwitchInput.astro"
34
- export { default as Tabs } from "../components/Tabs/index"
35
- export {
36
- TabsItem,
37
- Tab as TabsTab,
38
- Panel as TabsPanel,
39
- } from "../components/Tabs/index"
40
- export { default as Table } from "../components/Table/index"
41
- export { default as Textarea } from "../components/Textarea/Textarea.astro"
42
- export { default as TextField } from "../components/TextField/TextField.astro"
43
- export { default as Toast } from "../components/Toast/Toast.astro"
44
- export { default as Tooltip } from "../components/Tooltip/Tooltip.astro"
45
- export { default as ToggleButton } from "../components/ToggleButton/ToggleButton.astro"
46
- export { default as ToggleGroup } from "../components/ToggleGroup/ToggleGroup.astro"
1
+ export { default as Accordion } from "../components/Accordion/Accordion.astro"
2
+ export { default as AccordionActions } from "../components/Accordion/AccordionActions.astro"
3
+ export { default as AccordionContent } from "../components/Accordion/AccordionContent.astro"
4
+ export { default as AccordionSummary } from "../components/Accordion/AccordionSummary.astro"
5
+ export { default as Anchor } from "../components/Anchor/Anchor.astro"
6
+ export { default as AnchorContent } from "../components/Anchor/AnchorContent.astro"
7
+ export { default as Avatar } from "../components/Avatar/Avatar.astro"
8
+ export { default as AvatarGroup } from "../components/Avatar/AvatarGroup.astro"
9
+ export { default as Badge } from "../components/Badge/Badge.astro"
10
+ export { default as Button } from "../components/Button/Button.astro"
11
+ export { default as ButtonGroup } from "../components/ButtonGroup/ButtonGroup.astro"
12
+ export { default as Callout } from "../components/Callout/Callout.astro"
13
+ export { default as CalloutContent } from "../components/Callout/CalloutContent.astro"
14
+ export { default as CalloutIcon } from "../components/Callout/CalloutIcon.astro"
15
+ export { default as Card } from "../components/Card/Card.astro"
16
+ export { default as CardActions } from "../components/Card/CardActions.astro"
17
+ export { default as CardContent } from "../components/Card/CardContent.astro"
18
+ export { default as CardHeader } from "../components/Card/CardHeader.astro"
19
+ export { default as Carousel } from "../components/Carousel/Carousel.astro"
20
+ export { default as Checkbox } from "../components/Checkbox/Checkbox.astro"
21
+ export { default as CheckboxInput } from "../components/Checkbox/CheckboxInput.astro"
22
+ export { default as Chip } from "../components/Chip/Chip.astro"
23
+ export { default as DescriptionList } from "../components/DescriptionList/DescriptionList.astro"
24
+ export { default as DescriptionListDescription } from "../components/DescriptionList/DescriptionListDescription.astro"
25
+ export { default as DescriptionListItem } from "../components/DescriptionList/DescriptionListItem.astro"
26
+ export { default as DescriptionListTerm } from "../components/DescriptionList/DescriptionListTerm.astro"
27
+ export { default as Dialog } from "../components/Dialog/Dialog.astro"
28
+ export { default as DialogContent } from "../components/Dialog/DialogContent.astro"
29
+ export { default as DialogFooter } from "../components/Dialog/DialogFooter.astro"
30
+ export { default as DialogHeader } from "../components/Dialog/DialogHeader.astro"
31
+ export { default as DialogTitle } from "../components/Dialog/DialogTitle.astro"
32
+ export { default as Divider } from "../components/Divider/Divider.astro"
33
+ export { default as Drawer } from "../components/Drawer/Drawer.astro"
34
+ export { default as DrawerContent } from "../components/Drawer/DrawerContent.astro"
35
+ export { default as DrawerFooter } from "../components/Drawer/DrawerFooter.astro"
36
+ export { default as DrawerHeader } from "../components/Drawer/DrawerHeader.astro"
37
+ export { default as DrawerTitle } from "../components/Drawer/DrawerTitle.astro"
38
+ export { default as FieldDescription } from "../components/FieldDescription/FieldDescription.astro"
39
+ export { default as FieldGroup } from "../components/FieldGroup/FieldGroup.astro"
40
+ export { default as FieldLegend } from "../components/FieldLegend/FieldLegend.astro"
41
+ export { default as Fieldset } from "../components/Fieldset/Fieldset.astro"
42
+ export { default as Form } from "../components/Form/Form.astro"
43
+ export { default as List } from "../components/List/List.astro"
44
+ export { default as ListItem } from "../components/ListItem/ListItem.astro"
45
+ export { default as Menu } from "../components/Menu/Menu.astro"
46
+ export { default as Progress } from "../components/Progress/Progress.astro"
47
+ export { default as Radio } from "../components/Radio/Radio.astro"
48
+ export { default as RadioInput } from "../components/Radio/RadioInput.astro"
49
+ export { default as Range } from "../components/Range/Range.astro"
50
+ export { default as Select } from "../components/Select/Select.astro"
51
+ export { default as Switch } from "../components/Switch/Switch.astro"
52
+ export { default as SwitchInput } from "../components/Switch/SwitchInput.astro"
53
+ export { default as Table } from "../components/Table/Table.astro"
54
+ export { default as TableBody } from "../components/Table/TableBody.astro"
55
+ export { default as TableCaption } from "../components/Table/TableCaption.astro"
56
+ export { default as TableCell } from "../components/Table/TableCell.astro"
57
+ export { default as TableColumn } from "../components/Table/TableColumn.astro"
58
+ export { default as TableColumnGroup } from "../components/Table/TableColumnGroup.astro"
59
+ export { default as TableFoot } from "../components/Table/TableFoot.astro"
60
+ export { default as TableHead } from "../components/Table/TableHead.astro"
61
+ export { default as TableHeaderCell } from "../components/Table/TableHeaderCell.astro"
62
+ export { default as TableRow } from "../components/Table/TableRow.astro"
63
+ export { default as Tabs } from "../components/Tabs/Tabs.astro"
64
+ export { default as TabsItem } from "../components/Tabs/TabsItem.astro"
65
+ export { default as TabsLabel } from "../components/Tabs/TabsLabel.astro"
66
+ export { default as TabsPanel } from "../components/Tabs/TabsPanel.astro"
67
+ export { default as Textarea } from "../components/Textarea/Textarea.astro"
68
+ export { default as TextField } from "../components/TextField/TextField.astro"
69
+ export { default as ToggleButton } from "../components/ToggleButton/ToggleButton.astro"
70
+ export { default as ToggleGroup } from "../components/ToggleGroup/ToggleGroup.astro"
71
+ export { default as Tooltip } from "../components/Tooltip/Tooltip.astro"
72
+ export { default as TooltipContent } from "../components/Anchor/AnchorContent.astro"
73
+ export type {
74
+ AccordionActionsProps,
75
+ AccordionContentProps,
76
+ Props as AccordionProps,
77
+ AccordionSummaryProps,
78
+ } from "../components/Accordion/types.astro"
79
+ export type {
80
+ AnchorContentProps,
81
+ Props as AnchorProps,
82
+ AnchorContentProps as TooltipContentProps,
83
+ } from "../components/Anchor/types.astro"
84
+ export type {
85
+ AvatarGroupProps,
86
+ Props as AvatarProps,
87
+ } from "../components/Avatar/types.astro"
88
+ export type { Props as BadgeProps } from "../components/Badge/types.astro"
89
+ export type { Props as ButtonProps } from "../components/Button/types.astro"
90
+ export type { Props as ButtonGroupProps } from "../components/ButtonGroup/types.astro"
91
+ export type {
92
+ CalloutContentProps,
93
+ CalloutIconProps,
94
+ Props as CalloutProps,
95
+ } from "../components/Callout/types.astro"
96
+ export type {
97
+ CardActionsProps,
98
+ CardContentProps,
99
+ CardHeaderProps,
100
+ Props as CardProps,
101
+ } from "../components/Card/types.astro"
102
+ export type { Props as CarouselProps } from "../components/Carousel/types.astro"
103
+ export type {
104
+ CheckboxInputProps,
105
+ Props as CheckboxProps,
106
+ } from "../components/Checkbox/types.astro"
107
+ export type { Props as ChipProps } from "../components/Chip/types.astro"
108
+ export type {
109
+ DescriptionListDescriptionProps,
110
+ DescriptionListItemProps,
111
+ Props as DescriptionListProps,
112
+ DescriptionListTermProps,
113
+ } from "../components/DescriptionList/types.astro"
114
+ export type {
115
+ DialogContentProps,
116
+ DialogFooterProps,
117
+ DialogHeaderProps,
118
+ Props as DialogProps,
119
+ DialogTitleProps,
120
+ } from "../components/Dialog/types.astro"
121
+ export type { Props as DividerProps } from "../components/Divider/types.astro"
122
+ export type {
123
+ DrawerContentProps,
124
+ DrawerFooterProps,
125
+ DrawerHeaderProps,
126
+ Props as DrawerProps,
127
+ DrawerTitleProps,
128
+ } from "../components/Drawer/types.astro"
129
+ export type { Props as FieldDescriptionProps } from "../components/FieldDescription/types.astro"
130
+ export type { Props as FieldGroupProps } from "../components/FieldGroup/types.astro"
131
+ export type { Props as FieldLegendProps } from "../components/FieldLegend/types.astro"
132
+ export type { Props as FieldsetProps } from "../components/Fieldset/types.astro"
133
+ export type { Props as FormProps } from "../components/Form/types.astro"
134
+ export type { Props as ListProps } from "../components/List/types.astro"
135
+ export type { Props as ListItemProps } from "../components/ListItem/types.astro"
136
+ export type {
137
+ MenuItem,
138
+ Props as MenuProps,
139
+ } from "../components/Menu/types.astro"
140
+ export type { Props as ProgressProps } from "../components/Progress/types.astro"
141
+ export type {
142
+ RadioInputProps,
143
+ Props as RadioProps,
144
+ } from "../components/Radio/types.astro"
145
+ export type { RangeItem } from "../components/Range/types"
146
+ export type { Props as RangeProps } from "../components/Range/types.astro"
147
+ export type { SelectItem } from "../components/Select/types"
148
+ export type { Props as SelectProps } from "../components/Select/types.astro"
149
+ export type {
150
+ SwitchInputProps,
151
+ Props as SwitchProps,
152
+ } from "../components/Switch/types.astro"
153
+ export type {
154
+ TableBodyProps,
155
+ TableCaptionProps,
156
+ TableCellProps,
157
+ TableColumnGroupProps,
158
+ TableColumnProps,
159
+ TableFootProps,
160
+ TableHeaderCellProps,
161
+ TableHeadProps,
162
+ Props as TableProps,
163
+ TableRowProps,
164
+ } from "../components/Table/types.astro"
165
+ export type {
166
+ TabsItemProps,
167
+ TabsLabelProps,
168
+ TabsPanelProps,
169
+ Props as TabsProps,
170
+ } from "../components/Tabs/types.astro"
171
+ export type { Props as TextareaProps } from "../components/Textarea/types.astro"
172
+ export type { Props as TextFieldProps } from "../components/TextField/types.astro"
173
+ export type { Props as ToggleButtonProps } from "../components/ToggleButton/types.astro"
174
+ export type { Props as ToggleGroupProps } from "../components/ToggleGroup/types.astro"
175
+ export type { Props as TooltipProps } from "../components/Tooltip/types.astro"
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+ import { cpSync, existsSync, readFileSync, rmSync } from "node:fs"
3
+ import path from "node:path"
4
+ import { fileURLToPath } from "node:url"
5
+ import { parseArgs } from "node:util"
6
+
7
+ const packageDir = fileURLToPath(new URL("..", import.meta.url))
8
+ const { version } = JSON.parse(
9
+ readFileSync(path.join(packageDir, "package.json"), "utf8"),
10
+ )
11
+
12
+ const USAGE = `opui-css ${version}
13
+
14
+ Usage: npx opui-css skill [--dir <path>] [--force]
15
+
16
+ Commands:
17
+ skill Copy the opui agent skill into .claude/skills/opui
18
+
19
+ Options:
20
+ --dir <path> Copy it into <path>/opui instead, for another agent's skills folder
21
+ --force Replace an existing copy
22
+ --help Show this help`
23
+
24
+ const fail = (message) => {
25
+ if (message) console.error(`${message}\n`)
26
+ console.error(USAGE)
27
+ process.exit(1)
28
+ }
29
+
30
+ let parsed
31
+ try {
32
+ parsed = parseArgs({
33
+ allowPositionals: true,
34
+ options: {
35
+ dir: { type: "string" },
36
+ force: { type: "boolean" },
37
+ help: { short: "h", type: "boolean" },
38
+ },
39
+ })
40
+ } catch (error) {
41
+ fail(error.message)
42
+ }
43
+
44
+ const { positionals, values } = parsed
45
+ if (values.help) fail()
46
+ if (positionals.length === 0) fail("Missing a command.")
47
+ if (positionals[0] !== "skill" || positionals.length > 1) {
48
+ fail(`Unknown command: ${positionals.join(" ")}`)
49
+ }
50
+
51
+ const source = path.join(packageDir, "skills", "opui")
52
+ const target = path.resolve(
53
+ values.dir ?? path.join(".claude", "skills"),
54
+ "opui",
55
+ )
56
+ const relative = path.relative(process.cwd(), target)
57
+ const shown = relative && !relative.startsWith("..") ? relative : target
58
+
59
+ if (existsSync(target) && !values.force) {
60
+ console.error(
61
+ `${shown} already exists. Run the command again with --force to replace it.`,
62
+ )
63
+ process.exit(1)
64
+ }
65
+
66
+ rmSync(target, { force: true, recursive: true })
67
+ cpSync(source, target, { recursive: true })
68
+ console.log(`Copied the opui skill from opui-css ${version} to ${shown}`)