@pickle-ui/react 0.0.0-stage → 1.0.0-beta.3

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 (560) hide show
  1. package/README.md +490 -2
  2. package/dist/components/Alert.d.ts +38 -0
  3. package/dist/components/Alert.d.ts.map +1 -0
  4. package/dist/components/Alert.js +54 -0
  5. package/dist/components/Alert.js.map +1 -0
  6. package/dist/components/AlertDialog.d.ts +41 -0
  7. package/dist/components/AlertDialog.d.ts.map +1 -0
  8. package/dist/components/AlertDialog.js +47 -0
  9. package/dist/components/AlertDialog.js.map +1 -0
  10. package/dist/components/Avatar.d.ts +18 -0
  11. package/dist/components/Avatar.d.ts.map +1 -0
  12. package/dist/components/Avatar.js +34 -0
  13. package/dist/components/Avatar.js.map +1 -0
  14. package/dist/components/Badge.d.ts +12 -0
  15. package/dist/components/Badge.d.ts.map +1 -0
  16. package/dist/components/Badge.js +37 -0
  17. package/dist/components/Badge.js.map +1 -0
  18. package/dist/components/Button.d.ts +19 -0
  19. package/dist/components/Button.d.ts.map +1 -0
  20. package/dist/components/Button.js +66 -0
  21. package/dist/components/Button.js.map +1 -0
  22. package/dist/components/Card.d.ts +27 -0
  23. package/dist/components/Card.d.ts.map +1 -0
  24. package/dist/components/Card.js +34 -0
  25. package/dist/components/Card.js.map +1 -0
  26. package/dist/components/Dialog.d.ts +38 -0
  27. package/dist/components/Dialog.d.ts.map +1 -0
  28. package/dist/components/Dialog.js +41 -0
  29. package/dist/components/Dialog.js.map +1 -0
  30. package/dist/components/Flex.d.ts +22 -0
  31. package/dist/components/Flex.d.ts.map +1 -0
  32. package/dist/components/Flex.js +20 -0
  33. package/dist/components/Flex.js.map +1 -0
  34. package/dist/components/Grid.d.ts +66 -0
  35. package/dist/components/Grid.d.ts.map +1 -0
  36. package/dist/components/Grid.js +63 -0
  37. package/dist/components/Grid.js.map +1 -0
  38. package/dist/components/Group.d.ts +20 -0
  39. package/dist/components/Group.d.ts.map +1 -0
  40. package/dist/components/Group.js +43 -0
  41. package/dist/components/Group.js.map +1 -0
  42. package/dist/components/Menu.d.ts +53 -0
  43. package/dist/components/Menu.d.ts.map +1 -0
  44. package/dist/components/Menu.js +78 -0
  45. package/dist/components/Menu.js.map +1 -0
  46. package/dist/components/Popover.d.ts +27 -0
  47. package/dist/components/Popover.d.ts.map +1 -0
  48. package/dist/components/Popover.js +34 -0
  49. package/dist/components/Popover.js.map +1 -0
  50. package/dist/components/Progress.d.ts +23 -0
  51. package/dist/components/Progress.d.ts.map +1 -0
  52. package/dist/components/Progress.js +26 -0
  53. package/dist/components/Progress.js.map +1 -0
  54. package/dist/components/ScrollArea.d.ts +32 -0
  55. package/dist/components/ScrollArea.d.ts.map +1 -0
  56. package/dist/components/ScrollArea.js +36 -0
  57. package/dist/components/ScrollArea.js.map +1 -0
  58. package/dist/components/Separator.d.ts +7 -0
  59. package/dist/components/Separator.d.ts.map +1 -0
  60. package/dist/components/Separator.js +8 -0
  61. package/dist/components/Separator.js.map +1 -0
  62. package/dist/components/Sidebar.d.ts +35 -0
  63. package/dist/components/Sidebar.d.ts.map +1 -0
  64. package/dist/components/Sidebar.js +45 -0
  65. package/dist/components/Sidebar.js.map +1 -0
  66. package/dist/components/Spinner.d.ts +11 -0
  67. package/dist/components/Spinner.d.ts.map +1 -0
  68. package/dist/components/Spinner.js +13 -0
  69. package/dist/components/Spinner.js.map +1 -0
  70. package/dist/components/Table.d.ts +32 -0
  71. package/dist/components/Table.d.ts.map +1 -0
  72. package/dist/components/Table.js +37 -0
  73. package/dist/components/Table.js.map +1 -0
  74. package/dist/components/Text.d.ts +14 -0
  75. package/dist/components/Text.d.ts.map +1 -0
  76. package/dist/components/Text.js +50 -0
  77. package/dist/components/Text.js.map +1 -0
  78. package/dist/components/Toast.d.ts +39 -0
  79. package/dist/components/Toast.d.ts.map +1 -0
  80. package/dist/components/Toast.js +97 -0
  81. package/dist/components/Toast.js.map +1 -0
  82. package/dist/components/Tooltip.d.ts +18 -0
  83. package/dist/components/Tooltip.d.ts.map +1 -0
  84. package/dist/components/Tooltip.js +22 -0
  85. package/dist/components/Tooltip.js.map +1 -0
  86. package/dist/components/XStack.d.ts +6 -0
  87. package/dist/components/XStack.d.ts.map +1 -0
  88. package/dist/components/XStack.js +8 -0
  89. package/dist/components/XStack.js.map +1 -0
  90. package/dist/components/YStack.d.ts +6 -0
  91. package/dist/components/YStack.d.ts.map +1 -0
  92. package/dist/components/YStack.js +8 -0
  93. package/dist/components/YStack.js.map +1 -0
  94. package/dist/components/_internal/VisuallyHiddenInput.d.ts +11 -0
  95. package/dist/components/_internal/VisuallyHiddenInput.d.ts.map +1 -0
  96. package/dist/components/_internal/VisuallyHiddenInput.js +105 -0
  97. package/dist/components/_internal/VisuallyHiddenInput.js.map +1 -0
  98. package/dist/components/_internal/dialog-styles.d.ts +15 -0
  99. package/dist/components/_internal/dialog-styles.d.ts.map +1 -0
  100. package/dist/components/_internal/dialog-styles.js +27 -0
  101. package/dist/components/_internal/dialog-styles.js.map +1 -0
  102. package/dist/components/_internal/layout.d.ts +46 -0
  103. package/dist/components/_internal/layout.d.ts.map +1 -0
  104. package/dist/components/_internal/layout.js +72 -0
  105. package/dist/components/_internal/layout.js.map +1 -0
  106. package/dist/components/form/Checkbox.d.ts +19 -0
  107. package/dist/components/form/Checkbox.d.ts.map +1 -0
  108. package/dist/components/form/Checkbox.js +27 -0
  109. package/dist/components/form/Checkbox.js.map +1 -0
  110. package/dist/components/form/ColorPicker.d.ts +25 -0
  111. package/dist/components/form/ColorPicker.d.ts.map +1 -0
  112. package/dist/components/form/ColorPicker.js +14 -0
  113. package/dist/components/form/ColorPicker.js.map +1 -0
  114. package/dist/components/form/ColorPickerPrimitive.d.ts +65 -0
  115. package/dist/components/form/ColorPickerPrimitive.d.ts.map +1 -0
  116. package/dist/components/form/ColorPickerPrimitive.js +486 -0
  117. package/dist/components/form/ColorPickerPrimitive.js.map +1 -0
  118. package/dist/components/form/Combobox.d.ts +86 -0
  119. package/dist/components/form/Combobox.d.ts.map +1 -0
  120. package/dist/components/form/Combobox.js +198 -0
  121. package/dist/components/form/Combobox.js.map +1 -0
  122. package/dist/components/form/Form.context.d.ts +28 -0
  123. package/dist/components/form/Form.context.d.ts.map +1 -0
  124. package/dist/components/form/Form.context.js +56 -0
  125. package/dist/components/form/Form.context.js.map +1 -0
  126. package/dist/components/form/Form.d.ts +68 -0
  127. package/dist/components/form/Form.d.ts.map +1 -0
  128. package/dist/components/form/Form.js +32 -0
  129. package/dist/components/form/Form.js.map +1 -0
  130. package/dist/components/form/FormCheckbox.d.ts +10 -0
  131. package/dist/components/form/FormCheckbox.d.ts.map +1 -0
  132. package/dist/components/form/FormCheckbox.js +24 -0
  133. package/dist/components/form/FormCheckbox.js.map +1 -0
  134. package/dist/components/form/FormCombobox.d.ts +28 -0
  135. package/dist/components/form/FormCombobox.d.ts.map +1 -0
  136. package/dist/components/form/FormCombobox.js +50 -0
  137. package/dist/components/form/FormCombobox.js.map +1 -0
  138. package/dist/components/form/FormDescription.d.ts +7 -0
  139. package/dist/components/form/FormDescription.d.ts.map +1 -0
  140. package/dist/components/form/FormDescription.js +9 -0
  141. package/dist/components/form/FormDescription.js.map +1 -0
  142. package/dist/components/form/FormError.d.ts +7 -0
  143. package/dist/components/form/FormError.d.ts.map +1 -0
  144. package/dist/components/form/FormError.js +9 -0
  145. package/dist/components/form/FormError.js.map +1 -0
  146. package/dist/components/form/FormField.d.ts +13 -0
  147. package/dist/components/form/FormField.d.ts.map +1 -0
  148. package/dist/components/form/FormField.js +45 -0
  149. package/dist/components/form/FormField.js.map +1 -0
  150. package/dist/components/form/FormInput.d.ts +8 -0
  151. package/dist/components/form/FormInput.d.ts.map +1 -0
  152. package/dist/components/form/FormInput.js +17 -0
  153. package/dist/components/form/FormInput.js.map +1 -0
  154. package/dist/components/form/FormInputGroup.d.ts +7 -0
  155. package/dist/components/form/FormInputGroup.d.ts.map +1 -0
  156. package/dist/components/form/FormInputGroup.js +30 -0
  157. package/dist/components/form/FormInputGroup.js.map +1 -0
  158. package/dist/components/form/FormLabel.d.ts +7 -0
  159. package/dist/components/form/FormLabel.d.ts.map +1 -0
  160. package/dist/components/form/FormLabel.js +9 -0
  161. package/dist/components/form/FormLabel.js.map +1 -0
  162. package/dist/components/form/FormRadioGroup.d.ts +14 -0
  163. package/dist/components/form/FormRadioGroup.d.ts.map +1 -0
  164. package/dist/components/form/FormRadioGroup.js +25 -0
  165. package/dist/components/form/FormRadioGroup.js.map +1 -0
  166. package/dist/components/form/FormRoot.d.ts +10 -0
  167. package/dist/components/form/FormRoot.d.ts.map +1 -0
  168. package/dist/components/form/FormRoot.js +10 -0
  169. package/dist/components/form/FormRoot.js.map +1 -0
  170. package/dist/components/form/FormSelect.d.ts +19 -0
  171. package/dist/components/form/FormSelect.d.ts.map +1 -0
  172. package/dist/components/form/FormSelect.js +34 -0
  173. package/dist/components/form/FormSelect.js.map +1 -0
  174. package/dist/components/form/FormSwitch.d.ts +10 -0
  175. package/dist/components/form/FormSwitch.d.ts.map +1 -0
  176. package/dist/components/form/FormSwitch.js +24 -0
  177. package/dist/components/form/FormSwitch.js.map +1 -0
  178. package/dist/components/form/FormTextarea.d.ts +8 -0
  179. package/dist/components/form/FormTextarea.d.ts.map +1 -0
  180. package/dist/components/form/FormTextarea.js +13 -0
  181. package/dist/components/form/FormTextarea.js.map +1 -0
  182. package/dist/components/form/Input.d.ts +14 -0
  183. package/dist/components/form/Input.d.ts.map +1 -0
  184. package/dist/components/form/Input.js +22 -0
  185. package/dist/components/form/Input.js.map +1 -0
  186. package/dist/components/form/InputGroup.d.ts +26 -0
  187. package/dist/components/form/InputGroup.d.ts.map +1 -0
  188. package/dist/components/form/InputGroup.js +58 -0
  189. package/dist/components/form/InputGroup.js.map +1 -0
  190. package/dist/components/form/RadioGroup.d.ts +23 -0
  191. package/dist/components/form/RadioGroup.d.ts.map +1 -0
  192. package/dist/components/form/RadioGroup.js +30 -0
  193. package/dist/components/form/RadioGroup.js.map +1 -0
  194. package/dist/components/form/Select.d.ts +42 -0
  195. package/dist/components/form/Select.d.ts.map +1 -0
  196. package/dist/components/form/Select.js +68 -0
  197. package/dist/components/form/Select.js.map +1 -0
  198. package/dist/components/form/Slider.d.ts +37 -0
  199. package/dist/components/form/Slider.d.ts.map +1 -0
  200. package/dist/components/form/Slider.js +35 -0
  201. package/dist/components/form/Slider.js.map +1 -0
  202. package/dist/components/form/Switch.d.ts +23 -0
  203. package/dist/components/form/Switch.d.ts.map +1 -0
  204. package/dist/components/form/Switch.js +21 -0
  205. package/dist/components/form/Switch.js.map +1 -0
  206. package/dist/components/form/Textarea.d.ts +16 -0
  207. package/dist/components/form/Textarea.d.ts.map +1 -0
  208. package/dist/components/form/Textarea.js +12 -0
  209. package/dist/components/form/Textarea.js.map +1 -0
  210. package/dist/entries/alert-dialog.d.ts +3 -0
  211. package/dist/entries/alert-dialog.d.ts.map +1 -0
  212. package/dist/entries/alert-dialog.js +2 -0
  213. package/dist/entries/alert-dialog.js.map +1 -0
  214. package/dist/entries/alert.d.ts +3 -0
  215. package/dist/entries/alert.d.ts.map +1 -0
  216. package/dist/entries/alert.js +2 -0
  217. package/dist/entries/alert.js.map +1 -0
  218. package/dist/entries/avatar.d.ts +3 -0
  219. package/dist/entries/avatar.d.ts.map +1 -0
  220. package/dist/entries/avatar.js +2 -0
  221. package/dist/entries/avatar.js.map +1 -0
  222. package/dist/entries/badge.d.ts +3 -0
  223. package/dist/entries/badge.d.ts.map +1 -0
  224. package/dist/entries/badge.js +2 -0
  225. package/dist/entries/badge.js.map +1 -0
  226. package/dist/entries/button.d.ts +3 -0
  227. package/dist/entries/button.d.ts.map +1 -0
  228. package/dist/entries/button.js +2 -0
  229. package/dist/entries/button.js.map +1 -0
  230. package/dist/entries/card.d.ts +3 -0
  231. package/dist/entries/card.d.ts.map +1 -0
  232. package/dist/entries/card.js +2 -0
  233. package/dist/entries/card.js.map +1 -0
  234. package/dist/entries/checkbox.d.ts +3 -0
  235. package/dist/entries/checkbox.d.ts.map +1 -0
  236. package/dist/entries/checkbox.js +2 -0
  237. package/dist/entries/checkbox.js.map +1 -0
  238. package/dist/entries/cn.d.ts +3 -0
  239. package/dist/entries/cn.d.ts.map +1 -0
  240. package/dist/entries/cn.js +2 -0
  241. package/dist/entries/cn.js.map +1 -0
  242. package/dist/entries/color-picker.d.ts +3 -0
  243. package/dist/entries/color-picker.d.ts.map +1 -0
  244. package/dist/entries/color-picker.js +2 -0
  245. package/dist/entries/color-picker.js.map +1 -0
  246. package/dist/entries/combobox.d.ts +3 -0
  247. package/dist/entries/combobox.d.ts.map +1 -0
  248. package/dist/entries/combobox.js +2 -0
  249. package/dist/entries/combobox.js.map +1 -0
  250. package/dist/entries/dialog.d.ts +3 -0
  251. package/dist/entries/dialog.d.ts.map +1 -0
  252. package/dist/entries/dialog.js +2 -0
  253. package/dist/entries/dialog.js.map +1 -0
  254. package/dist/entries/flex.d.ts +3 -0
  255. package/dist/entries/flex.d.ts.map +1 -0
  256. package/dist/entries/flex.js +2 -0
  257. package/dist/entries/flex.js.map +1 -0
  258. package/dist/entries/form.d.ts +3 -0
  259. package/dist/entries/form.d.ts.map +1 -0
  260. package/dist/entries/form.js +2 -0
  261. package/dist/entries/form.js.map +1 -0
  262. package/dist/entries/grid.d.ts +3 -0
  263. package/dist/entries/grid.d.ts.map +1 -0
  264. package/dist/entries/grid.js +2 -0
  265. package/dist/entries/grid.js.map +1 -0
  266. package/dist/entries/group.d.ts +3 -0
  267. package/dist/entries/group.d.ts.map +1 -0
  268. package/dist/entries/group.js +2 -0
  269. package/dist/entries/group.js.map +1 -0
  270. package/dist/entries/input-group.d.ts +3 -0
  271. package/dist/entries/input-group.d.ts.map +1 -0
  272. package/dist/entries/input-group.js +2 -0
  273. package/dist/entries/input-group.js.map +1 -0
  274. package/dist/entries/input.d.ts +3 -0
  275. package/dist/entries/input.d.ts.map +1 -0
  276. package/dist/entries/input.js +2 -0
  277. package/dist/entries/input.js.map +1 -0
  278. package/dist/entries/menu.d.ts +3 -0
  279. package/dist/entries/menu.d.ts.map +1 -0
  280. package/dist/entries/menu.js +2 -0
  281. package/dist/entries/menu.js.map +1 -0
  282. package/dist/entries/popover.d.ts +3 -0
  283. package/dist/entries/popover.d.ts.map +1 -0
  284. package/dist/entries/popover.js +2 -0
  285. package/dist/entries/popover.js.map +1 -0
  286. package/dist/entries/progress.d.ts +3 -0
  287. package/dist/entries/progress.d.ts.map +1 -0
  288. package/dist/entries/progress.js +2 -0
  289. package/dist/entries/progress.js.map +1 -0
  290. package/dist/entries/radio-group.d.ts +3 -0
  291. package/dist/entries/radio-group.d.ts.map +1 -0
  292. package/dist/entries/radio-group.js +2 -0
  293. package/dist/entries/radio-group.js.map +1 -0
  294. package/dist/entries/scroll-area.d.ts +3 -0
  295. package/dist/entries/scroll-area.d.ts.map +1 -0
  296. package/dist/entries/scroll-area.js +2 -0
  297. package/dist/entries/scroll-area.js.map +1 -0
  298. package/dist/entries/select.d.ts +3 -0
  299. package/dist/entries/select.d.ts.map +1 -0
  300. package/dist/entries/select.js +2 -0
  301. package/dist/entries/select.js.map +1 -0
  302. package/dist/entries/separator.d.ts +3 -0
  303. package/dist/entries/separator.d.ts.map +1 -0
  304. package/dist/entries/separator.js +2 -0
  305. package/dist/entries/separator.js.map +1 -0
  306. package/dist/entries/sidebar.d.ts +3 -0
  307. package/dist/entries/sidebar.d.ts.map +1 -0
  308. package/dist/entries/sidebar.js +2 -0
  309. package/dist/entries/sidebar.js.map +1 -0
  310. package/dist/entries/slider.d.ts +3 -0
  311. package/dist/entries/slider.d.ts.map +1 -0
  312. package/dist/entries/slider.js +2 -0
  313. package/dist/entries/slider.js.map +1 -0
  314. package/dist/entries/spinner.d.ts +3 -0
  315. package/dist/entries/spinner.d.ts.map +1 -0
  316. package/dist/entries/spinner.js +2 -0
  317. package/dist/entries/spinner.js.map +1 -0
  318. package/dist/entries/switch.d.ts +3 -0
  319. package/dist/entries/switch.d.ts.map +1 -0
  320. package/dist/entries/switch.js +2 -0
  321. package/dist/entries/switch.js.map +1 -0
  322. package/dist/entries/table.d.ts +3 -0
  323. package/dist/entries/table.d.ts.map +1 -0
  324. package/dist/entries/table.js +2 -0
  325. package/dist/entries/table.js.map +1 -0
  326. package/dist/entries/text.d.ts +3 -0
  327. package/dist/entries/text.d.ts.map +1 -0
  328. package/dist/entries/text.js +2 -0
  329. package/dist/entries/text.js.map +1 -0
  330. package/dist/entries/textarea.d.ts +3 -0
  331. package/dist/entries/textarea.d.ts.map +1 -0
  332. package/dist/entries/textarea.js +2 -0
  333. package/dist/entries/textarea.js.map +1 -0
  334. package/dist/entries/theme.d.ts +3 -0
  335. package/dist/entries/theme.d.ts.map +1 -0
  336. package/dist/entries/theme.js +2 -0
  337. package/dist/entries/theme.js.map +1 -0
  338. package/dist/entries/toast.d.ts +3 -0
  339. package/dist/entries/toast.d.ts.map +1 -0
  340. package/dist/entries/toast.js +2 -0
  341. package/dist/entries/toast.js.map +1 -0
  342. package/dist/entries/tooltip.d.ts +3 -0
  343. package/dist/entries/tooltip.d.ts.map +1 -0
  344. package/dist/entries/tooltip.js +2 -0
  345. package/dist/entries/tooltip.js.map +1 -0
  346. package/dist/entries/x-stack.d.ts +3 -0
  347. package/dist/entries/x-stack.d.ts.map +1 -0
  348. package/dist/entries/x-stack.js +2 -0
  349. package/dist/entries/x-stack.js.map +1 -0
  350. package/dist/entries/y-stack.d.ts +3 -0
  351. package/dist/entries/y-stack.d.ts.map +1 -0
  352. package/dist/entries/y-stack.js +2 -0
  353. package/dist/entries/y-stack.js.map +1 -0
  354. package/dist/hooks/use-as-ref.d.ts +4 -0
  355. package/dist/hooks/use-as-ref.d.ts.map +1 -0
  356. package/dist/hooks/use-as-ref.js +11 -0
  357. package/dist/hooks/use-as-ref.js.map +1 -0
  358. package/dist/hooks/use-isomorphic-layout-effect.d.ts +4 -0
  359. package/dist/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
  360. package/dist/hooks/use-isomorphic-layout-effect.js +4 -0
  361. package/dist/hooks/use-isomorphic-layout-effect.js.map +1 -0
  362. package/dist/hooks/use-lazy-ref.d.ts +4 -0
  363. package/dist/hooks/use-lazy-ref.d.ts.map +1 -0
  364. package/dist/hooks/use-lazy-ref.js +10 -0
  365. package/dist/hooks/use-lazy-ref.js.map +1 -0
  366. package/dist/index.d.ts +37 -0
  367. package/dist/index.d.ts.map +1 -0
  368. package/dist/index.js +39 -0
  369. package/dist/index.js.map +1 -0
  370. package/dist/lib/color.d.ts +42 -0
  371. package/dist/lib/color.d.ts.map +1 -0
  372. package/dist/lib/color.js +140 -0
  373. package/dist/lib/color.js.map +1 -0
  374. package/dist/lib/compose-refs.d.ts +14 -0
  375. package/dist/lib/compose-refs.d.ts.map +1 -0
  376. package/dist/lib/compose-refs.js +57 -0
  377. package/dist/lib/compose-refs.js.map +1 -0
  378. package/dist/lib/theme.d.ts +40 -0
  379. package/dist/lib/theme.d.ts.map +1 -0
  380. package/dist/lib/theme.js +82 -0
  381. package/dist/lib/theme.js.map +1 -0
  382. package/dist/lib/utils.d.ts +8 -0
  383. package/dist/lib/utils.d.ts.map +1 -0
  384. package/dist/lib/utils.js +18 -0
  385. package/dist/lib/utils.js.map +1 -0
  386. package/dist/test-setup.d.ts +2 -0
  387. package/dist/test-setup.d.ts.map +1 -0
  388. package/dist/test-setup.js +2 -0
  389. package/dist/test-setup.js.map +1 -0
  390. package/package.json +107 -4
  391. package/src/base.css +99 -0
  392. package/src/components/Alert.stories.tsx +124 -0
  393. package/src/components/Alert.test.tsx +76 -0
  394. package/src/components/Alert.tsx +133 -0
  395. package/src/components/AlertDialog.stories.tsx +184 -0
  396. package/src/components/AlertDialog.test.tsx +142 -0
  397. package/src/components/AlertDialog.tsx +164 -0
  398. package/src/components/Avatar.stories.tsx +92 -0
  399. package/src/components/Avatar.test.tsx +26 -0
  400. package/src/components/Avatar.tsx +96 -0
  401. package/src/components/Badge.stories.tsx +52 -0
  402. package/src/components/Badge.test.tsx +35 -0
  403. package/src/components/Badge.tsx +65 -0
  404. package/src/components/Button.stories.tsx +171 -0
  405. package/src/components/Button.test.tsx +112 -0
  406. package/src/components/Button.tsx +114 -0
  407. package/src/components/Card.stories.tsx +62 -0
  408. package/src/components/Card.test.tsx +23 -0
  409. package/src/components/Card.tsx +129 -0
  410. package/src/components/Dialog.stories.tsx +133 -0
  411. package/src/components/Dialog.test.tsx +95 -0
  412. package/src/components/Dialog.tsx +147 -0
  413. package/src/components/Flex.stories.tsx +70 -0
  414. package/src/components/Flex.test.tsx +53 -0
  415. package/src/components/Flex.tsx +59 -0
  416. package/src/components/Grid.stories.tsx +70 -0
  417. package/src/components/Grid.test.tsx +46 -0
  418. package/src/components/Grid.tsx +114 -0
  419. package/src/components/Group.stories.tsx +130 -0
  420. package/src/components/Group.test.tsx +57 -0
  421. package/src/components/Group.tsx +92 -0
  422. package/src/components/Menu.stories.tsx +139 -0
  423. package/src/components/Menu.test.tsx +103 -0
  424. package/src/components/Menu.tsx +290 -0
  425. package/src/components/Popover.stories.tsx +72 -0
  426. package/src/components/Popover.tsx +117 -0
  427. package/src/components/Progress.stories.tsx +105 -0
  428. package/src/components/Progress.test.tsx +28 -0
  429. package/src/components/Progress.tsx +111 -0
  430. package/src/components/ScrollArea.stories.tsx +66 -0
  431. package/src/components/ScrollArea.test.tsx +32 -0
  432. package/src/components/ScrollArea.tsx +160 -0
  433. package/src/components/Separator.stories.tsx +39 -0
  434. package/src/components/Separator.test.tsx +24 -0
  435. package/src/components/Separator.tsx +27 -0
  436. package/src/components/Sidebar.stories.tsx +87 -0
  437. package/src/components/Sidebar.tsx +166 -0
  438. package/src/components/Spinner.stories.tsx +36 -0
  439. package/src/components/Spinner.test.tsx +25 -0
  440. package/src/components/Spinner.tsx +31 -0
  441. package/src/components/Table.stories.tsx +76 -0
  442. package/src/components/Table.tsx +151 -0
  443. package/src/components/Text.stories.tsx +148 -0
  444. package/src/components/Text.test.tsx +106 -0
  445. package/src/components/Text.tsx +85 -0
  446. package/src/components/Toast.stories.tsx +166 -0
  447. package/src/components/Toast.test.tsx +97 -0
  448. package/src/components/Toast.tsx +270 -0
  449. package/src/components/Tooltip.stories.tsx +116 -0
  450. package/src/components/Tooltip.test.tsx +51 -0
  451. package/src/components/Tooltip.tsx +80 -0
  452. package/src/components/XStack.stories.tsx +64 -0
  453. package/src/components/XStack.test.tsx +33 -0
  454. package/src/components/XStack.tsx +19 -0
  455. package/src/components/YStack.stories.tsx +65 -0
  456. package/src/components/YStack.test.tsx +31 -0
  457. package/src/components/YStack.tsx +19 -0
  458. package/src/components/_internal/Story.tsx +161 -0
  459. package/src/components/_internal/VisuallyHiddenInput.tsx +164 -0
  460. package/src/components/_internal/dialog-styles.ts +57 -0
  461. package/src/components/_internal/layout.ts +103 -0
  462. package/src/components/form/Checkbox.stories.tsx +78 -0
  463. package/src/components/form/Checkbox.test.tsx +107 -0
  464. package/src/components/form/Checkbox.tsx +95 -0
  465. package/src/components/form/ColorPicker.stories.tsx +160 -0
  466. package/src/components/form/ColorPicker.test.tsx +45 -0
  467. package/src/components/form/ColorPicker.tsx +55 -0
  468. package/src/components/form/ColorPickerPrimitive.test.tsx +14 -0
  469. package/src/components/form/ColorPickerPrimitive.tsx +1283 -0
  470. package/src/components/form/Combobox.stories.tsx +378 -0
  471. package/src/components/form/Combobox.test.tsx +334 -0
  472. package/src/components/form/Combobox.tsx +667 -0
  473. package/src/components/form/Form.context.ts +114 -0
  474. package/src/components/form/Form.stories.tsx +226 -0
  475. package/src/components/form/Form.test.tsx +293 -0
  476. package/src/components/form/Form.tsx +50 -0
  477. package/src/components/form/FormCheckbox.tsx +50 -0
  478. package/src/components/form/FormCombobox.tsx +92 -0
  479. package/src/components/form/FormDescription.tsx +21 -0
  480. package/src/components/form/FormError.tsx +21 -0
  481. package/src/components/form/FormField.tsx +109 -0
  482. package/src/components/form/FormInput.tsx +41 -0
  483. package/src/components/form/FormInputGroup.tsx +47 -0
  484. package/src/components/form/FormLabel.tsx +24 -0
  485. package/src/components/form/FormRadioGroup.tsx +46 -0
  486. package/src/components/form/FormRoot.tsx +41 -0
  487. package/src/components/form/FormSelect.tsx +60 -0
  488. package/src/components/form/FormSwitch.tsx +50 -0
  489. package/src/components/form/FormTextarea.tsx +34 -0
  490. package/src/components/form/Input.stories.tsx +114 -0
  491. package/src/components/form/Input.test.tsx +62 -0
  492. package/src/components/form/Input.tsx +93 -0
  493. package/src/components/form/InputGroup.stories.tsx +162 -0
  494. package/src/components/form/InputGroup.tsx +149 -0
  495. package/src/components/form/RadioGroup.stories.tsx +68 -0
  496. package/src/components/form/RadioGroup.test.tsx +171 -0
  497. package/src/components/form/RadioGroup.tsx +127 -0
  498. package/src/components/form/Select.stories.tsx +115 -0
  499. package/src/components/form/Select.test.tsx +115 -0
  500. package/src/components/form/Select.tsx +293 -0
  501. package/src/components/form/Slider.stories.tsx +121 -0
  502. package/src/components/form/Slider.test.tsx +33 -0
  503. package/src/components/form/Slider.tsx +200 -0
  504. package/src/components/form/Switch.stories.tsx +62 -0
  505. package/src/components/form/Switch.test.tsx +29 -0
  506. package/src/components/form/Switch.tsx +81 -0
  507. package/src/components/form/Textarea.stories.tsx +71 -0
  508. package/src/components/form/Textarea.test.tsx +31 -0
  509. package/src/components/form/Textarea.tsx +46 -0
  510. package/src/entries/alert-dialog.ts +11 -0
  511. package/src/entries/alert.ts +8 -0
  512. package/src/entries/avatar.ts +7 -0
  513. package/src/entries/badge.ts +2 -0
  514. package/src/entries/button.ts +2 -0
  515. package/src/entries/card.ts +10 -0
  516. package/src/entries/checkbox.ts +5 -0
  517. package/src/entries/cn.ts +2 -0
  518. package/src/entries/color-picker.ts +13 -0
  519. package/src/entries/combobox.ts +20 -0
  520. package/src/entries/dialog.ts +11 -0
  521. package/src/entries/entries.test.ts +65 -0
  522. package/src/entries/flex.ts +2 -0
  523. package/src/entries/form.ts +16 -0
  524. package/src/entries/grid.ts +2 -0
  525. package/src/entries/group.ts +6 -0
  526. package/src/entries/input-group.ts +8 -0
  527. package/src/entries/input.ts +2 -0
  528. package/src/entries/menu.ts +17 -0
  529. package/src/entries/popover.ts +10 -0
  530. package/src/entries/progress.ts +8 -0
  531. package/src/entries/radio-group.ts +5 -0
  532. package/src/entries/scroll-area.ts +10 -0
  533. package/src/entries/select.ts +12 -0
  534. package/src/entries/separator.ts +2 -0
  535. package/src/entries/sidebar.ts +13 -0
  536. package/src/entries/slider.ts +7 -0
  537. package/src/entries/spinner.ts +2 -0
  538. package/src/entries/switch.ts +2 -0
  539. package/src/entries/table.ts +11 -0
  540. package/src/entries/text.ts +2 -0
  541. package/src/entries/textarea.ts +2 -0
  542. package/src/entries/theme.ts +8 -0
  543. package/src/entries/toast.ts +2 -0
  544. package/src/entries/tooltip.ts +7 -0
  545. package/src/entries/x-stack.ts +2 -0
  546. package/src/entries/y-stack.ts +2 -0
  547. package/src/hooks/use-as-ref.ts +15 -0
  548. package/src/hooks/use-isomorphic-layout-effect.ts +6 -0
  549. package/src/hooks/use-lazy-ref.ts +13 -0
  550. package/src/index.ts +38 -0
  551. package/src/lib/color.test.ts +148 -0
  552. package/src/lib/color.ts +193 -0
  553. package/src/lib/compose-refs.ts +63 -0
  554. package/src/lib/theme.test.ts +64 -0
  555. package/src/lib/theme.ts +143 -0
  556. package/src/lib/utils.ts +25 -0
  557. package/src/public-api.test.ts +74 -0
  558. package/src/styles.css +2 -0
  559. package/src/test-setup.ts +1 -0
  560. package/src/theme.css +195 -0
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ // The public API is the union of the subpath entries in ./entries: add a
2
+ // component there and re-export it here (see "Public API" in AGENTS.md).
3
+ export * from './entries/alert.js';
4
+ export * from './entries/alert-dialog.js';
5
+ export * from './entries/avatar.js';
6
+ export * from './entries/badge.js';
7
+ export * from './entries/button.js';
8
+ export * from './entries/card.js';
9
+ export * from './entries/checkbox.js';
10
+ export * from './entries/cn.js';
11
+ export * from './entries/color-picker.js';
12
+ export * from './entries/combobox.js';
13
+ export * from './entries/dialog.js';
14
+ export * from './entries/flex.js';
15
+ export * from './entries/form.js';
16
+ export * from './entries/grid.js';
17
+ export * from './entries/group.js';
18
+ export * from './entries/input.js';
19
+ export * from './entries/input-group.js';
20
+ export * from './entries/menu.js';
21
+ export * from './entries/popover.js';
22
+ export * from './entries/progress.js';
23
+ export * from './entries/radio-group.js';
24
+ export * from './entries/scroll-area.js';
25
+ export * from './entries/select.js';
26
+ export * from './entries/separator.js';
27
+ export * from './entries/sidebar.js';
28
+ export * from './entries/slider.js';
29
+ export * from './entries/spinner.js';
30
+ export * from './entries/switch.js';
31
+ export * from './entries/table.js';
32
+ export * from './entries/text.js';
33
+ export * from './entries/textarea.js';
34
+ export * from './entries/theme.js';
35
+ export * from './entries/toast.js';
36
+ export * from './entries/tooltip.js';
37
+ export * from './entries/x-stack.js';
38
+ export * from './entries/y-stack.js';
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,yEAAyE;AACzE,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Color helpers for the color picker.
3
+ *
4
+ * culori performs every color-space conversion and string parse. The functions
5
+ * here are thin adapters that translate between culori's normalized shape
6
+ * (`{ mode, r/g/b: 0–1, alpha: 0–1 }`) and the integer/percentage shape the UI
7
+ * works in (`ColorValue` with 0–255 channels, HSL/HSV in degrees/percent), plus
8
+ * rounding and null-hue handling for greys.
9
+ */
10
+ export declare const colorFormats: readonly ["hex", "rgb", "hsl", "hsb"];
11
+ export type ColorFormat = (typeof colorFormats)[number];
12
+ export interface ColorValue {
13
+ r: number;
14
+ g: number;
15
+ b: number;
16
+ a: number;
17
+ }
18
+ export interface HSVColorValue {
19
+ h: number;
20
+ s: number;
21
+ v: number;
22
+ a: number;
23
+ }
24
+ export declare function hexToRgb(hex: string, alpha?: number): ColorValue;
25
+ export declare function isColorEqual(a: ColorValue, b: ColorValue): boolean;
26
+ export declare function isHsvEqual(a: HSVColorValue, b: HSVColorValue): boolean;
27
+ export declare function rgbToHex(color: ColorValue): string;
28
+ export declare function rgbToHsv(color: ColorValue, fallbackHue?: number): HSVColorValue;
29
+ export declare function hsvToRgb(hsv: HSVColorValue): ColorValue;
30
+ export declare function rgbToHsl(color: ColorValue): {
31
+ h: number;
32
+ s: number;
33
+ l: number;
34
+ };
35
+ export declare function hslToRgb(hsl: {
36
+ h: number;
37
+ s: number;
38
+ l: number;
39
+ }, alpha?: number): ColorValue;
40
+ export declare function colorToString(color: ColorValue, format?: ColorFormat): string;
41
+ export declare function parseColorString(value: string): ColorValue | null;
42
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/lib/color.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,eAAO,MAAM,YAAY,uCAAwC,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AA2DD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAOhE;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,WAExD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,WAE5D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAElD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,SAAI,GAAG,aAAa,CAS1E;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAUvD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU;;;;EAQzC;AAED,wBAAgB,QAAQ,CACtB,GAAG,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,KAAK,SAAI,GACR,UAAU,CAUZ;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE,WAAmB,GAC1B,MAAM,CAuBR;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAMjE"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Color helpers for the color picker.
3
+ *
4
+ * culori performs every color-space conversion and string parse. The functions
5
+ * here are thin adapters that translate between culori's normalized shape
6
+ * (`{ mode, r/g/b: 0–1, alpha: 0–1 }`) and the integer/percentage shape the UI
7
+ * works in (`ColorValue` with 0–255 channels, HSL/HSV in degrees/percent), plus
8
+ * rounding and null-hue handling for greys.
9
+ */
10
+ /* eslint-disable perfectionist/sort-objects, perfectionist/sort-object-types, perfectionist/sort-interfaces, perfectionist/sort-modules, perfectionist/sort-switch-case -- color values read best in their conventional order (RGBA/HSVA channels, culori's mode-first shape, rgb↔x conversion pairs, format precedence) rather than alphabetically. */
11
+ import { converter, formatHex, parse } from 'culori';
12
+ export const colorFormats = ['hex', 'rgb', 'hsl', 'hsb'];
13
+ const toRgb = converter('rgb');
14
+ const toHsl = converter('hsl');
15
+ const toHsv = converter('hsv');
16
+ function clamp(value, min, max) {
17
+ return Math.min(max, Math.max(min, value));
18
+ }
19
+ function alphaToValue(alpha) {
20
+ return clamp(alpha ?? 1, 0, 1);
21
+ }
22
+ function parseAlphaValue(value, isPercent) {
23
+ if (!value)
24
+ return 1;
25
+ const alpha = Number.parseFloat(value);
26
+ return alphaToValue(isPercent ? alpha / 100 : alpha);
27
+ }
28
+ function toCuloriRgb(color) {
29
+ return {
30
+ mode: 'rgb',
31
+ r: color.r / 255,
32
+ g: color.g / 255,
33
+ b: color.b / 255,
34
+ alpha: color.a,
35
+ };
36
+ }
37
+ function fromCuloriRgb(color) {
38
+ return {
39
+ r: Math.round(clamp(color.r, 0, 1) * 255),
40
+ g: Math.round(clamp(color.g, 0, 1) * 255),
41
+ b: Math.round(clamp(color.b, 0, 1) * 255),
42
+ a: alphaToValue(color.alpha),
43
+ };
44
+ }
45
+ /** culori does not parse the `hsb()`/`hsba()` notation, so handle it ourselves. */
46
+ function parseHsbString(value) {
47
+ const numberPattern = String.raw `([+-]?(?:\d+\.?\d*|\.\d+))`;
48
+ const hsbMatch = new RegExp(String.raw `^hsba?\(\s*${numberPattern}(?:deg)?(?:\s*,\s*|\s+)${numberPattern}%(?:\s*,\s*|\s+)${numberPattern}%(?:\s*(?:,|\/)\s*${numberPattern}(%)?)?\s*\)$`, 'i').exec(value);
49
+ if (!hsbMatch)
50
+ return null;
51
+ return {
52
+ mode: 'hsv',
53
+ h: Number.parseFloat(hsbMatch[1] ?? '0'),
54
+ s: clamp(Number.parseFloat(hsbMatch[2] ?? '0') / 100, 0, 1),
55
+ v: clamp(Number.parseFloat(hsbMatch[3] ?? '0') / 100, 0, 1),
56
+ alpha: parseAlphaValue(hsbMatch[4], hsbMatch[5]),
57
+ };
58
+ }
59
+ export function hexToRgb(hex, alpha) {
60
+ const color = parse(hex);
61
+ const rgb = color ? toRgb(color) : undefined;
62
+ return rgb
63
+ ? { ...fromCuloriRgb(rgb), a: alpha ?? 1 }
64
+ : { r: 0, g: 0, b: 0, a: alpha ?? 1 };
65
+ }
66
+ export function isColorEqual(a, b) {
67
+ return a.r === b.r && a.g === b.g && a.b === b.b && a.a === b.a;
68
+ }
69
+ export function isHsvEqual(a, b) {
70
+ return a.h === b.h && a.s === b.s && a.v === b.v && a.a === b.a;
71
+ }
72
+ export function rgbToHex(color) {
73
+ return formatHex(toCuloriRgb(color)) ?? '#000000';
74
+ }
75
+ export function rgbToHsv(color, fallbackHue = 0) {
76
+ const hsv = toHsv(toCuloriRgb(color));
77
+ return {
78
+ h: Math.round(hsv.h ?? fallbackHue),
79
+ s: Math.round(hsv.s * 100),
80
+ v: Math.round(hsv.v * 100),
81
+ a: alphaToValue(hsv.alpha),
82
+ };
83
+ }
84
+ export function hsvToRgb(hsv) {
85
+ return fromCuloriRgb(toRgb({
86
+ mode: 'hsv',
87
+ h: hsv.h,
88
+ s: hsv.s / 100,
89
+ v: hsv.v / 100,
90
+ alpha: hsv.a,
91
+ }));
92
+ }
93
+ export function rgbToHsl(color) {
94
+ const hsl = toHsl(toCuloriRgb(color));
95
+ return {
96
+ h: Math.round(hsl.h ?? 0),
97
+ s: Math.round(hsl.s * 100),
98
+ l: Math.round(hsl.l * 100),
99
+ };
100
+ }
101
+ export function hslToRgb(hsl, alpha = 1) {
102
+ return fromCuloriRgb(toRgb({
103
+ mode: 'hsl',
104
+ h: hsl.h,
105
+ s: hsl.s / 100,
106
+ l: hsl.l / 100,
107
+ alpha,
108
+ }));
109
+ }
110
+ export function colorToString(color, format = 'hex') {
111
+ switch (format) {
112
+ case 'hex':
113
+ return rgbToHex(color);
114
+ case 'rgb':
115
+ return color.a < 1
116
+ ? `rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`
117
+ : `rgb(${color.r}, ${color.g}, ${color.b})`;
118
+ case 'hsl': {
119
+ const hsl = rgbToHsl(color);
120
+ return color.a < 1
121
+ ? `hsla(${hsl.h}, ${hsl.s}%, ${hsl.l}%, ${color.a})`
122
+ : `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;
123
+ }
124
+ case 'hsb': {
125
+ const hsv = rgbToHsv(color);
126
+ return color.a < 1
127
+ ? `hsba(${hsv.h}, ${hsv.s}%, ${hsv.v}%, ${color.a})`
128
+ : `hsb(${hsv.h}, ${hsv.s}%, ${hsv.v}%)`;
129
+ }
130
+ default:
131
+ return rgbToHex(color);
132
+ }
133
+ }
134
+ export function parseColorString(value) {
135
+ const trimmed = value.trim();
136
+ const color = parseHsbString(trimmed) ?? parse(trimmed);
137
+ const rgb = color ? toRgb(color) : undefined;
138
+ return rgb ? fromCuloriRgb(rgb) : null;
139
+ }
140
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/lib/color.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ type PossibleRef<T> = React.Ref<T> | undefined;
3
+ /**
4
+ * A utility to compose multiple refs together
5
+ * Accepts callback refs and RefObject(s)
6
+ */
7
+ declare function composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T>;
8
+ /**
9
+ * A custom hook that composes multiple refs
10
+ * Accepts callback refs and RefObject(s)
11
+ */
12
+ declare function useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T>;
13
+ export { composeRefs, useComposedRefs };
14
+ //# sourceMappingURL=compose-refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-refs.d.ts","sourceRoot":"","sources":["../../src/lib/compose-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,KAAK,WAAW,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAE/C;;;GAGG;AACH,iBAAS,WAAW,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CA4BvE;AAgBD;;;GAGG;AACH,iBAAS,eAAe,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAI3E;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,57 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * A utility to compose multiple refs together
4
+ * Accepts callback refs and RefObject(s)
5
+ */
6
+ function composeRefs(...refs) {
7
+ return (node) => {
8
+ let hasCleanup = false;
9
+ const cleanups = refs.map((ref) => {
10
+ const cleanup = setRef(ref, node);
11
+ if (!hasCleanup && typeof cleanup === 'function') {
12
+ hasCleanup = true;
13
+ }
14
+ return cleanup;
15
+ });
16
+ // React <19 will log an error to the console if a callback ref returns a
17
+ // value. We don't use ref cleanups internally so this will only happen if a
18
+ // user's ref callback returns a value, which we only expect if they are
19
+ // using the cleanup functionality added in React 19.
20
+ if (hasCleanup) {
21
+ return () => {
22
+ for (let i = 0; i < cleanups.length; i++) {
23
+ const cleanup = cleanups[i];
24
+ if (typeof cleanup === 'function') {
25
+ cleanup();
26
+ }
27
+ else {
28
+ setRef(refs[i], null);
29
+ }
30
+ }
31
+ };
32
+ }
33
+ };
34
+ }
35
+ /**
36
+ * Set a given ref to a given value
37
+ * This utility takes care of different types of refs: callback refs and RefObject(s)
38
+ */
39
+ function setRef(ref, value) {
40
+ if (typeof ref === 'function') {
41
+ return ref(value);
42
+ }
43
+ if (ref !== null && ref !== undefined) {
44
+ ref.current = value;
45
+ }
46
+ }
47
+ /**
48
+ * A custom hook that composes multiple refs
49
+ * Accepts callback refs and RefObject(s)
50
+ */
51
+ function useComposedRefs(...refs) {
52
+ // biome-ignore lint/correctness/useExhaustiveDependencies: we want to memoize by all values
53
+ // eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo -- memoize by every ref value; the spread `refs` array is the intended dependency list
54
+ return React.useCallback(composeRefs(...refs), refs); // react-doctor-disable-line react-doctor/exhaustive-deps -- same intentional memo: the dependency list is the spread `refs` array on purpose
55
+ }
56
+ export { composeRefs, useComposedRefs };
57
+ //# sourceMappingURL=compose-refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-refs.js","sourceRoot":"","sources":["../../src/lib/compose-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;GAGG;AACH,SAAS,WAAW,CAAI,GAAG,IAAsB;IAC/C,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,UAAU,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBACjD,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,yEAAyE;QACzE,4EAA4E;QAC5E,wEAAwE;QACxE,qDAAqD;QACrD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,GAAG,EAAE;gBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;wBAClC,OAAO,EAAE,CAAC;oBACZ,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,MAAM,CAAI,GAAmB,EAAE,KAAQ;IAC9C,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAI,GAAG,IAAsB;IACnD,4FAA4F;IAC5F,oKAAoK;IACpK,OAAO,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,6IAA6I;AACrM,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Theme generator: derives Pickle's brand-dependent tokens from a single
3
+ * primary color so consumers can theme the library without hand-writing CSS
4
+ * variables. Tokens that do not depend on the brand (neutrals, status colors)
5
+ * keep the values from `@pickle-ui/react/theme.css`.
6
+ */
7
+ type Theme = {
8
+ dark: ThemeVariables;
9
+ light: ThemeVariables;
10
+ };
11
+ type ThemeCssOptions = {
12
+ darkSelector?: string;
13
+ lightSelector?: string;
14
+ };
15
+ type ThemeFonts = {
16
+ heading?: string;
17
+ mono?: string;
18
+ sans?: string;
19
+ };
20
+ type ThemeOptions = {
21
+ /** Font stacks, written to `--font-sans`, `--font-heading` and `--font-mono`. */
22
+ fonts?: ThemeFonts;
23
+ /** Brand color in any CSS notation (hex, rgb, hsl, oklch, …). */
24
+ primary: string;
25
+ /** Brand color for the dark scheme. Defaults to a lighter version of `primary`. */
26
+ primaryDark?: string;
27
+ /** Base radius, e.g. `'0.5rem'`. Every `rounded-*` scale derives from it. */
28
+ radius?: string;
29
+ };
30
+ type ThemeVariables = Record<`--${string}`, string>;
31
+ /**
32
+ * Build the light and dark token sets for a brand color. Apply the result
33
+ * with `themeToCss` in a stylesheet, or spread `theme.light` / `theme.dark`
34
+ * as the `style` of a wrapper element.
35
+ */
36
+ export declare function createTheme(options: ThemeOptions): Theme;
37
+ /** Serialize a theme as CSS rules for the light and dark selectors. */
38
+ export declare function themeToCss(theme: Theme, { darkSelector, lightSelector }?: ThemeCssOptions): string;
39
+ export type { Theme, ThemeCssOptions, ThemeFonts, ThemeOptions, ThemeVariables, };
40
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/lib/theme.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,iFAAiF;IACjF,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,cAAc,GAAG,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;AAOpD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,KAAK,CAWxD;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,EAAE,YAAsB,EAAE,aAAuB,EAAE,GAAE,eAAoB,GACxE,MAAM,CAOR;AAyDD,YAAY,EACV,KAAK,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,cAAc,GACf,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Theme generator: derives Pickle's brand-dependent tokens from a single
3
+ * primary color so consumers can theme the library without hand-writing CSS
4
+ * variables. Tokens that do not depend on the brand (neutrals, status colors)
5
+ * keep the values from `@pickle-ui/react/theme.css`.
6
+ */
7
+ import { clampChroma, converter, formatCss, parse, wcagContrast, } from 'culori';
8
+ const toOklch = converter('oklch');
9
+ const LIGHT_FOREGROUND = { c: 0, h: 0, l: 1, mode: 'oklch' };
10
+ const DARK_FOREGROUND = { c: 0.006, h: 285.9, l: 0.21, mode: 'oklch' };
11
+ /**
12
+ * Build the light and dark token sets for a brand color. Apply the result
13
+ * with `themeToCss` in a stylesheet, or spread `theme.light` / `theme.dark`
14
+ * as the `style` of a wrapper element.
15
+ */
16
+ export function createTheme(options) {
17
+ const primary = parseColor(options.primary, 'primary');
18
+ const primaryDark = options.primaryDark
19
+ ? parseColor(options.primaryDark, 'primaryDark')
20
+ : lightenForDark(primary);
21
+ const shared = sharedVariables(options);
22
+ return {
23
+ dark: { ...shared, ...brandVariables(primaryDark) },
24
+ light: { ...shared, ...brandVariables(primary) },
25
+ };
26
+ }
27
+ /** Serialize a theme as CSS rules for the light and dark selectors. */
28
+ export function themeToCss(theme, { darkSelector = '.dark', lightSelector = ':root' } = {}) {
29
+ const block = (selector, variables) => `${selector} {\n${Object.entries(variables)
30
+ .map(([name, value]) => ` ${name}: ${value};`)
31
+ .join('\n')}\n}`;
32
+ return `${block(lightSelector, theme.light)}\n\n${block(darkSelector, theme.dark)}\n`;
33
+ }
34
+ function brandVariables(primary) {
35
+ const foreground = foregroundFor(primary);
36
+ return {
37
+ '--primary': format(primary),
38
+ '--primary-foreground': format(foreground),
39
+ '--ring': format({ ...primary, c: primary.c * 0.6 }),
40
+ '--sidebar-primary': format(primary),
41
+ '--sidebar-primary-foreground': format(foreground),
42
+ '--sidebar-ring': format({ ...primary, c: primary.c * 0.6 }),
43
+ };
44
+ }
45
+ /** White or near-black, whichever reads better on the given fill. */
46
+ function foregroundFor(fill) {
47
+ return wcagContrast(fill, LIGHT_FOREGROUND) >=
48
+ wcagContrast(fill, DARK_FOREGROUND)
49
+ ? LIGHT_FOREGROUND
50
+ : DARK_FOREGROUND;
51
+ }
52
+ function format(color) {
53
+ return formatCss(clampChroma(color, 'oklch'));
54
+ }
55
+ /** Lift a brand color so it stays vivid on dark surfaces. */
56
+ function lightenForDark(color) {
57
+ return {
58
+ ...color,
59
+ c: color.c * 0.92,
60
+ l: Math.min(Math.max(color.l + 0.12, 0.6), 0.85),
61
+ };
62
+ }
63
+ function parseColor(value, name) {
64
+ const color = parse(value);
65
+ if (!color) {
66
+ throw new Error(`createTheme: ${name} is not a valid CSS color: ${value}`);
67
+ }
68
+ return toOklch(color);
69
+ }
70
+ function sharedVariables({ fonts, radius }) {
71
+ const variables = {};
72
+ if (radius)
73
+ variables['--radius'] = radius;
74
+ if (fonts?.sans)
75
+ variables['--font-sans'] = fonts.sans;
76
+ if (fonts?.heading)
77
+ variables['--font-heading'] = fonts.heading;
78
+ if (fonts?.mono)
79
+ variables['--font-mono'] = fonts.mono;
80
+ return variables;
81
+ }
82
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/lib/theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type ClassValue } from 'clsx';
2
+ /**
3
+ * Per-slot class overrides for components that render several parts from a
4
+ * single props object. Keys match the suffix of each part's `data-slot`.
5
+ */
6
+ export type SlotClassNames<Slot extends string> = Partial<Record<Slot, string>>;
7
+ export declare function cn(...inputs: ClassValue[]): string;
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAgB7C;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,IAAI,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhF,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
@@ -0,0 +1,18 @@
1
+ import { clsx } from 'clsx';
2
+ import { extendTailwindMerge } from 'tailwind-merge';
3
+ /**
4
+ * Teaches tailwind-merge Pickle's theme scales: `text-body`, `text-h1`, … are
5
+ * font sizes, so they must not be mistaken for text colors and dropped next
6
+ * to one.
7
+ */
8
+ const twMerge = extendTailwindMerge({
9
+ extend: {
10
+ theme: {
11
+ text: ['body', 'code', 'h1', 'h2', 'h3', 'h4', 'lead', 'small'],
12
+ },
13
+ },
14
+ });
15
+ export function cn(...inputs) {
16
+ return twMerge(clsx(inputs));
17
+ }
18
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;GAIG;AACH,MAAM,OAAO,GAAG,mBAAmB,CAAC;IAClC,MAAM,EAAE;QACN,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;SAChE;KACF;CACF,CAAC,CAAC;AAQH,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+ //# sourceMappingURL=test-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+ //# sourceMappingURL=test-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.js","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,109 @@
1
1
  {
2
2
  "name": "@pickle-ui/react",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "1.0.0-beta.3",
4
+ "type": "module",
5
+ "description": "React component library built with Base UI, shadcn/ui, Tailwind CSS, and reui.",
6
+ "main": "dist/index.js",
7
+ "style": "src/styles.css",
8
+ "types": "dist/index.d.ts",
9
+ "sideEffects": [
10
+ "**/*.css"
11
+ ],
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/ugogo/pickle-ui.git",
15
+ "directory": "packages/react"
16
+ },
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js",
24
+ "default": "./dist/index.js"
25
+ },
26
+ "./styles.css": "./src/styles.css",
27
+ "./theme.css": "./src/theme.css",
28
+ "./base.css": "./src/base.css",
29
+ "./*": {
30
+ "types": "./dist/entries/*.d.ts",
31
+ "import": "./dist/entries/*.js",
32
+ "default": "./dist/entries/*.js"
33
+ }
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "src"
38
+ ],
39
+ "scripts": {
40
+ "dev": "storybook dev -p 6006",
41
+ "clean": "node -e \"require('node:fs').rmSync('dist', { force: true, recursive: true })\"",
42
+ "build": "pnpm run clean && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json --resolve-full-paths",
43
+ "typecheck": "tsc --noEmit",
44
+ "storybook": "storybook dev -p 6006",
45
+ "build-storybook": "storybook build",
46
+ "test": "vitest run",
47
+ "doctor": "react-doctor",
48
+ "prepublishOnly": "pnpm run build",
49
+ "release": "release-it"
50
+ },
51
+ "keywords": [
52
+ "react",
53
+ "components",
54
+ "ui",
55
+ "shadcn",
56
+ "tailwind",
57
+ "reui"
58
+ ],
59
+ "author": "Ugo Onali",
60
+ "license": "MIT",
61
+ "dependencies": {
62
+ "@base-ui/react": "^1.5.0",
63
+ "@tabler/icons-react": "^3.44.0",
64
+ "class-variance-authority": "^0.7.1",
65
+ "clsx": "^2.1.1",
66
+ "culori": "^4.0.2",
67
+ "tailwind-merge": "^3.6.0",
68
+ "tw-animate-css": "^1.4.0"
69
+ },
70
+ "devDependencies": {
71
+ "@fontsource-variable/geist": "5.2.9",
72
+ "@fontsource/jetbrains-mono": "5.2.8",
73
+ "@hookform/resolvers": "^5.4.0",
74
+ "@storybook/addon-docs": "^10.6.3",
75
+ "@storybook/addon-links": "^10.6.3",
76
+ "@storybook/react": "^10.6.3",
77
+ "@storybook/react-vite": "^10.6.3",
78
+ "@tailwindcss/postcss": "^4.3.0",
79
+ "@testing-library/dom": "^10.4.1",
80
+ "@testing-library/jest-dom": "^6.9.1",
81
+ "@testing-library/react": "^16.3.2",
82
+ "@types/culori": "^4.0.1",
83
+ "@types/node": "^25.9.3",
84
+ "@types/react": "^19.2.17",
85
+ "@types/react-dom": "^19.2.3",
86
+ "@vitejs/plugin-react": "^6.0.2",
87
+ "jsdom": "^29.1.1",
88
+ "postcss": "^8.5.15",
89
+ "react": "^19.2.7",
90
+ "react-doctor": "^0.5.6",
91
+ "react-dom": "^19.2.7",
92
+ "react-hook-form": "^7.79.0",
93
+ "release-it": "^20.2.0",
94
+ "storybook": "^10.6.3",
95
+ "storybook-addon-pseudo-states": "^10.6.3",
96
+ "tailwindcss": "^4.3.0",
97
+ "tsc-alias": "^1.8.17",
98
+ "typescript": "^6.0.3",
99
+ "vite": "^8.0.16",
100
+ "vitest": "^3.2.6",
101
+ "zod": "4.0.17"
102
+ },
103
+ "peerDependencies": {
104
+ "react": "^18.0.0 || ^19.0.0",
105
+ "react-dom": "^18.0.0 || ^19.0.0",
106
+ "react-hook-form": "^7.0.0",
107
+ "tailwindcss": "^4.0.0"
108
+ }
109
+ }