@nofinite/nui 1.1.2 → 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.js","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","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.js","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","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","s","jsx","Portal","sel","label","w","cell","today","el","e"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),a=require("react");;/* empty css */const je=require("../../utils/onclickoutside/onClickOutside.cjs"),ke=require("../../utils/restorefocus/restoreFocus.cjs"),Ne=require("../../utils/portal/portal.cjs"),Z=o=>o<10?`0${o}`:`${o}`,D=o=>`${o.getFullYear()}-${Z(o.getMonth()+1)}-${Z(o.getDate())}`;function C(o){if(!o)return null;const[v,w,P]=o.split("-").map(Number),N=new Date(v,w-1,P);return Number.isNaN(N.getTime())?null:N}const ee=o=>o||null,F=o=>new Date(o.getFullYear(),o.getMonth(),1),E=(o,v)=>new Date(o.getFullYear(),o.getMonth()+v,1),te=o=>new Date(o.getFullYear(),o.getMonth()+1,0).getDate();function Me({value:o,defaultValue:v,onChange:w,minDate:P,maxDate:N,placeholder:ne="Pick range",locale:x="en-US",id:re,className:se="",nameFrom:q,nameTo:L}){const M=o!==void 0,[oe,_]=a.useState(v),c=M?o||{}:oe||{},g=C(c.from),p=C(c.to),ae=F(g??p??new Date),[i,h]=a.useState(ae),[u,d]=a.useState(!1),[U,f]=a.useState(!1),[T,K]=a.useState("from"),S=a.useRef(null),V=a.useRef(null),z=a.useRef({}),$=C(P),R=C(N),B=e=>!!($&&e<$||R&&e>R),[b,G]=a.useState(null),[y,A]=a.useState(null),[Y,H]=a.useState(!1),ie=e=>{if(!Y||!b||!y)return!1;const t=e.getTime(),n=b.getTime(),r=y.getTime();return t>=Math.min(n,r)&&t<=Math.max(n,r)};a.useEffect(()=>{if(u)return je.onClickOutside(V,()=>{d(!1),f(!1)})},[u]),a.useEffect(()=>{if(!u)return;const e=S.current;return()=>ke.restoreFocus(e)},[u]);const[I,le]=a.useState(null);a.useEffect(()=>{if(!u||!S.current)return;const e=S.current.getBoundingClientRect();le({top:e.bottom+8,left:e.left})},[u,i]);const j=a.useMemo(()=>{const t=F(i).getDay(),n=te(i),r=[];for(let l=0;l<t;l++)r.push(null);for(let l=1;l<=n;l++)r.push(l);for(;r.length%7!==0;)r.push(null);return r},[i]),ce=a.useMemo(()=>Array.from({length:7}).map((e,t)=>new Date(2020,5,7+t).toLocaleDateString(x,{weekday:"short"})),[x]),ue=i.getFullYear(),J=100,Q=ue-J,de=a.useMemo(()=>Array.from({length:J*2+1}).map((e,t)=>Q+t),[Q]),fe=a.useMemo(()=>Array.from({length:12}).map((e,t)=>new Date(2020,t,1).toLocaleDateString(x,{month:"short"})),[x]),me=(e,t)=>{const n=new Date(e,t,1),r=new Date(e,t,te(n));return!!($&&r<$||R&&n>R)},ge=(e,t)=>{if(!e&&!t)return{from:void 0,to:void 0};if(!e)return{from:void 0,to:t?D(t):void 0};if(!t)return{from:D(e),to:void 0};const n=e.getTime(),r=t.getTime();return n<=r?{from:D(e),to:D(t)}:{from:D(t),to:D(e)}},O=a.useCallback((e,t)=>{const n=ge(e,t);M||_(n),w?.(n)},[w,M]),W=e=>{const t=new Date(i.getFullYear(),i.getMonth(),e);if(B(t))return;let n=g,r=p;T==="from"?(n=t,r&&t>r&&(r=null)):(r=t,n&&t<n&&(n=t,r=null)),O(ee(n),ee(r)),n&&r&&(d(!1),f(!1))};a.useEffect(()=>{const e=()=>{if(Y){if(H(!1),b&&y){const t=b,n=y,r=t<=n?t:n,l=t<=n?n:t;O(r,l),d(!1),f(!1)}G(null),A(null)}};return window.addEventListener("mouseup",e),()=>window.removeEventListener("mouseup",e)},[Y,b,y,O]);const pe=e=>!g||!p?!1:e>g&&e<p,he=e=>g&&e.getTime()===g.getTime(),De=e=>p&&e.getTime()===p.getTime(),ve=e=>{if(e<0||e>=j.length)return;const t=j[e];if(!t)return;const n=`${i.getFullYear()}-${i.getMonth()}-${t}`;z.current[n]?.focus()},we=(e,t)=>{const n=j.findIndex(m=>m===t);if(n===-1)return;const r=7;let l=null;switch(e.key){case"ArrowRight":l=n+1;break;case"ArrowLeft":l=n-1;break;case"ArrowDown":l=n+r;break;case"ArrowUp":l=n-r;break;case"Enter":case" ":e.preventDefault(),W(t);return;case"PageUp":h(m=>E(m,-1));return;case"PageDown":h(m=>E(m,1));return;case"Escape":d(!1);return;default:return}e.preventDefault(),l!=null&&j[l]!=null&&ve(l)},xe=()=>!c.from&&!c.to?ne:c.from&&!c.to?`${c.from} → `:!c.from&&c.to?` → ${c.to}`:`${c.from} → ${c.to}`;return s.jsxs("div",{className:`ui-daterange-picker ${se}`,children:[q&&s.jsx("input",{type:"hidden",name:q,value:c.from??""}),L&&s.jsx("input",{type:"hidden",name:L,value:c.to??""}),s.jsx("button",{id:re,ref:S,type:"button",className:"drp-trigger","aria-haspopup":"dialog","aria-expanded":u,onClick:()=>{d(e=>!e),f(!1)},children:xe()}),s.jsxs("div",{className:"drp-actions",children:[s.jsx("button",{className:`drp-part ${T==="from"?"active":""}`,onClick:()=>K("from"),children:"From"}),s.jsx("button",{className:`drp-part ${T==="to"?"active":""}`,onClick:()=>K("to"),children:"To"})]}),u&&I&&s.jsx(Ne.Portal,{children:s.jsx("div",{ref:V,className:"drp-popover",style:{position:"fixed",top:I.top,left:I.left},children:s.jsxs("div",{className:"drp-panel",children:[s.jsxs("div",{className:"drp-header",children:[s.jsx("button",{className:"drp-arrow",onClick:()=>h(e=>E(e,-1)),children:""}),s.jsxs("button",{className:"drp-title",onClick:()=>f(e=>!e),children:[i.toLocaleDateString(x,{month:"long"})," ",i.getFullYear()]}),s.jsx("button",{className:"drp-arrow",onClick:()=>h(e=>E(e,1)),children:""})]}),U&&s.jsxs("div",{className:"drp-ym",children:[s.jsx("div",{className:"drp-year-grid",children:de.map(e=>s.jsx("button",{className:`drp-year ${e===i.getFullYear()?"selected":""}`,onClick:()=>h(F(new Date(e,i.getMonth(),1))),children:e},e))}),s.jsx("div",{className:"drp-month-grid",children:fe.map((e,t)=>{const n=me(i.getFullYear(),t);return s.jsx("button",{className:`drp-month ${n?"disabled":""} ${t===i.getMonth()?"selected":""}`,disabled:n?!0:void 0,onClick:()=>!n&&h(F(new Date(i.getFullYear(),t,1))),children:e},t)})})]}),!U&&s.jsxs("div",{className:"drp-calendar",children:[s.jsx("div",{className:"drp-weekdays",children:ce.map((e,t)=>s.jsx("div",{className:"drp-weekday",children:e},t))}),s.jsx("div",{className:"drp-days",children:j.map((e,t)=>{if(e===null)return s.jsx("div",{className:"drp-day-empty"},t);const n=new Date(i.getFullYear(),i.getMonth(),e),r=B(n),l=he(n),m=De(n),be=pe(n),ye=ie(n),X=`${i.getFullYear()}-${i.getMonth()}-${e}`;return s.jsx("button",{ref:k=>{z.current[X]=k},disabled:r?!0:void 0,className:["drp-day",l?"start":"",m?"end":"",be?"between":"",ye?"dragging":"",r?"disabled":""].join(" "),onClick:()=>!r&&W(e),onKeyDown:k=>we(k,e),onMouseDown:k=>{r||(k.preventDefault(),G(n),A(n),H(!0))},onMouseEnter:()=>{!Y||r||A(n)},children:e},X)})})]}),s.jsxs("div",{className:"drp-footer",children:[s.jsx("button",{className:"drp-clear",onClick:()=>{const e={from:void 0,to:void 0};M||_(e),w?.(e),d(!1),f(!1)},children:"Clear"}),s.jsx("button",{className:"drp-close",onClick:()=>{d(!1),f(!1)},children:"Close"})]})]})})})]})}exports.DateRangePicker=Me;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),o=require("react");;/* empty css */const Ee=require("../../utils/onclickoutside/onClickOutside.cjs"),Le=require("../../utils/restorefocus/restoreFocus.cjs"),M=require("../../utils/cn/cn.cjs"),Fe=require("../../utils/portal/portal.cjs"),le=i=>i<10?`0${i}`:`${i}`,C=i=>`${i.getFullYear()}-${le(i.getMonth()+1)}-${le(i.getDate())}`;function A(i){if(!i)return null;const[R,S,B]=i.split("-").map(Number),T=new Date(R,S-1,B);return Number.isNaN(T.getTime())?null:T}const ce=i=>i||null,q=i=>new Date(i.getFullYear(),i.getMonth(),1),O=(i,R)=>new Date(i.getFullYear(),i.getMonth()+R,1),ue=i=>new Date(i.getFullYear(),i.getMonth()+1,0).getDate();function Ae({value:i,defaultValue:R,onChange:S,minDate:B,maxDate:T,placeholder:de="Pick range",locale:x="en-US",id:fe,className:ge,nameFrom:X,nameTo:H,disabled:me=!1,formatDisplay:G}){const $=i!==void 0,[he,J]=o.useState(R),u=$?i||{}:he||{},g=A(u.from),m=A(u.to),pe=q(g??m??new Date),[l,v]=o.useState(pe),[h,Y]=o.useState(!1),[D,k]=o.useState(!1),[K,y]=o.useState("from"),E=o.useRef(null),I=o.useRef(null),Q=o.useRef({}),U=o.useRef(null),P=o.useRef(null),b=A(B),j=A(T),Z=o.useCallback(e=>!!(b&&e<b||j&&e>j),[b,j]),[d,ee]=o.useState(null),[f,V]=o.useState(null),[L,te]=o.useState(!1),we=o.useCallback(e=>{if(!L||!d||!f)return!1;const t=e.getTime(),n=d.getTime(),s=f.getTime();return t>=Math.min(n,s)&&t<=Math.max(n,s)},[L,d,f]);o.useEffect(()=>h?Ee.onClickOutside([I,E],()=>{Y(!1),k(!1)}):void 0,[h]),o.useEffect(()=>{if(!h)return;const e=E.current,t=setTimeout(()=>{P.current&&!D&&P.current.focus()},10);return()=>{clearTimeout(t),Le.restoreFocus(e)}},[h,D]);const[ne,xe]=o.useState({top:-9999,left:-9999}),N=o.useCallback(()=>{if(!E.current||!I.current)return;const e=E.current.getBoundingClientRect(),t=I.current.getBoundingClientRect(),n=window.scrollY,s=window.scrollX;let a=e.bottom+n+8,c=e.left+s;const p=16,z=document.documentElement.clientWidth-t.width-p;c>z+s&&(c=e.right+s-t.width,c<p+s&&(c=p+s)),e.bottom+t.height+8>document.documentElement.clientHeight-p&&(a=e.top+n-t.height-8,a<p+n&&(a=p+n)),xe({top:a,left:c})},[]);o.useLayoutEffect(()=>{if(h)return N(),window.addEventListener("resize",N),window.addEventListener("scroll",N,!0),()=>{window.removeEventListener("resize",N),window.removeEventListener("scroll",N,!0)}},[h,N]),o.useEffect(()=>{D&&U.current&&U.current.scrollIntoView({block:"center",behavior:"smooth"})},[D]);const w=o.useMemo(()=>{const t=q(l).getDay(),n=ue(l),s=[];for(let a=0;a<t;a++)s.push(null);for(let a=1;a<=n;a++)s.push(a);for(;s.length%7!==0;)s.push(null);return s},[l]),ve=o.useMemo(()=>Array.from({length:7}).map((e,t)=>new Date(2020,5,7+t).toLocaleDateString(x,{weekday:"short"})),[x]),De=l.getFullYear(),re=100,se=De-re,ke=o.useMemo(()=>Array.from({length:re*2+1}).map((e,t)=>se+t),[se]),ye=o.useMemo(()=>Array.from({length:12}).map((e,t)=>new Date(2020,t,1).toLocaleDateString(x,{month:"short"})),[x]),be=o.useCallback((e,t)=>{const n=new Date(e,t,1),s=new Date(e,t,ue(n));return!!(b&&s<b||j&&n>j)},[b,j]),je=(e,t)=>!e&&!t?{from:void 0,to:void 0}:e?t?e.getTime()<=t.getTime()?{from:C(e),to:C(t)}:{from:C(t),to:C(e)}:{from:C(e),to:void 0}:{from:void 0,to:t?C(t):void 0},W=o.useCallback((e,t)=>{const n=je(e,t);$||J(n),S?.(n)},[S,$]),oe=e=>{const t=new Date(l.getFullYear(),l.getMonth(),e);if(Z(t))return;let n=g,s=m;K==="from"?(n=t,s&&t>s&&(s=null),y("to")):(s=t,n&&t<n&&(n=t,s=null)),W(ce(n),ce(s))};o.useEffect(()=>{const e=()=>{if(L){if(te(!1),d&&f&&d.getTime()!==f.getTime()){const t=d<=f?d:f,n=d<=f?f:d;W(t,n),y("from")}ee(null),V(null)}};return window.addEventListener("mouseup",e),()=>window.removeEventListener("mouseup",e)},[L,d,f,W]);const Ne=o.useCallback(e=>!g||!m?!1:e>g&&e<m,[g,m]),Me=o.useCallback(e=>g&&e.getTime()===g.getTime(),[g]),Ce=o.useCallback(e=>m&&e.getTime()===m.getTime(),[m]),_=e=>{if(e<0||e>=w.length)return;const t=w[e];if(!t)return;const n=`${l.getFullYear()}-${l.getMonth()}-${t}`;Q.current[n]?.focus()},Re=e=>{if(e.target===P.current&&["ArrowRight","ArrowLeft","ArrowDown","ArrowUp"].includes(e.key)){e.preventDefault();const t=g||new Date,n=t.getMonth()===l.getMonth()&&t.getFullYear()===l.getFullYear()?t.getDate():1,s=w.findIndex(a=>a===n);if(s!==-1)_(s);else{const a=w.findIndex(c=>c!==null);a!==-1&&_(a)}}},Se=(e,t)=>{const n=w.findIndex(c=>c===t);if(n===-1)return;const s=7;let a=null;switch(e.key){case"ArrowRight":a=n+1;break;case"ArrowLeft":a=n-1;break;case"ArrowDown":a=n+s;break;case"ArrowUp":a=n-s;break;case"Enter":case" ":e.preventDefault(),oe(t);return;case"PageUp":v(c=>O(c,-1));return;case"PageDown":v(c=>O(c,1));return;case"Escape":Y(!1);return;default:return}e.preventDefault(),a!=null&&w[a]!=null&&_(a)},ae=e=>{if(!e)return null;const t=A(e);return t?G?G(t):new Intl.DateTimeFormat(x,{year:"numeric",month:"short",day:"numeric"}).format(t):null},Ye=()=>{if(!u.from&&!u.to)return de;const e=ae(u.from),t=ae(u.to);return e&&!t?`${e} → `:!e&&t?` → ${t}`:`${e} → ${t}`};return r.jsxs("div",{className:M.cn("nui-daterange-root",ge),children:[X&&r.jsx("input",{type:"hidden",name:X,value:u.from??""}),H&&r.jsx("input",{type:"hidden",name:H,value:u.to??""}),r.jsxs("button",{id:fe,ref:E,type:"button",disabled:me,className:"nui-daterange-trigger","aria-haspopup":"dialog","aria-expanded":h,onClick:()=>{Y(e=>!e),k(!1),!u.from&&!u.to&&y("from")},children:[r.jsx("span",{className:!u.from&&!u.to?"nui-daterange-placeholder":"",children:Ye()}),r.jsxs("svg",{className:"nui-daterange-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[r.jsx("rect",{x:"3",y:"4",width:"18",height:"18",rx:"2",ry:"2"}),r.jsx("line",{x1:"16",y1:"2",x2:"16",y2:"6"}),r.jsx("line",{x1:"8",y1:"2",x2:"8",y2:"6"}),r.jsx("line",{x1:"3",y1:"10",x2:"21",y2:"10"})]})]}),h&&r.jsx(Fe.Portal,{children:r.jsx("div",{ref:I,className:"nui-daterange-popover",style:{position:"absolute",top:ne.top,left:ne.left},children:r.jsxs("div",{className:"nui-daterange-panel",children:[r.jsxs("div",{className:"nui-daterange-actions",children:[r.jsx("button",{className:M.cn("nui-daterange-part",K==="from"&&"active"),onClick:()=>y("from"),children:"Start Date"}),r.jsx("button",{disabled:!u.from,className:M.cn("nui-daterange-part",K==="to"&&"active"),onClick:()=>y("to"),children:"End Date"})]}),r.jsxs("div",{className:"nui-daterange-header",children:[r.jsx("button",{className:"nui-daterange-arrow",onClick:()=>v(e=>O(e,-1)),"aria-label":"Previous Month",children:r.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:r.jsx("polyline",{points:"15 18 9 12 15 6"})})}),r.jsxs("button",{className:"nui-daterange-ym-toggle",onClick:()=>k(e=>!e),children:[l.toLocaleDateString(x,{month:"long"})," ",l.getFullYear()]}),r.jsx("button",{className:"nui-daterange-arrow",onClick:()=>v(e=>O(e,1)),"aria-label":"Next Month",children:r.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:r.jsx("polyline",{points:"9 18 15 12 9 6"})})})]}),D&&r.jsxs("div",{className:"nui-daterange-ym-panel",children:[r.jsx("div",{className:"nui-daterange-year-grid",children:ke.map(e=>{const t=e===l.getFullYear();return r.jsx("button",{ref:t?U:null,className:M.cn("nui-daterange-year",t&&"selected"),onClick:()=>v(q(new Date(e,l.getMonth(),1))),children:e},e)})}),r.jsx("div",{className:"nui-daterange-month-grid",children:ye.map((e,t)=>{const n=be(l.getFullYear(),t),s=t===l.getMonth();return r.jsx("button",{className:M.cn("nui-daterange-month",n&&"disabled",s&&"selected"),disabled:n?!0:void 0,onClick:()=>{n||(v(q(new Date(l.getFullYear(),t,1))),k(!1))},children:e},t)})})]}),!D&&r.jsxs("div",{className:"nui-daterange-calendar",role:"grid",ref:P,tabIndex:-1,onKeyDown:Re,style:{outline:"none"},children:[r.jsx("div",{className:"nui-daterange-weekdays",role:"row",children:ve.map((e,t)=>r.jsx("div",{className:"nui-daterange-weekday",role:"columnheader",children:e},t))}),r.jsx("div",{className:"nui-daterange-days",role:"rowgroup",children:w.map((e,t)=>{if(e===null)return r.jsx("div",{className:"nui-daterange-empty",role:"gridcell"},t);const n=new Date(l.getFullYear(),l.getMonth(),e),s=Z(n),a=Me(n),c=Ce(n),p=Ne(n),z=we(n),ie=`${l.getFullYear()}-${l.getMonth()}-${e}`;return r.jsx("button",{role:"gridcell",ref:F=>{Q.current[ie]=F},disabled:s?!0:void 0,className:M.cn("nui-daterange-day",a&&"start",c&&"end",p&&"between",z&&"dragging",s&&"disabled"),onClick:()=>!s&&oe(e),onKeyDown:F=>Se(F,e),onMouseDown:F=>{s||(F.preventDefault(),ee(n),V(n),te(!0))},onMouseEnter:()=>{!L||s||V(n)},children:e},ie)})})]}),r.jsxs("div",{className:"nui-daterange-footer",children:[r.jsx("button",{className:"nui-daterange-clear",onClick:()=>{const e={from:void 0,to:void 0};$||J(e),S?.(e),y("from"),Y(!1),k(!1)},children:"Clear"}),r.jsx("button",{className:"nui-daterange-close",onClick:()=>{Y(!1),k(!1)},children:"Apply"})]})]})})})]})}exports.DateRangePicker=Ae;
2
2
  //# sourceMappingURL=DateRangePicker.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.cjs","sources":["../../../src/components/daterangepicker/DateRangePicker.tsx"],"sourcesContent":["// DateRangePicker.tsx\r\n// Fully compliant, theme-aware, drag-select range picker\r\n// Matches your DatePicker UX exactly.\r\n\r\n// DateRangePicker.tsx — Final, Clean, Fully-Compliant Version\r\n\r\nimport {\r\n useState,\r\n useRef,\r\n useEffect,\r\n useMemo,\r\n useCallback,\r\n KeyboardEvent,\r\n} from 'react';\r\nimport './DateRangePicker.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 asDate = (v: Date | null | undefined): Date | null => (v ? v : null);\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 Types\r\n---------------------------------------------------- */\r\n\r\nexport interface DateRange {\r\n from?: string;\r\n to?: string;\r\n}\r\n\r\nexport interface DateRangePickerProps {\r\n value?: DateRange;\r\n defaultValue?: DateRange;\r\n onChange?: (r: DateRange) => void;\r\n\r\n minDate?: string;\r\n maxDate?: string;\r\n\r\n placeholder?: string;\r\n locale?: string;\r\n\r\n id?: string;\r\n className?: string;\r\n\r\n nameFrom?: string;\r\n nameTo?: string;\r\n}\r\n\r\n/* ----------------------------------------------------\r\n Component\r\n---------------------------------------------------- */\r\n\r\nexport function DateRangePicker({\r\n value,\r\n defaultValue,\r\n onChange,\r\n minDate,\r\n maxDate,\r\n placeholder = 'Pick range',\r\n locale = 'en-US',\r\n id,\r\n className = '',\r\n nameFrom,\r\n nameTo,\r\n}: DateRangePickerProps) {\r\n const controlled = value !== undefined;\r\n const [internal, setInternal] = useState<DateRange | undefined>(defaultValue);\r\n const range: DateRange = controlled ? value || {} : internal || {};\r\n\r\n const fromDate = fromISO(range.from);\r\n const toDate = fromISO(range.to);\r\n\r\n const today = new Date();\r\n const initialVisible = startOfMonth(fromDate ?? toDate ?? today);\r\n\r\n const [visible, setVisible] = useState<Date>(initialVisible);\r\n const [open, setOpen] = useState(false);\r\n const [showYMM, setShowYMM] = useState(false);\r\n\r\n const [activePart, setActivePart] = useState<'from' | 'to'>('from');\r\n\r\n const triggerRef = useRef<HTMLButtonElement | null>(null);\r\n const popRef = useRef<HTMLDivElement | null>(null);\r\n const dayRefs = useRef<Record<string, HTMLButtonElement | null>>({});\r\n\r\n /* ----------------------------------------------------\r\n Min/max\r\n ---------------------------------------------------- */\r\n\r\n const minDt = fromISO(minDate);\r\n const maxDt = fromISO(maxDate);\r\n\r\n const isDisabled = (d: Date) => {\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 Drag select\r\n ---------------------------------------------------- */\r\n\r\n const [dragStart, setDragStart] = useState<Date | null>(null);\r\n const [dragEnd, setDragEnd] = useState<Date | null>(null);\r\n const [isDragging, setIsDragging] = useState(false);\r\n\r\n const inDragRange = (d: Date) => {\r\n if (!isDragging || !dragStart || !dragEnd) return false;\r\n const t = d.getTime();\r\n const a = dragStart.getTime();\r\n const b = dragEnd.getTime();\r\n return t >= Math.min(a, b) && t <= Math.max(a, b);\r\n };\r\n\r\n /* ----------------------------------------------------\r\n Click outside to close\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\r\n ---------------------------------------------------- */\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const t = triggerRef.current;\r\n return () => restoreFocus(t);\r\n }, [open]);\r\n\r\n /* ----------------------------------------------------\r\n Popover position\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 Grid computation\r\n ---------------------------------------------------- */\r\n\r\n const grid = useMemo(() => {\r\n const first = startOfMonth(visible);\r\n const startDow = first.getDay();\r\n const total = daysInMonth(visible);\r\n\r\n const g: (number | null)[] = [];\r\n for (let i = 0; i < startDow; i++) g.push(null);\r\n for (let d = 1; d <= total; d++) g.push(d);\r\n while (g.length % 7 !== 0) g.push(null);\r\n return g;\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 Month/year panel\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 = (y: number, m: number) => {\r\n const s = new Date(y, m, 1);\r\n const e = new Date(y, m, daysInMonth(s));\r\n if (minDt && e < minDt) return true;\r\n if (maxDt && s > maxDt) return true;\r\n return false;\r\n };\r\n\r\n /* ----------------------------------------------------\r\n Normalize + commit range\r\n ---------------------------------------------------- */\r\n\r\n const normalizeRange = (a: Date | null, b: Date | null) => {\r\n if (!a && !b) return { from: undefined, to: undefined };\r\n if (!a) return { from: undefined, to: b ? toISO(b) : undefined };\r\n if (!b) return { from: toISO(a), to: undefined };\r\n\r\n const ta = a.getTime();\r\n const tb = b.getTime();\r\n\r\n return ta <= tb\r\n ? { from: toISO(a), to: toISO(b) }\r\n : { from: toISO(b), to: toISO(a) };\r\n };\r\n\r\n const commitRange = useCallback(\r\n (a: Date | null, b: Date | null) => {\r\n const out = normalizeRange(a, b);\r\n if (!controlled) setInternal(out);\r\n onChange?.(out);\r\n },\r\n [onChange, controlled]\r\n );\r\n\r\n /* ----------------------------------------------------\r\n Clicking days\r\n ---------------------------------------------------- */\r\n\r\n const pickDay = (d: number) => {\r\n const dt = new Date(visible.getFullYear(), visible.getMonth(), d);\r\n if (isDisabled(dt)) return;\r\n\r\n let s = fromDate;\r\n let e = toDate;\r\n\r\n if (activePart === 'from') {\r\n s = dt;\r\n if (e && dt > e) e = null;\r\n } else {\r\n e = dt;\r\n if (s && dt < s) {\r\n s = dt;\r\n e = null;\r\n }\r\n }\r\n\r\n commitRange(asDate(s), asDate(e));\r\n\r\n if (s && e) {\r\n setOpen(false);\r\n setShowYMM(false);\r\n }\r\n };\r\n\r\n /* ----------------------------------------------------\r\n Drag end (global)\r\n ---------------------------------------------------- */\r\n\r\n useEffect(() => {\r\n const stopDrag = () => {\r\n if (!isDragging) return;\r\n\r\n setIsDragging(false);\r\n\r\n if (dragStart && dragEnd) {\r\n const a = dragStart;\r\n const b = dragEnd;\r\n const s = a <= b ? a : b;\r\n const e = a <= b ? b : a;\r\n\r\n commitRange(s, e);\r\n setOpen(false);\r\n setShowYMM(false);\r\n }\r\n\r\n setDragStart(null);\r\n setDragEnd(null);\r\n };\r\n\r\n window.addEventListener('mouseup', stopDrag);\r\n return () => window.removeEventListener('mouseup', stopDrag);\r\n }, [isDragging, dragStart, dragEnd, commitRange]);\r\n\r\n /* ----------------------------------------------------\r\n Range flags\r\n ---------------------------------------------------- */\r\n\r\n const inRange = (dt: Date) => {\r\n if (!fromDate || !toDate) return false;\r\n return dt > fromDate && dt < toDate;\r\n };\r\n\r\n const isStart = (dt: Date) => fromDate && dt.getTime() === fromDate.getTime();\r\n const isEnd = (dt: Date) => toDate && dt.getTime() === toDate.getTime();\r\n\r\n /* ----------------------------------------------------\r\n Keyboard nav\r\n ---------------------------------------------------- */\r\n\r\n const focusDay = (idx: number) => {\r\n if (idx < 0 || idx >= grid.length) return;\r\n const d = grid[idx];\r\n if (!d) return;\r\n const key = `${visible.getFullYear()}-${visible.getMonth()}-${d}`;\r\n dayRefs.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 pickDay(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 if (nextIdx != null && grid[nextIdx] != null) focusDay(nextIdx);\r\n };\r\n\r\n /* ----------------------------------------------------\r\n Trigger label\r\n ---------------------------------------------------- */\r\n\r\n const label = (): string => {\r\n if (!range.from && !range.to) return placeholder;\r\n if (range.from && !range.to) return `${range.from} → `;\r\n if (!range.from && range.to) return ` → ${range.to}`;\r\n return `${range.from} → ${range.to}`;\r\n };\r\n\r\n /* ----------------------------------------------------\r\n Render\r\n ---------------------------------------------------- */\r\n\r\n return (\r\n <div className={`ui-daterange-picker ${className}`}>\r\n {nameFrom && (\r\n <input type=\"hidden\" name={nameFrom} value={range.from ?? ''} />\r\n )}\r\n {nameTo && <input type=\"hidden\" name={nameTo} value={range.to ?? ''} />}\r\n\r\n <button\r\n id={id}\r\n ref={triggerRef}\r\n type=\"button\"\r\n className=\"drp-trigger\"\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 {label()}\r\n </button>\r\n\r\n <div className=\"drp-actions\">\r\n <button\r\n className={`drp-part ${activePart === 'from' ? 'active' : ''}`}\r\n onClick={() => setActivePart('from')}\r\n >\r\n From\r\n </button>\r\n\r\n <button\r\n className={`drp-part ${activePart === 'to' ? 'active' : ''}`}\r\n onClick={() => setActivePart('to')}\r\n >\r\n To\r\n </button>\r\n </div>\r\n\r\n {open && pos && (\r\n <Portal>\r\n <div\r\n ref={popRef}\r\n className=\"drp-popover\"\r\n style={{ position: 'fixed', top: pos.top, left: pos.left }}\r\n >\r\n <div className=\"drp-panel\">\r\n {/* HEADER */}\r\n <div className=\"drp-header\">\r\n <button\r\n className=\"drp-arrow\"\r\n onClick={() => setVisible((v) => addMonths(v, -1))}\r\n >\r\n ‹\r\n </button>\r\n\r\n <button\r\n className=\"drp-title\"\r\n onClick={() => setShowYMM((s) => !s)}\r\n >\r\n {visible.toLocaleDateString(locale, {\r\n month: 'long',\r\n })}{' '}\r\n {visible.getFullYear()}\r\n </button>\r\n\r\n <button\r\n className=\"drp-arrow\"\r\n onClick={() => setVisible((v) => addMonths(v, 1))}\r\n >\r\n ›\r\n </button>\r\n </div>\r\n\r\n {/* YEAR + MONTH PANEL */}\r\n {showYMM && (\r\n <div className=\"drp-ym\">\r\n <div className=\"drp-year-grid\">\r\n {years.map((y) => (\r\n <button\r\n key={y}\r\n className={`drp-year ${\r\n y === visible.getFullYear() ? 'selected' : ''\r\n }`}\r\n onClick={() =>\r\n setVisible(\r\n startOfMonth(new Date(y, visible.getMonth(), 1))\r\n )\r\n }\r\n >\r\n {y}\r\n </button>\r\n ))}\r\n </div>\r\n\r\n <div className=\"drp-month-grid\">\r\n {months.map((ml, i) => {\r\n const disabled = isMonthDisabled(\r\n visible.getFullYear(),\r\n i\r\n );\r\n return (\r\n <button\r\n key={i}\r\n className={`drp-month ${disabled ? 'disabled' : ''} ${\r\n i === visible.getMonth() ? 'selected' : ''\r\n }`}\r\n disabled={disabled ? true : undefined}\r\n onClick={() =>\r\n !disabled &&\r\n setVisible(\r\n startOfMonth(\r\n new Date(visible.getFullYear(), i, 1)\r\n )\r\n )\r\n }\r\n >\r\n {ml}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* CALENDAR */}\r\n {!showYMM && (\r\n <div className=\"drp-calendar\">\r\n <div className=\"drp-weekdays\">\r\n {weekdays.map((w, i) => (\r\n <div key={i} className=\"drp-weekday\">\r\n {w}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n <div className=\"drp-days\">\r\n {grid.map((cell, idx) => {\r\n if (cell === null)\r\n return <div key={idx} className=\"drp-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 disabled = isDisabled(dt);\r\n\r\n const start = isStart(dt);\r\n const end = isEnd(dt);\r\n const between = inRange(dt);\r\n const drag = inDragRange(dt);\r\n\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 dayRefs.current[key] = el;\r\n }}\r\n disabled={disabled ? true : undefined}\r\n className={[\r\n 'drp-day',\r\n start ? 'start' : '',\r\n end ? 'end' : '',\r\n between ? 'between' : '',\r\n drag ? 'dragging' : '',\r\n disabled ? 'disabled' : '',\r\n ].join(' ')}\r\n onClick={() => !disabled && pickDay(cell)}\r\n onKeyDown={(e) => onDayKey(e, cell)}\r\n onMouseDown={(e) => {\r\n if (disabled) return;\r\n e.preventDefault();\r\n setDragStart(dt);\r\n setDragEnd(dt);\r\n setIsDragging(true);\r\n }}\r\n onMouseEnter={() => {\r\n if (!isDragging || disabled) return;\r\n setDragEnd(dt);\r\n }}\r\n >\r\n {cell}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* FOOTER */}\r\n <div className=\"drp-footer\">\r\n <button\r\n className=\"drp-clear\"\r\n onClick={() => {\r\n const empty = { from: undefined, to: undefined };\r\n if (!controlled) setInternal(empty);\r\n onChange?.(empty);\r\n setOpen(false);\r\n setShowYMM(false);\r\n }}\r\n >\r\n Clear\r\n </button>\r\n\r\n <button\r\n className=\"drp-close\"\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","n","toISO","d","fromISO","s","y","m","dt","asDate","v","startOfMonth","addMonths","daysInMonth","DateRangePicker","value","defaultValue","onChange","minDate","maxDate","placeholder","locale","id","className","nameFrom","nameTo","controlled","internal","setInternal","useState","range","fromDate","toDate","initialVisible","visible","setVisible","open","setOpen","showYMM","setShowYMM","activePart","setActivePart","triggerRef","useRef","popRef","dayRefs","minDt","maxDt","isDisabled","dragStart","setDragStart","dragEnd","setDragEnd","isDragging","setIsDragging","inDragRange","a","b","useEffect","onClickOutside","t","restoreFocus","pos","setPos","r","grid","useMemo","startDow","total","g","i","weekdays","_","visibleYear","YEAR_SPAN","yearStart","years","months","isMonthDisabled","e","normalizeRange","ta","tb","commitRange","useCallback","out","pickDay","stopDrag","inRange","isStart","isEnd","focusDay","idx","key","onDayKey","day","c","cols","nextIdx","label","jsxs","jsx","Portal","ml","disabled","w","cell","start","end","between","drag","el","empty"],"mappings":"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"}
