@jakubmazanec/ui 0.1.0-unstable.081bdf1

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 (481) hide show
  1. package/README.md +45 -0
  2. package/build/components/Button.d.ts +40 -0
  3. package/build/components/Button.js +139 -0
  4. package/build/components/Button.js.map +7 -0
  5. package/build/components/Card.d.ts +19 -0
  6. package/build/components/Card.js +26 -0
  7. package/build/components/Card.js.map +7 -0
  8. package/build/components/Checkbox.d.ts +39 -0
  9. package/build/components/Checkbox.js +87 -0
  10. package/build/components/Checkbox.js.map +7 -0
  11. package/build/components/CheckboxField.d.ts +18 -0
  12. package/build/components/CheckboxField.js +22 -0
  13. package/build/components/CheckboxField.js.map +7 -0
  14. package/build/components/Combobox.d.ts +57 -0
  15. package/build/components/Combobox.js +178 -0
  16. package/build/components/Combobox.js.map +7 -0
  17. package/build/components/ComboboxOption.d.ts +33 -0
  18. package/build/components/ComboboxOption.js +59 -0
  19. package/build/components/ComboboxOption.js.map +7 -0
  20. package/build/components/DataTable.d.ts +70 -0
  21. package/build/components/DataTable.js +383 -0
  22. package/build/components/DataTable.js.map +7 -0
  23. package/build/components/Description.d.ts +19 -0
  24. package/build/components/Description.js +28 -0
  25. package/build/components/Description.js.map +7 -0
  26. package/build/components/Dialog.d.ts +32 -0
  27. package/build/components/Dialog.js +55 -0
  28. package/build/components/Dialog.js.map +7 -0
  29. package/build/components/DialogPanel.d.ts +19 -0
  30. package/build/components/DialogPanel.js +29 -0
  31. package/build/components/DialogPanel.js.map +7 -0
  32. package/build/components/DialogTitle.d.ts +19 -0
  33. package/build/components/DialogTitle.js +28 -0
  34. package/build/components/DialogTitle.js.map +7 -0
  35. package/build/components/Error.d.ts +19 -0
  36. package/build/components/Error.js +37 -0
  37. package/build/components/Error.js.map +7 -0
  38. package/build/components/Field.d.ts +22 -0
  39. package/build/components/Field.js +32 -0
  40. package/build/components/Field.js.map +7 -0
  41. package/build/components/Fieldset.d.ts +27 -0
  42. package/build/components/Fieldset.js +39 -0
  43. package/build/components/Fieldset.js.map +7 -0
  44. package/build/components/Form.d.ts +22 -0
  45. package/build/components/Form.js +41 -0
  46. package/build/components/Form.js.map +7 -0
  47. package/build/components/Icon.d.ts +29 -0
  48. package/build/components/Icon.js +59 -0
  49. package/build/components/Icon.js.map +7 -0
  50. package/build/components/Input.d.ts +37 -0
  51. package/build/components/Input.js +111 -0
  52. package/build/components/Input.js.map +7 -0
  53. package/build/components/Label.d.ts +19 -0
  54. package/build/components/Label.js +26 -0
  55. package/build/components/Label.js.map +7 -0
  56. package/build/components/Legend.d.ts +19 -0
  57. package/build/components/Legend.js +26 -0
  58. package/build/components/Legend.js.map +7 -0
  59. package/build/components/Listbox.d.ts +59 -0
  60. package/build/components/Listbox.js +254 -0
  61. package/build/components/Listbox.js.map +7 -0
  62. package/build/components/ListboxOption.d.ts +33 -0
  63. package/build/components/ListboxOption.js +59 -0
  64. package/build/components/ListboxOption.js.map +7 -0
  65. package/build/components/Menu.d.ts +21 -0
  66. package/build/components/Menu.js +29 -0
  67. package/build/components/Menu.js.map +7 -0
  68. package/build/components/MenuButton.d.ts +27 -0
  69. package/build/components/MenuButton.js +45 -0
  70. package/build/components/MenuButton.js.map +7 -0
  71. package/build/components/MenuHeading.d.ts +19 -0
  72. package/build/components/MenuHeading.js +28 -0
  73. package/build/components/MenuHeading.js.map +7 -0
  74. package/build/components/MenuItem.d.ts +27 -0
  75. package/build/components/MenuItem.js +39 -0
  76. package/build/components/MenuItem.js.map +7 -0
  77. package/build/components/MenuItems.d.ts +22 -0
  78. package/build/components/MenuItems.js +36 -0
  79. package/build/components/MenuItems.js.map +7 -0
  80. package/build/components/MenuSection.d.ts +19 -0
  81. package/build/components/MenuSection.js +28 -0
  82. package/build/components/MenuSection.js.map +7 -0
  83. package/build/components/MenuSeparator.d.ts +19 -0
  84. package/build/components/MenuSeparator.js +28 -0
  85. package/build/components/MenuSeparator.js.map +7 -0
  86. package/build/components/Popover.d.ts +19 -0
  87. package/build/components/Popover.js +28 -0
  88. package/build/components/Popover.js.map +7 -0
  89. package/build/components/PopoverBackdrop.d.ts +19 -0
  90. package/build/components/PopoverBackdrop.js +28 -0
  91. package/build/components/PopoverBackdrop.js.map +7 -0
  92. package/build/components/PopoverButton.d.ts +29 -0
  93. package/build/components/PopoverButton.js +47 -0
  94. package/build/components/PopoverButton.js.map +7 -0
  95. package/build/components/PopoverGroup.d.ts +19 -0
  96. package/build/components/PopoverGroup.js +28 -0
  97. package/build/components/PopoverGroup.js.map +7 -0
  98. package/build/components/PopoverPanel.d.ts +24 -0
  99. package/build/components/PopoverPanel.js +38 -0
  100. package/build/components/PopoverPanel.js.map +7 -0
  101. package/build/components/Radio.d.ts +33 -0
  102. package/build/components/Radio.js +57 -0
  103. package/build/components/Radio.js.map +7 -0
  104. package/build/components/RadioField.d.ts +11 -0
  105. package/build/components/RadioField.js +15 -0
  106. package/build/components/RadioField.js.map +7 -0
  107. package/build/components/RadioGroup.d.ts +34 -0
  108. package/build/components/RadioGroup.js +87 -0
  109. package/build/components/RadioGroup.js.map +7 -0
  110. package/build/components/Spinner.d.ts +21 -0
  111. package/build/components/Spinner.js +70 -0
  112. package/build/components/Spinner.js.map +7 -0
  113. package/build/components/Table.d.ts +19 -0
  114. package/build/components/Table.js +26 -0
  115. package/build/components/Table.js.map +7 -0
  116. package/build/components/TableBody.d.ts +19 -0
  117. package/build/components/TableBody.js +26 -0
  118. package/build/components/TableBody.js.map +7 -0
  119. package/build/components/TableCaption.d.ts +19 -0
  120. package/build/components/TableCaption.js +31 -0
  121. package/build/components/TableCaption.js.map +7 -0
  122. package/build/components/TableCell.d.ts +19 -0
  123. package/build/components/TableCell.js +26 -0
  124. package/build/components/TableCell.js.map +7 -0
  125. package/build/components/TableFoot.d.ts +19 -0
  126. package/build/components/TableFoot.js +26 -0
  127. package/build/components/TableFoot.js.map +7 -0
  128. package/build/components/TableHead.d.ts +19 -0
  129. package/build/components/TableHead.js +26 -0
  130. package/build/components/TableHead.js.map +7 -0
  131. package/build/components/TableHeader.d.ts +19 -0
  132. package/build/components/TableHeader.js +26 -0
  133. package/build/components/TableHeader.js.map +7 -0
  134. package/build/components/TableRow.d.ts +19 -0
  135. package/build/components/TableRow.js +26 -0
  136. package/build/components/TableRow.js.map +7 -0
  137. package/build/components/Text.d.ts +19 -0
  138. package/build/components/Text.js +26 -0
  139. package/build/components/Text.js.map +7 -0
  140. package/build/components/Textarea.d.ts +34 -0
  141. package/build/components/Textarea.js +78 -0
  142. package/build/components/Textarea.js.map +7 -0
  143. package/build/components/data-table/DataTableHeader.d.ts +13 -0
  144. package/build/components/data-table/DataTableHeader.js +418 -0
  145. package/build/components/data-table/DataTableHeader.js.map +7 -0
  146. package/build/components/data-table/DataTablePageButton.d.ts +6 -0
  147. package/build/components/data-table/DataTablePageButton.js +11 -0
  148. package/build/components/data-table/DataTablePageButton.js.map +7 -0
  149. package/build/components/data-table/internals/constants.d.ts +3 -0
  150. package/build/components/data-table/internals/constants.js +5 -0
  151. package/build/components/data-table/internals/constants.js.map +7 -0
  152. package/build/components/data-table/internals/getCommonPinningClasses.d.ts +2 -0
  153. package/build/components/data-table/internals/getCommonPinningClasses.js +13 -0
  154. package/build/components/data-table/internals/getCommonPinningClasses.js.map +7 -0
  155. package/build/components/data-table/internals/getCommonPinningStyles.d.ts +3 -0
  156. package/build/components/data-table/internals/getCommonPinningStyles.js +10 -0
  157. package/build/components/data-table/internals/getCommonPinningStyles.js.map +7 -0
  158. package/build/components/internals/fieldContext.d.ts +3 -0
  159. package/build/components/internals/fieldContext.js +4 -0
  160. package/build/components/internals/fieldContext.js.map +7 -0
  161. package/build/components/internals/fieldNameContext.d.ts +3 -0
  162. package/build/components/internals/fieldNameContext.js +4 -0
  163. package/build/components/internals/fieldNameContext.js.map +7 -0
  164. package/build/components/internals/filterProps.d.ts +4 -0
  165. package/build/components/internals/filterProps.js +9 -0
  166. package/build/components/internals/filterProps.js.map +7 -0
  167. package/build/components/internals/formIdContext.d.ts +2 -0
  168. package/build/components/internals/formIdContext.js +4 -0
  169. package/build/components/internals/formIdContext.js.map +7 -0
  170. package/build/components/internals/forwardRef.d.ts +4 -0
  171. package/build/components/internals/forwardRef.js +6 -0
  172. package/build/components/internals/forwardRef.js.map +7 -0
  173. package/build/components/internals/useFormId.d.ts +1 -0
  174. package/build/components/internals/useFormId.js +7 -0
  175. package/build/components/internals/useFormId.js.map +7 -0
  176. package/build/components/internals.d.ts +6 -0
  177. package/build/components/internals.js +8 -0
  178. package/build/components/internals.js.map +7 -0
  179. package/build/components/useField.d.ts +1 -0
  180. package/build/components/useField.js +7 -0
  181. package/build/components/useField.js.map +7 -0
  182. package/build/components/useFieldName.d.ts +1 -0
  183. package/build/components/useFieldName.js +7 -0
  184. package/build/components/useFieldName.js.map +7 -0
  185. package/build/components/useForm.d.ts +10 -0
  186. package/build/components/useForm.js +19 -0
  187. package/build/components/useForm.js.map +7 -0
  188. package/build/components.d.ts +50 -0
  189. package/build/components.js +52 -0
  190. package/build/components.js.map +7 -0
  191. package/build/development/createTailwindConfig.d.ts +18 -0
  192. package/build/development/createTailwindConfig.js +161 -0
  193. package/build/development/createTailwindConfig.js.map +7 -0
  194. package/build/development/createTailwindMerge.d.ts +2 -0
  195. package/build/development/createTailwindMerge.js +74 -0
  196. package/build/development/createTailwindMerge.js.map +7 -0
  197. package/build/development/internals/PaletteConfig.d.ts +6 -0
  198. package/build/development/internals/PaletteConfig.js +2 -0
  199. package/build/development/internals/PaletteConfig.js.map +7 -0
  200. package/build/development/internals/SwatchValue.d.ts +9 -0
  201. package/build/development/internals/SwatchValue.js +2 -0
  202. package/build/development/internals/SwatchValue.js.map +7 -0
  203. package/build/development/internals/clamp.d.ts +1 -0
  204. package/build/development/internals/clamp.js +5 -0
  205. package/build/development/internals/clamp.js.map +7 -0
  206. package/build/development/internals/constants.d.ts +2 -0
  207. package/build/development/internals/constants.js +22 -0
  208. package/build/development/internals/constants.js.map +7 -0
  209. package/build/development/internals/createDisplayColor.d.ts +1 -0
  210. package/build/development/internals/createDisplayColor.js +24 -0
  211. package/build/development/internals/createDisplayColor.js.map +7 -0
  212. package/build/development/internals/createDistributionValues.d.ts +4 -0
  213. package/build/development/internals/createDistributionValues.js +32 -0
  214. package/build/development/internals/createDistributionValues.js.map +7 -0
  215. package/build/development/internals/createHueScale.d.ts +4 -0
  216. package/build/development/internals/createHueScale.js +15 -0
  217. package/build/development/internals/createHueScale.js.map +7 -0
  218. package/build/development/internals/createPalette.d.ts +16 -0
  219. package/build/development/internals/createPalette.js +36 -0
  220. package/build/development/internals/createPalette.js.map +7 -0
  221. package/build/development/internals/createSaturationScale.d.ts +4 -0
  222. package/build/development/internals/createSaturationScale.js +18 -0
  223. package/build/development/internals/createSaturationScale.js.map +7 -0
  224. package/build/development/internals/createSwatches.d.ts +10 -0
  225. package/build/development/internals/createSwatches.js +31 -0
  226. package/build/development/internals/createSwatches.js.map +7 -0
  227. package/build/development/internals/hexToHsl.d.ts +5 -0
  228. package/build/development/internals/hexToHsl.js +37 -0
  229. package/build/development/internals/hexToHsl.js.map +7 -0
  230. package/build/development/internals/hexToRgb.d.ts +5 -0
  231. package/build/development/internals/hexToRgb.js +21 -0
  232. package/build/development/internals/hexToRgb.js.map +7 -0
  233. package/build/development/internals/hslToHex.d.ts +1 -0
  234. package/build/development/internals/hslToHex.js +19 -0
  235. package/build/development/internals/hslToHex.js.map +7 -0
  236. package/build/development/internals/hslToRgb.d.ts +5 -0
  237. package/build/development/internals/hslToRgb.js +42 -0
  238. package/build/development/internals/hslToRgb.js.map +7 -0
  239. package/build/development/internals/isHex.d.ts +1 -0
  240. package/build/development/internals/isHex.js +7 -0
  241. package/build/development/internals/isHex.js.map +7 -0
  242. package/build/development/internals/resolveModule.d.ts +1 -0
  243. package/build/development/internals/resolveModule.js +9 -0
  244. package/build/development/internals/resolveModule.js.map +7 -0
  245. package/build/development/internals/round.d.ts +1 -0
  246. package/build/development/internals/round.js +6 -0
  247. package/build/development/internals/round.js.map +7 -0
  248. package/build/development/internals/unsignedModulo.d.ts +1 -0
  249. package/build/development/internals/unsignedModulo.js +5 -0
  250. package/build/development/internals/unsignedModulo.js.map +7 -0
  251. package/build/development/internals.d.ts +1 -0
  252. package/build/development/internals.js +3 -0
  253. package/build/development/internals.js.map +7 -0
  254. package/build/development.d.ts +2 -0
  255. package/build/development.js +4 -0
  256. package/build/development.js.map +7 -0
  257. package/build/inter-variable-italic.woff2 +0 -0
  258. package/build/inter-variable.woff2 +0 -0
  259. package/build/main.d.ts +5 -0
  260. package/build/main.js +7 -0
  261. package/build/main.js.map +7 -0
  262. package/build/styles.css +23 -0
  263. package/build/styles.css.map +7 -0
  264. package/build/theme/Theme.d.ts +143 -0
  265. package/build/theme/Theme.js +2 -0
  266. package/build/theme/Theme.js.map +7 -0
  267. package/build/theme/ThemeProvider.d.ts +6 -0
  268. package/build/theme/ThemeProvider.js +7 -0
  269. package/build/theme/ThemeProvider.js.map +7 -0
  270. package/build/theme/defaultTheme.d.ts +2 -0
  271. package/build/theme/defaultTheme.js +100 -0
  272. package/build/theme/defaultTheme.js.map +7 -0
  273. package/build/theme/internals/ClassName.d.ts +1 -0
  274. package/build/theme/internals/ClassName.js +2 -0
  275. package/build/theme/internals/ClassName.js.map +7 -0
  276. package/build/theme/internals/ComponentProps.d.ts +7 -0
  277. package/build/theme/internals/ComponentProps.js +2 -0
  278. package/build/theme/internals/ComponentProps.js.map +7 -0
  279. package/build/theme/internals/ComponentTheme.d.ts +35 -0
  280. package/build/theme/internals/ComponentTheme.js +2 -0
  281. package/build/theme/internals/ComponentTheme.js.map +7 -0
  282. package/build/theme/internals/ComponentThemeCompoundVariants.d.ts +12 -0
  283. package/build/theme/internals/ComponentThemeCompoundVariants.js +2 -0
  284. package/build/theme/internals/ComponentThemeCompoundVariants.js.map +7 -0
  285. package/build/theme/internals/ComponentThemeDefinition.d.ts +6 -0
  286. package/build/theme/internals/ComponentThemeDefinition.js +2 -0
  287. package/build/theme/internals/ComponentThemeDefinition.js.map +7 -0
  288. package/build/theme/internals/ComponentThemeDefinitionElements.d.ts +1 -0
  289. package/build/theme/internals/ComponentThemeDefinitionElements.js +2 -0
  290. package/build/theme/internals/ComponentThemeDefinitionElements.js.map +7 -0
  291. package/build/theme/internals/ComponentThemeDefinitionVariants.d.ts +3 -0
  292. package/build/theme/internals/ComponentThemeDefinitionVariants.js +2 -0
  293. package/build/theme/internals/ComponentThemeDefinitionVariants.js.map +7 -0
  294. package/build/theme/internals/ComponentThemeProps.d.ts +5 -0
  295. package/build/theme/internals/ComponentThemeProps.js +2 -0
  296. package/build/theme/internals/ComponentThemeProps.js.map +7 -0
  297. package/build/theme/internals/ComponentThemeVariants.d.ts +14 -0
  298. package/build/theme/internals/ComponentThemeVariants.js +2 -0
  299. package/build/theme/internals/ComponentThemeVariants.js.map +7 -0
  300. package/build/theme/internals/ComponentWithTheme.d.ts +5 -0
  301. package/build/theme/internals/ComponentWithTheme.js +2 -0
  302. package/build/theme/internals/ComponentWithTheme.js.map +7 -0
  303. package/build/theme/internals/UseComponentTheme.d.ts +21 -0
  304. package/build/theme/internals/UseComponentTheme.js +2 -0
  305. package/build/theme/internals/UseComponentTheme.js.map +7 -0
  306. package/build/theme/internals/UseComponentThemeReturn.d.ts +6 -0
  307. package/build/theme/internals/UseComponentThemeReturn.js +2 -0
  308. package/build/theme/internals/UseComponentThemeReturn.js.map +7 -0
  309. package/build/theme/internals/booleanToString.d.ts +1 -0
  310. package/build/theme/internals/booleanToString.js +5 -0
  311. package/build/theme/internals/booleanToString.js.map +7 -0
  312. package/build/theme/internals/createComponentTheme.d.ts +3 -0
  313. package/build/theme/internals/createComponentTheme.js +39 -0
  314. package/build/theme/internals/createComponentTheme.js.map +7 -0
  315. package/build/theme/internals/createUseComponentThemeReturn.d.ts +15 -0
  316. package/build/theme/internals/createUseComponentThemeReturn.js +50 -0
  317. package/build/theme/internals/createUseComponentThemeReturn.js.map +7 -0
  318. package/build/theme/internals/pickPropertyIfExists.d.ts +4 -0
  319. package/build/theme/internals/pickPropertyIfExists.js +11 -0
  320. package/build/theme/internals/pickPropertyIfExists.js.map +7 -0
  321. package/build/theme/internals/themeContext.d.ts +330 -0
  322. package/build/theme/internals/themeContext.js +4 -0
  323. package/build/theme/internals/themeContext.js.map +7 -0
  324. package/build/theme/internals/useTheme.d.ts +329 -0
  325. package/build/theme/internals/useTheme.js +7 -0
  326. package/build/theme/internals/useTheme.js.map +7 -0
  327. package/build/theme/internals.d.ts +18 -0
  328. package/build/theme/internals.js +20 -0
  329. package/build/theme/internals.js.map +7 -0
  330. package/build/theme.d.ts +3 -0
  331. package/build/theme.js +5 -0
  332. package/build/theme.js.map +7 -0
  333. package/build/utilities/WithLocaleOrLocales.d.ts +5 -0
  334. package/build/utilities/WithLocaleOrLocales.js +2 -0
  335. package/build/utilities/WithLocaleOrLocales.js.map +7 -0
  336. package/build/utilities/formatDateTime.d.ts +3 -0
  337. package/build/utilities/formatDateTime.js +11 -0
  338. package/build/utilities/formatDateTime.js.map +7 -0
  339. package/build/utilities/formatNumber.d.ts +3 -0
  340. package/build/utilities/formatNumber.js +11 -0
  341. package/build/utilities/formatNumber.js.map +7 -0
  342. package/build/utilities/internals/cache.d.ts +1 -0
  343. package/build/utilities/internals/cache.js +3 -0
  344. package/build/utilities/internals/cache.js.map +7 -0
  345. package/build/utilities/internals/createCacheKey.d.ts +1 -0
  346. package/build/utilities/internals/createCacheKey.js +6 -0
  347. package/build/utilities/internals/createCacheKey.js.map +7 -0
  348. package/build/utilities/internals/getMemoized.d.ts +1 -0
  349. package/build/utilities/internals/getMemoized.js +12 -0
  350. package/build/utilities/internals/getMemoized.js.map +7 -0
  351. package/build/utilities/internals/normalizeLocales.d.ts +2 -0
  352. package/build/utilities/internals/normalizeLocales.js +12 -0
  353. package/build/utilities/internals/normalizeLocales.js.map +7 -0
  354. package/build/utilities/internals.d.ts +4 -0
  355. package/build/utilities/internals.js +6 -0
  356. package/build/utilities/internals.js.map +7 -0
  357. package/build/utilities.d.ts +3 -0
  358. package/build/utilities.js +5 -0
  359. package/build/utilities.js.map +7 -0
  360. package/package.json +100 -0
  361. package/source/components/Button.tsx +172 -0
  362. package/source/components/Card.ts +46 -0
  363. package/source/components/Checkbox.tsx +125 -0
  364. package/source/components/CheckboxField.tsx +61 -0
  365. package/source/components/Combobox.tsx +298 -0
  366. package/source/components/ComboboxOption.tsx +95 -0
  367. package/source/components/DataTable.tsx +464 -0
  368. package/source/components/Description.tsx +52 -0
  369. package/source/components/Dialog.tsx +85 -0
  370. package/source/components/DialogPanel.tsx +54 -0
  371. package/source/components/DialogTitle.tsx +52 -0
  372. package/source/components/Error.tsx +58 -0
  373. package/source/components/Field.tsx +79 -0
  374. package/source/components/Fieldset.tsx +64 -0
  375. package/source/components/Form.tsx +72 -0
  376. package/source/components/Icon.tsx +96 -0
  377. package/source/components/Input.tsx +156 -0
  378. package/source/components/Label.tsx +49 -0
  379. package/source/components/Legend.tsx +49 -0
  380. package/source/components/Listbox.tsx +401 -0
  381. package/source/components/ListboxOption.tsx +95 -0
  382. package/source/components/Menu.tsx +50 -0
  383. package/source/components/MenuButton.tsx +69 -0
  384. package/source/components/MenuHeading.tsx +52 -0
  385. package/source/components/MenuItem.tsx +63 -0
  386. package/source/components/MenuItems.tsx +61 -0
  387. package/source/components/MenuSection.tsx +52 -0
  388. package/source/components/MenuSeparator.tsx +52 -0
  389. package/source/components/Popover.tsx +52 -0
  390. package/source/components/PopoverBackdrop.tsx +52 -0
  391. package/source/components/PopoverButton.tsx +72 -0
  392. package/source/components/PopoverGroup.tsx +52 -0
  393. package/source/components/PopoverPanel.tsx +65 -0
  394. package/source/components/Radio.tsx +88 -0
  395. package/source/components/RadioField.tsx +31 -0
  396. package/source/components/RadioGroup.tsx +147 -0
  397. package/source/components/Spinner.tsx +70 -0
  398. package/source/components/Table.ts +47 -0
  399. package/source/components/TableBody.ts +47 -0
  400. package/source/components/TableCaption.ts +52 -0
  401. package/source/components/TableCell.ts +47 -0
  402. package/source/components/TableFoot.ts +47 -0
  403. package/source/components/TableHead.ts +47 -0
  404. package/source/components/TableHeader.ts +47 -0
  405. package/source/components/TableRow.ts +47 -0
  406. package/source/components/Text.ts +47 -0
  407. package/source/components/Textarea.tsx +104 -0
  408. package/source/components/data-table/DataTableHeader.tsx +602 -0
  409. package/source/components/data-table/DataTablePageButton.tsx +21 -0
  410. package/source/components/data-table/internals/constants.ts +3 -0
  411. package/source/components/data-table/internals/getCommonPinningClasses.ts +19 -0
  412. package/source/components/data-table/internals/getCommonPinningStyles.ts +13 -0
  413. package/source/components/internals/fieldContext.ts +4 -0
  414. package/source/components/internals/fieldNameContext.ts +5 -0
  415. package/source/components/internals/filterProps.ts +12 -0
  416. package/source/components/internals/formIdContext.ts +3 -0
  417. package/source/components/internals/forwardRef.ts +7 -0
  418. package/source/components/internals/useFormId.ts +7 -0
  419. package/source/components/internals.ts +6 -0
  420. package/source/components/useField.ts +7 -0
  421. package/source/components/useFieldName.ts +7 -0
  422. package/source/components/useForm.ts +24 -0
  423. package/source/components.ts +50 -0
  424. package/source/development/createTailwindConfig.ts +182 -0
  425. package/source/development/createTailwindMerge.ts +101 -0
  426. package/source/development/internals/PaletteConfig.ts +6 -0
  427. package/source/development/internals/SwatchValue.ts +9 -0
  428. package/source/development/internals/clamp.ts +3 -0
  429. package/source/development/internals/constants.ts +4 -0
  430. package/source/development/internals/createDisplayColor.ts +29 -0
  431. package/source/development/internals/createDistributionValues.ts +38 -0
  432. package/source/development/internals/createHueScale.ts +17 -0
  433. package/source/development/internals/createPalette.ts +54 -0
  434. package/source/development/internals/createSaturationScale.ts +21 -0
  435. package/source/development/internals/createSwatches.ts +34 -0
  436. package/source/development/internals/hexToHsl.ts +45 -0
  437. package/source/development/internals/hexToRgb.ts +23 -0
  438. package/source/development/internals/hslToHex.ts +23 -0
  439. package/source/development/internals/hslToRgb.ts +43 -0
  440. package/source/development/internals/isHex.ts +7 -0
  441. package/source/development/internals/resolveModule.ts +9 -0
  442. package/source/development/internals/round.ts +5 -0
  443. package/source/development/internals/unsignedModulo.ts +3 -0
  444. package/source/development/internals.ts +1 -0
  445. package/source/development.ts +2 -0
  446. package/source/inter-variable-italic.woff2 +0 -0
  447. package/source/inter-variable.woff2 +0 -0
  448. package/source/main.ts +5 -0
  449. package/source/styles.css +25 -0
  450. package/source/theme/Theme.ts +100 -0
  451. package/source/theme/ThemeProvider.tsx +12 -0
  452. package/source/theme/defaultTheme.ts +100 -0
  453. package/source/theme/internals/ClassName.ts +1 -0
  454. package/source/theme/internals/ComponentProps.ts +13 -0
  455. package/source/theme/internals/ComponentTheme.ts +50 -0
  456. package/source/theme/internals/ComponentThemeCompoundVariants.ts +20 -0
  457. package/source/theme/internals/ComponentThemeDefinition.ts +7 -0
  458. package/source/theme/internals/ComponentThemeDefinitionElements.ts +1 -0
  459. package/source/theme/internals/ComponentThemeDefinitionVariants.ts +3 -0
  460. package/source/theme/internals/ComponentThemeProps.ts +11 -0
  461. package/source/theme/internals/ComponentThemeVariants.ts +24 -0
  462. package/source/theme/internals/ComponentWithTheme.ts +6 -0
  463. package/source/theme/internals/UseComponentTheme.ts +22 -0
  464. package/source/theme/internals/UseComponentThemeReturn.ts +15 -0
  465. package/source/theme/internals/booleanToString.ts +6 -0
  466. package/source/theme/internals/createComponentTheme.ts +70 -0
  467. package/source/theme/internals/createUseComponentThemeReturn.ts +87 -0
  468. package/source/theme/internals/pickPropertyIfExists.ts +24 -0
  469. package/source/theme/internals/themeContext.ts +5 -0
  470. package/source/theme/internals/useTheme.ts +7 -0
  471. package/source/theme/internals.ts +18 -0
  472. package/source/theme.ts +3 -0
  473. package/source/utilities/WithLocaleOrLocales.ts +1 -0
  474. package/source/utilities/formatDateTime.ts +15 -0
  475. package/source/utilities/formatNumber.ts +15 -0
  476. package/source/utilities/internals/cache.ts +1 -0
  477. package/source/utilities/internals/createCacheKey.ts +9 -0
  478. package/source/utilities/internals/getMemoized.ts +14 -0
  479. package/source/utilities/internals/normalizeLocales.ts +15 -0
  480. package/source/utilities/internals.ts +4 -0
  481. package/source/utilities.ts +3 -0
