@hewnui/ui 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +69 -2
  3. package/dist/chart/axes.d.ts +31 -0
  4. package/dist/chart/axes.js +20 -0
  5. package/dist/chart/colors.d.ts +1 -0
  6. package/dist/chart/colors.js +13 -0
  7. package/dist/chart/frame.d.ts +13 -0
  8. package/dist/chart/frame.js +17 -0
  9. package/dist/chart/interaction.d.ts +22 -0
  10. package/dist/chart/interaction.js +22 -0
  11. package/dist/chart/path.d.ts +10 -0
  12. package/dist/chart/path.js +24 -0
  13. package/dist/chart/scales.d.ts +34 -0
  14. package/dist/chart/scales.js +66 -0
  15. package/dist/chart/status.d.ts +3 -0
  16. package/dist/chart/status.js +15 -0
  17. package/dist/chart/types.d.ts +34 -0
  18. package/dist/chart/types.js +6 -0
  19. package/dist/components/area-chart/area-chart.d.ts +17 -0
  20. package/dist/components/area-chart/area-chart.js +54 -0
  21. package/dist/components/area-chart/index.d.ts +1 -0
  22. package/dist/components/area-chart/index.js +1 -0
  23. package/dist/components/badge/badge.d.ts +2 -0
  24. package/dist/components/badge/badge.js +5 -0
  25. package/dist/components/badge/badge.styles.d.ts +8 -0
  26. package/dist/components/badge/badge.styles.js +57 -0
  27. package/dist/components/badge/badge.types.d.ts +11 -0
  28. package/dist/components/badge/badge.types.js +1 -0
  29. package/dist/components/badge/index.d.ts +3 -0
  30. package/dist/components/badge/index.js +2 -0
  31. package/dist/components/bar-chart/bar-chart.d.ts +17 -0
  32. package/dist/components/bar-chart/bar-chart.js +73 -0
  33. package/dist/components/bar-chart/index.d.ts +1 -0
  34. package/dist/components/bar-chart/index.js +1 -0
  35. package/dist/components/breadcrumbs/breadcrumbs.d.ts +3 -0
  36. package/dist/components/breadcrumbs/breadcrumbs.js +13 -0
  37. package/dist/components/breadcrumbs/breadcrumbs.styles.d.ts +5 -0
  38. package/dist/components/breadcrumbs/breadcrumbs.styles.js +10 -0
  39. package/dist/components/breadcrumbs/breadcrumbs.types.d.ts +16 -0
  40. package/dist/components/breadcrumbs/breadcrumbs.types.js +1 -0
  41. package/dist/components/breadcrumbs/index.d.ts +2 -0
  42. package/dist/components/breadcrumbs/index.js +1 -0
  43. package/dist/components/button/button.d.ts +2 -0
  44. package/dist/components/button/button.js +18 -0
  45. package/dist/components/button/button.motion.d.ts +23 -0
  46. package/dist/components/button/button.motion.js +11 -0
  47. package/dist/components/button/button.styles.d.ts +10 -0
  48. package/dist/components/button/button.styles.js +24 -0
  49. package/dist/components/button/button.types.d.ts +11 -0
  50. package/dist/components/button/button.types.js +1 -0
  51. package/dist/components/button/index.d.ts +2 -0
  52. package/dist/components/button/index.js +1 -0
  53. package/dist/components/card/card.d.ts +21 -0
  54. package/dist/components/card/card.js +19 -0
  55. package/dist/components/card/card.styles.d.ts +4 -0
  56. package/dist/components/card/card.styles.js +13 -0
  57. package/dist/components/card/card.types.d.ts +4 -0
  58. package/dist/components/card/card.types.js +1 -0
  59. package/dist/components/card/index.d.ts +2 -0
  60. package/dist/components/card/index.js +1 -0
  61. package/dist/components/checkbox/checkbox.d.ts +2 -0
  62. package/dist/components/checkbox/checkbox.js +17 -0
  63. package/dist/components/checkbox/checkbox.styles.d.ts +3 -0
  64. package/dist/components/checkbox/checkbox.styles.js +6 -0
  65. package/dist/components/checkbox/checkbox.types.d.ts +6 -0
  66. package/dist/components/checkbox/checkbox.types.js +1 -0
  67. package/dist/components/checkbox/index.d.ts +2 -0
  68. package/dist/components/checkbox/index.js +1 -0
  69. package/dist/components/checkbox-group/checkbox-group.d.ts +2 -0
  70. package/dist/components/checkbox-group/checkbox-group.js +8 -0
  71. package/dist/components/checkbox-group/checkbox-group.styles.d.ts +2 -0
  72. package/dist/components/checkbox-group/checkbox-group.styles.js +5 -0
  73. package/dist/components/checkbox-group/checkbox-group.types.d.ts +9 -0
  74. package/dist/components/checkbox-group/checkbox-group.types.js +1 -0
  75. package/dist/components/checkbox-group/index.d.ts +2 -0
  76. package/dist/components/checkbox-group/index.js +1 -0
  77. package/dist/components/color-picker/color-picker.d.ts +2 -0
  78. package/dist/components/color-picker/color-picker.js +27 -0
  79. package/dist/components/color-picker/color-picker.oklch.d.ts +2 -0
  80. package/dist/components/color-picker/color-picker.oklch.js +54 -0
  81. package/dist/components/color-picker/color-picker.panel.d.ts +2 -0
  82. package/dist/components/color-picker/color-picker.panel.js +15 -0
  83. package/dist/components/color-picker/color-picker.styles.d.ts +16 -0
  84. package/dist/components/color-picker/color-picker.styles.js +28 -0
  85. package/dist/components/color-picker/color-picker.types.d.ts +36 -0
  86. package/dist/components/color-picker/color-picker.types.js +1 -0
  87. package/dist/components/color-picker/index.d.ts +4 -0
  88. package/dist/components/color-picker/index.js +3 -0
  89. package/dist/components/combobox/combobox.d.ts +15 -0
  90. package/dist/components/combobox/combobox.js +11 -0
  91. package/dist/components/combobox/index.d.ts +1 -0
  92. package/dist/components/combobox/index.js +1 -0
  93. package/dist/components/command-palette/command-palette-items.d.ts +4 -0
  94. package/dist/components/command-palette/command-palette-items.js +14 -0
  95. package/dist/components/command-palette/command-palette.d.ts +15 -0
  96. package/dist/components/command-palette/command-palette.hotkey.d.ts +8 -0
  97. package/dist/components/command-palette/command-palette.hotkey.js +51 -0
  98. package/dist/components/command-palette/command-palette.js +33 -0
  99. package/dist/components/command-palette/command-palette.styles.d.ts +13 -0
  100. package/dist/components/command-palette/command-palette.styles.js +25 -0
  101. package/dist/components/command-palette/command-palette.types.d.ts +65 -0
  102. package/dist/components/command-palette/command-palette.types.js +1 -0
  103. package/dist/components/command-palette/index.d.ts +14 -0
  104. package/dist/components/command-palette/index.js +13 -0
  105. package/dist/components/data-table/data-table.d.ts +7 -0
  106. package/dist/components/data-table/data-table.js +31 -0
  107. package/dist/components/data-table/index.d.ts +1 -0
  108. package/dist/components/data-table/index.js +1 -0
  109. package/dist/components/date-picker/date-picker.d.ts +7 -0
  110. package/dist/components/date-picker/date-picker.js +8 -0
  111. package/dist/components/date-picker/index.d.ts +1 -0
  112. package/dist/components/date-picker/index.js +1 -0
  113. package/dist/components/date-range-picker/date-range-picker.calendar.d.ts +5 -0
  114. package/dist/components/date-range-picker/date-range-picker.calendar.js +21 -0
  115. package/dist/components/date-range-picker/date-range-picker.d.ts +2 -0
  116. package/dist/components/date-range-picker/date-range-picker.js +9 -0
  117. package/dist/components/date-range-picker/date-range-picker.presets.d.ts +3 -0
  118. package/dist/components/date-range-picker/date-range-picker.presets.js +53 -0
  119. package/dist/components/date-range-picker/date-range-picker.styles.d.ts +11 -0
  120. package/dist/components/date-range-picker/date-range-picker.styles.js +14 -0
  121. package/dist/components/date-range-picker/date-range-picker.types.d.ts +28 -0
  122. package/dist/components/date-range-picker/date-range-picker.types.js +1 -0
  123. package/dist/components/date-range-picker/index.d.ts +2 -0
  124. package/dist/components/date-range-picker/index.js +1 -0
  125. package/dist/components/dialog/dialog.d.ts +18 -0
  126. package/dist/components/dialog/dialog.js +16 -0
  127. package/dist/components/dialog/dialog.styles.d.ts +6 -0
  128. package/dist/components/dialog/dialog.styles.js +9 -0
  129. package/dist/components/dialog/index.d.ts +7 -0
  130. package/dist/components/dialog/index.js +7 -0
  131. package/dist/components/donut-chart/donut-chart.d.ts +17 -0
  132. package/dist/components/donut-chart/donut-chart.js +65 -0
  133. package/dist/components/donut-chart/index.d.ts +1 -0
  134. package/dist/components/donut-chart/index.js +1 -0
  135. package/dist/components/drawer/drawer.d.ts +13 -0
  136. package/dist/components/drawer/drawer.js +14 -0
  137. package/dist/components/drawer/index.d.ts +1 -0
  138. package/dist/components/drawer/index.js +1 -0
  139. package/dist/components/empty/empty.d.ts +7 -0
  140. package/dist/components/empty/empty.js +5 -0
  141. package/dist/components/empty/index.d.ts +1 -0
  142. package/dist/components/empty/index.js +1 -0
  143. package/dist/components/file-upload/file-upload.d.ts +2 -0
  144. package/dist/components/file-upload/file-upload.js +44 -0
  145. package/dist/components/file-upload/file-upload.styles.d.ts +12 -0
  146. package/dist/components/file-upload/file-upload.styles.js +14 -0
  147. package/dist/components/file-upload/file-upload.types.d.ts +16 -0
  148. package/dist/components/file-upload/file-upload.types.js +1 -0
  149. package/dist/components/file-upload/index.d.ts +2 -0
  150. package/dist/components/file-upload/index.js +1 -0
  151. package/dist/components/form/form.d.ts +2 -0
  152. package/dist/components/form/form.js +7 -0
  153. package/dist/components/form/form.styles.d.ts +1 -0
  154. package/dist/components/form/form.styles.js +4 -0
  155. package/dist/components/form/form.types.d.ts +6 -0
  156. package/dist/components/form/form.types.js +1 -0
  157. package/dist/components/form/index.d.ts +2 -0
  158. package/dist/components/form/index.js +1 -0
  159. package/dist/components/input-group/index.d.ts +2 -0
  160. package/dist/components/input-group/index.js +1 -0
  161. package/dist/components/input-group/input-group.d.ts +14 -0
  162. package/dist/components/input-group/input-group.js +24 -0
  163. package/dist/components/input-group/input-group.styles.d.ts +8 -0
  164. package/dist/components/input-group/input-group.styles.js +9 -0
  165. package/dist/components/input-group/input-group.types.d.ts +22 -0
  166. package/dist/components/input-group/input-group.types.js +1 -0
  167. package/dist/components/input-otp/index.d.ts +2 -0
  168. package/dist/components/input-otp/index.js +1 -0
  169. package/dist/components/input-otp/input-otp.d.ts +2 -0
  170. package/dist/components/input-otp/input-otp.js +76 -0
  171. package/dist/components/input-otp/input-otp.styles.d.ts +8 -0
  172. package/dist/components/input-otp/input-otp.styles.js +11 -0
  173. package/dist/components/input-otp/input-otp.types.d.ts +23 -0
  174. package/dist/components/input-otp/input-otp.types.js +1 -0
  175. package/dist/components/line-chart/index.d.ts +1 -0
  176. package/dist/components/line-chart/index.js +1 -0
  177. package/dist/components/line-chart/line-chart.d.ts +17 -0
  178. package/dist/components/line-chart/line-chart.js +53 -0
  179. package/dist/components/link/index.d.ts +2 -0
  180. package/dist/components/link/index.js +1 -0
  181. package/dist/components/link/link.d.ts +2 -0
  182. package/dist/components/link/link.js +7 -0
  183. package/dist/components/link/link.styles.d.ts +5 -0
  184. package/dist/components/link/link.styles.js +9 -0
  185. package/dist/components/link/link.types.d.ts +8 -0
  186. package/dist/components/link/link.types.js +1 -0
  187. package/dist/components/menu/index.d.ts +8 -0
  188. package/dist/components/menu/index.js +8 -0
  189. package/dist/components/menu/menu.d.ts +20 -0
  190. package/dist/components/menu/menu.js +26 -0
  191. package/dist/components/number-field/index.d.ts +2 -0
  192. package/dist/components/number-field/index.js +1 -0
  193. package/dist/components/number-field/number-field.d.ts +2 -0
  194. package/dist/components/number-field/number-field.js +14 -0
  195. package/dist/components/number-field/number-field.styles.d.ts +8 -0
  196. package/dist/components/number-field/number-field.styles.js +7 -0
  197. package/dist/components/number-field/number-field.types.d.ts +14 -0
  198. package/dist/components/number-field/number-field.types.js +1 -0
  199. package/dist/components/pagination/index.d.ts +3 -0
  200. package/dist/components/pagination/index.js +2 -0
  201. package/dist/components/pagination/pagination.d.ts +2 -0
  202. package/dist/components/pagination/pagination.js +49 -0
  203. package/dist/components/pagination/pagination.styles.d.ts +8 -0
  204. package/dist/components/pagination/pagination.styles.js +19 -0
  205. package/dist/components/pagination/pagination.types.d.ts +35 -0
  206. package/dist/components/pagination/pagination.types.js +1 -0
  207. package/dist/components/pagination/pagination.utils.d.ts +6 -0
  208. package/dist/components/pagination/pagination.utils.js +51 -0
  209. package/dist/components/password-field/index.d.ts +2 -0
  210. package/dist/components/password-field/index.js +1 -0
  211. package/dist/components/password-field/password-field.d.ts +2 -0
  212. package/dist/components/password-field/password-field.js +17 -0
  213. package/dist/components/password-field/password-field.styles.d.ts +8 -0
  214. package/dist/components/password-field/password-field.styles.js +7 -0
  215. package/dist/components/password-field/password-field.types.d.ts +16 -0
  216. package/dist/components/password-field/password-field.types.js +1 -0
  217. package/dist/components/popover/index.d.ts +2 -0
  218. package/dist/components/popover/index.js +1 -0
  219. package/dist/components/popover/popover.d.ts +10 -0
  220. package/dist/components/popover/popover.js +16 -0
  221. package/dist/components/popover/popover.styles.d.ts +3 -0
  222. package/dist/components/popover/popover.styles.js +7 -0
  223. package/dist/components/popover/popover.types.d.ts +14 -0
  224. package/dist/components/popover/popover.types.js +1 -0
  225. package/dist/components/progress/index.d.ts +2 -0
  226. package/dist/components/progress/index.js +1 -0
  227. package/dist/components/progress/progress.d.ts +12 -0
  228. package/dist/components/progress/progress.js +26 -0
  229. package/dist/components/radio-group/index.d.ts +2 -0
  230. package/dist/components/radio-group/index.js +1 -0
  231. package/dist/components/radio-group/radio-group.d.ts +3 -0
  232. package/dist/components/radio-group/radio-group.js +21 -0
  233. package/dist/components/radio-group/radio-group.styles.d.ts +5 -0
  234. package/dist/components/radio-group/radio-group.styles.js +14 -0
  235. package/dist/components/radio-group/radio-group.types.d.ts +14 -0
  236. package/dist/components/radio-group/radio-group.types.js +1 -0
  237. package/dist/components/search-field/index.d.ts +2 -0
  238. package/dist/components/search-field/index.js +1 -0
  239. package/dist/components/search-field/search-field.d.ts +2 -0
  240. package/dist/components/search-field/search-field.js +15 -0
  241. package/dist/components/search-field/search-field.styles.d.ts +8 -0
  242. package/dist/components/search-field/search-field.styles.js +7 -0
  243. package/dist/components/search-field/search-field.types.d.ts +15 -0
  244. package/dist/components/search-field/search-field.types.js +1 -0
  245. package/dist/components/select/index.d.ts +5 -0
  246. package/dist/components/select/index.js +5 -0
  247. package/dist/components/select/select.d.ts +16 -0
  248. package/dist/components/select/select.js +11 -0
  249. package/dist/components/select/select.styles.d.ts +5 -0
  250. package/dist/components/select/select.styles.js +13 -0
  251. package/dist/components/skeleton/index.d.ts +1 -0
  252. package/dist/components/skeleton/index.js +1 -0
  253. package/dist/components/skeleton/skeleton.d.ts +3 -0
  254. package/dist/components/skeleton/skeleton.js +5 -0
  255. package/dist/components/slider/index.d.ts +2 -0
  256. package/dist/components/slider/index.js +1 -0
  257. package/dist/components/slider/slider.d.ts +2 -0
  258. package/dist/components/slider/slider.js +8 -0
  259. package/dist/components/slider/slider.styles.d.ts +6 -0
  260. package/dist/components/slider/slider.styles.js +9 -0
  261. package/dist/components/slider/slider.types.d.ts +8 -0
  262. package/dist/components/slider/slider.types.js +1 -0
  263. package/dist/components/sparkline/index.d.ts +1 -0
  264. package/dist/components/sparkline/index.js +1 -0
  265. package/dist/components/sparkline/sparkline.d.ts +11 -0
  266. package/dist/components/sparkline/sparkline.js +34 -0
  267. package/dist/components/spinner/index.d.ts +1 -0
  268. package/dist/components/spinner/index.js +1 -0
  269. package/dist/components/spinner/spinner.d.ts +4 -0
  270. package/dist/components/spinner/spinner.js +6 -0
  271. package/dist/components/stepper/index.d.ts +3 -0
  272. package/dist/components/stepper/index.js +2 -0
  273. package/dist/components/stepper/stepper-step.d.ts +15 -0
  274. package/dist/components/stepper/stepper-step.js +46 -0
  275. package/dist/components/stepper/stepper.d.ts +4 -0
  276. package/dist/components/stepper/stepper.js +17 -0
  277. package/dist/components/stepper/stepper.styles.d.ts +10 -0
  278. package/dist/components/stepper/stepper.styles.js +37 -0
  279. package/dist/components/stepper/stepper.types.d.ts +50 -0
  280. package/dist/components/stepper/stepper.types.js +1 -0
  281. package/dist/components/stepper/use-stepper.d.ts +6 -0
  282. package/dist/components/stepper/use-stepper.js +40 -0
  283. package/dist/components/switch/index.d.ts +2 -0
  284. package/dist/components/switch/index.js +1 -0
  285. package/dist/components/switch/switch.d.ts +2 -0
  286. package/dist/components/switch/switch.js +7 -0
  287. package/dist/components/switch/switch.styles.d.ts +3 -0
  288. package/dist/components/switch/switch.styles.js +6 -0
  289. package/dist/components/switch/switch.types.d.ts +6 -0
  290. package/dist/components/switch/switch.types.js +1 -0
  291. package/dist/components/table/index.d.ts +11 -0
  292. package/dist/components/table/index.js +11 -0
  293. package/dist/components/table/table-sort-glyph.d.ts +3 -0
  294. package/dist/components/table/table-sort-glyph.js +5 -0
  295. package/dist/components/table/table.d.ts +33 -0
  296. package/dist/components/table/table.js +31 -0
  297. package/dist/components/table/table.styles.d.ts +8 -0
  298. package/dist/components/table/table.styles.js +19 -0
  299. package/dist/components/tabs/index.d.ts +7 -0
  300. package/dist/components/tabs/index.js +7 -0
  301. package/dist/components/tabs/tabs.d.ts +20 -0
  302. package/dist/components/tabs/tabs.js +29 -0
  303. package/dist/components/tabs/tabs.styles.d.ts +5 -0
  304. package/dist/components/tabs/tabs.styles.js +30 -0
  305. package/dist/components/tag-field/index.d.ts +2 -0
  306. package/dist/components/tag-field/index.js +1 -0
  307. package/dist/components/tag-field/tag-field-icons.d.ts +2 -0
  308. package/dist/components/tag-field/tag-field-icons.js +7 -0
  309. package/dist/components/tag-field/tag-field-tags.d.ts +7 -0
  310. package/dist/components/tag-field/tag-field-tags.js +19 -0
  311. package/dist/components/tag-field/tag-field.d.ts +6 -0
  312. package/dist/components/tag-field/tag-field.js +46 -0
  313. package/dist/components/tag-field/tag-field.styles.d.ts +14 -0
  314. package/dist/components/tag-field/tag-field.styles.js +42 -0
  315. package/dist/components/tag-field/tag-field.types.d.ts +32 -0
  316. package/dist/components/tag-field/tag-field.types.js +1 -0
  317. package/dist/components/text-area/index.d.ts +2 -0
  318. package/dist/components/text-area/index.js +1 -0
  319. package/dist/components/text-area/text-area.d.ts +2 -0
  320. package/dist/components/text-area/text-area.js +9 -0
  321. package/dist/components/text-area/text-area.styles.d.ts +6 -0
  322. package/dist/components/text-area/text-area.styles.js +5 -0
  323. package/dist/components/text-area/text-area.types.d.ts +16 -0
  324. package/dist/components/text-area/text-area.types.js +1 -0
  325. package/dist/components/text-field/index.d.ts +2 -0
  326. package/dist/components/text-field/index.js +1 -0
  327. package/dist/components/text-field/text-field.d.ts +2 -0
  328. package/dist/components/text-field/text-field.js +8 -0
  329. package/dist/components/text-field/text-field.styles.d.ts +1 -0
  330. package/dist/components/text-field/text-field.styles.js +1 -0
  331. package/dist/components/text-field/text-field.types.d.ts +15 -0
  332. package/dist/components/text-field/text-field.types.js +1 -0
  333. package/dist/components/toast/index.d.ts +2 -0
  334. package/dist/components/toast/index.js +1 -0
  335. package/dist/components/toast/toast-glyph.d.ts +4 -0
  336. package/dist/components/toast/toast-glyph.js +23 -0
  337. package/dist/components/toast/toast-item.d.ts +14 -0
  338. package/dist/components/toast/toast-item.js +21 -0
  339. package/dist/components/toast/toast.d.ts +16 -0
  340. package/dist/components/toast/toast.js +50 -0
  341. package/dist/components/toast/toast.styles.d.ts +13 -0
  342. package/dist/components/toast/toast.styles.js +50 -0
  343. package/dist/components/tooltip/index.d.ts +2 -0
  344. package/dist/components/tooltip/index.js +1 -0
  345. package/dist/components/tooltip/tooltip.d.ts +3 -0
  346. package/dist/components/tooltip/tooltip.js +10 -0
  347. package/dist/components/tooltip/tooltip.styles.d.ts +1 -0
  348. package/dist/components/tooltip/tooltip.styles.js +6 -0
  349. package/dist/components/tooltip/tooltip.types.d.ts +18 -0
  350. package/dist/components/tooltip/tooltip.types.js +1 -0
  351. package/dist/index.d.ts +54 -0
  352. package/dist/index.js +51 -0
  353. package/dist/providers/material-provider.d.ts +12 -0
  354. package/dist/providers/material-provider.js +30 -0
  355. package/dist/providers/motion-provider.d.ts +20 -0
  356. package/dist/providers/motion-provider.js +45 -0
  357. package/dist/providers/radius-provider.d.ts +13 -0
  358. package/dist/providers/radius-provider.js +73 -0
  359. package/dist/providers/theme-provider.d.ts +25 -0
  360. package/dist/providers/theme-provider.js +66 -0
  361. package/dist/styles/field.d.ts +24 -0
  362. package/dist/styles/field.js +36 -0
  363. package/dist/styles/overlays.d.ts +3 -0
  364. package/dist/styles/overlays.js +4 -0
  365. package/dist/utils/cn.d.ts +1 -0
  366. package/dist/utils/cn.js +3 -0
  367. package/package.json +276 -3