1
+ {"version":3,"file":"DateRangePicker.cjs","sources":["../../../src/components/daterangepicker/DateRangePicker.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useState,\n useRef,\n useEffect,\n useMemo,\n useCallback,\n KeyboardEvent,\n useLayoutEffect,\n} from 'react';\nimport { cn } from '../../utils';\nimport { Portal, onClickOutside, restoreFocus } from '../../utils';\nimport './DateRangePicker.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 asDate = (v: Date | null | undefined): Date | null => (v ? v : null);\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 Types\n---------------------------------------------------- */\nexport interface DateRange {\n from?: string;\n to?: string;\n}\n\nexport interface DateRangePickerProps {\n value?: DateRange;\n defaultValue?: DateRange;\n onChange?: (r: DateRange) => void;\n\n minDate?: string;\n maxDate?: string;\n\n placeholder?: string;\n locale?: string;\n\n id?: string;\n className?: string;\n\n nameFrom?: string;\n nameTo?: string;\n disabled?: boolean;\n \n formatDisplay?: (date: Date) => string;\n}\n\n/* ----------------------------------------------------\n Component\n---------------------------------------------------- */\nexport function DateRangePicker({\n value,\n defaultValue,\n onChange,\n minDate,\n maxDate,\n placeholder = 'Pick range',\n locale = 'en-US',\n id,\n className,\n nameFrom,\n nameTo,\n disabled = false,\n formatDisplay,\n}: DateRangePickerProps) {\n const controlled = value !== undefined;\n const [internal, setInternal] = useState<DateRange | undefined>(defaultValue);\n const range: DateRange = controlled ? value || {} : internal || {};\n\n const fromDate = fromISO(range.from);\n const toDate = fromISO(range.to);\n\n const today = new Date();\n const initialVisible = startOfMonth(fromDate ?? toDate ?? today);\n\n const [visible, setVisible] = useState<Date>(initialVisible);\n const [open, setOpen] = useState(false);\n const [showYMM, setShowYMM] = useState(false);\n\n const [activePart, setActivePart] = useState<'from' | 'to'>('from');\n\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const popRef = useRef<HTMLDivElement | null>(null);\n const dayRefs = useRef<Record<string, HTMLButtonElement | null>>({});\n const selectedYearRef = useRef<HTMLButtonElement | null>(null);\n \n const calendarRef = useRef<HTMLDivElement | null>(null);\n\n /* ----------------------------------------------------\n Min/max\n ---------------------------------------------------- */\n const minDt = fromISO(minDate);\n const maxDt = fromISO(maxDate);\n\n const isDisabled = useCallback((d: Date) => {\n if (minDt && d < minDt) return true;\n if (maxDt && d > maxDt) return true;\n return false;\n }, [minDt, maxDt]);\n\n /* ----------------------------------------------------\n Drag select\n ---------------------------------------------------- */\n const [dragStart, setDragStart] = useState<Date | null>(null);\n const [dragEnd, setDragEnd] = useState<Date | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n\n const inDragRange = useCallback((d: Date) => {\n if (!isDragging || !dragStart || !dragEnd) return false;\n const t = d.getTime();\n const a = dragStart.getTime();\n const b = dragEnd.getTime();\n return t >= Math.min(a, b) && t <= Math.max(a, b);\n }, [isDragging, dragStart, dragEnd]);\n\n /* ----------------------------------------------------\n Click outside to close & Restore 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 (calendarRef.current && !showYMM) {\n calendarRef.current.focus();\n }\n }, 10);\n\n return () => {\n clearTimeout(timeoutId);\n restoreFocus(t);\n };\n }, [open, showYMM]);\n\n /* ----------------------------------------------------\n Smart Popover Position (with collision math)\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\n const maxLeft = document.documentElement.clientWidth - popRect.width - padding;\n if (left > maxLeft + scrollX) {\n left = triggerRect.right + scrollX - popRect.width;\n if (left < padding + scrollX) left = padding + scrollX; \n }\n\n if (triggerRect.bottom + popRect.height + 8 > document.documentElement.clientHeight - padding) {\n top = triggerRect.top + scrollY - popRect.height - 8;\n \n if (top < padding + scrollY) {\n top = padding + scrollY; \n }\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 Grid computation\n ---------------------------------------------------- */\n const grid = useMemo(() => {\n const first = startOfMonth(visible);\n const startDow = first.getDay();\n const total = daysInMonth(visible);\n const g: (number | null)[] = [];\n \n for (let i = 0; i < startDow; i++) g.push(null);\n for (let d = 1; d <= total; d++) g.push(d);\n while (g.length % 7 !== 0) g.push(null);\n return g;\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 /* ----------------------------------------------------\n Month/year panel\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((y: number, m: number) => {\n const s = new Date(y, m, 1);\n const e = new Date(y, m, daysInMonth(s));\n if (minDt && e < minDt) return true;\n if (maxDt && s > maxDt) return true;\n return false;\n }, [minDt, maxDt]);\n\n /* ----------------------------------------------------\n Normalize + commit range\n ---------------------------------------------------- */\n const normalizeRange = (a: Date | null, b: Date | null) => {\n if (!a && !b) return { from: undefined, to: undefined };\n if (!a) return { from: undefined, to: b ? toISO(b) : undefined };\n if (!b) return { from: toISO(a), to: undefined };\n\n return a.getTime() <= b.getTime()\n ? { from: toISO(a), to: toISO(b) }\n : { from: toISO(b), to: toISO(a) };\n };\n\n const commitRange = useCallback((a: Date | null, b: Date | null) => {\n const out = normalizeRange(a, b);\n if (!controlled) setInternal(out);\n onChange?.(out);\n }, [onChange, controlled]);\n\n /* ----------------------------------------------------\n Clicking days\n ---------------------------------------------------- */\n const pickDay = (d: number) => {\n const dt = new Date(visible.getFullYear(), visible.getMonth(), d);\n if (isDisabled(dt)) return;\n\n let s = fromDate;\n let e = toDate;\n\n if (activePart === 'from') {\n s = dt;\n if (e && dt > e) e = null;\n setActivePart('to'); \n } else {\n e = dt;\n if (s && dt < s) {\n s = dt;\n e = null;\n }\n }\n\n commitRange(asDate(s), asDate(e));\n };\n\n /* ----------------------------------------------------\n Drag end (global)\n ---------------------------------------------------- */\n useEffect(() => {\n const stopDrag = () => {\n if (!isDragging) return;\n setIsDragging(false);\n\n if (dragStart && dragEnd) {\n if (dragStart.getTime() !== dragEnd.getTime()) {\n const s = dragStart <= dragEnd ? dragStart : dragEnd;\n const e = dragStart <= dragEnd ? dragEnd : dragStart;\n commitRange(s, e);\n setActivePart('from');\n }\n }\n\n setDragStart(null);\n setDragEnd(null);\n };\n\n window.addEventListener('mouseup', stopDrag);\n return () => window.removeEventListener('mouseup', stopDrag);\n }, [isDragging, dragStart, dragEnd, commitRange]);\n\n /* ----------------------------------------------------\n Range flags\n ---------------------------------------------------- */\n const inRange = useCallback((dt: Date) => {\n if (!fromDate || !toDate) return false;\n return dt > fromDate && dt < toDate;\n }, [fromDate, toDate]);\n\n const isStart = useCallback((dt: Date) => \n fromDate && dt.getTime() === fromDate.getTime()\n , [fromDate]);\n \n const isEnd = useCallback((dt: Date) => \n toDate && dt.getTime() === toDate.getTime()\n , [toDate]);\n\n /* ----------------------------------------------------\n Keyboard nav\n ---------------------------------------------------- */\n const focusDay = (idx: number) => {\n if (idx < 0 || idx >= grid.length) return;\n const d = grid[idx];\n if (!d) return;\n const key = `${visible.getFullYear()}-${visible.getMonth()}-${d}`;\n dayRefs.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 = fromDate || 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 focusDay(idx);\n } else {\n const firstValidIdx = grid.findIndex((c) => c !== null);\n if (firstValidIdx !== -1) focusDay(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 pickDay(day);\n return;\n case 'PageUp':\n setVisible((v) => addMonths(v, -1));\n return;\n case 'PageDown':\n setVisible((v) => addMonths(v, 1));\n return;\n case 'Escape':\n setOpen(false);\n return;\n default: return;\n }\n\n e.preventDefault();\n if (nextIdx != null && grid[nextIdx] != null) focusDay(nextIdx);\n };\n\n /* ----------------------------------------------------\n Trigger label (with formatting)\n ---------------------------------------------------- */\n const formatLabel = (iso?: string) => {\n if (!iso) return null;\n const d = fromISO(iso);\n if (!d) return null;\n return formatDisplay \n ? formatDisplay(d)\n : new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'short', day: 'numeric' }).format(d);\n };\n\n const label = (): string => {\n if (!range.from && !range.to) return placeholder;\n const f = formatLabel(range.from);\n const t = formatLabel(range.to);\n \n if (f && !t) return `${f} → `;\n if (!f && t) return ` → ${t}`;\n return `${f} → ${t}`;\n };\n\n /* ----------------------------------------------------\n Render\n ---------------------------------------------------- */\n return (\n <div className={cn(\"nui-daterange-root\", className)}>\n {nameFrom && <input type=\"hidden\" name={nameFrom} value={range.from ?? ''} />}\n {nameTo && <input type=\"hidden\" name={nameTo} value={range.to ?? ''} />}\n\n <button\n id={id}\n ref={triggerRef}\n type=\"button\"\n disabled={disabled}\n className=\"nui-daterange-trigger\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => {\n setOpen((s) => !s);\n setShowYMM(false);\n if (!range.from && !range.to) {\n setActivePart('from');\n }\n }}\n >\n <span className={(!range.from && !range.to) ? \"nui-daterange-placeholder\" : \"\"}>\n {label()}\n </span>\n <svg className=\"nui-daterange-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-daterange-popover\"\n style={{ position: 'absolute', top: coords.top, left: coords.left }}\n >\n <div className=\"nui-daterange-panel\">\n \n {/* Internal Part Toggle */}\n <div className=\"nui-daterange-actions\">\n <button\n className={cn(\"nui-daterange-part\", activePart === 'from' && \"active\")}\n onClick={() => setActivePart('from')}\n >\n Start Date\n </button>\n <button\n disabled={!range.from}\n className={cn(\"nui-daterange-part\", activePart === 'to' && \"active\")}\n onClick={() => setActivePart('to')}\n >\n End Date\n </button>\n </div>\n\n {/* HEADER */}\n <div className=\"nui-daterange-header\">\n <button\n className=\"nui-daterange-arrow\"\n onClick={() => setVisible((v) => addMonths(v, -1))}\n aria-label=\"Previous Month\"\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-daterange-ym-toggle\"\n onClick={() => setShowYMM((s) => !s)}\n >\n {visible.toLocaleDateString(locale, { month: 'long' })} {visible.getFullYear()}\n </button>\n\n <button\n className=\"nui-daterange-arrow\"\n onClick={() => setVisible((v) => addMonths(v, 1))}\n aria-label=\"Next Month\"\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 PANEL */}\n {showYMM && (\n <div className=\"nui-daterange-ym-panel\">\n <div className=\"nui-daterange-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-daterange-year\", sel && \"selected\")}\n onClick={() => setVisible(startOfMonth(new Date(y, visible.getMonth(), 1)))}\n >\n {y}\n </button>\n );\n })}\n </div>\n\n <div className=\"nui-daterange-month-grid\">\n {months.map((ml, 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-daterange-month\", disabled && \"disabled\", sel && \"selected\")}\n disabled={disabled ? true : undefined}\n onClick={() => {\n if (!disabled) {\n setVisible(startOfMonth(new Date(visible.getFullYear(), i, 1)));\n setShowYMM(false);\n }\n }}\n >\n {ml}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* CALENDAR */}\n {!showYMM && (\n <div \n className=\"nui-daterange-calendar\" \n role=\"grid\"\n ref={calendarRef}\n tabIndex={-1}\n onKeyDown={onCalendarKey}\n style={{ outline: 'none' }}\n >\n <div className=\"nui-daterange-weekdays\" role=\"row\">\n {weekdays.map((w, i) => (\n <div key={i} className=\"nui-daterange-weekday\" role=\"columnheader\">{w}</div>\n ))}\n </div>\n\n <div className=\"nui-daterange-days\" role=\"rowgroup\">\n {grid.map((cell, idx) => {\n if (cell === null) return <div key={idx} className=\"nui-daterange-empty\" role=\"gridcell\" />;\n\n const dt = new Date(visible.getFullYear(), visible.getMonth(), cell);\n const disabled = isDisabled(dt);\n\n const start = isStart(dt);\n const end = isEnd(dt);\n const between = inRange(dt);\n const drag = inDragRange(dt);\n\n const key = `${visible.getFullYear()}-${visible.getMonth()}-${cell}`;\n\n return (\n <button\n key={key}\n role=\"gridcell\"\n ref={(el) => { dayRefs.current[key] = el; }}\n disabled={disabled ? true : undefined}\n className={cn(\n \"nui-daterange-day\",\n start && \"start\",\n end && \"end\",\n between && \"between\",\n drag && \"dragging\",\n disabled && \"disabled\"\n )}\n onClick={() => !disabled && pickDay(cell)}\n onKeyDown={(e) => onDayKey(e, cell)}\n onMouseDown={(e) => {\n if (disabled) return;\n e.preventDefault(); \n setDragStart(dt);\n setDragEnd(dt);\n setIsDragging(true);\n }}\n onMouseEnter={() => {\n if (!isDragging || disabled) return;\n setDragEnd(dt);\n }}\n >\n {cell}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* FOOTER */}\n <div className=\"nui-daterange-footer\">\n <button\n className=\"nui-daterange-clear\"\n onClick={() => {\n const empty = { from: undefined, to: undefined };\n if (!controlled) setInternal(empty);\n onChange?.(empty);\n setActivePart('from');\n setOpen(false); // Restored proper clear/close behavior\n setShowYMM(false);\n }}\n >\n Clear\n </button>\n\n <button\n className=\"nui-daterange-close\"\n onClick={() => {\n setOpen(false);\n setShowYMM(false);\n }}\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n}"],"names":["pad","n","toISO","d","fromISO","s","y","m","dt","asDate","v","startOfMonth","addMonths","daysInMonth","DateRangePicker","value","defaultValue","onChange","minDate","maxDate","placeholder","locale","id","className","nameFrom","nameTo","disabled","formatDisplay","controlled","internal","setInternal","useState","range","fromDate","toDate","initialVisible","visible","setVisible","open","setOpen","showYMM","setShowYMM","activePart","setActivePart","triggerRef","useRef","popRef","dayRefs","selectedYearRef","calendarRef","minDt","maxDt","isDisabled","useCallback","dragStart","setDragStart","dragEnd","setDragEnd","isDragging","setIsDragging","inDragRange","a","b","useEffect","onClickOutside","t","timeoutId","restoreFocus","coords","setCoords","updatePosition","triggerRect","popRect","scrollY","scrollX","top","left","padding","maxLeft","useLayoutEffect","grid","useMemo","startDow","total","g","i","weekdays","_","visibleYear","YEAR_SPAN","yearStart","years","months","isMonthDisabled","e","normalizeRange","commitRange","out","pickDay","stopDrag","inRange","isStart","isEnd","focusDay","idx","key","onCalendarKey","targetDate","c","firstValidIdx","onDayKey","day","cols","nextIdx","formatLabel","iso","label","f","cn","jsx","jsxs","Portal","sel","ml","w","cell","start","end","between","drag","el","empty"],"mappings":"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"}