@@ -0,0 +1,58 @@
1
+ import {
2
+ type ComponentPropsWithoutRef,
3
+ createElement,
4
+ type ElementType,
5
+ type PropsWithChildren,
6
+ type Ref,
7
+ } from 'react';
8
+
9
+ import {
10
+ type ComponentProps,
11
+ type ComponentTheme,
12
+ createComponentTheme,
13
+ } from '../theme/internals.js';
14
+ import {forwardRef} from './internals.js';
15
+ import {Text} from './Text.js';
16
+ import {useField} from './useField.js';
17
+
18
+ export const useErrorTheme = createComponentTheme('Error');
19
+
20
+ const ERROR_ELEMENT = 'p';
21
+
22
+ export type ErrorProps<T extends ElementType> = PropsWithChildren<
23
+ ComponentProps<typeof useErrorTheme> &
24
+ ComponentPropsWithoutRef<T> & {
25
+ as?: T | undefined;
26
+ className?: string;
27
+ }
28
+ >;
29
+
30
+ export const Error = forwardRef(
31
+ <T extends ElementType = typeof ERROR_ELEMENT>(
32
+ {as: Component = ERROR_ELEMENT as T, className, children, ...rest}: ErrorProps<T>,
33
+ ref: Ref<HTMLElement>,
34
+ ) => {
35
+ let theme = useErrorTheme();
36
+ let field = useField();
37
+ let props = {
38
+ ref,
39
+ className: theme(null, className),
40
+ 'data-component': 'error',
41
+ ...rest,
42
+ };
43
+
44
+ if (field) {
45
+ return createElement(
46
+ Component,
47
+ props,
48
+ field.errors ? field.errors.map((error) => <Text key={error}>{error}</Text>) : null,
49
+ );
50
+ }
51
+
52
+ return createElement(Component, props, children);
53
+ },
54
+ );
55
+
56
+ export const errorTheme: ComponentTheme<typeof useErrorTheme> = {
57
+ className: 'flex text-red-500 empty:hidden',
58
+ };
@@ -0,0 +1,79 @@
1
+ import {type FieldMetadata, type FieldName} from '@conform-to/react';
2
+ import {Field as HeadlessField, type FieldProps as HeadlessFieldProps} from '@headlessui/react';
3
+ import {
4
+ type ComponentPropsWithoutRef,
5
+ type ElementType,
6
+ type PropsWithChildren,
7
+ type Ref,
8
+ } from 'react';
9
+
10
+ import {
11
+ type ComponentProps,
12
+ type ComponentTheme,
13
+ createComponentTheme,
14
+ } from '../theme/internals.js';
15
+ import {fieldContext, fieldNameContext, filterProps, forwardRef} from './internals.js';
16
+
17
+ export const useFieldTheme = createComponentTheme('Field');
18
+
19
+ const FIELD_ELEMENT = 'div';
20
+
21
+ export type FieldProps<T extends ElementType> = PropsWithChildren<
22
+ ComponentProps<typeof useFieldTheme> &
23
+ ComponentPropsWithoutRef<T> &
24
+ (
25
+ | {
26
+ as?: T | undefined;
27
+ className?: string | undefined;
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
29
+ name?: FieldName<any, any> | string | undefined;
30
+ field?: undefined;
31
+ }
32
+ | {
33
+ as?: T | undefined;
34
+ className?: string | undefined;
35
+ name?: undefined;
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
37
+ field?: FieldMetadata<any, any> | undefined;
38
+ }
39
+ )
40
+ >;
41
+
42
+ export const Field = forwardRef(
43
+ <T extends ElementType = typeof FIELD_ELEMENT>(
44
+ {as = FIELD_ELEMENT as T, name, field, className, children, ...rest}: FieldProps<T>,
45
+ ref: Ref<HTMLElement>,
46
+ ) => {
47
+ let theme = useFieldTheme();
48
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
49
+ let props: HeadlessFieldProps<any> = filterProps({
50
+ as,
51
+ ref,
52
+ className: theme(null, className),
53
+ 'data-component': 'field',
54
+ ...rest,
55
+ });
56
+
57
+ if (field) {
58
+ return (
59
+ <fieldContext.Provider value={field}>
60
+ <HeadlessField {...props}>{children}</HeadlessField>
61
+ </fieldContext.Provider>
62
+ );
63
+ }
64
+
65
+ if (name) {
66
+ return (
67
+ <fieldNameContext.Provider value={name}>
68
+ <HeadlessField {...props}>{children}</HeadlessField>
69
+ </fieldNameContext.Provider>
70
+ );
71
+ }
72
+
73
+ return <HeadlessField {...props}>{children}</HeadlessField>;
74
+ },
75
+ );
76
+
77
+ export const fieldTheme: ComponentTheme<typeof useFieldTheme> = {
78
+ className: 'flex flex-col gap-y-2 font-sans',
79
+ };
@@ -0,0 +1,64 @@
1
+ import {
2
+ Fieldset as HeadlessFieldset,
3
+ type FieldsetProps as HeadlessFieldsetProps,
4
+ } from '@headlessui/react';
5
+ import {
6
+ type ComponentPropsWithoutRef,
7
+ type ElementType,
8
+ type PropsWithChildren,
9
+ type Ref,
10
+ } from 'react';
11
+
12
+ import {
13
+ type ComponentProps,
14
+ type ComponentTheme,
15
+ createComponentTheme,
16
+ } from '../theme/internals.js';
17
+ import {filterProps, forwardRef} from './internals.js';
18
+
19
+ export const useFieldsetTheme = createComponentTheme('Fieldset', {
20
+ variants: {
21
+ disabled: [true, false],
22
+ },
23
+ });
24
+
25
+ const FIELDSET_ELEMENT = 'fieldset';
26
+
27
+ export type FieldsetProps<T extends ElementType> = PropsWithChildren<
28
+ ComponentProps<typeof useFieldsetTheme> &
29
+ ComponentPropsWithoutRef<T> & {
30
+ as?: T | undefined;
31
+ className?: string | undefined;
32
+ }
33
+ >;
34
+
35
+ export const Fieldset = forwardRef(
36
+ <T extends ElementType = typeof FIELDSET_ELEMENT>(
37
+ {as = FIELDSET_ELEMENT as T, disabled = false, className, children, ...rest}: FieldsetProps<T>,
38
+ ref: Ref<HTMLElement>,
39
+ ) => {
40
+ let theme = useFieldsetTheme({disabled});
41
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
42
+ let props: HeadlessFieldsetProps<any> = filterProps({
43
+ as,
44
+ ref,
45
+ disabled,
46
+ className: theme(null, className),
47
+ 'data-component': 'fieldset',
48
+ ...rest,
49
+ });
50
+
51
+ return <HeadlessFieldset {...props}>{children}</HeadlessFieldset>;
52
+ },
53
+ );
54
+
55
+ export const fieldsetnTheme: ComponentTheme<typeof useFieldsetTheme> = {
56
+ className:
57
+ 'flex flex-col gap-y-6 [&>[data-component=legend]+[data-component=text]]:text-sm [&>[data-component=legend]+[data-component=text]]:-mt-4',
58
+ variants: {
59
+ disabled: {
60
+ true: '',
61
+ false: '',
62
+ },
63
+ },
64
+ };
@@ -0,0 +1,72 @@
1
+ import {type FormMetadata, FormProvider} from '@conform-to/react';
2
+ import {
3
+ type ComponentPropsWithoutRef,
4
+ createElement,
5
+ type ElementType,
6
+ type PropsWithChildren,
7
+ type Ref,
8
+ } from 'react';
9
+
10
+ import {
11
+ type ComponentProps,
12
+ type ComponentTheme,
13
+ createComponentTheme,
14
+ } from '../theme/internals.js';
15
+ import {formIdContext, forwardRef} from './internals.js';
16
+
17
+ export const useFormTheme = createComponentTheme('Form');
18
+
19
+ const FORM_ELEMENT = 'form';
20
+
21
+ export type FormProps<T extends ElementType> = PropsWithChildren<
22
+ ComponentProps<typeof useFormTheme> &
23
+ ComponentPropsWithoutRef<T> & {
24
+ as?: T | undefined;
25
+ className?: string;
26
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
27
+ form?: FormMetadata<any, any> | undefined;
28
+ }
29
+ >;
30
+
31
+ export const Form = forwardRef(
32
+ <T extends ElementType = typeof FORM_ELEMENT>(
33
+ {as: Component = FORM_ELEMENT as T, className, form, children, ...rest}: FormProps<T>,
34
+ ref: Ref<HTMLElement>,
35
+ ) => {
36
+ let theme = useFormTheme();
37
+
38
+ if (form) {
39
+ let props = {
40
+ ref,
41
+ id: form.id,
42
+ method: 'post',
43
+ className: theme(null, className),
44
+ onSubmit: form.onSubmit,
45
+ 'data-component': 'form',
46
+ ...rest,
47
+ };
48
+
49
+ return (
50
+ <formIdContext.Provider value={form.id}>
51
+ <FormProvider context={form.context}>
52
+ {createElement(Component, props, children)}
53
+ </FormProvider>
54
+ </formIdContext.Provider>
55
+ );
56
+ }
57
+
58
+ let props = {
59
+ ref,
60
+ method: 'post',
61
+ className: theme(null, className),
62
+ 'data-component': 'form',
63
+ ...rest,
64
+ };
65
+
66
+ return createElement(Component, props, children);
67
+ },
68
+ );
69
+
70
+ export const formTheme: ComponentTheme<typeof useFormTheme> = {
71
+ className: 'flex flex-col gap-y-6',
72
+ };
@@ -0,0 +1,96 @@
1
+ import * as icons16 from '@heroicons/react/16/solid';
2
+ import * as icons20 from '@heroicons/react/20/solid';
3
+ import * as icons24 from '@heroicons/react/24/outline';
4
+ import {
5
+ type ComponentPropsWithoutRef,
6
+ createElement,
7
+ type ElementType,
8
+ type PropsWithChildren,
9
+ type ReactNode,
10
+ type Ref,
11
+ } from 'react';
12
+
13
+ import {
14
+ type ComponentProps,
15
+ type ComponentTheme,
16
+ createComponentTheme,
17
+ } from '../theme/internals.js';
18
+ import {forwardRef} from './internals.js';
19
+
20
+ export const useIconTheme = createComponentTheme('Icon', {
21
+ variants: {
22
+ size: ['small', 'medium', 'large'],
23
+ },
24
+ });
25
+
26
+ const ICON_ELEMENT = 'span';
27
+
28
+ export type IconProps<T extends ElementType> = PropsWithChildren<
29
+ ComponentProps<typeof useIconTheme> &
30
+ ComponentPropsWithoutRef<T> & {
31
+ as?: T | undefined;
32
+ name?: string | undefined;
33
+ className?: string | undefined;
34
+ }
35
+ >;
36
+
37
+ export const Icon = forwardRef(
38
+ <T extends ElementType = typeof ICON_ELEMENT>(
39
+ {
40
+ size = 'medium',
41
+ as: Component = ICON_ELEMENT as T,
42
+ name,
43
+ className,
44
+ children,
45
+ ...rest
46
+ }: IconProps<T>,
47
+ ref: Ref<HTMLElement>,
48
+ ) => {
49
+ let theme = useIconTheme({size});
50
+ let props: Record<string, unknown> = {
51
+ ref,
52
+ className: theme(null, className),
53
+ 'data-component': 'icon',
54
+ ...rest,
55
+ };
56
+ let Child: ElementType | undefined;
57
+ let resolvedName = `${name}Icon`;
58
+
59
+ if (
60
+ size === 'medium' &&
61
+ resolvedName &&
62
+ (icons20[resolvedName as keyof typeof icons20] as unknown)
63
+ ) {
64
+ Child = icons20[resolvedName as keyof typeof icons20] as ElementType;
65
+ }
66
+
67
+ if (
68
+ size === 'small' &&
69
+ resolvedName &&
70
+ (icons16[resolvedName as keyof typeof icons16] as unknown)
71
+ ) {
72
+ Child = icons16[resolvedName as keyof typeof icons16] as ElementType;
73
+ }
74
+
75
+ if (
76
+ size === 'large' &&
77
+ resolvedName &&
78
+ (icons24[resolvedName as keyof typeof icons24] as unknown)
79
+ ) {
80
+ Child = icons24[resolvedName as keyof typeof icons24] as ElementType;
81
+ }
82
+
83
+ return createElement(Component, props, (Child ? <Child /> : children) as ReactNode);
84
+ },
85
+ );
86
+
87
+ export const iconTheme: ComponentTheme<typeof useIconTheme> = {
88
+ className: 'inline-block *:w-full *:h-full data-[icon]:-mx-1',
89
+ variants: {
90
+ size: {
91
+ small: 'size-4',
92
+ medium: 'size-5',
93
+ large: 'size-6',
94
+ },
95
+ },
96
+ };
@@ -0,0 +1,156 @@
1
+ import {getInputProps} from '@conform-to/react';
2
+ import {Input as HeadlessInput} from '@headlessui/react';
3
+ import {
4
+ type ComponentPropsWithoutRef,
5
+ type ComponentType,
6
+ type ElementType,
7
+ type Ref,
8
+ useCallback,
9
+ useImperativeHandle,
10
+ useRef,
11
+ } from 'react';
12
+
13
+ import {
14
+ type ComponentProps,
15
+ type ComponentTheme,
16
+ createComponentTheme,
17
+ } from '../theme/internals.js';
18
+ import {Icon} from './Icon.js';
19
+ import {forwardRef} from './internals.js';
20
+ import {useField} from './useField.js';
21
+ import {useFieldName} from './useFieldName.js';
22
+
23
+ export const useInputTheme = createComponentTheme('Input', {
24
+ variants: {
25
+ disabled: [true, false],
26
+ },
27
+ elements: ['root', 'input', 'icon', 'clearButton'],
28
+ });
29
+
30
+ const INPUT_ELEMENT = 'input';
31
+
32
+ export type InputProps<T extends ElementType> = ComponentProps<typeof useInputTheme> &
33
+ ComponentPropsWithoutRef<T> & {
34
+ as?: T | undefined;
35
+ name?: string | undefined;
36
+ className?: string | undefined;
37
+ icon?: ComponentType<object> | string | undefined;
38
+ showClearButton?: boolean | undefined;
39
+ };
40
+
41
+ export const Input = forwardRef(
42
+ <T extends ElementType = typeof INPUT_ELEMENT>(
43
+ {
44
+ disabled = false,
45
+ as = INPUT_ELEMENT as T,
46
+ name,
47
+ className,
48
+ icon: IconComponent,
49
+ showClearButton = false,
50
+ ...rest
51
+ }: InputProps<T>,
52
+ ref: Ref<HTMLElement>,
53
+ ) => {
54
+ let theme = useInputTheme({disabled});
55
+ let fieldName = useFieldName();
56
+ let field = useField();
57
+ let inputRef = useRef<HTMLInputElement>();
58
+
59
+ useImperativeHandle(ref, () => {
60
+ if (inputRef.current) {
61
+ return inputRef.current;
62
+ }
63
+
64
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- false positive
65
+ return {} as HTMLElement;
66
+ });
67
+
68
+ let handleClear = useCallback(() => {
69
+ if (inputRef.current) {
70
+ inputRef.current.value = '';
71
+ inputRef.current.dispatchEvent(new Event('input', {bubbles: true}));
72
+ }
73
+ }, []);
74
+
75
+ let rootProps: Record<string, unknown> = {
76
+ className: theme.root('relative', className),
77
+ 'data-component': 'input',
78
+ };
79
+ let inputProps: Record<string, unknown> = {
80
+ as,
81
+ ref: inputRef,
82
+ disabled,
83
+ name: field?.name ?? fieldName ?? name,
84
+ className: theme.input(),
85
+ size: 1, // so the input default width without styling is small
86
+ ...rest,
87
+ };
88
+ let iconProps: Record<string, unknown> = {
89
+ className: theme.icon('absolute'),
90
+ };
91
+ let clearButtonProps: Record<string, unknown> = {
92
+ className: theme.clearButton('absolute'),
93
+ };
94
+
95
+ if (IconComponent) {
96
+ rootProps['data-icon'] = '';
97
+ }
98
+
99
+ if (showClearButton) {
100
+ rootProps['data-clear-button'] = '';
101
+ }
102
+
103
+ if (field) {
104
+ let {key, ...restProps} = getInputProps(field, {type: 'text'});
105
+
106
+ inputProps = {...restProps, ...inputProps};
107
+ }
108
+
109
+ return (
110
+ <span {...rootProps}>
111
+ <HeadlessInput {...inputProps} />
112
+ {IconComponent ?
113
+ <span {...iconProps}>
114
+ {typeof IconComponent === 'string' ?
115
+ <Icon name={IconComponent} />
116
+ : <Icon size="large">
117
+ <IconComponent />
118
+ </Icon>
119
+ }
120
+ </span>
121
+ : null}
122
+ {showClearButton ?
123
+ <span {...clearButtonProps} onClick={handleClear}>
124
+ <Icon name="XMark" />
125
+ </span>
126
+ : null}
127
+ </span>
128
+ );
129
+ },
130
+ );
131
+
132
+ export const inputTheme: ComponentTheme<typeof useInputTheme> = {
133
+ classNames: {
134
+ root: 'group flex w-full items-center rounded-2 border-2 border-gray-100 hover:border-gray-200 px-2.5 h-9 bg-white shadow-inner transition-colors',
135
+ input:
136
+ 'p-0 focus-visible:outline-none w-full group-data-[icon]:pl-6 group-data-[clear-button]:pr-4 bg-transparent font-sans text-sm',
137
+ icon: 'size-6 left-[0.3125rem] top-[0.3125rem] text-gray-300',
138
+ clearButton: 'text-gray-500 size-5 right-2 cursor-pointer',
139
+ },
140
+ variants: {
141
+ disabled: {
142
+ true: {
143
+ root: 'border-gray-100 text-gray-200 cursor-not-allowed',
144
+ input: '',
145
+ icon: '',
146
+ clearButton: '',
147
+ },
148
+ false: {
149
+ root: '',
150
+ input: '',
151
+ icon: '',
152
+ clearButton: '',
153
+ },
154
+ },
155
+ },
156
+ };
@@ -0,0 +1,49 @@
1
+ import {Label as HeadlessLabel, type LabelProps as HeadlessLabelProps} from '@headlessui/react';
2
+ import {
3
+ type ComponentPropsWithoutRef,
4
+ type ElementType,
5
+ type PropsWithChildren,
6
+ type Ref,
7
+ } from 'react';
8
+
9
+ import {
10
+ type ComponentProps,
11
+ type ComponentTheme,
12
+ createComponentTheme,
13
+ } from '../theme/internals.js';
14
+ import {filterProps, forwardRef} from './internals.js';
15
+
16
+ export const useLabelTheme = createComponentTheme('Label');
17
+
18
+ const LABEL_ELEMENT = 'label';
19
+
20
+ export type LabelProps<T extends ElementType> = PropsWithChildren<
21
+ ComponentProps<typeof useLabelTheme> &
22
+ ComponentPropsWithoutRef<T> & {
23
+ as?: T | undefined;
24
+ className?: string;
25
+ }
26
+ >;
27
+
28
+ export const Label = forwardRef(
29
+ <T extends ElementType = typeof LABEL_ELEMENT>(
30
+ {as = LABEL_ELEMENT as T, className, children, ...rest}: LabelProps<T>,
31
+ ref: Ref<HTMLElement>,
32
+ ) => {
33
+ let theme = useLabelTheme();
34
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
35
+ let props: HeadlessLabelProps<any> = filterProps({
36
+ as,
37
+ ref,
38
+ className: theme(null, className),
39
+ 'data-component': 'label',
40
+ ...rest,
41
+ });
42
+
43
+ return <HeadlessLabel {...props}>{children}</HeadlessLabel>;
44
+ },
45
+ );
46
+
47
+ export const labelTheme: ComponentTheme<typeof useLabelTheme> = {
48
+ className: 'block cursor-pointer font-sans text-sm font-medium',
49
+ };
@@ -0,0 +1,49 @@
1
+ import {Legend as HeadlessLegend, type LegendProps as HeadlessLegendProps} from '@headlessui/react';
2
+ import {
3
+ type ComponentPropsWithoutRef,
4
+ type ElementType,
5
+ type PropsWithChildren,
6
+ type Ref,
7
+ } from 'react';
8
+
9
+ import {
10
+ type ComponentProps,
11
+ type ComponentTheme,
12
+ createComponentTheme,
13
+ } from '../theme/internals.js';
14
+ import {filterProps, forwardRef} from './internals.js';
15
+
16
+ export const useLegendTheme = createComponentTheme('Legend');
17
+
18
+ const LEGEND_ELEMENT = 'div';
19
+
20
+ export type LegendProps<T extends ElementType> = PropsWithChildren<
21
+ ComponentProps<typeof useLegendTheme> &
22
+ ComponentPropsWithoutRef<T> & {
23
+ as?: T | undefined;
24
+ className?: string | undefined;
25
+ }
26
+ >;
27
+
28
+ export const Legend = forwardRef(
29
+ <T extends ElementType = typeof LEGEND_ELEMENT>(
30
+ {as = LEGEND_ELEMENT as T, className, children, ...rest}: LegendProps<T>,
31
+ ref: Ref<HTMLElement>,
32
+ ) => {
33
+ let theme = useLegendTheme();
34
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
35
+ let props: HeadlessLegendProps<any> = filterProps({
36
+ as,
37
+ ref,
38
+ className: theme(null, className),
39
+ 'data-component': 'legend',
40
+ ...rest,
41
+ });
42
+
43
+ return <HeadlessLegend {...props}>{children}</HeadlessLegend>;
44
+ },
45
+ );
46
+
47
+ export const legendTheme: ComponentTheme<typeof useLegendTheme> = {
48
+ className: 'font-sans font-semibold text-sm',
49
+ };