@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,104 @@
1
+ import {getTextareaProps} from '@conform-to/react';
2
+ import {Textarea as HeadlessTextarea} from '@headlessui/react';
3
+ import {type ComponentPropsWithoutRef, type ComponentType, type ElementType, type Ref} from 'react';
4
+
5
+ import {
6
+ type ComponentProps,
7
+ type ComponentTheme,
8
+ createComponentTheme,
9
+ } from '../theme/internals.js';
10
+ import {forwardRef} from './internals.js';
11
+ import {useField} from './useField.js';
12
+ import {useFieldName} from './useFieldName.js';
13
+
14
+ export const useTextareaTheme = createComponentTheme('Textarea', {
15
+ variants: {
16
+ disabled: [true, false],
17
+ },
18
+ elements: ['root', 'textarea', 'icon'],
19
+ });
20
+
21
+ const TEXTAREA_ELEMENT = 'textarea';
22
+
23
+ export type TextareaProps<T extends ElementType> = ComponentProps<typeof useTextareaTheme> &
24
+ ComponentPropsWithoutRef<T> & {
25
+ as?: T | undefined;
26
+ name?: string | undefined;
27
+ className?: string | undefined;
28
+ icon?: ComponentType<object> | undefined;
29
+ };
30
+
31
+ export const Textarea = forwardRef(
32
+ <T extends ElementType = typeof TEXTAREA_ELEMENT>(
33
+ {
34
+ disabled = false,
35
+ as = TEXTAREA_ELEMENT as T,
36
+ name,
37
+ className,
38
+ icon: Icon,
39
+ ...rest
40
+ }: TextareaProps<T>,
41
+ ref: Ref<HTMLElement>,
42
+ ) => {
43
+ let theme = useTextareaTheme({disabled});
44
+ let fieldName = useFieldName();
45
+ let field = useField();
46
+
47
+ let rootProps: Record<string, unknown> = {
48
+ className: theme.root('relative', className),
49
+ 'data-component': 'textarea',
50
+ };
51
+ let textareaProps: Record<string, unknown> = {
52
+ ref,
53
+ disabled,
54
+ name: field?.name ?? fieldName ?? name,
55
+ className: theme.textarea(null, className),
56
+ ...rest,
57
+ };
58
+ let iconProps: Record<string, unknown> = {
59
+ className: theme.icon('absolute'),
60
+ };
61
+
62
+ if (Icon) {
63
+ rootProps['data-icon'] = '';
64
+ }
65
+
66
+ if (field) {
67
+ let {key, ...restProps} = getTextareaProps(field);
68
+
69
+ textareaProps = {...restProps, ...textareaProps};
70
+ }
71
+
72
+ return (
73
+ <span {...rootProps}>
74
+ <HeadlessTextarea {...textareaProps} />
75
+ {Icon ?
76
+ <Icon {...iconProps} />
77
+ : null}
78
+ </span>
79
+ );
80
+ },
81
+ );
82
+
83
+ export const textareaTheme: ComponentTheme<typeof useTextareaTheme> = {
84
+ classNames: {
85
+ root: 'group flex w-full items-center rounded border-2 border-gray-100 hover:border-gray-200 py-2 px-2.5 min-h-19 bg-white shadow-inner transition-colors',
86
+ textarea:
87
+ 'min-h-15 p-0 focus-visible:outline-none w-full group-data-[icon]:pl-6 bg-transparent font-sans text-sm',
88
+ icon: 'size-6 left-[0.3125rem] top-[0.3125rem] text-gray-300',
89
+ },
90
+ variants: {
91
+ disabled: {
92
+ true: {
93
+ root: 'border-gray-100 text-gray-200 cursor-not-allowed',
94
+ textarea: '',
95
+ icon: '',
96
+ },
97
+ false: {
98
+ root: '',
99
+ textarea: '',
100
+ icon: '',
101
+ },
102
+ },
103
+ },
104
+ };
@@ -0,0 +1,602 @@
1
+ // TODO: fix somehow
2
+ /* eslint-disable complexity -- TODO */
3
+ import {useSortable} from '@dnd-kit/sortable';
4
+ import {CSS} from '@dnd-kit/utilities';
5
+ import {type Column, flexRender, type Header, type Table} from '@tanstack/react-table';
6
+ import {
7
+ type ChangeEvent,
8
+ type CSSProperties,
9
+ useCallback,
10
+ useDeferredValue,
11
+ useEffect,
12
+ useMemo,
13
+ useState,
14
+ } from 'react';
15
+
16
+ import {Button} from '../Button.js';
17
+ import {Checkbox} from '../Checkbox.js';
18
+ import {CheckboxField} from '../CheckboxField.js';
19
+ import {Combobox} from '../Combobox.js';
20
+ import {type DataTableProps} from '../DataTable.js';
21
+ import {Field} from '../Field.js';
22
+ import {Form} from '../Form.js';
23
+ import {Icon} from '../Icon.js';
24
+ import {Input} from '../Input.js';
25
+ import {Label} from '../Label.js';
26
+ import {Listbox} from '../Listbox.js';
27
+ import {Popover} from '../Popover.js';
28
+ import {PopoverButton} from '../PopoverButton.js';
29
+ import {PopoverPanel} from '../PopoverPanel.js';
30
+ import {TableHeader} from '../TableHeader.js';
31
+ import {getCommonPinningClasses} from './internals/getCommonPinningClasses.js';
32
+ import {getCommonPinningStyles} from './internals/getCommonPinningStyles.js';
33
+
34
+ type DataTableHeaderProps = {
35
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
36
+ header: Header<any, any>;
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
38
+ table: Table<any>;
39
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
40
+ sorting: DataTableProps<any, any>['sorting'];
41
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
42
+ onSorting: DataTableProps<any, any>['onSorting'];
43
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
44
+ filters: DataTableProps<any, any>['filters'];
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
46
+ onFiltering: DataTableProps<any, any>['onFiltering'];
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
48
+ faceting: DataTableProps<any, any>['faceting'];
49
+ };
50
+
51
+ export function DataTableHeader({
52
+ header,
53
+ table,
54
+ sorting: controlledSorting,
55
+ onSorting,
56
+ filters: controlledFilters,
57
+ onFiltering,
58
+ faceting,
59
+ }: DataTableHeaderProps) {
60
+ let {attributes, isDragging, listeners, setNodeRef, transform} = useSortable({
61
+ id: header.column.id,
62
+ });
63
+
64
+ let handleSortClick = useCallback(() => {
65
+ if (onSorting) {
66
+ if (
67
+ controlledSorting === false ||
68
+ controlledSorting === undefined ||
69
+ controlledSorting.column !== header.column.id
70
+ ) {
71
+ onSorting({
72
+ column: header.column.id,
73
+ direction: 'ascending',
74
+ });
75
+ } else if (
76
+ controlledSorting.column === header.column.id &&
77
+ controlledSorting.direction === 'ascending'
78
+ ) {
79
+ onSorting({
80
+ column: header.column.id,
81
+ direction: 'descending',
82
+ });
83
+ } else if (
84
+ controlledSorting.column === header.column.id &&
85
+ controlledSorting.direction === 'descending'
86
+ ) {
87
+ onSorting(false);
88
+ }
89
+ }
90
+ }, [controlledSorting, onSorting, header.column.id]);
91
+
92
+ let handleWidthReset = useCallback(() => {
93
+ header.column.resetSize();
94
+ }, [header.column]);
95
+
96
+ let style: CSSProperties = {
97
+ transform: CSS.Translate.toString(transform),
98
+ transition: 'width transform 0.2s ease-in-out',
99
+ zIndex: isDragging ? 20 : undefined,
100
+ ...getCommonPinningStyles(header.column),
101
+ };
102
+
103
+ let isSorted = header.column.getIsSorted();
104
+
105
+ let contentElement = null;
106
+
107
+ if (!header.isPlaceholder) {
108
+ contentElement = flexRender(header.column.columnDef.header, header.getContext());
109
+ }
110
+
111
+ let sortElement = null;
112
+
113
+ if (onSorting) {
114
+ if (
115
+ controlledSorting === false ||
116
+ controlledSorting === undefined ||
117
+ controlledSorting.column !== header.column.id
118
+ ) {
119
+ sortElement = <Icon name="ArrowsUpDown" size="small" className="text-gray-200 select-none" />;
120
+ } else if (
121
+ controlledSorting.direction === 'ascending' &&
122
+ controlledSorting.column === header.column.id
123
+ ) {
124
+ sortElement = <Icon name="ArrowUp" size="small" className="text-gray-950 select-none" />;
125
+ } else if (
126
+ controlledSorting.direction === 'descending' &&
127
+ controlledSorting.column === header.column.id
128
+ ) {
129
+ sortElement = <Icon name="ArrowDown" size="small" className="text-gray-950 select-none" />;
130
+ }
131
+ } else {
132
+ if (!header.isPlaceholder && isSorted === false) {
133
+ sortElement = <Icon name="ArrowsUpDown" size="small" className="text-gray-200 select-none" />;
134
+ }
135
+
136
+ if (!header.isPlaceholder && isSorted === 'asc') {
137
+ sortElement = <Icon name="ArrowUp" size="small" className="text-gray-950 select-none" />;
138
+ }
139
+
140
+ if (!header.isPlaceholder && isSorted === 'desc') {
141
+ sortElement = <Icon name="ArrowDown" size="small" className="text-gray-950 select-none" />;
142
+ }
143
+ }
144
+
145
+ let title: string | undefined;
146
+
147
+ if (onSorting) {
148
+ if (controlledSorting === false || controlledSorting === undefined) {
149
+ title = 'Sort ascending';
150
+ } else if (
151
+ controlledSorting.direction === 'ascending' &&
152
+ controlledSorting.column === header.column.id
153
+ ) {
154
+ title = 'Sort descending';
155
+ } else if (
156
+ controlledSorting.direction === 'descending' &&
157
+ controlledSorting.column === header.column.id
158
+ ) {
159
+ title = 'Clear sort';
160
+ }
161
+ } else if (header.column.getCanSort()) {
162
+ if (header.column.getNextSortingOrder() === 'asc') {
163
+ title = 'Sort ascending';
164
+ } else if (header.column.getNextSortingOrder() === 'desc') {
165
+ title = 'Sort descending';
166
+ } else {
167
+ title = 'Clear sort';
168
+ }
169
+ }
170
+
171
+ return (
172
+ <TableHeader
173
+ ref={setNodeRef}
174
+ colSpan={header.colSpan}
175
+ className={getCommonPinningClasses(header.column)}
176
+ style={style}
177
+ >
178
+ <span className="w-full overflow-hidden">
179
+ <span className="flex justify-between items-center gap-x-1">
180
+ {header.column.getCanSort() ?
181
+ <Button
182
+ variant="text"
183
+ size="small"
184
+ className="inline-flex mr-auto cursor-move"
185
+ title={title}
186
+ onClick={onSorting ? handleSortClick : header.column.getToggleSortingHandler()}
187
+ {...attributes}
188
+ {...listeners}
189
+ >
190
+ {sortElement}
191
+ {contentElement}
192
+ </Button>
193
+ : null}
194
+ <Popover>
195
+ <PopoverButton>
196
+ <Button variant="text" size="small" aria-label="Settings">
197
+ <Icon size="small" name="Cog6Tooth" />
198
+ </Button>
199
+ </PopoverButton>
200
+ <PopoverPanel anchor="right start" className="flex flex-col gap-y-2">
201
+ <Form>
202
+ {header.column.getCanPin() ?
203
+ <div className="flex flex-col gap-y-2">
204
+ <p className="text-sm">Pin column</p>
205
+
206
+ <Field>
207
+ <div className="flex gap-x-2">
208
+ {header.column.getIsPinned() === 'left' ? null : (
209
+ <Button
210
+ variant="outline"
211
+ aria-label="Pin to left"
212
+ onClick={() => {
213
+ header.column.pin('left');
214
+ }}
215
+ >
216
+ <Icon size="large" name="ArrowLeftEndOnRectangle" />
217
+ </Button>
218
+ )}
219
+ {header.column.getIsPinned() ?
220
+ <Button
221
+ variant="outline"
222
+ aria-label="Unpin"
223
+ onClick={() => {
224
+ header.column.pin(false);
225
+ }}
226
+ >
227
+ <Icon size="large" name="XMark" />
228
+ </Button>
229
+ : null}
230
+ {header.column.getIsPinned() === 'right' ? null : (
231
+ <Button
232
+ variant="outline"
233
+ aria-label="Pin to right"
234
+ onClick={() => {
235
+ header.column.pin('right');
236
+ }}
237
+ >
238
+ <Icon size="large" name="ArrowRightEndOnRectangle" />
239
+ </Button>
240
+ )}
241
+ </div>
242
+ </Field>
243
+ </div>
244
+ : null}
245
+
246
+ {header.column.getCanFilter() ?
247
+ <div className="flex flex-col gap-y-2">
248
+ <p className="text-sm">Filter</p>
249
+
250
+ <Field>
251
+ <DataTableHeaderFilter
252
+ column={header.column}
253
+ filters={controlledFilters}
254
+ onFiltering={onFiltering}
255
+ faceting={faceting}
256
+ />
257
+ </Field>
258
+ </div>
259
+ : null}
260
+
261
+ <div className="flex flex-col gap-y-2">
262
+ <p className="text-sm">Visible columns</p>
263
+
264
+ {table.getAllLeafColumns().map((column) => (
265
+ <DataTableHeaderColumnCheckbox key={column.id} column={column} table={table} />
266
+ ))}
267
+ </div>
268
+ </Form>
269
+ </PopoverPanel>
270
+ </Popover>
271
+ <Button
272
+ variant="invisible"
273
+ size="small"
274
+ aria-label="Resize"
275
+ className="cursor-col-resize select-none"
276
+ onDoubleClick={handleWidthReset}
277
+ onMouseDown={header.getResizeHandler()}
278
+ onTouchStart={header.getResizeHandler()}
279
+ >
280
+ <Icon size="small" name="ArrowsRightLeft" />
281
+ </Button>
282
+ </span>
283
+ </span>
284
+ </TableHeader>
285
+ );
286
+ }
287
+
288
+ type DataTableHeaderColumnCheckboxProps = {
289
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
290
+ column: Column<any>;
291
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
292
+ table: Table<any>;
293
+ };
294
+
295
+ function DataTableHeaderColumnCheckbox({column, table}: DataTableHeaderColumnCheckboxProps) {
296
+ let handleChange = useCallback(
297
+ (checked: boolean) => {
298
+ if (!checked && table.getFlatHeaders().length >= 2) {
299
+ column.toggleVisibility(checked);
300
+ } else if (checked) {
301
+ column.toggleVisibility(checked);
302
+ }
303
+ },
304
+ [column, table],
305
+ );
306
+
307
+ return (
308
+ <CheckboxField key={column.id}>
309
+ <Checkbox
310
+ checked={column.getIsVisible()}
311
+ disabled={table.getFlatHeaders().length <= 1 && column.getIsVisible()}
312
+ onChange={handleChange}
313
+ />
314
+ <Label>
315
+ {flexRender(column.columnDef.header, {
316
+ table,
317
+ column,
318
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/consistent-type-assertions -- needed
319
+ header: {column} as Header<any, any>,
320
+ })}
321
+ </Label>
322
+ </CheckboxField>
323
+ );
324
+ }
325
+
326
+ function addFilter(
327
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
328
+ filters: DataTableProps<any, any>['filters'],
329
+ column: string,
330
+ newFilter: unknown,
331
+ ) {
332
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
333
+ let newFilters: DataTableProps<any, any>['filters'] = [];
334
+
335
+ if (filters) {
336
+ let wasUpdated = false;
337
+
338
+ for (let filter of filters) {
339
+ if (filter.column === column) {
340
+ newFilters.push({
341
+ column,
342
+ filter: newFilter as string | [number, number],
343
+ });
344
+
345
+ wasUpdated = true;
346
+ } else {
347
+ newFilters.push(filter);
348
+ }
349
+ }
350
+
351
+ if (!wasUpdated) {
352
+ newFilters.push({
353
+ column,
354
+ filter: newFilter as string | [number, number],
355
+ });
356
+ }
357
+ } else {
358
+ newFilters.push({
359
+ column,
360
+ filter: newFilter as string | [number, number],
361
+ });
362
+ }
363
+
364
+ return newFilters;
365
+ }
366
+
367
+ function removeFilter(
368
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
369
+ filters: DataTableProps<any, any>['filters'],
370
+ column: string,
371
+ ) {
372
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
373
+ let newFilters: DataTableProps<any, any>['filters'] = [];
374
+
375
+ if (filters) {
376
+ for (let filter of filters) {
377
+ if (filter.column !== column) {
378
+ newFilters.push(filter);
379
+ }
380
+ }
381
+ } else {
382
+ return false;
383
+ }
384
+
385
+ if (!newFilters.length) {
386
+ return false;
387
+ }
388
+
389
+ return newFilters;
390
+ }
391
+
392
+ type DataTableHeaderFilterProps = {
393
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
394
+ column: Column<any>;
395
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
396
+ filters: DataTableProps<any, any>['filters'];
397
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
398
+ onFiltering: DataTableProps<any, any>['onFiltering'];
399
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed
400
+ faceting: DataTableProps<any, any>['faceting'];
401
+ };
402
+
403
+ function DataTableHeaderFilter({
404
+ column,
405
+ filters: controlledFilters,
406
+ onFiltering,
407
+ faceting,
408
+ }: DataTableHeaderFilterProps) {
409
+ let {filterVariant} = column.columnDef.meta ?? {};
410
+
411
+ let filter =
412
+ onFiltering ?
413
+ controlledFilters ? controlledFilters.find((filter) => filter.column === column.id)?.filter
414
+ : undefined
415
+ : column.getFilterValue();
416
+
417
+ let currentMin =
418
+ filterVariant === 'range' ?
419
+ (filter as [number?, number?] | undefined)?.[0] ?? undefined
420
+ : undefined;
421
+ let currentMax =
422
+ filterVariant === 'range' ?
423
+ (filter as [number?, number?] | undefined)?.[1] ?? undefined
424
+ : undefined;
425
+
426
+ let [min, setMin] = useState(currentMin);
427
+ let [max, setMax] = useState(currentMax);
428
+
429
+ let deferredMin = useDeferredValue(min);
430
+ let deferredMax = useDeferredValue(max);
431
+
432
+ useEffect(() => {
433
+ if (currentMin === deferredMin && currentMax === deferredMax) {
434
+ return;
435
+ }
436
+
437
+ if (!deferredMin && !deferredMax) {
438
+ if (onFiltering) {
439
+ onFiltering(removeFilter(controlledFilters, column.id));
440
+ } else {
441
+ column.setFilterValue(undefined);
442
+ }
443
+ } else if (onFiltering) {
444
+ onFiltering(addFilter(controlledFilters, column.id, [deferredMin, deferredMax]));
445
+ } else {
446
+ column.setFilterValue([deferredMin, deferredMax]);
447
+ }
448
+ }, [deferredMin, deferredMax, column, onFiltering, controlledFilters, currentMin, currentMax]);
449
+
450
+ let handleResetClick = useCallback(() => {
451
+ setMin(undefined);
452
+ setMax(undefined);
453
+
454
+ if (onFiltering) {
455
+ onFiltering(removeFilter(controlledFilters, column.id));
456
+ } else {
457
+ column.setFilterValue(undefined);
458
+ }
459
+ }, [column, controlledFilters, onFiltering]);
460
+
461
+ let handleMinRangeChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {
462
+ setMin(event.target.value ? Number(event.target.value) : undefined);
463
+ // if (onFiltering) {
464
+ // onFiltering(
465
+ // addFilter(controlledFilters, column.id, [
466
+ // event.target.value,
467
+ // (filter as [number, number] | undefined)?.[1],
468
+ // ]),
469
+ // );
470
+ // } else {
471
+ // column.setFilterValue((old: [number, number] | undefined) => [
472
+ // event.target.value,
473
+ // old?.[1],
474
+ // ]);
475
+ // }
476
+ }, []);
477
+
478
+ let handleMaxRangeChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {
479
+ setMax(event.target.value ? Number(event.target.value) : undefined);
480
+ // if (onFiltering) {
481
+ // onFiltering(
482
+ // addFilter(controlledFilters, column.id, [
483
+ // (filter as [number, number] | undefined)?.[0],
484
+ // event.target.value,
485
+ // ]),
486
+ // );
487
+ // } else {
488
+ // column.setFilterValue((old: [number, number] | undefined) => [
489
+ // old?.[0],
490
+ // event.target.value,
491
+ // ]);
492
+ // }
493
+ }, []);
494
+
495
+ let handleSelectChange = useCallback(
496
+ (value: string) => {
497
+ if (onFiltering) {
498
+ onFiltering(addFilter(controlledFilters, column.id, value));
499
+ } else {
500
+ column.setFilterValue(value);
501
+ }
502
+ },
503
+ [column, controlledFilters, onFiltering],
504
+ );
505
+
506
+ let handleTextChange = useCallback(
507
+ (value: string | undefined) => {
508
+ if (onFiltering) {
509
+ onFiltering(addFilter(controlledFilters, column.id, value));
510
+ } else {
511
+ column.setFilterValue(value);
512
+ }
513
+ },
514
+ [column, controlledFilters, onFiltering],
515
+ );
516
+
517
+ let facetingValues = useMemo(() => {
518
+ if (onFiltering) {
519
+ return faceting?.[column.id]?.values ?? [];
520
+ }
521
+
522
+ if (filterVariant === 'range') {
523
+ return [];
524
+ }
525
+
526
+ return [...column.getFacetedUniqueValues().keys()].sort().slice(0, 5000) as unknown[];
527
+ }, [column, faceting, filterVariant, onFiltering]);
528
+
529
+ let facetingMin =
530
+ onFiltering ?
531
+ faceting?.[column.id]?.min ?? null
532
+ : Number(column.getFacetedMinMaxValues()?.[0] ?? null);
533
+ let facetingMax =
534
+ onFiltering ?
535
+ faceting?.[column.id]?.max ?? null
536
+ : Number(column.getFacetedMinMaxValues()?.[1] ?? null);
537
+
538
+ if (filterVariant === 'range') {
539
+ return (
540
+ <div>
541
+ <div className="flex space-x-2">
542
+ <Input
543
+ type="number"
544
+ min={String(facetingMin ?? '')}
545
+ max={String(facetingMax ?? '')}
546
+ // value={(filter as [number?, number?] | undefined)?.[0] ?? ''}
547
+ value={min ?? ''}
548
+ placeholder={`Min ${facetingMin === null ? '' : `(${facetingMin})`}`}
549
+ onChange={handleMinRangeChange}
550
+ />
551
+ <Input
552
+ type="number"
553
+ min={String(facetingMin ?? '')}
554
+ max={String(facetingMax ?? '')}
555
+ // value={(filter as [number?, number?] | undefined)?.[1] ?? ''}
556
+ value={max ?? ''}
557
+ placeholder={`Max ${facetingMax === null ? '' : `(${facetingMax})`}`}
558
+ onChange={handleMaxRangeChange}
559
+ />
560
+ <Button variant="outline" aria-label="Cancel" onClick={handleResetClick}>
561
+ <Icon size="large" name="XMark" />
562
+ </Button>
563
+ </div>
564
+ </div>
565
+ );
566
+ }
567
+
568
+ if (filterVariant === 'select') {
569
+ return (
570
+ <div className="flex gap-x-2">
571
+ <Listbox
572
+ value={filter as string}
573
+ items={(facetingValues as string[]).map((value: string) => ({
574
+ value,
575
+ label: `${value as unknown}`,
576
+ }))}
577
+ onChange={handleSelectChange}
578
+ />
579
+ <Button variant="outline" aria-label="Cancel" onClick={handleResetClick}>
580
+ <Icon size="large" name="XMark" />
581
+ </Button>
582
+ </div>
583
+ );
584
+ }
585
+
586
+ return (
587
+ <div className="flex gap-x-2">
588
+ <Combobox
589
+ customValue
590
+ value={(filter ?? '') as string}
591
+ items={(facetingValues as string[]).map((value: string) => ({
592
+ value,
593
+ label: `${value as unknown}`,
594
+ }))}
595
+ onChange={handleTextChange}
596
+ />
597
+ <Button variant="outline" aria-label="Cancel" onClick={handleResetClick}>
598
+ <Icon size="large" name="XMark" />
599
+ </Button>
600
+ </div>
601
+ );
602
+ }