@nofinite/nui 1.1.1 → 2.0.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 (405) hide show
  1. package/README.md +61 -48
  2. package/dist/components/accordion/Accordion.cjs +1 -1
  3. package/dist/components/accordion/Accordion.cjs.map +1 -1
  4. package/dist/components/accordion/Accordion.js +64 -43
  5. package/dist/components/accordion/Accordion.js.map +1 -1
  6. package/dist/components/alert/Alert.cjs +1 -1
  7. package/dist/components/alert/Alert.cjs.map +1 -1
  8. package/dist/components/alert/Alert.js +39 -25
  9. package/dist/components/alert/Alert.js.map +1 -1
  10. package/dist/components/avatar/Avatar.cjs +1 -1
  11. package/dist/components/avatar/Avatar.cjs.map +1 -1
  12. package/dist/components/avatar/Avatar.js +58 -44
  13. package/dist/components/avatar/Avatar.js.map +1 -1
  14. package/dist/components/avatar/AvatarGroup.cjs +1 -1
  15. package/dist/components/avatar/AvatarGroup.cjs.map +1 -1
  16. package/dist/components/avatar/AvatarGroup.js +34 -25
  17. package/dist/components/avatar/AvatarGroup.js.map +1 -1
  18. package/dist/components/badge/Badge.cjs +1 -1
  19. package/dist/components/badge/Badge.cjs.map +1 -1
  20. package/dist/components/badge/Badge.js +43 -68
  21. package/dist/components/badge/Badge.js.map +1 -1
  22. package/dist/components/badge/BadgeGroup.cjs +1 -1
  23. package/dist/components/badge/BadgeGroup.cjs.map +1 -1
  24. package/dist/components/badge/BadgeGroup.js +20 -10
  25. package/dist/components/badge/BadgeGroup.js.map +1 -1
  26. package/dist/components/breadcrumbs/Breadcrumbs.cjs +1 -1
  27. package/dist/components/breadcrumbs/Breadcrumbs.cjs.map +1 -1
  28. package/dist/components/breadcrumbs/Breadcrumbs.js +59 -39
  29. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -1
  30. package/dist/components/button/Button.cjs +1 -1
  31. package/dist/components/button/Button.cjs.map +1 -1
  32. package/dist/components/button/Button.js +52 -17
  33. package/dist/components/button/Button.js.map +1 -1
  34. package/dist/components/card/Card.cjs +1 -1
  35. package/dist/components/card/Card.cjs.map +1 -1
  36. package/dist/components/card/Card.js +44 -41
  37. package/dist/components/card/Card.js.map +1 -1
  38. package/dist/components/checkbox/Checkbox.cjs +1 -1
  39. package/dist/components/checkbox/Checkbox.cjs.map +1 -1
  40. package/dist/components/checkbox/Checkbox.js +59 -40
  41. package/dist/components/checkbox/Checkbox.js.map +1 -1
  42. package/dist/components/chip/Chip.cjs +1 -1
  43. package/dist/components/chip/Chip.cjs.map +1 -1
  44. package/dist/components/chip/Chip.js +67 -47
  45. package/dist/components/chip/Chip.js.map +1 -1
  46. package/dist/components/combobox/Combobox.cjs +1 -1
  47. package/dist/components/combobox/Combobox.cjs.map +1 -1
  48. package/dist/components/combobox/Combobox.js +123 -108
  49. package/dist/components/combobox/Combobox.js.map +1 -1
  50. package/dist/components/commandpalette/CommandPalette.cjs +1 -1
  51. package/dist/components/commandpalette/CommandPalette.cjs.map +1 -1
  52. package/dist/components/commandpalette/CommandPalette.js +96 -73
  53. package/dist/components/commandpalette/CommandPalette.js.map +1 -1
  54. package/dist/components/contextmenu/ContextMenu.cjs +1 -1
  55. package/dist/components/contextmenu/ContextMenu.cjs.map +1 -1
  56. package/dist/components/contextmenu/ContextMenu.js +79 -58
  57. package/dist/components/contextmenu/ContextMenu.js.map +1 -1
  58. package/dist/components/datagrid/DataGrid.cjs +1 -1
  59. package/dist/components/datagrid/DataGrid.cjs.map +1 -1
  60. package/dist/components/datagrid/DataGrid.js +184 -202
  61. package/dist/components/datagrid/DataGrid.js.map +1 -1
  62. package/dist/components/datepicker/DatePicker.cjs +1 -1
  63. package/dist/components/datepicker/DatePicker.cjs.map +1 -1
  64. package/dist/components/datepicker/DatePicker.js +197 -164
  65. package/dist/components/datepicker/DatePicker.js.map +1 -1
  66. package/dist/components/daterangepicker/DateRangePicker.cjs +1 -1
  67. package/dist/components/daterangepicker/DateRangePicker.cjs.map +1 -1
  68. package/dist/components/daterangepicker/DateRangePicker.js +254 -213
  69. package/dist/components/daterangepicker/DateRangePicker.js.map +1 -1
  70. package/dist/components/dialog/DialogProvider.cjs +2 -0
  71. package/dist/components/dialog/DialogProvider.cjs.map +1 -0
  72. package/dist/components/dialog/DialogProvider.js +71 -0
  73. package/dist/components/dialog/DialogProvider.js.map +1 -0
  74. package/dist/components/dialog/dialogStore.cjs +2 -0
  75. package/dist/components/dialog/dialogStore.cjs.map +1 -0
  76. package/dist/components/dialog/dialogStore.js +60 -0
  77. package/dist/components/dialog/dialogStore.js.map +1 -0
  78. package/dist/components/drawer/Drawer.cjs +1 -1
  79. package/dist/components/drawer/Drawer.cjs.map +1 -1
  80. package/dist/components/drawer/Drawer.js +69 -47
  81. package/dist/components/drawer/Drawer.js.map +1 -1
  82. package/dist/components/dropdown/Dropdown.cjs +1 -1
  83. package/dist/components/dropdown/Dropdown.cjs.map +1 -1
  84. package/dist/components/dropdown/Dropdown.js +134 -108
  85. package/dist/components/dropdown/Dropdown.js.map +1 -1
  86. package/dist/components/fileuploader/FileUploader.cjs +1 -1
  87. package/dist/components/fileuploader/FileUploader.cjs.map +1 -1
  88. package/dist/components/fileuploader/FileUploader.js +96 -61
  89. package/dist/components/fileuploader/FileUploader.js.map +1 -1
  90. package/dist/components/hovercard/HoverCard.cjs +1 -1
  91. package/dist/components/hovercard/HoverCard.cjs.map +1 -1
  92. package/dist/components/hovercard/HoverCard.js +124 -69
  93. package/dist/components/hovercard/HoverCard.js.map +1 -1
  94. package/dist/components/input/Input.cjs +1 -1
  95. package/dist/components/input/Input.cjs.map +1 -1
  96. package/dist/components/input/Input.js +62 -37
  97. package/dist/components/input/Input.js.map +1 -1
  98. package/dist/components/layout/Container.cjs +1 -1
  99. package/dist/components/layout/Container.cjs.map +1 -1
  100. package/dist/components/layout/Container.js +21 -30
  101. package/dist/components/layout/Container.js.map +1 -1
  102. package/dist/components/layout/Flex.cjs +1 -1
  103. package/dist/components/layout/Flex.cjs.map +1 -1
  104. package/dist/components/layout/Flex.js +36 -19
  105. package/dist/components/layout/Flex.js.map +1 -1
  106. package/dist/components/layout/Grid.cjs +1 -1
  107. package/dist/components/layout/Grid.cjs.map +1 -1
  108. package/dist/components/layout/Grid.js +30 -18
  109. package/dist/components/layout/Grid.js.map +1 -1
  110. package/dist/components/link/Link.cjs +2 -0
  111. package/dist/components/link/Link.cjs.map +1 -0
  112. package/dist/components/link/Link.js +41 -0
  113. package/dist/components/link/Link.js.map +1 -0
  114. package/dist/components/megamenu/MegaMenu.cjs +1 -1
  115. package/dist/components/megamenu/MegaMenu.cjs.map +1 -1
  116. package/dist/components/megamenu/MegaMenu.js +107 -38
  117. package/dist/components/megamenu/MegaMenu.js.map +1 -1
  118. package/dist/components/modal/Modal.cjs +1 -1
  119. package/dist/components/modal/Modal.cjs.map +1 -1
  120. package/dist/components/modal/Modal.js +91 -83
  121. package/dist/components/modal/Modal.js.map +1 -1
  122. package/dist/components/multiselect/MultiSelect.cjs +2 -0
  123. package/dist/components/multiselect/MultiSelect.cjs.map +1 -0
  124. package/dist/components/multiselect/MultiSelect.js +176 -0
  125. package/dist/components/multiselect/MultiSelect.js.map +1 -0
  126. package/dist/components/nuiprovider/NUIProvider.cjs +2 -0
  127. package/dist/components/nuiprovider/NUIProvider.cjs.map +1 -0
  128. package/dist/components/nuiprovider/NUIProvider.js +36 -0
  129. package/dist/components/nuiprovider/NUIProvider.js.map +1 -0
  130. package/dist/components/pagination/Pagination.cjs +1 -1
  131. package/dist/components/pagination/Pagination.cjs.map +1 -1
  132. package/dist/components/pagination/Pagination.js +74 -41
  133. package/dist/components/pagination/Pagination.js.map +1 -1
  134. package/dist/components/popover/Popover.cjs +1 -1
  135. package/dist/components/popover/Popover.cjs.map +1 -1
  136. package/dist/components/popover/Popover.js +99 -100
  137. package/dist/components/popover/Popover.js.map +1 -1
  138. package/dist/components/progress/Progress.cjs +1 -1
  139. package/dist/components/progress/Progress.cjs.map +1 -1
  140. package/dist/components/progress/Progress.js +44 -22
  141. package/dist/components/progress/Progress.js.map +1 -1
  142. package/dist/components/radiogroup/RadioGroup.cjs +1 -1
  143. package/dist/components/radiogroup/RadioGroup.cjs.map +1 -1
  144. package/dist/components/radiogroup/RadioGroup.js +69 -74
  145. package/dist/components/radiogroup/RadioGroup.js.map +1 -1
  146. package/dist/components/rating/Rating.cjs +1 -1
  147. package/dist/components/rating/Rating.cjs.map +1 -1
  148. package/dist/components/rating/Rating.js +72 -33
  149. package/dist/components/rating/Rating.js.map +1 -1
  150. package/dist/components/resizable/Resizable.cjs +2 -0
  151. package/dist/components/resizable/Resizable.cjs.map +1 -0
  152. package/dist/components/resizable/Resizable.js +134 -0
  153. package/dist/components/resizable/Resizable.js.map +1 -0
  154. package/dist/components/select/Select.cjs +1 -1
  155. package/dist/components/select/Select.cjs.map +1 -1
  156. package/dist/components/select/Select.js +114 -113
  157. package/dist/components/select/Select.js.map +1 -1
  158. package/dist/components/skeleton/Skeleton.cjs +1 -1
  159. package/dist/components/skeleton/Skeleton.cjs.map +1 -1
  160. package/dist/components/skeleton/Skeleton.js +90 -67
  161. package/dist/components/skeleton/Skeleton.js.map +1 -1
  162. package/dist/components/slider/Slider.cjs +1 -1
  163. package/dist/components/slider/Slider.cjs.map +1 -1
  164. package/dist/components/slider/Slider.js +85 -82
  165. package/dist/components/slider/Slider.js.map +1 -1
  166. package/dist/components/spinner/Spinner.cjs +1 -1
  167. package/dist/components/spinner/Spinner.cjs.map +1 -1
  168. package/dist/components/spinner/Spinner.js +60 -17
  169. package/dist/components/spinner/Spinner.js.map +1 -1
  170. package/dist/components/stepper/Stepper.cjs +1 -5
  171. package/dist/components/stepper/Stepper.cjs.map +1 -1
  172. package/dist/components/stepper/Stepper.js +65 -39
  173. package/dist/components/stepper/Stepper.js.map +1 -1
  174. package/dist/components/switch/Switch.cjs +1 -1
  175. package/dist/components/switch/Switch.cjs.map +1 -1
  176. package/dist/components/switch/Switch.js +89 -62
  177. package/dist/components/switch/Switch.js.map +1 -1
  178. package/dist/components/table/Table.cjs +1 -1
  179. package/dist/components/table/Table.cjs.map +1 -1
  180. package/dist/components/table/Table.js +62 -35
  181. package/dist/components/table/Table.js.map +1 -1
  182. package/dist/components/tabs/Tabs.cjs +1 -1
  183. package/dist/components/tabs/Tabs.cjs.map +1 -1
  184. package/dist/components/tabs/Tabs.js +110 -50
  185. package/dist/components/tabs/Tabs.js.map +1 -1
  186. package/dist/components/textarea/Textarea.cjs +1 -1
  187. package/dist/components/textarea/Textarea.cjs.map +1 -1
  188. package/dist/components/textarea/Textarea.js +63 -58
  189. package/dist/components/textarea/Textarea.js.map +1 -1
  190. package/dist/components/timepicker/TimePicker.cjs +2 -0
  191. package/dist/components/timepicker/TimePicker.cjs.map +1 -0
  192. package/dist/components/timepicker/TimePicker.js +159 -0
  193. package/dist/components/timepicker/TimePicker.js.map +1 -0
  194. package/dist/components/timerangepicker/TimeRangePicker.cjs +2 -0
  195. package/dist/components/timerangepicker/TimeRangePicker.cjs.map +1 -0
  196. package/dist/components/timerangepicker/TimeRangePicker.js +208 -0
  197. package/dist/components/timerangepicker/TimeRangePicker.js.map +1 -0
  198. package/dist/components/toast/Toast.cjs +1 -1
  199. package/dist/components/toast/Toast.cjs.map +1 -1
  200. package/dist/components/toast/Toast.js +91 -38
  201. package/dist/components/toast/Toast.js.map +1 -1
  202. package/dist/components/tooltip/Tooltip.cjs +1 -1
  203. package/dist/components/tooltip/Tooltip.cjs.map +1 -1
  204. package/dist/components/tooltip/Tooltip.js +72 -56
  205. package/dist/components/tooltip/Tooltip.js.map +1 -1
  206. package/dist/components/treeview/TreeView.cjs +1 -1
  207. package/dist/components/treeview/TreeView.cjs.map +1 -1
  208. package/dist/components/treeview/TreeView.js +120 -90
  209. package/dist/components/treeview/TreeView.js.map +1 -1
  210. package/dist/components/virtuallist/VirtualList.cjs +1 -1
  211. package/dist/components/virtuallist/VirtualList.cjs.map +1 -1
  212. package/dist/components/virtuallist/VirtualList.js +52 -34
  213. package/dist/components/virtuallist/VirtualList.js.map +1 -1
  214. package/dist/index.cjs +1 -1
  215. package/dist/index.css +1 -0
  216. package/dist/index.js +118 -107
  217. package/dist/index.js.map +1 -1
  218. package/dist/package.json +49 -6
  219. package/dist/types/components/accordion/Accordion.d.ts +7 -3
  220. package/dist/types/components/accordion/Accordion.d.ts.map +1 -1
  221. package/dist/types/components/alert/Alert.d.ts +18 -5
  222. package/dist/types/components/alert/Alert.d.ts.map +1 -1
  223. package/dist/types/components/avatar/Avatar.d.ts +12 -8
  224. package/dist/types/components/avatar/Avatar.d.ts.map +1 -1
  225. package/dist/types/components/avatar/AvatarGroup.d.ts +11 -4
  226. package/dist/types/components/avatar/AvatarGroup.d.ts.map +1 -1
  227. package/dist/types/components/badge/Badge.d.ts +19 -11
  228. package/dist/types/components/badge/Badge.d.ts.map +1 -1
  229. package/dist/types/components/badge/BadgeGroup.d.ts +7 -4
  230. package/dist/types/components/badge/BadgeGroup.d.ts.map +1 -1
  231. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +14 -6
  232. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  233. package/dist/types/components/button/Button.d.ts +25 -10
  234. package/dist/types/components/button/Button.d.ts.map +1 -1
  235. package/dist/types/components/card/Card.d.ts +12 -21
  236. package/dist/types/components/card/Card.d.ts.map +1 -1
  237. package/dist/types/components/checkbox/Checkbox.d.ts +12 -7
  238. package/dist/types/components/checkbox/Checkbox.d.ts.map +1 -1
  239. package/dist/types/components/chip/Chip.d.ts +14 -11
  240. package/dist/types/components/chip/Chip.d.ts.map +1 -1
  241. package/dist/types/components/combobox/Combobox.d.ts +15 -4
  242. package/dist/types/components/combobox/Combobox.d.ts.map +1 -1
  243. package/dist/types/components/commandpalette/CommandPalette.d.ts +12 -3
  244. package/dist/types/components/commandpalette/CommandPalette.d.ts.map +1 -1
  245. package/dist/types/components/contextmenu/ContextMenu.d.ts +14 -6
  246. package/dist/types/components/contextmenu/ContextMenu.d.ts.map +1 -1
  247. package/dist/types/components/datagrid/DataGrid.d.ts +16 -4
  248. package/dist/types/components/datagrid/DataGrid.d.ts.map +1 -1
  249. package/dist/types/components/datepicker/DatePicker.d.ts +13 -1
  250. package/dist/types/components/datepicker/DatePicker.d.ts.map +1 -1
  251. package/dist/types/components/daterangepicker/DateRangePicker.d.ts +3 -1
  252. package/dist/types/components/daterangepicker/DateRangePicker.d.ts.map +1 -1
  253. package/dist/types/components/dialog/DialogProvider.d.ts +2 -0
  254. package/dist/types/components/dialog/DialogProvider.d.ts.map +1 -0
  255. package/dist/types/components/dialog/dialogStore.d.ts +42 -0
  256. package/dist/types/components/dialog/dialogStore.d.ts.map +1 -0
  257. package/dist/types/components/drawer/Drawer.d.ts +18 -4
  258. package/dist/types/components/drawer/Drawer.d.ts.map +1 -1
  259. package/dist/types/components/dropdown/Dropdown.d.ts +21 -16
  260. package/dist/types/components/dropdown/Dropdown.d.ts.map +1 -1
  261. package/dist/types/components/fileuploader/FileUploader.d.ts +22 -3
  262. package/dist/types/components/fileuploader/FileUploader.d.ts.map +1 -1
  263. package/dist/types/components/hovercard/HoverCard.d.ts +45 -5
  264. package/dist/types/components/hovercard/HoverCard.d.ts.map +1 -1
  265. package/dist/types/components/input/Input.d.ts +20 -10
  266. package/dist/types/components/input/Input.d.ts.map +1 -1
  267. package/dist/types/components/layout/Container.d.ts +8 -4
  268. package/dist/types/components/layout/Container.d.ts.map +1 -1
  269. package/dist/types/components/layout/Flex.d.ts +27 -10
  270. package/dist/types/components/layout/Flex.d.ts.map +1 -1
  271. package/dist/types/components/layout/Grid.d.ts +11 -5
  272. package/dist/types/components/layout/Grid.d.ts.map +1 -1
  273. package/dist/types/components/link/Link.d.ts +22 -0
  274. package/dist/types/components/link/Link.d.ts.map +1 -0
  275. package/dist/types/components/megamenu/MegaMenu.d.ts +8 -11
  276. package/dist/types/components/megamenu/MegaMenu.d.ts.map +1 -1
  277. package/dist/types/components/modal/Modal.d.ts +8 -7
  278. package/dist/types/components/modal/Modal.d.ts.map +1 -1
  279. package/dist/types/components/multiselect/MultiSelect.d.ts +33 -0
  280. package/dist/types/components/multiselect/MultiSelect.d.ts.map +1 -0
  281. package/dist/types/components/nuiprovider/NUIProvider.d.ts +29 -0
  282. package/dist/types/components/nuiprovider/NUIProvider.d.ts.map +1 -0
  283. package/dist/types/components/pagination/Pagination.d.ts +17 -3
  284. package/dist/types/components/pagination/Pagination.d.ts.map +1 -1
  285. package/dist/types/components/popover/Popover.d.ts +54 -16
  286. package/dist/types/components/popover/Popover.d.ts.map +1 -1
  287. package/dist/types/components/progress/Progress.d.ts +17 -7
  288. package/dist/types/components/progress/Progress.d.ts.map +1 -1
  289. package/dist/types/components/radiogroup/RadioGroup.d.ts +15 -10
  290. package/dist/types/components/radiogroup/RadioGroup.d.ts.map +1 -1
  291. package/dist/types/components/rating/Rating.d.ts +24 -10
  292. package/dist/types/components/rating/Rating.d.ts.map +1 -1
  293. package/dist/types/components/resizable/Resizable.d.ts +24 -0
  294. package/dist/types/components/resizable/Resizable.d.ts.map +1 -0
  295. package/dist/types/components/select/Select.d.ts +17 -8
  296. package/dist/types/components/select/Select.d.ts.map +1 -1
  297. package/dist/types/components/skeleton/Skeleton.d.ts +37 -36
  298. package/dist/types/components/skeleton/Skeleton.d.ts.map +1 -1
  299. package/dist/types/components/slider/Slider.d.ts +15 -4
  300. package/dist/types/components/slider/Slider.d.ts.map +1 -1
  301. package/dist/types/components/spinner/Spinner.d.ts +14 -4
  302. package/dist/types/components/spinner/Spinner.d.ts.map +1 -1
  303. package/dist/types/components/stepper/Stepper.d.ts +17 -3
  304. package/dist/types/components/stepper/Stepper.d.ts.map +1 -1
  305. package/dist/types/components/switch/Switch.d.ts +20 -5
  306. package/dist/types/components/switch/Switch.d.ts.map +1 -1
  307. package/dist/types/components/table/Table.d.ts +24 -4
  308. package/dist/types/components/table/Table.d.ts.map +1 -1
  309. package/dist/types/components/tabs/Tabs.d.ts +25 -12
  310. package/dist/types/components/tabs/Tabs.d.ts.map +1 -1
  311. package/dist/types/components/textarea/Textarea.d.ts +8 -5
  312. package/dist/types/components/textarea/Textarea.d.ts.map +1 -1
  313. package/dist/types/components/timepicker/TimePicker.d.ts +26 -0
  314. package/dist/types/components/timepicker/TimePicker.d.ts.map +1 -0
  315. package/dist/types/components/timerangepicker/TimeRangePicker.d.ts +32 -0
  316. package/dist/types/components/timerangepicker/TimeRangePicker.d.ts.map +1 -0
  317. package/dist/types/components/toast/Toast.d.ts +23 -7
  318. package/dist/types/components/toast/Toast.d.ts.map +1 -1
  319. package/dist/types/components/tooltip/Tooltip.d.ts +13 -2
  320. package/dist/types/components/tooltip/Tooltip.d.ts.map +1 -1
  321. package/dist/types/components/treeview/TreeView.d.ts +20 -6
  322. package/dist/types/components/treeview/TreeView.d.ts.map +1 -1
  323. package/dist/types/components/virtuallist/VirtualList.d.ts +12 -16
  324. package/dist/types/components/virtuallist/VirtualList.d.ts.map +1 -1
  325. package/dist/types/index.d.ts +8 -4
  326. package/dist/types/index.d.ts.map +1 -1
  327. package/dist/types/utils/cn/cn.d.ts +19 -0
  328. package/dist/types/utils/cn/cn.d.ts.map +1 -0
  329. package/dist/types/utils/generateid/generateId.d.ts +7 -0
  330. package/dist/types/utils/generateid/generateId.d.ts.map +1 -1
  331. package/dist/types/utils/index.d.ts +2 -0
  332. package/dist/types/utils/index.d.ts.map +1 -1
  333. package/dist/types/utils/inertmanager/inertManager.d.ts +13 -0
  334. package/dist/types/utils/inertmanager/inertManager.d.ts.map +1 -1
  335. package/dist/types/utils/keyboardnav/keyboardNav.d.ts +17 -6
  336. package/dist/types/utils/keyboardnav/keyboardNav.d.ts.map +1 -1
  337. package/dist/types/utils/onclickoutside/onClickOutside.d.ts +9 -1
  338. package/dist/types/utils/onclickoutside/onClickOutside.d.ts.map +1 -1
  339. package/dist/types/utils/portal/portal.d.ts +14 -1
  340. package/dist/types/utils/portal/portal.d.ts.map +1 -1
  341. package/dist/types/utils/restorefocus/restoreFocus.d.ts +8 -4
  342. package/dist/types/utils/restorefocus/restoreFocus.d.ts.map +1 -1
  343. package/dist/types/utils/scrolllock/scrollLock.d.ts +10 -2
  344. package/dist/types/utils/scrolllock/scrollLock.d.ts.map +1 -1
  345. package/dist/types/utils/slot/slot.d.ts +12 -0
  346. package/dist/types/utils/slot/slot.d.ts.map +1 -0
  347. package/dist/types/utils/trapfocus/trapFocus.d.ts +6 -2
  348. package/dist/types/utils/trapfocus/trapFocus.d.ts.map +1 -1
  349. package/dist/utils/cn/cn.cjs +2 -0
  350. package/dist/utils/cn/cn.cjs.map +1 -0
  351. package/dist/utils/cn/cn.js +21 -0
  352. package/dist/utils/cn/cn.js.map +1 -0
  353. package/dist/utils/inertmanager/inertManager.cjs.map +1 -1
  354. package/dist/utils/inertmanager/inertManager.js.map +1 -1
  355. package/dist/utils/onclickoutside/onClickOutside.cjs +1 -1
  356. package/dist/utils/onclickoutside/onClickOutside.cjs.map +1 -1
  357. package/dist/utils/onclickoutside/onClickOutside.js +10 -6
  358. package/dist/utils/onclickoutside/onClickOutside.js.map +1 -1
  359. package/dist/utils/portal/portal.cjs.map +1 -1
  360. package/dist/utils/portal/portal.js.map +1 -1
  361. package/dist/utils/restorefocus/restoreFocus.cjs.map +1 -1
  362. package/dist/utils/restorefocus/restoreFocus.js.map +1 -1
  363. package/dist/utils/scrolllock/scrollLock.cjs.map +1 -1
  364. package/dist/utils/scrolllock/scrollLock.js +7 -0
  365. package/dist/utils/scrolllock/scrollLock.js.map +1 -1
  366. package/dist/utils/slot/slot.cjs +2 -0
  367. package/dist/utils/slot/slot.cjs.map +1 -0
  368. package/dist/utils/slot/slot.js +57 -0
  369. package/dist/utils/slot/slot.js.map +1 -0
  370. package/dist/utils/trapfocus/trapFocus.cjs.map +1 -1
  371. package/dist/utils/trapfocus/trapFocus.js.map +1 -1
  372. package/package.json +49 -6
  373. package/dist/components/layout/HStack.cjs +0 -2
  374. package/dist/components/layout/HStack.cjs.map +0 -1
  375. package/dist/components/layout/HStack.js +0 -9
  376. package/dist/components/layout/HStack.js.map +0 -1
  377. package/dist/components/layout/Stack.cjs +0 -2
  378. package/dist/components/layout/Stack.cjs.map +0 -1
  379. package/dist/components/layout/Stack.js +0 -9
  380. package/dist/components/layout/Stack.js.map +0 -1
  381. package/dist/styles/nui.css +0 -1
  382. package/dist/theme/NUIProvider.cjs +0 -2
  383. package/dist/theme/NUIProvider.cjs.map +0 -1
  384. package/dist/theme/NUIProvider.js +0 -34
  385. package/dist/theme/NUIProvider.js.map +0 -1
  386. package/dist/theme/useTheme.cjs +0 -2
  387. package/dist/theme/useTheme.cjs.map +0 -1
  388. package/dist/theme/useTheme.js +0 -9
  389. package/dist/theme/useTheme.js.map +0 -1
  390. package/dist/types/components/layout/HStack.d.ts +0 -8
  391. package/dist/types/components/layout/HStack.d.ts.map +0 -1
  392. package/dist/types/components/layout/Stack.d.ts +0 -8
  393. package/dist/types/components/layout/Stack.d.ts.map +0 -1
  394. package/dist/types/theme/NUIProvider.d.ts +0 -14
  395. package/dist/types/theme/NUIProvider.d.ts.map +0 -1
  396. package/dist/types/theme/useTheme.d.ts +0 -11
  397. package/dist/types/theme/useTheme.d.ts.map +0 -1
  398. package/dist/utils/generateid/generateId.cjs +0 -2
  399. package/dist/utils/generateid/generateId.cjs.map +0 -1
  400. package/dist/utils/generateid/generateId.js +0 -7
  401. package/dist/utils/generateid/generateId.js.map +0 -1
  402. package/dist/utils/keyboardnav/keyboardNav.cjs +0 -2
  403. package/dist/utils/keyboardnav/keyboardNav.cjs.map +0 -1
  404. package/dist/utils/keyboardnav/keyboardNav.js +0 -10
  405. package/dist/utils/keyboardnav/keyboardNav.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.cjs","sources":["../../../src/components/datepicker/DatePicker.tsx"],"sourcesContent":["// DatePicker.tsx\r\n// Final Version — Minimal, Elegant, Inline Year + Month Selector\r\n// Calendar hides during year/month selection. No dependencies. Zero warnings.\r\n\r\nimport { useState, useRef, useEffect, KeyboardEvent, useMemo } from 'react';\r\nimport './DatePicker.css';\r\nimport { Portal, onClickOutside, restoreFocus } from '../../utils/index';\r\n\r\n/* ------------------------------------------\r\n Helpers\r\n------------------------------------------- */\r\n\r\nconst pad = (n: number) => (n < 10 ? `0${n}` : `${n}`);\r\nconst toISO = (d: Date) =>\r\n `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\r\n\r\nfunction fromISO(s?: string | null): Date | null {\r\n if (!s) return null;\r\n const [y, m, d] = s.split('-').map(Number);\r\n const dt = new Date(y, m - 1, d);\r\n return Number.isNaN(dt.getTime()) ? null : dt;\r\n}\r\n\r\nconst startOfMonth = (d: Date) => new Date(d.getFullYear(), d.getMonth(), 1);\r\nconst addMonths = (d: Date, n: number) =>\r\n new Date(d.getFullYear(), d.getMonth() + n, 1);\r\nconst daysInMonth = (d: Date) =>\r\n new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();\r\n\r\n/* ------------------------------------------\r\n Component Props\r\n------------------------------------------- */\r\n\r\nexport interface DatePickerProps {\r\n value?: string; // YYYY-MM-DD\r\n defaultValue?: string;\r\n onChange?: (v: string) => void;\r\n minDate?: string;\r\n maxDate?: string;\r\n placeholder?: string;\r\n name?: string;\r\n locale?: string;\r\n id?: string;\r\n className?: string;\r\n}\r\n\r\n/* ------------------------------------------\r\n Component\r\n------------------------------------------- */\r\n\r\nexport function DatePicker({\r\n value,\r\n defaultValue,\r\n onChange,\r\n minDate,\r\n maxDate,\r\n placeholder = 'Select date',\r\n name,\r\n locale = 'en-US',\r\n id,\r\n className = '',\r\n}: DatePickerProps) {\r\n const controlled = value !== undefined;\r\n const [internal, setInternal] = useState<string | undefined>(defaultValue);\r\n const selected = controlled ? value : internal;\r\n const selectedDate = fromISO(selected) ?? new Date();\r\n\r\n const [visible, setVisible] = useState<Date>(startOfMonth(selectedDate));\r\n const [open, setOpen] = useState(false);\r\n const [showYMM, setShowYMM] = useState(false);\r\n\r\n const triggerRef = useRef<HTMLButtonElement | null>(null);\r\n const popRef = useRef<HTMLDivElement | null>(null);\r\n const gridDayRefs = useRef<Record<string, HTMLButtonElement | null>>({});\r\n\r\n /* ------------------------------------------\r\n Min/Max handling\r\n ------------------------------------------- */\r\n\r\n const minDt = fromISO(minDate) ?? undefined;\r\n const maxDt = fromISO(maxDate) ?? undefined;\r\n\r\n const isDisabledDate = (d: Date): boolean => {\r\n if (minDt && d < minDt) return true;\r\n if (maxDt && d > maxDt) return true;\r\n return false;\r\n };\r\n\r\n /* ------------------------------------------\r\n Click outside\r\n ------------------------------------------- */\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n return onClickOutside(popRef, () => {\r\n setOpen(false);\r\n setShowYMM(false);\r\n });\r\n }, [open]);\r\n\r\n /* ------------------------------------------\r\n Restore focus when closing\r\n ------------------------------------------- */\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const t = triggerRef.current;\r\n return () => {\r\n restoreFocus(t ?? null);\r\n setShowYMM(false);\r\n };\r\n }, [open]);\r\n\r\n /* ------------------------------------------\r\n Positioning\r\n ------------------------------------------- */\r\n\r\n const [pos, setPos] = useState<{ top: number; left: number } | null>(null);\r\n\r\n useEffect(() => {\r\n if (!open || !triggerRef.current) return;\r\n const r = triggerRef.current.getBoundingClientRect();\r\n setPos({ top: r.bottom + 8, left: r.left });\r\n }, [open, visible]);\r\n\r\n /* ------------------------------------------\r\n Calendar Grid\r\n ------------------------------------------- */\r\n const grid = useMemo(() => {\r\n const first = startOfMonth(visible);\r\n const startDow = first.getDay();\r\n const totalDays = daysInMonth(visible);\r\n\r\n const cells: (number | null)[] = [];\r\n\r\n for (let i = 0; i < startDow; i++) cells.push(null);\r\n for (let d = 1; d <= totalDays; d++) cells.push(d);\r\n while (cells.length % 7 !== 0) cells.push(null);\r\n\r\n return cells;\r\n }, [visible]);\r\n\r\n const weekdays = useMemo(\r\n () =>\r\n Array.from({ length: 7 }).map((_, i) =>\r\n new Date(2020, 5, 7 + i).toLocaleDateString(locale, {\r\n weekday: 'short',\r\n })\r\n ),\r\n [locale]\r\n );\r\n\r\n /* ------------------------------------------\r\n Year & Month Overlay Grids\r\n ------------------------------------------- */\r\n\r\n const visibleYear = visible.getFullYear();\r\n const YEAR_SPAN = 100;\r\n const yearStart = visibleYear - YEAR_SPAN;\r\n\r\n const years = useMemo(\r\n () =>\r\n Array.from({ length: YEAR_SPAN * 2 + 1 }).map((_, i) => yearStart + i),\r\n [yearStart]\r\n );\r\n\r\n const months = useMemo(\r\n () =>\r\n Array.from({ length: 12 }).map((_, i) =>\r\n new Date(2020, i, 1).toLocaleDateString(locale, { month: 'short' })\r\n ),\r\n [locale]\r\n );\r\n\r\n const isMonthDisabled = (year: number, month: number): boolean => {\r\n const start = new Date(year, month, 1);\r\n const end = new Date(year, month, daysInMonth(start));\r\n if (minDt && end < minDt) return true;\r\n if (maxDt && start > maxDt) return true;\r\n return false;\r\n };\r\n\r\n /* ------------------------------------------\r\n Commit selections\r\n ------------------------------------------- */\r\n\r\n const commitDay = (d: number) => {\r\n const dt = new Date(visible.getFullYear(), visible.getMonth(), d);\r\n if (isDisabledDate(dt)) return;\r\n\r\n const iso = toISO(dt);\r\n if (!controlled) setInternal(iso);\r\n onChange?.(iso);\r\n\r\n setOpen(false);\r\n setShowYMM(false);\r\n };\r\n\r\n const commitMonth = (month: number) => {\r\n setVisible(new Date(visible.getFullYear(), month, 1));\r\n setShowYMM(false); // close overlay\r\n };\r\n\r\n const commitYear = (year: number) => {\r\n setVisible(new Date(year, visible.getMonth(), 1));\r\n // leave overlay open for month selection\r\n };\r\n\r\n /* ------------------------------------------\r\n Keyboard navigation for days\r\n ------------------------------------------- */\r\n\r\n const focusDayByIndex = (idx: number) => {\r\n if (idx < 0 || idx >= grid.length) return;\r\n const day = grid[idx];\r\n if (!day) return;\r\n const key = `${visible.getFullYear()}-${visible.getMonth()}-${day}`;\r\n gridDayRefs.current[key]?.focus();\r\n };\r\n\r\n const onDayKey = (e: KeyboardEvent<HTMLButtonElement>, day: number) => {\r\n const idx = grid.findIndex((c) => c === day);\r\n if (idx === -1) return;\r\n\r\n const cols = 7;\r\n let nextIdx: number | null = null;\r\n\r\n switch (e.key) {\r\n case 'ArrowRight':\r\n nextIdx = idx + 1;\r\n break;\r\n case 'ArrowLeft':\r\n nextIdx = idx - 1;\r\n break;\r\n case 'ArrowDown':\r\n nextIdx = idx + cols;\r\n break;\r\n case 'ArrowUp':\r\n nextIdx = idx - cols;\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n e.preventDefault();\r\n commitDay(day);\r\n return;\r\n case 'PageUp':\r\n setVisible((v) => addMonths(v, -1));\r\n return;\r\n case 'PageDown':\r\n setVisible((v) => addMonths(v, 1));\r\n return;\r\n case 'Escape':\r\n setOpen(false);\r\n return;\r\n default:\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n if (nextIdx === null) return;\r\n if (nextIdx < 0 || nextIdx >= grid.length) return;\r\n\r\n if (grid[nextIdx] != null) focusDayByIndex(nextIdx);\r\n };\r\n\r\n /* ------------------------------------------\r\n Labels\r\n ------------------------------------------- */\r\n\r\n const headerMonthLabel = visible.toLocaleDateString(locale, {\r\n month: 'long',\r\n });\r\n const headerYearLabel = visible.getFullYear();\r\n\r\n /* ------------------------------------------\r\n Render\r\n ------------------------------------------- */\r\n\r\n return (\r\n <div className={`ui-datepicker minimal ${className}`}>\r\n {name && <input type=\"hidden\" name={name} value={selected ?? ''} />}\r\n\r\n <button\r\n id={id}\r\n ref={triggerRef}\r\n type=\"button\"\r\n className=\"ui-datepicker-input\"\r\n aria-haspopup=\"dialog\"\r\n aria-expanded={open}\r\n onClick={() => {\r\n setOpen((s) => !s);\r\n setShowYMM(false);\r\n }}\r\n >\r\n {selected ?? placeholder}\r\n </button>\r\n\r\n {open && pos && (\r\n <Portal>\r\n <div\r\n ref={popRef}\r\n className=\"ui-datepicker-popover\"\r\n style={{\r\n position: 'fixed',\r\n top: pos.top,\r\n left: pos.left,\r\n }}\r\n >\r\n <div className=\"ui-datepicker-panel minimal\">\r\n {/* Header */}\r\n <div className=\"ui-header-row\">\r\n <button\r\n className=\"ui-arrow\"\r\n aria-label=\"Previous month\"\r\n onClick={() => setVisible((v) => addMonths(v, -1))}\r\n >\r\n ‹\r\n </button>\r\n\r\n <button\r\n className=\"ui-header-center\"\r\n onClick={() => setShowYMM((s) => !s)}\r\n aria-expanded={showYMM}\r\n >\r\n {headerMonthLabel} {headerYearLabel}\r\n </button>\r\n\r\n <button\r\n className=\"ui-arrow\"\r\n aria-label=\"Next month\"\r\n onClick={() => setVisible((v) => addMonths(v, 1))}\r\n >\r\n ›\r\n </button>\r\n </div>\r\n\r\n {/* Year + Month Selector */}\r\n {showYMM && (\r\n <div className=\"ui-ym-panel\">\r\n <div className=\"ui-year-grid\">\r\n {years.map((y) => {\r\n const sel = y === visible.getFullYear();\r\n return (\r\n <button\r\n key={y}\r\n className={`ui-year-item ${sel ? 'selected' : ''}`}\r\n onClick={() => commitYear(y)}\r\n >\r\n {y}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n\r\n <div className=\"ui-month-grid\">\r\n {months.map((label, i) => {\r\n const disabled = isMonthDisabled(\r\n visible.getFullYear(),\r\n i\r\n );\r\n const sel = i === visible.getMonth();\r\n\r\n return (\r\n <button\r\n key={i}\r\n className={`ui-month-item ${\r\n disabled ? 'disabled' : ''\r\n } ${sel ? 'selected' : ''}`}\r\n disabled={disabled ? true : undefined}\r\n onClick={() => !disabled && commitMonth(i)}\r\n >\r\n {label}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Calendar ONLY when overlay hidden */}\r\n {!showYMM && (\r\n <div\r\n className=\"ui-calendar minimal\"\r\n role=\"grid\"\r\n aria-label={`${headerMonthLabel} ${headerYearLabel}`}\r\n >\r\n <div className=\"ui-weekdays\">\r\n {weekdays.map((w, i) => (\r\n <div key={i} className=\"ui-weekday\">\r\n {w}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n <div className=\"ui-days-grid\">\r\n {grid.map((cell, idx) => {\r\n if (cell === null)\r\n return <div key={idx} className=\"ui-day-empty\" />;\r\n\r\n const dt = new Date(\r\n visible.getFullYear(),\r\n visible.getMonth(),\r\n cell\r\n );\r\n const iso = toISO(dt);\r\n const disabled = isDisabledDate(dt);\r\n const sel = selected === iso;\r\n const key = `${visible.getFullYear()}-${visible.getMonth()}-${cell}`;\r\n\r\n return (\r\n <button\r\n key={key}\r\n ref={(el) => {\r\n gridDayRefs.current[key] = el;\r\n }}\r\n className={`ui-day ${sel ? 'selected' : ''}`}\r\n aria-selected={sel || undefined}\r\n onClick={() => !disabled && commitDay(cell)}\r\n onKeyDown={(e) => onDayKey(e, cell)}\r\n disabled={disabled ? true : undefined}\r\n >\r\n {cell}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"ui-footer\">\r\n <button\r\n onClick={() => {\r\n setOpen(false);\r\n setShowYMM(false);\r\n }}\r\n >\r\n Close\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </Portal>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["pad","toISO","d","fromISO","s","y","m","dt","startOfMonth","addMonths","n","daysInMonth","DatePicker","value","defaultValue","onChange","minDate","maxDate","placeholder","name","locale","id","className","controlled","internal","setInternal","useState","selected","selectedDate","visible","setVisible","open","setOpen","showYMM","setShowYMM","triggerRef","useRef","popRef","gridDayRefs","minDt","maxDt","isDisabledDate","useEffect","onClickOutside","t","restoreFocus","pos","setPos","r","grid","useMemo","startDow","totalDays","cells","i","weekdays","_","visibleYear","YEAR_SPAN","yearStart","years","months","isMonthDisabled","year","month","start","end","commitDay","iso","commitMonth","commitYear","focusDayByIndex","idx","day","key","onDayKey","c","cols","nextIdx","v","headerMonthLabel","headerYearLabel","jsxs","jsx","Portal","sel","label","disabled","w","cell","el","e"],"mappings":"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"}