@@ -0,0 +1,28 @@
1
+ import type { CalendarDate, DateValue } from "@internationalized/date";
2
+ import type { ReactNode } from "react";
3
+ import type { DateRangePickerProps as AriaDateRangePickerProps } from "react-aria-components";
4
+ /** Inclusive start/end date pair used by React Aria range pickers. */
5
+ export type DateRangeValue<T = CalendarDate> = {
6
+ start: T;
7
+ end: T;
8
+ };
9
+ export type DateRangePresetId = "today" | "last-7-days" | "last-30-days" | "this-month";
10
+ export type DateRangePreset = {
11
+ id: string;
12
+ label: string;
13
+ getRange: () => DateRangeValue<CalendarDate>;
14
+ };
15
+ export type DateRangePickerProps = Omit<AriaDateRangePickerProps<DateValue>, "className" | "children"> & {
16
+ label?: ReactNode;
17
+ description?: ReactNode;
18
+ errorMessage?: ReactNode;
19
+ className?: string;
20
+ /** Show quick-select presets in the popover. Defaults to true. */
21
+ showPresets?: boolean;
22
+ /**
23
+ * Built-in preset ids to show, or custom presets.
24
+ * Defaults to Today, Last 7 days, Last 30 days, This month.
25
+ */
26
+ presets?: DateRangePresetId[] | DateRangePreset[];
27
+ };
28
+ export type { DateValue, CalendarDate };
@@ -0,0 +1,2 @@
1
+ export { DateRangePicker } from "./date-range-picker.js";
2
+ export type { CalendarDate, DateRangePreset, DateRangePresetId, DateRangePickerProps, DateRangeValue, DateValue, } from "./date-range-picker.types.js";
@@ -0,0 +1 @@
1
+ export { DateRangePicker } from "./date-range-picker.js";
@@ -0,0 +1,18 @@
1
+ import type { ReactNode } from "react";
2
+ export declare function DialogTrigger(props: {
3
+ children: ReactNode;
4
+ isOpen?: boolean;
5
+ defaultOpen?: boolean;
6
+ onOpenChange?: (isOpen: boolean) => void;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ export declare function Dialog({ children, className, title, }: {
9
+ children: ReactNode;
10
+ className?: string;
11
+ title: ReactNode;
12
+ }): import("react/jsx-runtime").JSX.Element;
13
+ export declare function DialogBody({ children }: {
14
+ children: ReactNode;
15
+ }): import("react/jsx-runtime").JSX.Element;
16
+ export declare function DialogActions({ children }: {
17
+ children: ReactNode;
18
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Dialog as AriaDialog, DialogTrigger as AriaDialogTrigger, Heading, Modal, ModalOverlay, } from "react-aria-components";
4
+ import { dialogActionsClass, dialogBodyClass, dialogModalClass, dialogOverlayClass, dialogPanelClass, dialogTitleClass, } from "./dialog.styles.js";
5
+ export function DialogTrigger(props) {
6
+ return _jsx(AriaDialogTrigger, { ...props });
7
+ }
8
+ export function Dialog({ children, className, title, }) {
9
+ return (_jsx(ModalOverlay, { className: dialogOverlayClass, isDismissable: true, children: _jsx(Modal, { className: dialogModalClass, children: _jsxs(AriaDialog, { className: dialogPanelClass(className), "data-kp-surface": true, children: [_jsx(Heading, { slot: "title", className: dialogTitleClass, children: title }), children] }) }) }));
10
+ }
11
+ export function DialogBody({ children }) {
12
+ return _jsx("div", { className: dialogBodyClass, children: children });
13
+ }
14
+ export function DialogActions({ children }) {
15
+ return _jsx("div", { className: dialogActionsClass, children: children });
16
+ }
@@ -0,0 +1,6 @@
1
+ export declare const dialogOverlayClass = "fixed inset-0 z-50 bg-[color-mix(in_oklch,var(--kp-foreground)_28%,transparent)]";
2
+ export declare const dialogModalClass = "fixed inset-0 z-50 flex items-center justify-center p-4";
3
+ export declare function dialogPanelClass(className?: string | undefined): string;
4
+ export declare const dialogTitleClass = "text-lg font-semibold tracking-tight text-balance";
5
+ export declare const dialogBodyClass = "mt-2 text-sm text-muted-foreground text-pretty";
6
+ export declare const dialogActionsClass = "mt-6 flex flex-wrap justify-end gap-2";
@@ -0,0 +1,9 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ export const dialogOverlayClass = "fixed inset-0 z-50 bg-[color-mix(in_oklch,var(--kp-foreground)_28%,transparent)]";
3
+ export const dialogModalClass = "fixed inset-0 z-50 flex items-center justify-center p-4";
4
+ export function dialogPanelClass(className) {
5
+ return cn("w-full max-w-md rounded-[var(--kp-radius-panel)] border bg-surface p-5", "shadow-[var(--kp-shadow-surface)] outline-none", className);
6
+ }
7
+ export const dialogTitleClass = "text-lg font-semibold tracking-tight text-balance";
8
+ export const dialogBodyClass = "mt-2 text-sm text-muted-foreground text-pretty";
9
+ export const dialogActionsClass = "mt-6 flex flex-wrap justify-end gap-2";
@@ -0,0 +1,7 @@
1
+ import { Dialog, DialogActions, DialogBody, DialogTrigger } from "./dialog.js";
2
+ export declare const DialogRoot: typeof DialogTrigger & {
3
+ Content: typeof Dialog;
4
+ Body: typeof DialogBody;
5
+ Actions: typeof DialogActions;
6
+ };
7
+ export { Dialog, DialogActions, DialogBody, DialogTrigger, };
@@ -0,0 +1,7 @@
1
+ import { Dialog, DialogActions, DialogBody, DialogTrigger, } from "./dialog.js";
2
+ export const DialogRoot = Object.assign(DialogTrigger, {
3
+ Content: Dialog,
4
+ Body: DialogBody,
5
+ Actions: DialogActions,
6
+ });
7
+ export { Dialog, DialogActions, DialogBody, DialogTrigger, };
@@ -0,0 +1,17 @@
1
+ import type { ReactNode } from "react";
2
+ import { ChartTooltip } from "../../chart/interaction.js";
3
+ import type { ChartStatus, DonutSlice } from "../../chart/types.js";
4
+ export type DonutChartProps = {
5
+ slices: DonutSlice[];
6
+ summary: string;
7
+ className?: string;
8
+ width?: number;
9
+ height?: number;
10
+ status?: ChartStatus;
11
+ children?: ReactNode;
12
+ };
13
+ declare function DonutChartRoot({ slices, summary, className, width, height, status, children, }: DonutChartProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare const DonutChart: typeof DonutChartRoot & {
15
+ Tooltip: typeof ChartTooltip;
16
+ };
17
+ export {};
@@ -0,0 +1,65 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { pie as d3Pie, arc as d3Arc } from "d3-shape";
4
+ import { seriesColor } from "../../chart/colors.js";
5
+ import { ChartFrame } from "../../chart/frame.js";
6
+ import { ChartInteractionProvider, ChartTooltip, useChartInteraction, } from "../../chart/interaction.js";
7
+ import { useMotionMode } from "../../providers/motion-provider.js";
8
+ function resolveDonutStatus(slices, status) {
9
+ if (status)
10
+ return status;
11
+ const total = slices.reduce((sum, slice) => sum + slice.value, 0);
12
+ return total <= 0 ? "empty" : "ready";
13
+ }
14
+ function DonutChartRoot({ slices, summary, className, width = 240, height = 240, status, children, }) {
15
+ const resolved = resolveDonutStatus(slices, status);
16
+ if (resolved !== "ready") {
17
+ return (_jsx(ChartFrame, { className: className, width: width, height: height, summary: summary, status: resolved }));
18
+ }
19
+ return (_jsx(ChartInteractionProvider, { series: slices.map((slice) => ({
20
+ id: slice.id,
21
+ label: slice.label,
22
+ data: [{ x: slice.label, y: slice.value }],
23
+ ...(slice.color !== undefined ? { color: slice.color } : {}),
24
+ })), children: _jsxs("div", { className: "relative", style: { maxWidth: width }, children: [_jsx(DonutChartSvg, { slices: slices, summary: summary, className: className, width: width, height: height }), children] }) }));
25
+ }
26
+ function DonutChartSvg({ slices, summary, className, width, height, }) {
27
+ const { motionEnabled } = useMotionMode();
28
+ const { setHover } = useChartInteraction();
29
+ const cx = width / 2;
30
+ const cy = height / 2;
31
+ const radius = Math.min(cx, cy) - 8;
32
+ const layout = d3Pie()
33
+ .value((slice) => slice.value)
34
+ .sort(null)(slices);
35
+ const arcGen = d3Arc()
36
+ .innerRadius(radius * 0.58)
37
+ .outerRadius(radius)
38
+ .cornerRadius(motionEnabled ? 2 : 0);
39
+ return (_jsx(ChartFrame, { className: className, width: width, height: height, summary: summary, interactive: true, children: _jsx("g", { transform: `translate(${cx} ${cy})`, children: layout.map((item, index) => {
40
+ const color = seriesColor(index, item.data.color);
41
+ const path = arcGen(item);
42
+ if (!path)
43
+ return null;
44
+ const [px, py] = arcGen.centroid(item);
45
+ const point = { x: "Value", y: item.data.value };
46
+ return (_jsx("path", { d: path, fill: color, tabIndex: 0, role: "button", "aria-label": `${item.data.label}: ${item.data.value}`, className: "cursor-pointer outline-none transition-[opacity,filter] duration-[var(--kp-motion-duration)] focus-visible:brightness-110 hover:brightness-110", onFocus: () => setHover({
47
+ seriesId: item.data.id,
48
+ label: item.data.label,
49
+ point,
50
+ color,
51
+ px: cx + px,
52
+ py: cy + py,
53
+ }), onBlur: () => setHover(null), onMouseEnter: () => setHover({
54
+ seriesId: item.data.id,
55
+ label: item.data.label,
56
+ point,
57
+ color,
58
+ px: cx + px,
59
+ py: cy + py,
60
+ }), onMouseLeave: () => setHover(null) }, item.data.id));
61
+ }) }) }));
62
+ }
63
+ export const DonutChart = Object.assign(DonutChartRoot, {
64
+ Tooltip: ChartTooltip,
65
+ });
@@ -0,0 +1 @@
1
+ export { DonutChart, type DonutChartProps } from "./donut-chart.js";
@@ -0,0 +1 @@
1
+ export { DonutChart } from "./donut-chart.js";
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from "react";
2
+ export declare function DrawerTrigger(props: {
3
+ children: ReactNode;
4
+ isOpen?: boolean;
5
+ defaultOpen?: boolean;
6
+ onOpenChange?: (isOpen: boolean) => void;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ export declare function Drawer({ children, className, side, title, }: {
9
+ children: ReactNode;
10
+ className?: string | undefined;
11
+ side?: "left" | "right";
12
+ title: ReactNode;
13
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Dialog as AriaDialog, DialogTrigger as AriaDialogTrigger, Heading, Modal, ModalOverlay, } from "react-aria-components";
4
+ import { Button } from "../button/index.js";
5
+ import { cn } from "../../utils/cn.js";
6
+ export function DrawerTrigger(props) {
7
+ return _jsx(AriaDialogTrigger, { ...props });
8
+ }
9
+ function CloseGlyph() {
10
+ return (_jsx("svg", { viewBox: "0 0 16 16", className: "size-4", "aria-hidden": true, children: _jsx("path", { d: "M4 4l8 8M12 4l-8 8", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round" }) }));
11
+ }
12
+ export function Drawer({ children, className, side = "right", title, }) {
13
+ return (_jsx(ModalOverlay, { isDismissable: true, className: "fixed inset-0 z-50 bg-[color-mix(in_oklch,var(--kp-foreground)_28%,transparent)]", children: _jsx(Modal, { className: cn("fixed inset-y-0 z-50 flex w-full max-w-md outline-none", side === "right" ? "right-0" : "left-0"), children: _jsxs(AriaDialog, { "data-kp-surface": true, className: cn("flex h-full w-full flex-col border p-5 shadow-[var(--kp-shadow-surface)] outline-none", side === "right" ? "border-l" : "border-r", className), children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsx(Heading, { slot: "title", className: "text-lg font-semibold tracking-tight text-balance", children: title }), _jsx(Button, { slot: "close", variant: "ghost", size: "sm", "aria-label": "Close drawer", className: "min-h-10 min-w-10 shrink-0 px-0", children: _jsx(CloseGlyph, {}) })] }), _jsx("div", { className: "mt-4 flex-1 overflow-auto text-sm text-muted-foreground text-pretty", children: children })] }) }) }));
14
+ }
@@ -0,0 +1 @@
1
+ export { Drawer, DrawerTrigger } from "./drawer.js";
@@ -0,0 +1 @@
1
+ export { Drawer, DrawerTrigger } from "./drawer.js";
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from "react";
2
+ export declare function Empty({ title, children, action, className, }: {
3
+ title: ReactNode;
4
+ children?: ReactNode;
5
+ action?: ReactNode;
6
+ className?: string | undefined;
7
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../utils/cn.js";
3
+ export function Empty({ title, children, action, className, }) {
4
+ return (_jsxs("div", { role: "status", className: cn("flex flex-col items-start gap-2 rounded-[var(--kp-radius-lg)] border border-dashed border-border px-4 py-6", "bg-[color-mix(in_oklch,var(--kp-muted)_35%,transparent)]", className), children: [_jsx("p", { className: "text-sm font-medium text-balance text-foreground", children: title }), children ? (_jsx("div", { className: "max-w-sm text-sm leading-relaxed text-muted-foreground text-pretty", children: children })) : null, action ? _jsx("div", { className: "pt-1", children: action }) : null] }));
5
+ }
@@ -0,0 +1 @@
1
+ export { Empty } from "./empty.js";
@@ -0,0 +1 @@
1
+ export { Empty } from "./empty.js";
@@ -0,0 +1,2 @@
1
+ import type { FileUploadProps } from "./file-upload.types.js";
2
+ export declare function FileUpload({ acceptedFileTypes, allowsMultiple, buttonLabel, className, defaultFiles, description, emptyLabel, errorMessage, files, isDisabled, isInvalid, label, onFilesChange, ...props }: FileUploadProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,44 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { Button, DropZone, FileTrigger, Text, } from "react-aria-components";
5
+ import { Button as KpButton } from "../button/index.js";
6
+ import { fieldDescriptionClass, fieldErrorClass, fieldLabelClass, } from "../../styles/field.js";
7
+ import { dropZoneClassName, dropZoneHintClass, dropZoneIconClass, fileListClass, fileNameClass, fileRowClass, fileUploadRootClass, removeFileClass, } from "./file-upload.styles.js";
8
+ function formatSize(bytes) {
9
+ if (bytes < 1024)
10
+ return `${bytes} B`;
11
+ if (bytes < 1024 * 1024)
12
+ return `${(bytes / 1024).toFixed(1)} KB`;
13
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
14
+ }
15
+ function UploadGlyph() {
16
+ return (_jsx("span", { className: dropZoneIconClass, "aria-hidden": true, children: _jsx("svg", { viewBox: "0 0 16 16", className: "size-4", children: _jsx("path", { d: "M8 11.5V3.8M8 3.8 5.2 6.5M8 3.8 10.8 6.5M3 12.5h10", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) }));
17
+ }
18
+ export function FileUpload({ acceptedFileTypes, allowsMultiple = true, buttonLabel = "Browse files", className, defaultFiles = [], description, emptyLabel = "Drop files here, or browse from disk.", errorMessage, files, isDisabled, isInvalid, label, onFilesChange, ...props }) {
19
+ const controlled = files !== undefined;
20
+ const [uncontrolled, setUncontrolled] = useState(defaultFiles);
21
+ const current = controlled ? files : uncontrolled;
22
+ function commit(next) {
23
+ if (!controlled)
24
+ setUncontrolled(next);
25
+ onFilesChange?.(next);
26
+ }
27
+ function merge(incoming) {
28
+ if (!incoming)
29
+ return;
30
+ const list = Array.from(incoming);
31
+ commit(allowsMultiple ? [...current, ...list] : list.slice(0, 1));
32
+ }
33
+ function removeAt(index) {
34
+ commit(current.filter((_, i) => i !== index));
35
+ }
36
+ return (_jsxs("div", { className: fileUploadRootClass(className), children: [label ? _jsx("div", { className: fieldLabelClass, children: label }) : null, _jsx(DropZone, { ...props, "data-kp-surface": true, "data-kp-upload": "zone", ...(isDisabled !== undefined ? { isDisabled } : {}), getDropOperation: (types) => types.has("Files") ? "copy" : "cancel", onDrop: async (event) => {
37
+ const items = await Promise.all(event.items
38
+ .filter((item) => item.kind === "file")
39
+ .map((item) => item.getFile()));
40
+ merge(items);
41
+ }, className: ({ isDropTarget }) => dropZoneClassName({ isDropTarget, isInvalid }), children: ({ isDropTarget }) => (_jsxs(_Fragment, { children: [_jsx(UploadGlyph, {}), _jsx(Text, { slot: "label", className: dropZoneHintClass, children: isDropTarget ? "Release to add files" : emptyLabel }), _jsx(FileTrigger, { ...(acceptedFileTypes !== undefined
42
+ ? { acceptedFileTypes }
43
+ : {}), allowsMultiple: allowsMultiple, onSelect: (selected) => merge(selected), children: _jsx(KpButton, { variant: "secondary", size: "sm", ...(isDisabled !== undefined ? { isDisabled } : {}), children: buttonLabel }) })] })) }), description ? (_jsx("p", { className: fieldDescriptionClass, children: description })) : null, isInvalid && errorMessage ? (_jsx("p", { className: fieldErrorClass, role: "alert", children: errorMessage })) : null, current.length > 0 ? (_jsx("ul", { className: fileListClass, children: current.map((file, index) => (_jsxs("li", { "data-kp-surface": true, "data-kp-upload": "row", className: fileRowClass, children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: fileNameClass, children: file.name }), _jsx("div", { className: "text-xs tabular-nums text-muted-foreground", children: formatSize(file.size) })] }), _jsx(Button, { className: removeFileClass, "aria-label": `Remove ${file.name}`, ...(isDisabled !== undefined ? { isDisabled } : {}), onPress: () => removeAt(index), children: _jsx("svg", { viewBox: "0 0 12 12", className: "size-3.5", "aria-hidden": true, children: _jsx("path", { d: "M2.5 2.5 9.5 9.5M9.5 2.5 2.5 9.5", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round" }) }) })] }, `${file.name}-${file.size}-${index}`))) })) : null] }));
44
+ }
@@ -0,0 +1,12 @@
1
+ export declare function fileUploadRootClass(className?: string | undefined): string;
2
+ export declare function dropZoneClassName({ className, isDropTarget, isInvalid, }?: {
3
+ className?: string | undefined;
4
+ isDropTarget?: boolean | undefined;
5
+ isInvalid?: boolean | undefined;
6
+ }): string;
7
+ export declare const dropZoneHintClass = "max-w-[36ch] text-sm leading-relaxed text-pretty text-muted-foreground";
8
+ export declare const dropZoneIconClass: string;
9
+ export declare const fileListClass = "flex w-full flex-col gap-1.5";
10
+ export declare const fileRowClass: string;
11
+ export declare const fileNameClass = "truncate font-mono text-xs tracking-tight tabular-nums text-foreground";
12
+ export declare const removeFileClass: string;
@@ -0,0 +1,14 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ export function fileUploadRootClass(className) {
3
+ return cn("flex w-full max-w-md flex-col gap-2.5 text-sm text-foreground", className);
4
+ }
5
+ export function dropZoneClassName({ className, isDropTarget, isInvalid, } = {}) {
6
+ return cn("relative flex min-h-40 flex-col items-start justify-center gap-4 overflow-hidden", "rounded-[var(--kp-radius-lg)] border border-dashed p-5", "border-[color-mix(in_oklch,var(--kp-foreground)_20%,transparent)]", "bg-[color-mix(in_oklch,var(--kp-surface)_86%,var(--kp-foreground)_4%)]", "shadow-[var(--kp-shadow-surface),inset_0_1px_0_oklch(1_0_0/38%)]", "outline-none transition-[border-color,background-color,box-shadow,transform]", "duration-[var(--kp-motion-duration)] ease-[var(--kp-motion-ease-standard)]", "data-[focused]:ring-2 data-[focused]:ring-ring/30", "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-45", isDropTarget &&
7
+ cn("scale-[0.985] border-solid border-accent", "bg-[color-mix(in_oklch,var(--kp-accent)_12%,var(--kp-surface))]", "shadow-[inset_0_1px_0_oklch(1_0_0/42%),0_0_0_3px_color-mix(in_oklch,var(--kp-accent)_18%,transparent)]"), isInvalid && "border-danger", className);
8
+ }
9
+ export const dropZoneHintClass = "max-w-[36ch] text-sm leading-relaxed text-pretty text-muted-foreground";
10
+ export const dropZoneIconClass = cn("flex size-10 shrink-0 items-center justify-center rounded-[var(--kp-radius-md)]", "border border-[color-mix(in_oklch,var(--kp-foreground)_14%,transparent)]", "bg-[color-mix(in_oklch,var(--kp-muted)_45%,transparent)]", "text-muted-foreground shadow-[inset_0_1px_0_oklch(1_0_0/30%)]");
11
+ export const fileListClass = "flex w-full flex-col gap-1.5";
12
+ export const fileRowClass = cn("flex min-h-11 items-center justify-between gap-3 rounded-[var(--kp-radius-md)] border px-3", "border-[color-mix(in_oklch,var(--kp-foreground)_14%,transparent)]", "bg-[color-mix(in_oklch,var(--kp-surface)_90%,var(--kp-foreground)_3%)]", "shadow-[var(--kp-shadow-surface),inset_0_1px_0_oklch(1_0_0/32%)]", "transition-[background-color,border-color,transform]", "duration-[var(--kp-motion-duration)] ease-[var(--kp-motion-ease-standard)]");
13
+ export const fileNameClass = "truncate font-mono text-xs tracking-tight tabular-nums text-foreground";
14
+ export const removeFileClass = cn("inline-flex size-10 shrink-0 items-center justify-center rounded-[calc(var(--kp-radius-sm)-0.05rem)]", "text-muted-foreground outline-none", "transition-[background-color,color,transform]", "duration-[var(--kp-motion-duration)] ease-[var(--kp-motion-ease-standard)]", "hover:bg-muted/70 hover:text-foreground", "pressed:scale-[0.96] data-[pressed]:scale-[0.96]", "focus-visible:ring-2 focus-visible:ring-ring/40");
@@ -0,0 +1,16 @@
1
+ import type { ReactNode } from "react";
2
+ import type { DropZoneProps } from "react-aria-components";
3
+ export type FileUploadProps = Omit<DropZoneProps, "className" | "children" | "onDrop"> & {
4
+ label?: ReactNode;
5
+ description?: ReactNode;
6
+ errorMessage?: ReactNode;
7
+ className?: string;
8
+ buttonLabel?: string;
9
+ emptyLabel?: string;
10
+ acceptedFileTypes?: ReadonlyArray<string>;
11
+ allowsMultiple?: boolean;
12
+ files?: File[];
13
+ defaultFiles?: File[];
14
+ onFilesChange?: (files: File[]) => void;
15
+ isInvalid?: boolean;
16
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export { FileUpload } from "./file-upload.js";
2
+ export type { FileUploadProps } from "./file-upload.types.js";
@@ -0,0 +1 @@
1
+ export { FileUpload } from "./file-upload.js";
@@ -0,0 +1,2 @@
1
+ import type { FormProps } from "./form.types.js";
2
+ export declare function Form({ children, className, ...props }: FormProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Form as AriaForm } from "react-aria-components";
4
+ import { formClassName } from "./form.styles.js";
5
+ export function Form({ children, className, ...props }) {
6
+ return (_jsx(AriaForm, { ...props, className: formClassName(className), children: children }));
7
+ }
@@ -0,0 +1 @@
1
+ export declare function formClassName(className?: string | undefined): string;
@@ -0,0 +1,4 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ export function formClassName(className) {
3
+ return cn("flex w-full max-w-sm flex-col gap-4", className);
4
+ }
@@ -0,0 +1,6 @@
1
+ import type { FormProps as AriaFormProps } from "react-aria-components";
2
+ import type { ReactNode } from "react";
3
+ export type FormProps = Omit<AriaFormProps, "className" | "children"> & {
4
+ children: ReactNode;
5
+ className?: string;
6
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export { Form } from "./form.js";
2
+ export type { FormProps } from "./form.types.js";
@@ -0,0 +1 @@
1
+ export { Form } from "./form.js";
@@ -0,0 +1,2 @@
1
+ export { InputGroup } from "./input-group.js";
2
+ export type { InputGroupAffixProps, InputGroupProps, InputGroupSize, InputGroupVariant, } from "./input-group.types.js";
@@ -0,0 +1 @@
1
+ export { InputGroup } from "./input-group.js";
@@ -0,0 +1,14 @@
1
+ import type { InputGroupAffixProps, InputGroupProps } from "./input-group.types.js";
2
+ declare function Prefix({ children, className }: InputGroupAffixProps): import("react/jsx-runtime").JSX.Element;
3
+ declare function Suffix({ children, className }: InputGroupAffixProps): import("react/jsx-runtime").JSX.Element;
4
+ declare function InputGroupInput({ className, ...props }: {
5
+ className?: string;
6
+ placeholder?: string;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ declare function InputGroupRoot({ children, className, description, errorMessage, inputClassName: inputClass, label, placeholder, prefix, size, suffix, variant, ...props }: InputGroupProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare const InputGroup: typeof InputGroupRoot & {
10
+ Prefix: typeof Prefix;
11
+ Suffix: typeof Suffix;
12
+ Input: typeof InputGroupInput;
13
+ };
14
+ export {};
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { FieldError, Group, Input, Label, Text, TextField as AriaTextField, } from "react-aria-components";
4
+ import { cn } from "../../utils/cn.js";
5
+ import { fieldDescriptionClass, fieldErrorClass, fieldLabelClass, fieldRootClass, fieldSurfaceProps, } from "../../styles/field.js";
6
+ import { inputGroupAffixClass, inputGroupClassName, inputGroupInputClass, } from "./input-group.styles.js";
7
+ function Prefix({ children, className }) {
8
+ return _jsx("span", { className: inputGroupAffixClass(className), children: children });
9
+ }
10
+ function Suffix({ children, className }) {
11
+ return _jsx("span", { className: inputGroupAffixClass(className), children: children });
12
+ }
13
+ function InputGroupInput({ className, ...props }) {
14
+ return _jsx(Input, { className: cn(inputGroupInputClass, className), ...props });
15
+ }
16
+ function InputGroupRoot({ children, className, description, errorMessage, inputClassName: inputClass, label, placeholder, prefix, size = "md", suffix, variant = "outline", ...props }) {
17
+ const composed = Boolean(children);
18
+ return (_jsxs(AriaTextField, { ...props, className: cn(fieldRootClass, className), children: [label ? _jsx(Label, { className: fieldLabelClass, children: label }) : null, _jsx(Group, { ...fieldSurfaceProps(variant), className: inputGroupClassName({ size, variant }), children: composed ? (children) : (_jsxs(_Fragment, { children: [prefix ? _jsx(Prefix, { children: prefix }) : null, _jsx(Input, { className: cn(inputGroupInputClass, inputClass), ...(placeholder !== undefined ? { placeholder } : {}) }), suffix ? _jsx(Suffix, { children: suffix }) : null] })) }), description ? (_jsx(Text, { slot: "description", className: fieldDescriptionClass, children: description })) : null, _jsx(FieldError, { className: fieldErrorClass, children: errorMessage })] }));
19
+ }
20
+ export const InputGroup = Object.assign(InputGroupRoot, {
21
+ Prefix,
22
+ Suffix,
23
+ Input: InputGroupInput,
24
+ });
@@ -0,0 +1,8 @@
1
+ import { type FieldSize, type FieldVariant } from "../../styles/field.js";
2
+ export declare function inputGroupClassName({ className, size, variant, }?: {
3
+ className?: string | undefined;
4
+ size?: FieldSize | undefined;
5
+ variant?: FieldVariant | undefined;
6
+ }): string;
7
+ export declare const inputGroupInputClass = "min-w-0 flex-1 bg-transparent p-0 text-foreground outline-none placeholder:text-muted-foreground";
8
+ export declare function inputGroupAffixClass(className?: string | undefined): string;
@@ -0,0 +1,9 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ import { inputSurfaceClassName, } from "../../styles/field.js";
3
+ export function inputGroupClassName({ className, size = "md", variant = "outline", } = {}) {
4
+ return cn(inputSurfaceClassName({ size, variant }), "flex items-center gap-2", className);
5
+ }
6
+ export const inputGroupInputClass = "min-w-0 flex-1 bg-transparent p-0 text-foreground outline-none placeholder:text-muted-foreground";
7
+ export function inputGroupAffixClass(className) {
8
+ return cn("shrink-0 text-xs font-medium text-muted-foreground", className);
9
+ }
@@ -0,0 +1,22 @@
1
+ import type { TextFieldProps as AriaTextFieldProps } from "react-aria-components";
2
+ import type { ReactNode } from "react";
3
+ import type { FieldSize, FieldVariant } from "../../styles/field.js";
4
+ export type InputGroupVariant = FieldVariant;
5
+ export type InputGroupSize = FieldSize;
6
+ export type InputGroupProps = Omit<AriaTextFieldProps, "className" | "children"> & {
7
+ label?: ReactNode;
8
+ description?: ReactNode;
9
+ errorMessage?: ReactNode;
10
+ placeholder?: string;
11
+ className?: string;
12
+ inputClassName?: string;
13
+ variant?: InputGroupVariant;
14
+ size?: InputGroupSize;
15
+ prefix?: ReactNode;
16
+ suffix?: ReactNode;
17
+ children?: ReactNode;
18
+ };
19
+ export type InputGroupAffixProps = {
20
+ children: ReactNode;
21
+ className?: string;
22
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export { InputOtp as InputOTP, InputOtp } from "./input-otp.js";
2
+ export type { InputOtpProps as InputOTPProps, InputOtpProps, InputOtpSize as InputOTPSize, InputOtpSize, InputOtpVariant as InputOTPVariant, InputOtpVariant, } from "./input-otp.types.js";
@@ -0,0 +1 @@
1
+ export { InputOtp as InputOTP, InputOtp } from "./input-otp.js";
@@ -0,0 +1,2 @@
1
+ import type { InputOtpProps } from "./input-otp.types.js";
2
+ export declare function InputOtp({ "aria-label": ariaLabel, autoFocus, className, defaultValue, description, errorMessage, isDisabled, isInvalid, isRequired, label, length, name, onChange, onComplete, size, value, variant, }: InputOtpProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,76 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useId, useRef, useState, } from "react";
4
+ import { cn } from "../../utils/cn.js";
5
+ import { fieldDescriptionClass, fieldErrorClass, fieldLabelClass, fieldSurfaceProps, } from "../../styles/field.js";
6
+ import { inputOtpRootClass, inputOtpSlotClassName, inputOtpSlotsClass, } from "./input-otp.styles.js";
7
+ function normalize(value, length) {
8
+ return value.replace(/\D/g, "").slice(0, length);
9
+ }
10
+ function toDigits(value, length) {
11
+ const chars = normalize(value, length).split("");
12
+ return Array.from({ length }, (_, index) => chars[index] ?? "");
13
+ }
14
+ export function InputOtp({ "aria-label": ariaLabel, autoFocus, className, defaultValue = "", description, errorMessage, isDisabled, isInvalid, isRequired, label, length = 6, name, onChange, onComplete, size = "md", value, variant = "outline", }) {
15
+ const reactId = useId();
16
+ const labelId = `${reactId}-label`;
17
+ const descriptionId = `${reactId}-description`;
18
+ const errorId = `${reactId}-error`;
19
+ const controlled = value !== undefined;
20
+ const [uncontrolled, setUncontrolled] = useState(() => normalize(defaultValue, length));
21
+ const current = controlled ? normalize(value, length) : uncontrolled;
22
+ const digits = toDigits(current, length);
23
+ const refs = useRef([]);
24
+ function commit(next) {
25
+ const normalized = normalize(next, length);
26
+ if (!controlled)
27
+ setUncontrolled(normalized);
28
+ onChange?.(normalized);
29
+ if (normalized.length === length)
30
+ onComplete?.(normalized);
31
+ }
32
+ function focusIndex(index) {
33
+ refs.current[Math.max(0, Math.min(length - 1, index))]?.focus();
34
+ }
35
+ function handleChange(index, raw) {
36
+ const digit = normalize(raw, 1);
37
+ const next = digits.map((item, i) => (i === index ? digit : item)).join("");
38
+ commit(next);
39
+ if (digit)
40
+ focusIndex(index + 1);
41
+ }
42
+ function handleKeyDown(index, event) {
43
+ if (event.key === "Backspace") {
44
+ event.preventDefault();
45
+ if (digits[index]) {
46
+ commit(digits.map((item, i) => (i === index ? "" : item)).join(""));
47
+ }
48
+ else {
49
+ focusIndex(index - 1);
50
+ commit(digits.map((item, i) => (i === index - 1 ? "" : item)).join(""));
51
+ }
52
+ return;
53
+ }
54
+ if (event.key === "ArrowLeft") {
55
+ event.preventDefault();
56
+ focusIndex(index - 1);
57
+ }
58
+ if (event.key === "ArrowRight") {
59
+ event.preventDefault();
60
+ focusIndex(index + 1);
61
+ }
62
+ }
63
+ function handlePaste(event) {
64
+ event.preventDefault();
65
+ commit(event.clipboardData.getData("text"));
66
+ }
67
+ const describedBy = [
68
+ description ? descriptionId : null,
69
+ isInvalid && errorMessage ? errorId : null,
70
+ ]
71
+ .filter(Boolean)
72
+ .join(" ");
73
+ return (_jsxs("div", { role: "group", "aria-labelledby": label ? labelId : undefined, "aria-label": label ? undefined : ariaLabel ?? "One-time code", "aria-describedby": describedBy || undefined, "aria-disabled": isDisabled || undefined, "aria-invalid": isInvalid || undefined, "aria-required": isRequired || undefined, className: inputOtpRootClass(className), children: [label ? (_jsx("span", { id: labelId, className: fieldLabelClass, children: label })) : null, _jsx("div", { className: inputOtpSlotsClass, children: digits.map((digit, index) => (_jsx("input", { ref: (node) => {
74
+ refs.current[index] = node;
75
+ }, ...fieldSurfaceProps(variant), inputMode: "numeric", autoComplete: index === 0 ? "one-time-code" : "off", autoFocus: autoFocus && index === 0, disabled: isDisabled, "aria-label": `Digit ${index + 1} of ${length}`, maxLength: 1, value: digit, className: cn(inputOtpSlotClassName({ size, variant }), isInvalid && "border-danger"), onChange: (event) => handleChange(index, event.target.value), onKeyDown: (event) => handleKeyDown(index, event), onPaste: handlePaste, onFocus: (event) => event.target.select() }, index))) }), name ? _jsx("input", { type: "hidden", name: name, value: current }) : null, description ? (_jsx("p", { id: descriptionId, className: fieldDescriptionClass, children: description })) : null, isInvalid && errorMessage ? (_jsx("p", { id: errorId, className: fieldErrorClass, role: "alert", children: errorMessage })) : null] }));
76
+ }
@@ -0,0 +1,8 @@
1
+ import { type FieldSize, type FieldVariant } from "../../styles/field.js";
2
+ export declare function inputOtpRootClass(className?: string | undefined): string;
3
+ export declare const inputOtpSlotsClass = "flex flex-row flex-nowrap items-center gap-2";
4
+ export declare function inputOtpSlotClassName({ className, size, variant, }?: {
5
+ className?: string | undefined;
6
+ size?: FieldSize | undefined;
7
+ variant?: FieldVariant | undefined;
8
+ }): string;