1
+ {"version":3,"file":"DatePicker.cjs","sources":["../../../src/components/datepicker/DatePicker.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useRef, useEffect, KeyboardEvent, useMemo, useCallback, useLayoutEffect } from 'react';\nimport { cn } from '../../utils';\nimport { Portal, onClickOutside, restoreFocus } from '../../utils';\nimport './DatePicker.css';\n\n/* ------------------------------------------\n Helpers\n------------------------------------------- */\nconst pad = (n: number) => (n < 10 ? `0${n}` : `${n}`);\nconst toISO = (d: Date) => `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\n\nfunction fromISO(s?: string | null): Date | null {\n if (!s) return null;\n const [y, m, d] = s.split('-').map(Number);\n const dt = new Date(y, m - 1, d);\n return Number.isNaN(dt.getTime()) ? null : dt;\n}\n\nconst startOfMonth = (d: Date) => new Date(d.getFullYear(), d.getMonth(), 1);\nconst addMonths = (d: Date, n: number) => new Date(d.getFullYear(), d.getMonth() + n, 1);\nconst daysInMonth = (d: Date) => new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();\n\n/* ------------------------------------------\n Component Props\n------------------------------------------- */\nexport interface DatePickerProps {\n /** Controlled value in YYYY-MM-DD format */\n value?: string; \n /** Initial uncontrolled value in YYYY-MM-DD format */\n defaultValue?: string;\n onChange?: (v: string) => void;\n minDate?: string;\n maxDate?: string;\n placeholder?: string;\n name?: string;\n /** Used for formatting the display date and weekdays. Defaults to 'en-US' */\n locale?: string;\n id?: string;\n className?: string;\n disabled?: boolean;\n /** Custom formatter for the trigger button label */\n formatDisplay?: (date: Date) => string;\n}\n\n/* ------------------------------------------\n Component\n------------------------------------------- */\n\n/**\n * DatePicker Component\n * * A robust, accessible date selection tool.\n * Architecture Note: Implements smart collision detection to flip the popover\n * above the trigger if it hits the bottom of the viewport.\n */\nexport function DatePicker({\n value,\n defaultValue,\n onChange,\n minDate,\n maxDate,\n placeholder = 'Select date',\n name,\n locale = 'en-US',\n id,\n className,\n disabled = false,\n formatDisplay,\n}: DatePickerProps) {\n const controlled = value !== undefined;\n const [internal, setInternal] = useState<string | undefined>(defaultValue);\n const selected = controlled ? value : internal;\n const selectedDate = fromISO(selected) ?? new Date();\n\n const [visible, setVisible] = useState<Date>(startOfMonth(selectedDate));\n const [open, setOpen] = useState(false);\n const [showYMM, setShowYMM] = useState(false);\n\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const popRef = useRef<HTMLDivElement | null>(null);\n const gridDayRefs = useRef<Record<string, HTMLButtonElement | null>>({});\n const selectedYearRef = useRef<HTMLButtonElement | null>(null);\n const calendarRef = useRef<HTMLDivElement | null>(null);\n\n /* ------------------------------------------\n Min/Max handling\n ------------------------------------------- */\n const minDt = fromISO(minDate) ?? undefined;\n const maxDt = fromISO(maxDate) ?? undefined;\n\n const isDisabledDate = useCallback((d: Date): boolean => {\n if (minDt && d < minDt) return true;\n if (maxDt && d > maxDt) return true;\n return false;\n }, [minDt, maxDt]);\n\n /* ------------------------------------------\n Click outside & Focus\n ------------------------------------------- */\n useEffect(() => {\n if (!open) return;\n const cleanup = onClickOutside([popRef, triggerRef], () => {\n setOpen(false);\n setShowYMM(false);\n });\n return cleanup;\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n const t = triggerRef.current;\n \n const timeoutId = setTimeout(() => {\n if (!showYMM) {\n const targetDate = fromISO(selected) || new Date();\n const d = (targetDate.getMonth() === visible.getMonth() && targetDate.getFullYear() === visible.getFullYear())\n ? targetDate.getDate()\n : 1;\n\n const key = `${visible.getFullYear()}-${visible.getMonth()}-${d}`;\n \n if (gridDayRefs.current[key]) {\n gridDayRefs.current[key]?.focus();\n } else {\n const firstValidKey = `${visible.getFullYear()}-${visible.getMonth()}-1`;\n gridDayRefs.current[firstValidKey]?.focus();\n }\n }\n }, 10);\n\n return () => {\n clearTimeout(timeoutId);\n restoreFocus(t ?? null);\n setShowYMM(false);\n };\n }, [open, showYMM, selected, visible]);\n\n /* ------------------------------------------\n Positioning & Smart Collision\n ------------------------------------------- */\n const [coords, setCoords] = useState({ top: -9999, left: -9999 });\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current || !popRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const popRect = popRef.current.getBoundingClientRect();\n\n const scrollY = window.scrollY;\n const scrollX = window.scrollX;\n\n let top = triggerRect.bottom + scrollY + 8;\n let left = triggerRect.left + scrollX;\n\n const padding = 16;\n const maxLeft = document.documentElement.clientWidth - popRect.width - padding;\n\n if (left > maxLeft + scrollX) {\n left = triggerRect.right + scrollX - popRect.width;\n \n if (left < padding + scrollX) {\n left = padding + scrollX;\n }\n }\n\n const maxTop = document.documentElement.clientHeight - popRect.height - padding;\n \n if (triggerRect.bottom + 8 > maxTop) {\n top = triggerRect.top + scrollY - popRect.height - 8;\n }\n\n setCoords({ top, left });\n }, []);\n\n useLayoutEffect(() => {\n if (!open) return;\n updatePosition();\n window.addEventListener('resize', updatePosition);\n window.addEventListener('scroll', updatePosition, true);\n return () => {\n window.removeEventListener('resize', updatePosition);\n window.removeEventListener('scroll', updatePosition, true);\n };\n }, [open, updatePosition]);\n\n /* ------------------------------------------\n Auto-Scroll Year Selector\n ------------------------------------------- */\n useEffect(() => {\n if (showYMM && selectedYearRef.current) {\n selectedYearRef.current.scrollIntoView({ block: 'center', behavior: 'smooth' });\n }\n }, [showYMM]);\n\n /* ------------------------------------------\n Calendar Grids\n ------------------------------------------- */\n const grid = useMemo(() => {\n const first = startOfMonth(visible);\n const startDow = first.getDay(); \n const totalDays = daysInMonth(visible);\n \n const cells: (number | null)[] = [];\n\n for (let i = 0; i < startDow; i++) cells.push(null);\n for (let d = 1; d <= totalDays; d++) cells.push(d);\n while (cells.length % 7 !== 0) cells.push(null);\n\n return cells;\n }, [visible]);\n\n const weekdays = useMemo(\n () => Array.from({ length: 7 }).map((_, i) =>\n new Date(2020, 5, 7 + i).toLocaleDateString(locale, { weekday: 'short' })\n ),\n [locale]\n );\n\n const visibleYear = visible.getFullYear();\n const YEAR_SPAN = 100;\n const yearStart = visibleYear - YEAR_SPAN;\n\n const years = useMemo(\n () => Array.from({ length: YEAR_SPAN * 2 + 1 }).map((_, i) => yearStart + i),\n [yearStart]\n );\n\n const months = useMemo(\n () => Array.from({ length: 12 }).map((_, i) =>\n new Date(2020, i, 1).toLocaleDateString(locale, { month: 'short' })\n ),\n [locale]\n );\n\n const isMonthDisabled = useCallback((year: number, month: number): boolean => {\n const start = new Date(year, month, 1);\n const end = new Date(year, month, daysInMonth(start));\n if (minDt && end < minDt) return true;\n if (maxDt && start > maxDt) return true;\n return false;\n }, [minDt, maxDt]);\n\n /* ------------------------------------------\n Commit Selections\n ------------------------------------------- */\n const commitDay = (d: number) => {\n const dt = new Date(visible.getFullYear(), visible.getMonth(), d);\n if (isDisabledDate(dt)) return;\n\n const iso = toISO(dt);\n if (!controlled) setInternal(iso);\n onChange?.(iso);\n\n setOpen(false);\n setShowYMM(false);\n };\n\n const commitMonth = (month: number) => {\n setVisible(new Date(visible.getFullYear(), month, 1));\n setShowYMM(false);\n };\n\n const commitYear = (year: number) => {\n setVisible(new Date(year, visible.getMonth(), 1));\n };\n\n /* ------------------------------------------\n Keyboard Navigation\n ------------------------------------------- */\n const focusDayByIndex = (idx: number) => {\n if (idx < 0 || idx >= grid.length) return;\n const day = grid[idx];\n if (!day) return;\n const key = `${visible.getFullYear()}-${visible.getMonth()}-${day}`;\n gridDayRefs.current[key]?.focus();\n };\n\n const onCalendarKey = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.target === calendarRef.current && ['ArrowRight', 'ArrowLeft', 'ArrowDown', 'ArrowUp'].includes(e.key)) {\n e.preventDefault();\n \n const targetDate = fromISO(selected) || new Date();\n const d = (targetDate.getMonth() === visible.getMonth() && targetDate.getFullYear() === visible.getFullYear())\n ? targetDate.getDate()\n : 1;\n\n const idx = grid.findIndex((c) => c === d);\n \n if (idx !== -1) {\n focusDayByIndex(idx);\n } else {\n const firstValidIdx = grid.findIndex((c) => c !== null);\n if (firstValidIdx !== -1) focusDayByIndex(firstValidIdx);\n }\n }\n }\n\n const onDayKey = (e: KeyboardEvent<HTMLButtonElement>, day: number) => {\n const idx = grid.findIndex((c) => c === day);\n if (idx === -1) return;\n\n const cols = 7;\n let nextIdx: number | null = null;\n\n switch (e.key) {\n case 'ArrowRight': nextIdx = idx + 1; break;\n case 'ArrowLeft': nextIdx = idx - 1; break;\n case 'ArrowDown': nextIdx = idx + cols; break;\n case 'ArrowUp': nextIdx = idx - cols; break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n commitDay(day);\n return;\n case 'PageUp':\n e.preventDefault();\n setVisible((v) => addMonths(v, -1));\n return;\n case 'PageDown':\n e.preventDefault();\n setVisible((v) => addMonths(v, 1));\n return;\n case 'Escape':\n e.preventDefault();\n setOpen(false);\n return;\n default:\n return;\n }\n\n if (nextIdx !== null && nextIdx >= 0 && nextIdx < grid.length) {\n if (grid[nextIdx] !== null) {\n e.preventDefault();\n focusDayByIndex(nextIdx);\n }\n }\n };\n\n const headerMonthLabel = visible.toLocaleDateString(locale, { month: 'long' });\n const headerYearLabel = visible.getFullYear();\n\n /* ------------------------------------------\n Render\n ------------------------------------------- */\n return (\n <div className={cn(\"nui-datepicker-root\", className)}>\n {name && <input type=\"hidden\" name={name} value={selected ?? ''} />}\n\n <button\n id={id}\n ref={triggerRef}\n type=\"button\"\n disabled={disabled}\n className=\"nui-datepicker-trigger\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => {\n setOpen((s) => !s);\n setShowYMM(false);\n }}\n >\n <span className={!selected ? \"nui-datepicker-placeholder\" : \"\"}>\n {selected\n ? formatDisplay\n ? formatDisplay(selectedDate)\n : new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }).format(selectedDate)\n : placeholder}\n </span>\n <svg className=\"nui-datepicker-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </button>\n\n {open && (\n <Portal>\n <div\n ref={popRef}\n className=\"nui-datepicker-popover\"\n style={{\n position: 'absolute',\n top: coords.top,\n left: coords.left,\n }}\n >\n <div className=\"nui-datepicker-panel\">\n \n {/* Header */}\n <div className=\"nui-datepicker-header\">\n <button\n className=\"nui-datepicker-arrow\"\n aria-label=\"Previous month\"\n onClick={() => setVisible((v) => addMonths(v, -1))}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>\n </button>\n\n <button\n className=\"nui-datepicker-ym-toggle\"\n onClick={() => setShowYMM((s) => !s)}\n aria-expanded={showYMM}\n >\n {headerMonthLabel} {headerYearLabel}\n </button>\n\n <button\n className=\"nui-datepicker-arrow\"\n aria-label=\"Next month\"\n onClick={() => setVisible((v) => addMonths(v, 1))}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>\n </button>\n </div>\n\n {/* Year + Month Selector */}\n {showYMM && (\n <div className=\"nui-datepicker-ym-panel\">\n <div className=\"nui-datepicker-year-grid\">\n {years.map((y) => {\n const sel = y === visible.getFullYear();\n return (\n <button\n key={y}\n ref={sel ? selectedYearRef : null}\n className={cn(\"nui-datepicker-year\", sel && \"selected\")}\n onClick={() => commitYear(y)}\n >\n {y}\n </button>\n );\n })}\n </div>\n\n <div className=\"nui-datepicker-month-grid\">\n {months.map((label, i) => {\n const disabled = isMonthDisabled(visible.getFullYear(), i);\n const sel = i === visible.getMonth();\n return (\n <button\n key={i}\n className={cn(\"nui-datepicker-month\", disabled && \"disabled\", sel && \"selected\")}\n disabled={disabled ? true : undefined}\n onClick={() => !disabled && commitMonth(i)}\n >\n {label}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Calendar Grid */}\n {!showYMM && (\n <div \n className=\"nui-datepicker-calendar\" \n role=\"grid\" \n aria-label={`${headerMonthLabel} ${headerYearLabel}`}\n ref={calendarRef}\n tabIndex={-1}\n onKeyDown={onCalendarKey}\n style={{ outline: 'none' }}\n >\n <div className=\"nui-datepicker-weekdays\">\n {weekdays.map((w, i) => (\n <div key={i} className=\"nui-datepicker-weekday\">{w}</div>\n ))}\n </div>\n\n <div className=\"nui-datepicker-days\">\n {grid.map((cell, idx) => {\n if (cell === null) return <div key={idx} className=\"nui-datepicker-empty\" />;\n\n const dt = new Date(visible.getFullYear(), visible.getMonth(), cell);\n const iso = toISO(dt);\n const disabled = isDisabledDate(dt);\n const sel = selected === iso;\n const today = toISO(new Date()) === iso;\n const key = `${visible.getFullYear()}-${visible.getMonth()}-${cell}`;\n\n return (\n <button\n key={key}\n ref={(el) => { gridDayRefs.current[key] = el; }}\n className={cn(\n \"nui-datepicker-day\", \n sel && \"selected\", \n today && !sel && \"today\"\n )}\n aria-selected={sel || undefined}\n onClick={() => !disabled && commitDay(cell)}\n onKeyDown={(e) => onDayKey(e, cell)}\n disabled={disabled ? true : undefined}\n >\n {cell}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n}"],"names":["pad","n","toISO","d","fromISO","s","y","m","dt","startOfMonth","addMonths","daysInMonth","DatePicker","value","defaultValue","onChange","minDate","maxDate","placeholder","name","locale","id","className","disabled","formatDisplay","controlled","internal","setInternal","useState","selected","selectedDate","visible","setVisible","open","setOpen","showYMM","setShowYMM","triggerRef","useRef","popRef","gridDayRefs","selectedYearRef","calendarRef","minDt","maxDt","isDisabledDate","useCallback","useEffect","onClickOutside","t","timeoutId","targetDate","key","firstValidKey","restoreFocus","coords","setCoords","updatePosition","triggerRect","popRect","scrollY","scrollX","top","left","padding","maxLeft","maxTop","useLayoutEffect","grid","useMemo","startDow","totalDays","cells","i","weekdays","_","visibleYear","YEAR_SPAN","yearStart","years","months","isMonthDisabled","year","month","start","end","commitDay","iso","commitMonth","commitYear","focusDayByIndex","idx","day","onCalendarKey","c","firstValidIdx","onDayKey","cols","nextIdx","v","headerMonthLabel","headerYearLabel","cn","jsxs","jsx","Portal","sel","label","w","cell","today","el","e"],"mappings":"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"}
@@ -1,265 +1,298 @@
1
- import { jsxs as f, jsx as o } from "react/jsx-runtime";
2
- import { useState as D, useRef as S, useEffect as A, useMemo as v } from "react";
1
+ import { jsxs as h, jsx as i } from "react/jsx-runtime";
2
+ import { useState as M, useRef as N, useCallback as O, useEffect as T, useLayoutEffect as De, useMemo as A } from "react";
3
3
  /* empty css */
4
- import { onClickOutside as ue } from "../../utils/onclickoutside/onClickOutside.js";
5
- import { restoreFocus as de } from "../../utils/restorefocus/restoreFocus.js";
6
- import { Portal as me } from "../../utils/portal/portal.js";
7
- const V = (n) => n < 10 ? `0${n}` : `${n}`, q = (n) => `${n.getFullYear()}-${V(n.getMonth() + 1)}-${V(n.getDate())}`;
8
- function I(n) {
9
- if (!n) return null;
10
- const [h, Y, $] = n.split("-").map(Number), w = new Date(h, Y - 1, $);
11
- return Number.isNaN(w.getTime()) ? null : w;
4
+ import { onClickOutside as ye } from "../../utils/onclickoutside/onClickOutside.js";
5
+ import { restoreFocus as ve } from "../../utils/restorefocus/restoreFocus.js";
6
+ import { cn as R } from "../../utils/cn/cn.js";
7
+ import { Portal as be } from "../../utils/portal/portal.js";
8
+ const ee = (s) => s < 10 ? `0${s}` : `${s}`, U = (s) => `${s.getFullYear()}-${ee(s.getMonth() + 1)}-${ee(s.getDate())}`;
9
+ function F(s) {
10
+ if (!s) return null;
11
+ const [v, S, P] = s.split("-").map(Number), L = new Date(v, S - 1, P);
12
+ return Number.isNaN(L.getTime()) ? null : L;
12
13
  }
13
- const z = (n) => new Date(n.getFullYear(), n.getMonth(), 1), M = (n, h) => new Date(n.getFullYear(), n.getMonth() + h, 1), G = (n) => new Date(n.getFullYear(), n.getMonth() + 1, 0).getDate();
14
- function be({
15
- value: n,
16
- defaultValue: h,
17
- onChange: Y,
18
- minDate: $,
19
- maxDate: w,
20
- placeholder: H = "Select date",
21
- name: P,
14
+ const te = (s) => new Date(s.getFullYear(), s.getMonth(), 1), E = (s, v) => new Date(s.getFullYear(), s.getMonth() + v, 1), ne = (s) => new Date(s.getFullYear(), s.getMonth() + 1, 0).getDate();
15
+ function Ce({
16
+ value: s,
17
+ defaultValue: v,
18
+ onChange: S,
19
+ minDate: P,
20
+ maxDate: L,
21
+ placeholder: re = "Select date",
22
+ name: V,
22
23
  locale: p = "en-US",
23
- id: J,
24
- className: Q = ""
24
+ id: oe,
25
+ className: ae,
26
+ disabled: ie = !1,
27
+ formatDisplay: W
25
28
  }) {
26
- const R = n !== void 0, [W, X] = D(h), b = R ? n : W, Z = I(b) ?? /* @__PURE__ */ new Date(), [a, d] = D(z(Z)), [i, g] = D(!1), [F, u] = D(!1), y = S(null), L = S(null), O = S({}), N = I($) ?? void 0, k = I(w) ?? void 0, E = (e) => !!(N && e < N || k && e > k);
27
- A(() => {
28
- if (i)
29
- return ue(L, () => {
30
- g(!1), u(!1);
31
- });
32
- }, [i]), A(() => {
33
- if (!i) return;
34
- const e = y.current;
29
+ const _ = s !== void 0, [se, le] = M(v), c = _ ? s : se, B = F(c) ?? /* @__PURE__ */ new Date(), [o, g] = M(te(B)), [d, $] = M(!1), [f, m] = M(!1), b = N(null), C = N(null), x = N({}), j = N(null), z = N(null), w = F(P) ?? void 0, k = F(L) ?? void 0, X = O((e) => !!(w && e < w || k && e > k), [w, k]);
30
+ T(() => d ? ye([C, b], () => {
31
+ $(!1), m(!1);
32
+ }) : void 0, [d]), T(() => {
33
+ if (!d) return;
34
+ const e = b.current, t = setTimeout(() => {
35
+ if (!f) {
36
+ const n = F(c) || /* @__PURE__ */ new Date(), a = n.getMonth() === o.getMonth() && n.getFullYear() === o.getFullYear() ? n.getDate() : 1, r = `${o.getFullYear()}-${o.getMonth()}-${a}`;
37
+ if (x.current[r])
38
+ x.current[r]?.focus();
39
+ else {
40
+ const l = `${o.getFullYear()}-${o.getMonth()}-1`;
41
+ x.current[l]?.focus();
42
+ }
43
+ }
44
+ }, 10);
35
45
  return () => {
36
- de(e ?? null), u(!1);
46
+ clearTimeout(t), ve(e ?? null), m(!1);
37
47
  };
38
- }, [i]);
39
- const [x, ee] = D(null);
40
- A(() => {
41
- if (!i || !y.current) return;
42
- const e = y.current.getBoundingClientRect();
43
- ee({ top: e.bottom + 8, left: e.left });
44
- }, [i, a]);
45
- const m = v(() => {
46
- const t = z(a).getDay(), r = G(a), l = [];
47
- for (let s = 0; s < t; s++) l.push(null);
48
- for (let s = 1; s <= r; s++) l.push(s);
49
- for (; l.length % 7 !== 0; ) l.push(null);
50
- return l;
51
- }, [a]), te = v(
48
+ }, [d, f, c, o]);
49
+ const [H, ce] = M({ top: -9999, left: -9999 }), D = O(() => {
50
+ if (!b.current || !C.current) return;
51
+ const e = b.current.getBoundingClientRect(), t = C.current.getBoundingClientRect(), n = window.scrollY, a = window.scrollX;
52
+ let r = e.bottom + n + 8, l = e.left + a;
53
+ const y = 16, I = document.documentElement.clientWidth - t.width - y;
54
+ l > I + a && (l = e.right + a - t.width, l < y + a && (l = y + a));
55
+ const Y = document.documentElement.clientHeight - t.height - y;
56
+ e.bottom + 8 > Y && (r = e.top + n - t.height - 8), ce({ top: r, left: l });
57
+ }, []);
58
+ De(() => {
59
+ if (d)
60
+ return D(), window.addEventListener("resize", D), window.addEventListener("scroll", D, !0), () => {
61
+ window.removeEventListener("resize", D), window.removeEventListener("scroll", D, !0);
62
+ };
63
+ }, [d, D]), T(() => {
64
+ f && j.current && j.current.scrollIntoView({ block: "center", behavior: "smooth" });
65
+ }, [f]);
66
+ const u = A(() => {
67
+ const t = te(o).getDay(), n = ne(o), a = [];
68
+ for (let r = 0; r < t; r++) a.push(null);
69
+ for (let r = 1; r <= n; r++) a.push(r);
70
+ for (; a.length % 7 !== 0; ) a.push(null);
71
+ return a;
72
+ }, [o]), de = A(
52
73
  () => Array.from({ length: 7 }).map(
53
- (e, t) => new Date(2020, 5, 7 + t).toLocaleDateString(p, {
54
- weekday: "short"
55
- })
74
+ (e, t) => new Date(2020, 5, 7 + t).toLocaleDateString(p, { weekday: "short" })
56
75
  ),
57
76
  [p]
58
- ), ne = a.getFullYear(), _ = 100, U = ne - _, re = v(
59
- () => Array.from({ length: _ * 2 + 1 }).map((e, t) => U + t),
60
- [U]
61
- ), ae = v(
77
+ ), ue = o.getFullYear(), q = 100, G = ue - q, he = A(
78
+ () => Array.from({ length: q * 2 + 1 }).map((e, t) => G + t),
79
+ [G]
80
+ ), fe = A(
62
81
  () => Array.from({ length: 12 }).map(
63
82
  (e, t) => new Date(2020, t, 1).toLocaleDateString(p, { month: "short" })
64
83
  ),
65
84
  [p]
66
- ), se = (e, t) => {
67
- const r = new Date(e, t, 1), l = new Date(e, t, G(r));
68
- return !!(N && l < N || k && r > k);
69
- }, j = (e) => {
70
- const t = new Date(a.getFullYear(), a.getMonth(), e);
71
- if (E(t)) return;
72
- const r = q(t);
73
- R || X(r), Y?.(r), g(!1), u(!1);
74
- }, oe = (e) => {
75
- d(new Date(a.getFullYear(), e, 1)), u(!1);
76
- }, le = (e) => {
77
- d(new Date(e, a.getMonth(), 1));
78
- }, ie = (e) => {
79
- if (e < 0 || e >= m.length) return;
80
- const t = m[e];
85
+ ), pe = O((e, t) => {
86
+ const n = new Date(e, t, 1), a = new Date(e, t, ne(n));
87
+ return !!(w && a < w || k && n > k);
88
+ }, [w, k]), J = (e) => {
89
+ const t = new Date(o.getFullYear(), o.getMonth(), e);
90
+ if (X(t)) return;
91
+ const n = U(t);
92
+ _ || le(n), S?.(n), $(!1), m(!1);
93
+ }, ge = (e) => {
94
+ g(new Date(o.getFullYear(), e, 1)), m(!1);
95
+ }, me = (e) => {
96
+ g(new Date(e, o.getMonth(), 1));
97
+ }, K = (e) => {
98
+ if (e < 0 || e >= u.length) return;
99
+ const t = u[e];
81
100
  if (!t) return;
82
- const r = `${a.getFullYear()}-${a.getMonth()}-${t}`;
83
- O.current[r]?.focus();
84
- }, ce = (e, t) => {
85
- const r = m.findIndex((c) => c === t);
86
- if (r === -1) return;
87
- const l = 7;
88
- let s = null;
101
+ const n = `${o.getFullYear()}-${o.getMonth()}-${t}`;
102
+ x.current[n]?.focus();
103
+ }, we = (e) => {
104
+ if (e.target === z.current && ["ArrowRight", "ArrowLeft", "ArrowDown", "ArrowUp"].includes(e.key)) {
105
+ e.preventDefault();
106
+ const t = F(c) || /* @__PURE__ */ new Date(), n = t.getMonth() === o.getMonth() && t.getFullYear() === o.getFullYear() ? t.getDate() : 1, a = u.findIndex((r) => r === n);
107
+ if (a !== -1)
108
+ K(a);
109
+ else {
110
+ const r = u.findIndex((l) => l !== null);
111
+ r !== -1 && K(r);
112
+ }
113
+ }
114
+ }, ke = (e, t) => {
115
+ const n = u.findIndex((l) => l === t);
116
+ if (n === -1) return;
117
+ const a = 7;
118
+ let r = null;
89
119
  switch (e.key) {
90
120
  case "ArrowRight":
91
- s = r + 1;
121
+ r = n + 1;
92
122
  break;
93
123
  case "ArrowLeft":
94
- s = r - 1;
124
+ r = n - 1;
95
125
  break;
96
126
  case "ArrowDown":
97
- s = r + l;
127
+ r = n + a;
98
128
  break;
99
129
  case "ArrowUp":
100
- s = r - l;
130
+ r = n - a;
101
131
  break;
102
132
  case "Enter":
103
133
  case " ":
104
- e.preventDefault(), j(t);
134
+ e.preventDefault(), J(t);
105
135
  return;
106
136
  case "PageUp":
107
- d((c) => M(c, -1));
137
+ e.preventDefault(), g((l) => E(l, -1));
108
138
  return;
109
139
  case "PageDown":
110
- d((c) => M(c, 1));
140
+ e.preventDefault(), g((l) => E(l, 1));
111
141
  return;
112
142
  case "Escape":
113
- g(!1);
143
+ e.preventDefault(), $(!1);
114
144
  return;
115
145
  default:
116
146
  return;
117
147
  }
118
- e.preventDefault(), s !== null && (s < 0 || s >= m.length || m[s] != null && ie(s));
119
- }, B = a.toLocaleDateString(p, {
120
- month: "long"
121
- }), K = a.getFullYear();
122
- return /* @__PURE__ */ f("div", { className: `ui-datepicker minimal ${Q}`, children: [
123
- P && /* @__PURE__ */ o("input", { type: "hidden", name: P, value: b ?? "" }),
124
- /* @__PURE__ */ o(
148
+ r !== null && r >= 0 && r < u.length && u[r] !== null && (e.preventDefault(), K(r));
149
+ }, Q = o.toLocaleDateString(p, { month: "long" }), Z = o.getFullYear();
150
+ return /* @__PURE__ */ h("div", { className: R("nui-datepicker-root", ae), children: [
151
+ V && /* @__PURE__ */ i("input", { type: "hidden", name: V, value: c ?? "" }),
152
+ /* @__PURE__ */ h(
125
153
  "button",
126
154
  {
127
- id: J,
128
- ref: y,
155
+ id: oe,
156
+ ref: b,
129
157
  type: "button",
130
- className: "ui-datepicker-input",
158
+ disabled: ie,
159
+ className: "nui-datepicker-trigger",
131
160
  "aria-haspopup": "dialog",
132
- "aria-expanded": i,
161
+ "aria-expanded": d,
133
162
  onClick: () => {
134
- g((e) => !e), u(!1);
163
+ $((e) => !e), m(!1);
135
164
  },
136
- children: b ?? H
165
+ children: [
166
+ /* @__PURE__ */ i("span", { className: c ? "" : "nui-datepicker-placeholder", children: c ? W ? W(B) : new Intl.DateTimeFormat(p, {
167
+ year: "numeric",
168
+ month: "short",
169
+ day: "numeric"
170
+ }).format(B) : re }),
171
+ /* @__PURE__ */ h("svg", { className: "nui-datepicker-icon", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
172
+ /* @__PURE__ */ i("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }),
173
+ /* @__PURE__ */ i("line", { x1: "16", y1: "2", x2: "16", y2: "6" }),
174
+ /* @__PURE__ */ i("line", { x1: "8", y1: "2", x2: "8", y2: "6" }),
175
+ /* @__PURE__ */ i("line", { x1: "3", y1: "10", x2: "21", y2: "10" })
176
+ ] })
177
+ ]
137
178
  }
138
179
  ),
139
- i && x && /* @__PURE__ */ o(me, { children: /* @__PURE__ */ o(
180
+ d && /* @__PURE__ */ i(be, { children: /* @__PURE__ */ i(
140
181
  "div",
141
182
  {
142
- ref: L,
143
- className: "ui-datepicker-popover",
183
+ ref: C,
184
+ className: "nui-datepicker-popover",
144
185
  style: {
145
- position: "fixed",
146
- top: x.top,
147
- left: x.left
186
+ position: "absolute",
187
+ top: H.top,
188
+ left: H.left
148
189
  },
149
- children: /* @__PURE__ */ f("div", { className: "ui-datepicker-panel minimal", children: [
150
- /* @__PURE__ */ f("div", { className: "ui-header-row", children: [
151
- /* @__PURE__ */ o(
190
+ children: /* @__PURE__ */ h("div", { className: "nui-datepicker-panel", children: [
191
+ /* @__PURE__ */ h("div", { className: "nui-datepicker-header", children: [
192
+ /* @__PURE__ */ i(
152
193
  "button",
153
194
  {
154
- className: "ui-arrow",
195
+ className: "nui-datepicker-arrow",
155
196
  "aria-label": "Previous month",
156
- onClick: () => d((e) => M(e, -1)),
157
- children: ""
197
+ onClick: () => g((e) => E(e, -1)),
198
+ children: /* @__PURE__ */ i("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ i("polyline", { points: "15 18 9 12 15 6" }) })
158
199
  }
159
200
  ),
160
- /* @__PURE__ */ f(
201
+ /* @__PURE__ */ h(
161
202
  "button",
162
203
  {
163
- className: "ui-header-center",
164
- onClick: () => u((e) => !e),
165
- "aria-expanded": F,
204
+ className: "nui-datepicker-ym-toggle",
205
+ onClick: () => m((e) => !e),
206
+ "aria-expanded": f,
166
207
  children: [
167
- B,
208
+ Q,
168
209
  " ",
169
- K
210
+ Z
170
211
  ]
171
212
  }
172
213
  ),
173
- /* @__PURE__ */ o(
214
+ /* @__PURE__ */ i(
174
215
  "button",
175
216
  {
176
- className: "ui-arrow",
217
+ className: "nui-datepicker-arrow",
177
218
  "aria-label": "Next month",
178
- onClick: () => d((e) => M(e, 1)),
179
- children: ""
219
+ onClick: () => g((e) => E(e, 1)),
220
+ children: /* @__PURE__ */ i("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ i("polyline", { points: "9 18 15 12 9 6" }) })
180
221
  }
181
222
  )
182
223
  ] }),
183
- F && /* @__PURE__ */ f("div", { className: "ui-ym-panel", children: [
184
- /* @__PURE__ */ o("div", { className: "ui-year-grid", children: re.map((e) => {
185
- const t = e === a.getFullYear();
186
- return /* @__PURE__ */ o(
224
+ f && /* @__PURE__ */ h("div", { className: "nui-datepicker-ym-panel", children: [
225
+ /* @__PURE__ */ i("div", { className: "nui-datepicker-year-grid", children: he.map((e) => {
226
+ const t = e === o.getFullYear();
227
+ return /* @__PURE__ */ i(
187
228
  "button",
188
229
  {
189
- className: `ui-year-item ${t ? "selected" : ""}`,
190
- onClick: () => le(e),
230
+ ref: t ? j : null,
231
+ className: R("nui-datepicker-year", t && "selected"),
232
+ onClick: () => me(e),
191
233
  children: e
192
234
  },
193
235
  e
194
236
  );
195
237
  }) }),
196
- /* @__PURE__ */ o("div", { className: "ui-month-grid", children: ae.map((e, t) => {
197
- const r = se(
198
- a.getFullYear(),
199
- t
200
- ), l = t === a.getMonth();
201
- return /* @__PURE__ */ o(
238
+ /* @__PURE__ */ i("div", { className: "nui-datepicker-month-grid", children: fe.map((e, t) => {
239
+ const n = pe(o.getFullYear(), t), a = t === o.getMonth();
240
+ return /* @__PURE__ */ i(
202
241
  "button",
203
242
  {
204
- className: `ui-month-item ${r ? "disabled" : ""} ${l ? "selected" : ""}`,
205
- disabled: r ? !0 : void 0,
206
- onClick: () => !r && oe(t),
243
+ className: R("nui-datepicker-month", n && "disabled", a && "selected"),
244
+ disabled: n ? !0 : void 0,
245
+ onClick: () => !n && ge(t),
207
246
  children: e
208
247
  },
209
248
  t
210
249
  );
211
250
  }) })
212
251
  ] }),
213
- !F && /* @__PURE__ */ f(
252
+ !f && /* @__PURE__ */ h(
214
253
  "div",
215
254
  {
216
- className: "ui-calendar minimal",
255
+ className: "nui-datepicker-calendar",
217
256
  role: "grid",
218
- "aria-label": `${B} ${K}`,
257
+ "aria-label": `${Q} ${Z}`,
258
+ ref: z,
259
+ tabIndex: -1,
260
+ onKeyDown: we,
261
+ style: { outline: "none" },
219
262
  children: [
220
- /* @__PURE__ */ o("div", { className: "ui-weekdays", children: te.map((e, t) => /* @__PURE__ */ o("div", { className: "ui-weekday", children: e }, t)) }),
221
- /* @__PURE__ */ o("div", { className: "ui-days-grid", children: m.map((e, t) => {
222
- if (e === null)
223
- return /* @__PURE__ */ o("div", { className: "ui-day-empty" }, t);
224
- const r = new Date(
225
- a.getFullYear(),
226
- a.getMonth(),
227
- e
228
- ), l = q(r), s = E(r), c = b === l, T = `${a.getFullYear()}-${a.getMonth()}-${e}`;
229
- return /* @__PURE__ */ o(
263
+ /* @__PURE__ */ i("div", { className: "nui-datepicker-weekdays", children: de.map((e, t) => /* @__PURE__ */ i("div", { className: "nui-datepicker-weekday", children: e }, t)) }),
264
+ /* @__PURE__ */ i("div", { className: "nui-datepicker-days", children: u.map((e, t) => {
265
+ if (e === null) return /* @__PURE__ */ i("div", { className: "nui-datepicker-empty" }, t);
266
+ const n = new Date(o.getFullYear(), o.getMonth(), e), a = U(n), r = X(n), l = c === a, y = U(/* @__PURE__ */ new Date()) === a, I = `${o.getFullYear()}-${o.getMonth()}-${e}`;
267
+ return /* @__PURE__ */ i(
230
268
  "button",
231
269
  {
232
- ref: (C) => {
233
- O.current[T] = C;
270
+ ref: (Y) => {
271
+ x.current[I] = Y;
234
272
  },
235
- className: `ui-day ${c ? "selected" : ""}`,
236
- "aria-selected": c || void 0,
237
- onClick: () => !s && j(e),
238
- onKeyDown: (C) => ce(C, e),
239
- disabled: s ? !0 : void 0,
273
+ className: R(
274
+ "nui-datepicker-day",
275
+ l && "selected",
276
+ y && !l && "today"
277
+ ),
278
+ "aria-selected": l || void 0,
279
+ onClick: () => !r && J(e),
280
+ onKeyDown: (Y) => ke(Y, e),
281
+ disabled: r ? !0 : void 0,
240
282
  children: e
241
283
  },
242
- T
284
+ I
243
285
  );
244
286
  }) })
245
287
  ]
246
288
  }
247
- ),
248
- /* @__PURE__ */ o("div", { className: "ui-footer", children: /* @__PURE__ */ o(
249
- "button",
250
- {
251
- onClick: () => {
252
- g(!1), u(!1);
253
- },
254
- children: "Close"
255
- }
256
- ) })
289
+ )
257
290
  ] })
258
291
  }
259
292
  ) })
260
293
  ] });
261
294
  }
262
295
  export {
263
- be as DatePicker
296
+ Ce as DatePicker
264
297
  };
265
298
  //# sourceMappingURL=DatePicker.js.map