@nofinite/nui 1.0.0 → 1.0.2

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 (348) hide show
  1. package/dist/components/accordion/Accordion.cjs +2 -0
  2. package/dist/components/accordion/Accordion.cjs.map +1 -0
  3. package/dist/components/accordion/Accordion.js +51 -0
  4. package/dist/components/accordion/Accordion.js.map +1 -0
  5. package/dist/components/alert/Alert.cjs +2 -0
  6. package/dist/components/alert/Alert.cjs.map +1 -0
  7. package/dist/components/alert/Alert.js +32 -0
  8. package/dist/components/alert/Alert.js.map +1 -0
  9. package/dist/components/avatar/Avatar.cjs +2 -0
  10. package/dist/components/avatar/Avatar.cjs.map +1 -0
  11. package/dist/components/avatar/Avatar.js +51 -0
  12. package/dist/components/avatar/Avatar.js.map +1 -0
  13. package/dist/components/avatar/AvatarGroup.cjs +2 -0
  14. package/dist/components/avatar/AvatarGroup.cjs.map +1 -0
  15. package/dist/components/avatar/AvatarGroup.js +32 -0
  16. package/dist/components/avatar/AvatarGroup.js.map +1 -0
  17. package/dist/components/badge/Badge.cjs +2 -0
  18. package/dist/components/badge/Badge.cjs.map +1 -0
  19. package/dist/components/badge/Badge.js +81 -0
  20. package/dist/components/badge/Badge.js.map +1 -0
  21. package/dist/components/badge/BadgeGroup.cjs +2 -0
  22. package/dist/components/badge/BadgeGroup.cjs.map +1 -0
  23. package/dist/components/badge/BadgeGroup.js +17 -0
  24. package/dist/components/badge/BadgeGroup.js.map +1 -0
  25. package/dist/components/breadcrumbs/Breadcrumbs.cjs +2 -0
  26. package/dist/components/breadcrumbs/Breadcrumbs.cjs.map +1 -0
  27. package/dist/components/breadcrumbs/Breadcrumbs.js +46 -0
  28. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
  29. package/dist/components/button/Button.cjs +2 -0
  30. package/dist/components/button/Button.cjs.map +1 -0
  31. package/dist/components/button/Button.js +21 -0
  32. package/dist/components/button/Button.js.map +1 -0
  33. package/dist/components/card/Card.cjs +2 -0
  34. package/dist/components/card/Card.cjs.map +1 -0
  35. package/dist/components/card/Card.js +50 -0
  36. package/dist/components/card/Card.js.map +1 -0
  37. package/dist/components/checkbox/Checkbox.cjs +2 -0
  38. package/dist/components/checkbox/Checkbox.cjs.map +1 -0
  39. package/dist/components/checkbox/Checkbox.js +46 -0
  40. package/dist/components/checkbox/Checkbox.js.map +1 -0
  41. package/dist/components/chip/Chip.cjs +2 -0
  42. package/dist/components/chip/Chip.cjs.map +1 -0
  43. package/dist/components/chip/Chip.js +51 -0
  44. package/dist/components/chip/Chip.js.map +1 -0
  45. package/dist/components/combobox/Combobox.cjs +2 -0
  46. package/dist/components/combobox/Combobox.cjs.map +1 -0
  47. package/dist/components/combobox/Combobox.js +114 -0
  48. package/dist/components/combobox/Combobox.js.map +1 -0
  49. package/dist/components/commandpalette/CommandPalette.cjs +2 -0
  50. package/dist/components/commandpalette/CommandPalette.cjs.map +1 -0
  51. package/dist/components/commandpalette/CommandPalette.js +111 -0
  52. package/dist/components/commandpalette/CommandPalette.js.map +1 -0
  53. package/dist/components/contextmenu/ContextMenu.cjs +2 -0
  54. package/dist/components/contextmenu/ContextMenu.cjs.map +1 -0
  55. package/dist/components/contextmenu/ContextMenu.js +104 -0
  56. package/dist/components/contextmenu/ContextMenu.js.map +1 -0
  57. package/dist/components/datagrid/DataGrid.cjs +2 -0
  58. package/dist/components/datagrid/DataGrid.cjs.map +1 -0
  59. package/dist/components/datagrid/DataGrid.js +227 -0
  60. package/dist/components/datagrid/DataGrid.js.map +1 -0
  61. package/dist/components/datepicker/DatePicker.cjs +2 -0
  62. package/dist/components/datepicker/DatePicker.cjs.map +1 -0
  63. package/dist/components/datepicker/DatePicker.js +265 -0
  64. package/dist/components/datepicker/DatePicker.js.map +1 -0
  65. package/dist/components/daterangepicker/DateRangePicker.cjs +2 -0
  66. package/dist/components/daterangepicker/DateRangePicker.cjs.map +1 -0
  67. package/dist/components/daterangepicker/DateRangePicker.js +322 -0
  68. package/dist/components/daterangepicker/DateRangePicker.js.map +1 -0
  69. package/dist/components/drawer/Drawer.cjs +2 -0
  70. package/dist/components/drawer/Drawer.cjs.map +1 -0
  71. package/dist/components/drawer/Drawer.js +57 -0
  72. package/dist/components/drawer/Drawer.js.map +1 -0
  73. package/dist/components/dropdown/Dropdown.cjs +2 -0
  74. package/dist/components/dropdown/Dropdown.cjs.map +1 -0
  75. package/dist/components/dropdown/Dropdown.js +115 -0
  76. package/dist/components/dropdown/Dropdown.js.map +1 -0
  77. package/dist/components/fileuploader/FileUploader.cjs +2 -0
  78. package/dist/components/fileuploader/FileUploader.cjs.map +1 -0
  79. package/dist/components/fileuploader/FileUploader.js +83 -0
  80. package/dist/components/fileuploader/FileUploader.js.map +1 -0
  81. package/dist/components/hovercard/HoverCard.cjs +2 -0
  82. package/dist/components/hovercard/HoverCard.cjs.map +1 -0
  83. package/dist/components/hovercard/HoverCard.js +78 -0
  84. package/dist/components/hovercard/HoverCard.js.map +1 -0
  85. package/dist/components/input/Input.cjs +2 -0
  86. package/dist/components/input/Input.cjs.map +1 -0
  87. package/dist/components/input/Input.js +41 -0
  88. package/dist/components/input/Input.js.map +1 -0
  89. package/dist/components/layout/Container.cjs +2 -0
  90. package/dist/components/layout/Container.cjs.map +1 -0
  91. package/dist/components/layout/Container.js +33 -0
  92. package/dist/components/layout/Container.js.map +1 -0
  93. package/dist/components/layout/Flex.cjs +2 -0
  94. package/dist/components/layout/Flex.cjs.map +1 -0
  95. package/dist/components/layout/Flex.js +26 -0
  96. package/dist/components/layout/Flex.js.map +1 -0
  97. package/dist/components/layout/Grid.cjs +2 -0
  98. package/dist/components/layout/Grid.cjs.map +1 -0
  99. package/dist/components/layout/Grid.js +21 -0
  100. package/dist/components/layout/Grid.js.map +1 -0
  101. package/dist/components/layout/HStack.cjs +2 -0
  102. package/dist/components/layout/HStack.cjs.map +1 -0
  103. package/dist/components/layout/HStack.js +9 -0
  104. package/dist/components/layout/HStack.js.map +1 -0
  105. package/dist/components/layout/Stack.cjs +2 -0
  106. package/dist/components/layout/Stack.cjs.map +1 -0
  107. package/dist/components/layout/Stack.js +9 -0
  108. package/dist/components/layout/Stack.js.map +1 -0
  109. package/dist/components/megamenu/MegaMenu.cjs +2 -0
  110. package/dist/components/megamenu/MegaMenu.cjs.map +1 -0
  111. package/dist/components/megamenu/MegaMenu.js +43 -0
  112. package/dist/components/megamenu/MegaMenu.js.map +1 -0
  113. package/dist/components/modal/Modal.cjs +2 -0
  114. package/dist/components/modal/Modal.cjs.map +1 -0
  115. package/dist/components/modal/Modal.js +91 -0
  116. package/dist/components/modal/Modal.js.map +1 -0
  117. package/dist/components/pagination/Pagination.cjs +2 -0
  118. package/dist/components/pagination/Pagination.cjs.map +1 -0
  119. package/dist/components/pagination/Pagination.js +62 -0
  120. package/dist/components/pagination/Pagination.js.map +1 -0
  121. package/dist/components/popover/Popover.cjs +2 -0
  122. package/dist/components/popover/Popover.cjs.map +1 -0
  123. package/dist/components/popover/Popover.js +123 -0
  124. package/dist/components/popover/Popover.js.map +1 -0
  125. package/dist/components/progress/Progress.cjs +2 -0
  126. package/dist/components/progress/Progress.cjs.map +1 -0
  127. package/dist/components/progress/Progress.js +33 -0
  128. package/dist/components/progress/Progress.js.map +1 -0
  129. package/dist/components/radiogroup/RadioGroup.cjs +2 -0
  130. package/dist/components/radiogroup/RadioGroup.cjs.map +1 -0
  131. package/dist/components/radiogroup/RadioGroup.js +79 -0
  132. package/dist/components/radiogroup/RadioGroup.js.map +1 -0
  133. package/dist/components/rating/Rating.cjs +2 -0
  134. package/dist/components/rating/Rating.cjs.map +1 -0
  135. package/dist/components/rating/Rating.js +49 -0
  136. package/dist/components/rating/Rating.js.map +1 -0
  137. package/dist/components/skeleton/Skeleton.cjs +2 -0
  138. package/dist/components/skeleton/Skeleton.cjs.map +1 -0
  139. package/dist/components/skeleton/Skeleton.js +86 -0
  140. package/dist/components/skeleton/Skeleton.js.map +1 -0
  141. package/dist/components/slider/Slider.cjs +2 -0
  142. package/dist/components/slider/Slider.cjs.map +1 -0
  143. package/dist/components/slider/Slider.js +116 -0
  144. package/dist/components/slider/Slider.js.map +1 -0
  145. package/dist/components/spinner/Spinner.cjs +2 -0
  146. package/dist/components/spinner/Spinner.cjs.map +1 -0
  147. package/dist/components/spinner/Spinner.js +21 -0
  148. package/dist/components/spinner/Spinner.js.map +1 -0
  149. package/dist/components/stepper/Stepper.cjs +6 -0
  150. package/dist/components/stepper/Stepper.cjs.map +1 -0
  151. package/dist/components/stepper/Stepper.js +43 -0
  152. package/dist/components/stepper/Stepper.js.map +1 -0
  153. package/dist/components/switch/Switch.cjs +2 -0
  154. package/dist/components/switch/Switch.cjs.map +1 -0
  155. package/dist/components/switch/Switch.js +67 -0
  156. package/dist/components/switch/Switch.js.map +1 -0
  157. package/dist/components/table/Table.cjs +2 -0
  158. package/dist/components/table/Table.cjs.map +1 -0
  159. package/dist/components/table/Table.js +46 -0
  160. package/dist/components/table/Table.js.map +1 -0
  161. package/dist/components/tabs/Tabs.cjs +2 -0
  162. package/dist/components/tabs/Tabs.cjs.map +1 -0
  163. package/dist/components/tabs/Tabs.js +56 -0
  164. package/dist/components/tabs/Tabs.js.map +1 -0
  165. package/dist/components/textarea/Textarea.cjs +2 -0
  166. package/dist/components/textarea/Textarea.cjs.map +1 -0
  167. package/dist/components/textarea/Textarea.js +75 -0
  168. package/dist/components/textarea/Textarea.js.map +1 -0
  169. package/dist/components/toast/Toast.cjs +2 -0
  170. package/dist/components/toast/Toast.cjs.map +1 -0
  171. package/dist/components/toast/Toast.js +52 -0
  172. package/dist/components/toast/Toast.js.map +1 -0
  173. package/dist/components/tooltip/Tooltip.cjs +2 -0
  174. package/dist/components/tooltip/Tooltip.cjs.map +1 -0
  175. package/dist/components/tooltip/Tooltip.js +73 -0
  176. package/dist/components/tooltip/Tooltip.js.map +1 -0
  177. package/dist/components/treeview/TreeView.cjs +2 -0
  178. package/dist/components/treeview/TreeView.cjs.map +1 -0
  179. package/dist/components/treeview/TreeView.js +98 -0
  180. package/dist/components/treeview/TreeView.js.map +1 -0
  181. package/dist/components/virtuallist/VirtualList.cjs +2 -0
  182. package/dist/components/virtuallist/VirtualList.cjs.map +1 -0
  183. package/dist/components/virtuallist/VirtualList.js +58 -0
  184. package/dist/components/virtuallist/VirtualList.js.map +1 -0
  185. package/dist/index.cjs +2 -0
  186. package/dist/index.cjs.map +1 -0
  187. package/dist/index.js +109 -0
  188. package/dist/index.js.map +1 -0
  189. package/dist/styles/index.css +1 -0
  190. package/dist/theme/NUIProvider.cjs +2 -0
  191. package/dist/theme/NUIProvider.cjs.map +1 -0
  192. package/dist/theme/NUIProvider.js +34 -0
  193. package/dist/theme/NUIProvider.js.map +1 -0
  194. package/dist/theme/useTheme.cjs +2 -0
  195. package/dist/theme/useTheme.cjs.map +1 -0
  196. package/dist/theme/useTheme.js +9 -0
  197. package/dist/theme/useTheme.js.map +1 -0
  198. package/dist/types/components/accordion/Accordion.d.ts +18 -0
  199. package/dist/types/components/accordion/Accordion.d.ts.map +1 -0
  200. package/dist/types/components/alert/Alert.d.ts +13 -0
  201. package/dist/types/components/alert/Alert.d.ts.map +1 -0
  202. package/dist/types/components/avatar/Avatar.d.ts +18 -0
  203. package/dist/types/components/avatar/Avatar.d.ts.map +1 -0
  204. package/dist/types/components/avatar/AvatarGroup.d.ts +10 -0
  205. package/dist/types/components/avatar/AvatarGroup.d.ts.map +1 -0
  206. package/dist/types/components/badge/Badge.d.ts +22 -0
  207. package/dist/types/components/badge/Badge.d.ts.map +1 -0
  208. package/dist/types/components/badge/BadgeGroup.d.ts +9 -0
  209. package/dist/types/components/badge/BadgeGroup.d.ts.map +1 -0
  210. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +15 -0
  211. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts.map +1 -0
  212. package/dist/types/components/button/Button.d.ts +15 -0
  213. package/dist/types/components/button/Button.d.ts.map +1 -0
  214. package/dist/types/components/card/Card.d.ts +27 -0
  215. package/dist/types/components/card/Card.d.ts.map +1 -0
  216. package/dist/types/components/checkbox/Checkbox.d.ts +15 -0
  217. package/dist/types/components/checkbox/Checkbox.d.ts.map +1 -0
  218. package/dist/types/components/chip/Chip.d.ts +21 -0
  219. package/dist/types/components/chip/Chip.d.ts.map +1 -0
  220. package/dist/types/components/combobox/Combobox.d.ts +24 -0
  221. package/dist/types/components/combobox/Combobox.d.ts.map +1 -0
  222. package/dist/types/components/commandpalette/CommandPalette.d.ts +21 -0
  223. package/dist/types/components/commandpalette/CommandPalette.d.ts.map +1 -0
  224. package/dist/types/components/contextmenu/ContextMenu.d.ts +17 -0
  225. package/dist/types/components/contextmenu/ContextMenu.d.ts.map +1 -0
  226. package/dist/types/components/datagrid/DataGrid.d.ts +28 -0
  227. package/dist/types/components/datagrid/DataGrid.d.ts.map +1 -0
  228. package/dist/types/components/datepicker/DatePicker.d.ts +14 -0
  229. package/dist/types/components/datepicker/DatePicker.d.ts.map +1 -0
  230. package/dist/types/components/daterangepicker/DateRangePicker.d.ts +19 -0
  231. package/dist/types/components/daterangepicker/DateRangePicker.d.ts.map +1 -0
  232. package/dist/types/components/drawer/Drawer.d.ts +12 -0
  233. package/dist/types/components/drawer/Drawer.d.ts.map +1 -0
  234. package/dist/types/components/dropdown/Dropdown.d.ts +18 -0
  235. package/dist/types/components/dropdown/Dropdown.d.ts.map +1 -0
  236. package/dist/types/components/fileuploader/FileUploader.d.ts +9 -0
  237. package/dist/types/components/fileuploader/FileUploader.d.ts.map +1 -0
  238. package/dist/types/components/hovercard/HoverCard.d.ts +10 -0
  239. package/dist/types/components/hovercard/HoverCard.d.ts.map +1 -0
  240. package/dist/types/components/input/Input.d.ts +15 -0
  241. package/dist/types/components/input/Input.d.ts.map +1 -0
  242. package/dist/types/components/layout/Container.d.ts +8 -0
  243. package/dist/types/components/layout/Container.d.ts.map +1 -0
  244. package/dist/types/components/layout/Flex.d.ts +14 -0
  245. package/dist/types/components/layout/Flex.d.ts.map +1 -0
  246. package/dist/types/components/layout/Grid.d.ts +10 -0
  247. package/dist/types/components/layout/Grid.d.ts.map +1 -0
  248. package/dist/types/components/layout/HStack.d.ts +8 -0
  249. package/dist/types/components/layout/HStack.d.ts.map +1 -0
  250. package/dist/types/components/layout/Stack.d.ts +8 -0
  251. package/dist/types/components/layout/Stack.d.ts.map +1 -0
  252. package/dist/types/components/megamenu/MegaMenu.d.ts +12 -0
  253. package/dist/types/components/megamenu/MegaMenu.d.ts.map +1 -0
  254. package/dist/types/components/modal/Modal.d.ts +16 -0
  255. package/dist/types/components/modal/Modal.d.ts.map +1 -0
  256. package/dist/types/components/pagination/Pagination.d.ts +9 -0
  257. package/dist/types/components/pagination/Pagination.d.ts.map +1 -0
  258. package/dist/types/components/popover/Popover.d.ts +21 -0
  259. package/dist/types/components/popover/Popover.d.ts.map +1 -0
  260. package/dist/types/components/progress/Progress.d.ts +13 -0
  261. package/dist/types/components/progress/Progress.d.ts.map +1 -0
  262. package/dist/types/components/radiogroup/RadioGroup.d.ts +18 -0
  263. package/dist/types/components/radiogroup/RadioGroup.d.ts.map +1 -0
  264. package/dist/types/components/rating/Rating.d.ts +19 -0
  265. package/dist/types/components/rating/Rating.d.ts.map +1 -0
  266. package/dist/types/components/select/Select.d.ts +20 -0
  267. package/dist/types/components/select/Select.d.ts.map +1 -0
  268. package/dist/types/components/skeleton/Skeleton.d.ts +44 -0
  269. package/dist/types/components/skeleton/Skeleton.d.ts.map +1 -0
  270. package/dist/types/components/slider/Slider.d.ts +13 -0
  271. package/dist/types/components/slider/Slider.d.ts.map +1 -0
  272. package/dist/types/components/spinner/Spinner.d.ts +7 -0
  273. package/dist/types/components/spinner/Spinner.d.ts.map +1 -0
  274. package/dist/types/components/stepper/Stepper.d.ts +12 -0
  275. package/dist/types/components/stepper/Stepper.d.ts.map +1 -0
  276. package/dist/types/components/switch/Switch.d.ts +15 -0
  277. package/dist/types/components/switch/Switch.d.ts.map +1 -0
  278. package/dist/types/components/table/Table.d.ts +14 -0
  279. package/dist/types/components/table/Table.d.ts.map +1 -0
  280. package/dist/types/components/tabs/Tabs.d.ts +14 -0
  281. package/dist/types/components/tabs/Tabs.d.ts.map +1 -0
  282. package/dist/types/components/textarea/Textarea.d.ts +14 -0
  283. package/dist/types/components/textarea/Textarea.d.ts.map +1 -0
  284. package/dist/types/components/toast/Toast.d.ts +16 -0
  285. package/dist/types/components/toast/Toast.d.ts.map +1 -0
  286. package/dist/types/components/tooltip/Tooltip.d.ts +10 -0
  287. package/dist/types/components/tooltip/Tooltip.d.ts.map +1 -0
  288. package/dist/types/components/treeview/TreeView.d.ts +16 -0
  289. package/dist/types/components/treeview/TreeView.d.ts.map +1 -0
  290. package/dist/types/components/virtuallist/VirtualList.d.ts +23 -0
  291. package/dist/types/components/virtuallist/VirtualList.d.ts.map +1 -0
  292. package/dist/types/index.d.ts +50 -0
  293. package/dist/types/index.d.ts.map +1 -0
  294. package/dist/types/theme/NUIProvider.d.ts +14 -0
  295. package/dist/types/theme/NUIProvider.d.ts.map +1 -0
  296. package/dist/types/theme/useTheme.d.ts +11 -0
  297. package/dist/types/theme/useTheme.d.ts.map +1 -0
  298. package/dist/types/utils/generateid/generateId.d.ts +2 -0
  299. package/dist/types/utils/generateid/generateId.d.ts.map +1 -0
  300. package/dist/types/utils/index.d.ts +9 -0
  301. package/dist/types/utils/index.d.ts.map +1 -0
  302. package/dist/types/utils/inertmanager/inertManager.d.ts +13 -0
  303. package/dist/types/utils/inertmanager/inertManager.d.ts.map +1 -0
  304. package/dist/types/utils/keyboardnav/keyboardNav.d.ts +11 -0
  305. package/dist/types/utils/keyboardnav/keyboardNav.d.ts.map +1 -0
  306. package/dist/types/utils/onclickoutside/onClickOutside.d.ts +3 -0
  307. package/dist/types/utils/onclickoutside/onClickOutside.d.ts.map +1 -0
  308. package/dist/types/utils/portal/portal.d.ts +4 -0
  309. package/dist/types/utils/portal/portal.d.ts.map +1 -0
  310. package/dist/types/utils/restorefocus/restoreFocus.d.ts +8 -0
  311. package/dist/types/utils/restorefocus/restoreFocus.d.ts.map +1 -0
  312. package/dist/types/utils/scrolllock/scrollLock.d.ts +11 -0
  313. package/dist/types/utils/scrolllock/scrollLock.d.ts.map +1 -0
  314. package/dist/types/utils/trapfocus/trapFocus.d.ts +8 -0
  315. package/dist/types/utils/trapfocus/trapFocus.d.ts.map +1 -0
  316. package/dist/utils/generateid/generateId.cjs +2 -0
  317. package/dist/utils/generateid/generateId.cjs.map +1 -0
  318. package/dist/utils/generateid/generateId.js +7 -0
  319. package/dist/utils/generateid/generateId.js.map +1 -0
  320. package/dist/utils/inertmanager/inertManager.cjs +2 -0
  321. package/dist/utils/inertmanager/inertManager.cjs.map +1 -0
  322. package/dist/utils/inertmanager/inertManager.js +18 -0
  323. package/dist/utils/inertmanager/inertManager.js.map +1 -0
  324. package/dist/utils/keyboardnav/keyboardNav.cjs +2 -0
  325. package/dist/utils/keyboardnav/keyboardNav.cjs.map +1 -0
  326. package/dist/utils/keyboardnav/keyboardNav.js +10 -0
  327. package/dist/utils/keyboardnav/keyboardNav.js.map +1 -0
  328. package/dist/utils/onclickoutside/onClickOutside.cjs +2 -0
  329. package/dist/utils/onclickoutside/onClickOutside.cjs.map +1 -0
  330. package/dist/utils/onclickoutside/onClickOutside.js +11 -0
  331. package/dist/utils/onclickoutside/onClickOutside.js.map +1 -0
  332. package/dist/utils/portal/portal.cjs +2 -0
  333. package/dist/utils/portal/portal.cjs.map +1 -0
  334. package/dist/utils/portal/portal.js +8 -0
  335. package/dist/utils/portal/portal.js.map +1 -0
  336. package/dist/utils/restorefocus/restoreFocus.cjs +2 -0
  337. package/dist/utils/restorefocus/restoreFocus.cjs.map +1 -0
  338. package/dist/utils/restorefocus/restoreFocus.js +7 -0
  339. package/dist/utils/restorefocus/restoreFocus.js.map +1 -0
  340. package/dist/utils/scrolllock/scrollLock.cjs +2 -0
  341. package/dist/utils/scrolllock/scrollLock.cjs.map +1 -0
  342. package/dist/utils/scrolllock/scrollLock.js +12 -0
  343. package/dist/utils/scrolllock/scrollLock.js.map +1 -0
  344. package/dist/utils/trapfocus/trapFocus.cjs +3 -0
  345. package/dist/utils/trapfocus/trapFocus.cjs.map +1 -0
  346. package/dist/utils/trapfocus/trapFocus.js +14 -0
  347. package/dist/utils/trapfocus/trapFocus.js.map +1 -0
  348. package/package.json +3 -2
@@ -0,0 +1,322 @@
1
+ import { jsxs as u, jsx as a } from "react/jsx-runtime";
2
+ import { useState as c, useRef as K, useEffect as E, useMemo as T, useCallback as Ce } from "react";
3
+ /* empty css */
4
+ import { onClickOutside as Fe } from "../../utils/onclickoutside/onClickOutside.js";
5
+ import { restoreFocus as Se } from "../../utils/restorefocus/restoreFocus.js";
6
+ import { Portal as Re } from "../../utils/portal/portal.js";
7
+ const re = (o) => o < 10 ? `0${o}` : `${o}`, w = (o) => `${o.getFullYear()}-${re(o.getMonth() + 1)}-${re(o.getDate())}`;
8
+ function x(o) {
9
+ if (!o) return null;
10
+ const [v, b, L] = o.split("-").map(Number), Y = new Date(v, b - 1, L);
11
+ return Number.isNaN(Y.getTime()) ? null : Y;
12
+ }
13
+ const oe = (o) => o || null, P = (o) => new Date(o.getFullYear(), o.getMonth(), 1), I = (o, v) => new Date(o.getFullYear(), o.getMonth() + v, 1), se = (o) => new Date(o.getFullYear(), o.getMonth() + 1, 0).getDate();
14
+ function Oe({
15
+ value: o,
16
+ defaultValue: v,
17
+ onChange: b,
18
+ minDate: L,
19
+ maxDate: Y,
20
+ placeholder: ae = "Pick range",
21
+ locale: y = "en-US",
22
+ id: le,
23
+ className: ie = "",
24
+ nameFrom: V,
25
+ nameTo: z
26
+ }) {
27
+ const C = o !== void 0, [ce, B] = c(v), i = C ? o || {} : ce || {}, p = x(i.from), h = x(i.to), de = P(p ?? h ?? /* @__PURE__ */ new Date()), [s, D] = c(de), [d, f] = c(!1), [q, m] = c(!1), [O, G] = c("from"), F = K(null), H = K(null), J = K({}), S = x(L), R = x(Y), Q = (e) => !!(S && e < S || R && e > R), [N, W] = c(null), [k, _] = c(null), [A, X] = c(!1), ue = (e) => {
28
+ if (!A || !N || !k) return !1;
29
+ const t = e.getTime(), n = N.getTime(), r = k.getTime();
30
+ return t >= Math.min(n, r) && t <= Math.max(n, r);
31
+ };
32
+ E(() => {
33
+ if (d)
34
+ return Fe(H, () => {
35
+ f(!1), m(!1);
36
+ });
37
+ }, [d]), E(() => {
38
+ if (!d) return;
39
+ const e = F.current;
40
+ return () => Se(e);
41
+ }, [d]);
42
+ const [j, fe] = c(null);
43
+ E(() => {
44
+ if (!d || !F.current) return;
45
+ const e = F.current.getBoundingClientRect();
46
+ fe({ top: e.bottom + 8, left: e.left });
47
+ }, [d, s]);
48
+ const M = T(() => {
49
+ const t = P(s).getDay(), n = se(s), r = [];
50
+ for (let l = 0; l < t; l++) r.push(null);
51
+ for (let l = 1; l <= n; l++) r.push(l);
52
+ for (; r.length % 7 !== 0; ) r.push(null);
53
+ return r;
54
+ }, [s]), me = T(
55
+ () => Array.from({ length: 7 }).map(
56
+ (e, t) => new Date(2020, 5, 7 + t).toLocaleDateString(y, {
57
+ weekday: "short"
58
+ })
59
+ ),
60
+ [y]
61
+ ), ge = s.getFullYear(), Z = 100, ee = ge - Z, pe = T(
62
+ () => Array.from({ length: Z * 2 + 1 }).map((e, t) => ee + t),
63
+ [ee]
64
+ ), he = T(
65
+ () => Array.from({ length: 12 }).map(
66
+ (e, t) => new Date(2020, t, 1).toLocaleDateString(y, { month: "short" })
67
+ ),
68
+ [y]
69
+ ), De = (e, t) => {
70
+ const n = new Date(e, t, 1), r = new Date(e, t, se(n));
71
+ return !!(S && r < S || R && n > R);
72
+ }, we = (e, t) => {
73
+ if (!e && !t) return { from: void 0, to: void 0 };
74
+ if (!e) return { from: void 0, to: t ? w(t) : void 0 };
75
+ if (!t) return { from: w(e), to: void 0 };
76
+ const n = e.getTime(), r = t.getTime();
77
+ return n <= r ? { from: w(e), to: w(t) } : { from: w(t), to: w(e) };
78
+ }, U = Ce(
79
+ (e, t) => {
80
+ const n = we(e, t);
81
+ C || B(n), b?.(n);
82
+ },
83
+ [b, C]
84
+ ), te = (e) => {
85
+ const t = new Date(s.getFullYear(), s.getMonth(), e);
86
+ if (Q(t)) return;
87
+ let n = p, r = h;
88
+ O === "from" ? (n = t, r && t > r && (r = null)) : (r = t, n && t < n && (n = t, r = null)), U(oe(n), oe(r)), n && r && (f(!1), m(!1));
89
+ };
90
+ E(() => {
91
+ const e = () => {
92
+ if (A) {
93
+ if (X(!1), N && k) {
94
+ const t = N, n = k, r = t <= n ? t : n, l = t <= n ? n : t;
95
+ U(r, l), f(!1), m(!1);
96
+ }
97
+ W(null), _(null);
98
+ }
99
+ };
100
+ return window.addEventListener("mouseup", e), () => window.removeEventListener("mouseup", e);
101
+ }, [A, N, k, U]);
102
+ const ve = (e) => !p || !h ? !1 : e > p && e < h, be = (e) => p && e.getTime() === p.getTime(), ye = (e) => h && e.getTime() === h.getTime(), Ne = (e) => {
103
+ if (e < 0 || e >= M.length) return;
104
+ const t = M[e];
105
+ if (!t) return;
106
+ const n = `${s.getFullYear()}-${s.getMonth()}-${t}`;
107
+ J.current[n]?.focus();
108
+ }, ke = (e, t) => {
109
+ const n = M.findIndex((g) => g === t);
110
+ if (n === -1) return;
111
+ const r = 7;
112
+ let l = null;
113
+ switch (e.key) {
114
+ case "ArrowRight":
115
+ l = n + 1;
116
+ break;
117
+ case "ArrowLeft":
118
+ l = n - 1;
119
+ break;
120
+ case "ArrowDown":
121
+ l = n + r;
122
+ break;
123
+ case "ArrowUp":
124
+ l = n - r;
125
+ break;
126
+ case "Enter":
127
+ case " ":
128
+ e.preventDefault(), te(t);
129
+ return;
130
+ case "PageUp":
131
+ D((g) => I(g, -1));
132
+ return;
133
+ case "PageDown":
134
+ D((g) => I(g, 1));
135
+ return;
136
+ case "Escape":
137
+ f(!1);
138
+ return;
139
+ default:
140
+ return;
141
+ }
142
+ e.preventDefault(), l != null && M[l] != null && Ne(l);
143
+ }, Me = () => !i.from && !i.to ? ae : i.from && !i.to ? `${i.from} → ` : !i.from && i.to ? ` → ${i.to}` : `${i.from} → ${i.to}`;
144
+ return /* @__PURE__ */ u("div", { className: `ui-daterange-picker ${ie}`, children: [
145
+ V && /* @__PURE__ */ a("input", { type: "hidden", name: V, value: i.from ?? "" }),
146
+ z && /* @__PURE__ */ a("input", { type: "hidden", name: z, value: i.to ?? "" }),
147
+ /* @__PURE__ */ a(
148
+ "button",
149
+ {
150
+ id: le,
151
+ ref: F,
152
+ type: "button",
153
+ className: "drp-trigger",
154
+ "aria-haspopup": "dialog",
155
+ "aria-expanded": d,
156
+ onClick: () => {
157
+ f((e) => !e), m(!1);
158
+ },
159
+ children: Me()
160
+ }
161
+ ),
162
+ /* @__PURE__ */ u("div", { className: "drp-actions", children: [
163
+ /* @__PURE__ */ a(
164
+ "button",
165
+ {
166
+ className: `drp-part ${O === "from" ? "active" : ""}`,
167
+ onClick: () => G("from"),
168
+ children: "From"
169
+ }
170
+ ),
171
+ /* @__PURE__ */ a(
172
+ "button",
173
+ {
174
+ className: `drp-part ${O === "to" ? "active" : ""}`,
175
+ onClick: () => G("to"),
176
+ children: "To"
177
+ }
178
+ )
179
+ ] }),
180
+ d && j && /* @__PURE__ */ a(Re, { children: /* @__PURE__ */ a(
181
+ "div",
182
+ {
183
+ ref: H,
184
+ className: "drp-popover",
185
+ style: { position: "fixed", top: j.top, left: j.left },
186
+ children: /* @__PURE__ */ u("div", { className: "drp-panel", children: [
187
+ /* @__PURE__ */ u("div", { className: "drp-header", children: [
188
+ /* @__PURE__ */ a(
189
+ "button",
190
+ {
191
+ className: "drp-arrow",
192
+ onClick: () => D((e) => I(e, -1)),
193
+ children: "‹"
194
+ }
195
+ ),
196
+ /* @__PURE__ */ u(
197
+ "button",
198
+ {
199
+ className: "drp-title",
200
+ onClick: () => m((e) => !e),
201
+ children: [
202
+ s.toLocaleDateString(y, {
203
+ month: "long"
204
+ }),
205
+ " ",
206
+ s.getFullYear()
207
+ ]
208
+ }
209
+ ),
210
+ /* @__PURE__ */ a(
211
+ "button",
212
+ {
213
+ className: "drp-arrow",
214
+ onClick: () => D((e) => I(e, 1)),
215
+ children: "›"
216
+ }
217
+ )
218
+ ] }),
219
+ q && /* @__PURE__ */ u("div", { className: "drp-ym", children: [
220
+ /* @__PURE__ */ a("div", { className: "drp-year-grid", children: pe.map((e) => /* @__PURE__ */ a(
221
+ "button",
222
+ {
223
+ className: `drp-year ${e === s.getFullYear() ? "selected" : ""}`,
224
+ onClick: () => D(
225
+ P(new Date(e, s.getMonth(), 1))
226
+ ),
227
+ children: e
228
+ },
229
+ e
230
+ )) }),
231
+ /* @__PURE__ */ a("div", { className: "drp-month-grid", children: he.map((e, t) => {
232
+ const n = De(
233
+ s.getFullYear(),
234
+ t
235
+ );
236
+ return /* @__PURE__ */ a(
237
+ "button",
238
+ {
239
+ className: `drp-month ${n ? "disabled" : ""} ${t === s.getMonth() ? "selected" : ""}`,
240
+ disabled: n ? !0 : void 0,
241
+ onClick: () => !n && D(
242
+ P(
243
+ new Date(s.getFullYear(), t, 1)
244
+ )
245
+ ),
246
+ children: e
247
+ },
248
+ t
249
+ );
250
+ }) })
251
+ ] }),
252
+ !q && /* @__PURE__ */ u("div", { className: "drp-calendar", children: [
253
+ /* @__PURE__ */ a("div", { className: "drp-weekdays", children: me.map((e, t) => /* @__PURE__ */ a("div", { className: "drp-weekday", children: e }, t)) }),
254
+ /* @__PURE__ */ a("div", { className: "drp-days", children: M.map((e, t) => {
255
+ if (e === null)
256
+ return /* @__PURE__ */ a("div", { className: "drp-day-empty" }, t);
257
+ const n = new Date(
258
+ s.getFullYear(),
259
+ s.getMonth(),
260
+ e
261
+ ), r = Q(n), l = be(n), g = ye(n), $e = ve(n), Ye = ue(n), ne = `${s.getFullYear()}-${s.getMonth()}-${e}`;
262
+ return /* @__PURE__ */ a(
263
+ "button",
264
+ {
265
+ ref: ($) => {
266
+ J.current[ne] = $;
267
+ },
268
+ disabled: r ? !0 : void 0,
269
+ className: [
270
+ "drp-day",
271
+ l ? "start" : "",
272
+ g ? "end" : "",
273
+ $e ? "between" : "",
274
+ Ye ? "dragging" : "",
275
+ r ? "disabled" : ""
276
+ ].join(" "),
277
+ onClick: () => !r && te(e),
278
+ onKeyDown: ($) => ke($, e),
279
+ onMouseDown: ($) => {
280
+ r || ($.preventDefault(), W(n), _(n), X(!0));
281
+ },
282
+ onMouseEnter: () => {
283
+ !A || r || _(n);
284
+ },
285
+ children: e
286
+ },
287
+ ne
288
+ );
289
+ }) })
290
+ ] }),
291
+ /* @__PURE__ */ u("div", { className: "drp-footer", children: [
292
+ /* @__PURE__ */ a(
293
+ "button",
294
+ {
295
+ className: "drp-clear",
296
+ onClick: () => {
297
+ const e = { from: void 0, to: void 0 };
298
+ C || B(e), b?.(e), f(!1), m(!1);
299
+ },
300
+ children: "Clear"
301
+ }
302
+ ),
303
+ /* @__PURE__ */ a(
304
+ "button",
305
+ {
306
+ className: "drp-close",
307
+ onClick: () => {
308
+ f(!1), m(!1);
309
+ },
310
+ children: "Close"
311
+ }
312
+ )
313
+ ] })
314
+ ] })
315
+ }
316
+ ) })
317
+ ] });
318
+ }
319
+ export {
320
+ Oe as DateRangePicker
321
+ };
322
+ //# sourceMappingURL=DateRangePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateRangePicker.js","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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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),r=require("react");;/* empty css */const v=require("../../utils/scrolllock/scrollLock.cjs"),m=require("../../utils/inertmanager/inertManager.cjs"),g=require("../../utils/trapfocus/trapFocus.cjs"),p=require("../../utils/onclickoutside/onClickOutside.cjs"),w=require("../../utils/restorefocus/restoreFocus.cjs"),R=require("../../utils/portal/portal.cjs");function F({open:e,onClose:l,position:k="right",className:y="",children:q,disableEsc:i=!1,disableClickOutside:a=!1}){const o=r.useRef(null),t=r.useRef(null),d=r.useRef(null),n=r.useCallback(()=>{l()},[l]);return r.useEffect(()=>{if(!e||i)return;const u=c=>{c.key==="Escape"&&(c.preventDefault(),n())};return document.addEventListener("keydown",u),()=>document.removeEventListener("keydown",u)},[e,i,n]),r.useEffect(()=>{if(!e)return;d.current=document.activeElement,v.scrollLock.lock();const u=o.current?m.applyInertToSiblings(o.current):[],c=t.current?g.trapFocus(t.current):void 0;let f;return!a&&t.current&&(f=p.onClickOutside(t,n)),()=>{f?.(),c?.(),v.scrollLock.unlock(),m.removeInertFromSiblings(u),w.restoreFocus(d.current)}},[e,a,n]),e?s.jsx(R.Portal,{children:s.jsx("div",{ref:o,className:`ui-drawer-overlay ${e?"open":""}`,children:s.jsx("div",{ref:t,className:`ui-drawer ${k} ${e?"open":""} ${y}`,role:"dialog","aria-modal":"true",children:q})})}):null}exports.Drawer=F;
2
+ //# sourceMappingURL=Drawer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.cjs","sources":["../../../../src/components/drawer/Drawer.tsx"],"sourcesContent":["/**\r\n * Drawer.tsx\r\n * ----------\r\n * WCAG-compliant drawer component.\r\n * - Focus trap\r\n * - Scroll lock\r\n * - Click outside\r\n * - Esc to close\r\n * - Portal\r\n */\r\n\r\n/**\r\n * Drawer.tsx — Headless Drawer (no default UI)\r\n * User controls close button & styles fully.\r\n */\r\n\r\nimport React, { useRef, useEffect, useCallback } from 'react';\r\nimport './Drawer.css';\r\n\r\nimport { Portal, onClickOutside, trapFocus, restoreFocus, scrollLock, applyInertToSiblings,\r\n removeInertFromSiblings } from '../../utils/index';\r\n\r\nexport interface DrawerProps {\r\n open: boolean;\r\n onClose: () => void;\r\n position?: 'left' | 'right' | 'bottom' | 'top';\r\n className?: string;\r\n children?: React.ReactNode;\r\n\r\n disableEsc?: boolean;\r\n disableClickOutside?: boolean;\r\n}\r\n\r\nexport function Drawer({\r\n open,\r\n onClose,\r\n position = 'right',\r\n className = '',\r\n children,\r\n disableEsc = false,\r\n disableClickOutside = false,\r\n}: DrawerProps) {\r\n const overlayRef = useRef<HTMLDivElement | null>(null);\r\n const drawerRef = useRef<HTMLDivElement | null>(null);\r\n const previouslyFocused = useRef<HTMLElement | null>(null);\r\n\r\n const handleClose = useCallback(() => {\r\n onClose();\r\n }, [onClose]);\r\n\r\n // ESC key\r\n useEffect(() => {\r\n if (!open || disableEsc) return;\r\n\r\n const onKey = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n e.preventDefault();\r\n handleClose();\r\n }\r\n };\r\n\r\n document.addEventListener('keydown', onKey);\r\n return () => document.removeEventListener('keydown', onKey);\r\n }, [open, disableEsc, handleClose]);\r\n\r\n // Open/close lifecycle\r\n useEffect(() => {\r\n if (!open) return;\r\n\r\n previouslyFocused.current = document.activeElement as HTMLElement;\r\n\r\n scrollLock.lock();\r\n\r\n const inertTargets = overlayRef.current\r\n ? applyInertToSiblings(overlayRef.current)\r\n : [];\r\n\r\n const trapCleanup = drawerRef.current\r\n ? trapFocus(drawerRef.current)\r\n : undefined;\r\n\r\n // Click outside\r\n let cleanupOutside: (() => void) | undefined;\r\n if (!disableClickOutside && drawerRef.current) {\r\n cleanupOutside = onClickOutside(drawerRef, handleClose);\r\n }\r\n\r\n return () => {\r\n cleanupOutside?.();\r\n trapCleanup?.();\r\n scrollLock.unlock();\r\n removeInertFromSiblings(inertTargets);\r\n restoreFocus(previouslyFocused.current);\r\n };\r\n }, [open, disableClickOutside, handleClose]);\r\n\r\n if (!open) return null;\r\n\r\n return (\r\n <Portal>\r\n <div\r\n ref={overlayRef}\r\n className={`ui-drawer-overlay ${open ? 'open' : ''}`}\r\n >\r\n <div\r\n ref={drawerRef}\r\n className={`ui-drawer ${position} ${open ? 'open' : ''} ${className}`}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n >\r\n {children}\r\n </div>\r\n </div>\r\n </Portal>\r\n );\r\n}\r\n"],"names":["Drawer","open","onClose","position","className","children","disableEsc","disableClickOutside","overlayRef","useRef","drawerRef","previouslyFocused","handleClose","useCallback","useEffect","onKey","e","scrollLock","inertTargets","applyInertToSiblings","trapCleanup","trapFocus","cleanupOutside","onClickOutside","removeInertFromSiblings","restoreFocus","Portal","jsx"],"mappings":"keAiCO,SAASA,EAAO,CACrB,KAAAC,EACA,QAAAC,EACA,SAAAC,EAAW,QACX,UAAAC,EAAY,GACZ,SAAAC,EACA,WAAAC,EAAa,GACb,oBAAAC,EAAsB,EACxB,EAAgB,CACd,MAAMC,EAAaC,EAAAA,OAA8B,IAAI,EAC/CC,EAAYD,EAAAA,OAA8B,IAAI,EAC9CE,EAAoBF,EAAAA,OAA2B,IAAI,EAEnDG,EAAcC,EAAAA,YAAY,IAAM,CACpCX,EAAA,CACF,EAAG,CAACA,CAAO,CAAC,EAgDZ,OA7CAY,EAAAA,UAAU,IAAM,CACd,GAAI,CAACb,GAAQK,EAAY,OAEzB,MAAMS,EAASC,GAAqB,CAC9BA,EAAE,MAAQ,WACZA,EAAE,eAAA,EACFJ,EAAA,EAEJ,EAEA,gBAAS,iBAAiB,UAAWG,CAAK,EACnC,IAAM,SAAS,oBAAoB,UAAWA,CAAK,CAC5D,EAAG,CAACd,EAAMK,EAAYM,CAAW,CAAC,EAGlCE,EAAAA,UAAU,IAAM,CACd,GAAI,CAACb,EAAM,OAEXU,EAAkB,QAAU,SAAS,cAErCM,EAAAA,WAAW,KAAA,EAEX,MAAMC,EAAeV,EAAW,QAC5BW,EAAAA,qBAAqBX,EAAW,OAAO,EACvC,CAAA,EAEEY,EAAcV,EAAU,QAC1BW,EAAAA,UAAUX,EAAU,OAAO,EAC3B,OAGJ,IAAIY,EACJ,MAAI,CAACf,GAAuBG,EAAU,UACpCY,EAAiBC,EAAAA,eAAeb,EAAWE,CAAW,GAGjD,IAAM,CACXU,IAAA,EACAF,IAAA,EACAH,EAAAA,WAAW,OAAA,EACXO,EAAAA,wBAAwBN,CAAY,EACpCO,EAAAA,aAAad,EAAkB,OAAO,CACxC,CACF,EAAG,CAACV,EAAMM,EAAqBK,CAAW,CAAC,EAEtCX,QAGFyB,EAAAA,OAAA,CACC,SAAAC,EAAAA,IAAC,MAAA,CACC,IAAKnB,EACL,UAAW,qBAAqBP,EAAO,OAAS,EAAE,GAElD,SAAA0B,EAAAA,IAAC,MAAA,CACC,IAAKjB,EACL,UAAW,aAAaP,CAAQ,IAAIF,EAAO,OAAS,EAAE,IAAIG,CAAS,GACnE,KAAK,SACL,aAAW,OAEV,SAAAC,CAAA,CAAA,CACH,CAAA,EAEJ,EAjBgB,IAmBpB"}
@@ -0,0 +1,57 @@
1
+ import { jsx as l } from "react/jsx-runtime";
2
+ import { useRef as c, useCallback as w, useEffect as d } from "react";
3
+ /* empty css */
4
+ import { scrollLock as p } from "../../utils/scrolllock/scrollLock.js";
5
+ import { applyInertToSiblings as g, removeInertFromSiblings as h } from "../../utils/inertmanager/inertManager.js";
6
+ import { trapFocus as E } from "../../utils/trapfocus/trapFocus.js";
7
+ import { onClickOutside as F } from "../../utils/onclickoutside/onClickOutside.js";
8
+ import { restoreFocus as $ } from "../../utils/restorefocus/restoreFocus.js";
9
+ import { Portal as L } from "../../utils/portal/portal.js";
10
+ function j({
11
+ open: r,
12
+ onClose: i,
13
+ position: v = "right",
14
+ className: y = "",
15
+ children: k,
16
+ disableEsc: a = !1,
17
+ disableClickOutside: m = !1
18
+ }) {
19
+ const u = c(null), e = c(null), s = c(null), t = w(() => {
20
+ i();
21
+ }, [i]);
22
+ return d(() => {
23
+ if (!r || a) return;
24
+ const o = (n) => {
25
+ n.key === "Escape" && (n.preventDefault(), t());
26
+ };
27
+ return document.addEventListener("keydown", o), () => document.removeEventListener("keydown", o);
28
+ }, [r, a, t]), d(() => {
29
+ if (!r) return;
30
+ s.current = document.activeElement, p.lock();
31
+ const o = u.current ? g(u.current) : [], n = e.current ? E(e.current) : void 0;
32
+ let f;
33
+ return !m && e.current && (f = F(e, t)), () => {
34
+ f?.(), n?.(), p.unlock(), h(o), $(s.current);
35
+ };
36
+ }, [r, m, t]), r ? /* @__PURE__ */ l(L, { children: /* @__PURE__ */ l(
37
+ "div",
38
+ {
39
+ ref: u,
40
+ className: `ui-drawer-overlay ${r ? "open" : ""}`,
41
+ children: /* @__PURE__ */ l(
42
+ "div",
43
+ {
44
+ ref: e,
45
+ className: `ui-drawer ${v} ${r ? "open" : ""} ${y}`,
46
+ role: "dialog",
47
+ "aria-modal": "true",
48
+ children: k
49
+ }
50
+ )
51
+ }
52
+ ) }) : null;
53
+ }
54
+ export {
55
+ j as Drawer
56
+ };
57
+ //# sourceMappingURL=Drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.js","sources":["../../../../src/components/drawer/Drawer.tsx"],"sourcesContent":["/**\r\n * Drawer.tsx\r\n * ----------\r\n * WCAG-compliant drawer component.\r\n * - Focus trap\r\n * - Scroll lock\r\n * - Click outside\r\n * - Esc to close\r\n * - Portal\r\n */\r\n\r\n/**\r\n * Drawer.tsx — Headless Drawer (no default UI)\r\n * User controls close button & styles fully.\r\n */\r\n\r\nimport React, { useRef, useEffect, useCallback } from 'react';\r\nimport './Drawer.css';\r\n\r\nimport { Portal, onClickOutside, trapFocus, restoreFocus, scrollLock, applyInertToSiblings,\r\n removeInertFromSiblings } from '../../utils/index';\r\n\r\nexport interface DrawerProps {\r\n open: boolean;\r\n onClose: () => void;\r\n position?: 'left' | 'right' | 'bottom' | 'top';\r\n className?: string;\r\n children?: React.ReactNode;\r\n\r\n disableEsc?: boolean;\r\n disableClickOutside?: boolean;\r\n}\r\n\r\nexport function Drawer({\r\n open,\r\n onClose,\r\n position = 'right',\r\n className = '',\r\n children,\r\n disableEsc = false,\r\n disableClickOutside = false,\r\n}: DrawerProps) {\r\n const overlayRef = useRef<HTMLDivElement | null>(null);\r\n const drawerRef = useRef<HTMLDivElement | null>(null);\r\n const previouslyFocused = useRef<HTMLElement | null>(null);\r\n\r\n const handleClose = useCallback(() => {\r\n onClose();\r\n }, [onClose]);\r\n\r\n // ESC key\r\n useEffect(() => {\r\n if (!open || disableEsc) return;\r\n\r\n const onKey = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n e.preventDefault();\r\n handleClose();\r\n }\r\n };\r\n\r\n document.addEventListener('keydown', onKey);\r\n return () => document.removeEventListener('keydown', onKey);\r\n }, [open, disableEsc, handleClose]);\r\n\r\n // Open/close lifecycle\r\n useEffect(() => {\r\n if (!open) return;\r\n\r\n previouslyFocused.current = document.activeElement as HTMLElement;\r\n\r\n scrollLock.lock();\r\n\r\n const inertTargets = overlayRef.current\r\n ? applyInertToSiblings(overlayRef.current)\r\n : [];\r\n\r\n const trapCleanup = drawerRef.current\r\n ? trapFocus(drawerRef.current)\r\n : undefined;\r\n\r\n // Click outside\r\n let cleanupOutside: (() => void) | undefined;\r\n if (!disableClickOutside && drawerRef.current) {\r\n cleanupOutside = onClickOutside(drawerRef, handleClose);\r\n }\r\n\r\n return () => {\r\n cleanupOutside?.();\r\n trapCleanup?.();\r\n scrollLock.unlock();\r\n removeInertFromSiblings(inertTargets);\r\n restoreFocus(previouslyFocused.current);\r\n };\r\n }, [open, disableClickOutside, handleClose]);\r\n\r\n if (!open) return null;\r\n\r\n return (\r\n <Portal>\r\n <div\r\n ref={overlayRef}\r\n className={`ui-drawer-overlay ${open ? 'open' : ''}`}\r\n >\r\n <div\r\n ref={drawerRef}\r\n className={`ui-drawer ${position} ${open ? 'open' : ''} ${className}`}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n >\r\n {children}\r\n </div>\r\n </div>\r\n </Portal>\r\n );\r\n}\r\n"],"names":["Drawer","open","onClose","position","className","children","disableEsc","disableClickOutside","overlayRef","useRef","drawerRef","previouslyFocused","handleClose","useCallback","useEffect","onKey","e","scrollLock","inertTargets","applyInertToSiblings","trapCleanup","trapFocus","cleanupOutside","onClickOutside","removeInertFromSiblings","restoreFocus","Portal","jsx"],"mappings":";;;;;;;;;AAiCO,SAASA,EAAO;AAAA,EACrB,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,qBAAAC,IAAsB;AACxB,GAAgB;AACd,QAAMC,IAAaC,EAA8B,IAAI,GAC/CC,IAAYD,EAA8B,IAAI,GAC9CE,IAAoBF,EAA2B,IAAI,GAEnDG,IAAcC,EAAY,MAAM;AACpC,IAAAX,EAAA;AAAA,EACF,GAAG,CAACA,CAAO,CAAC;AAgDZ,SA7CAY,EAAU,MAAM;AACd,QAAI,CAACb,KAAQK,EAAY;AAEzB,UAAMS,IAAQ,CAACC,MAAqB;AAClC,MAAIA,EAAE,QAAQ,aACZA,EAAE,eAAA,GACFJ,EAAA;AAAA,IAEJ;AAEA,oBAAS,iBAAiB,WAAWG,CAAK,GACnC,MAAM,SAAS,oBAAoB,WAAWA,CAAK;AAAA,EAC5D,GAAG,CAACd,GAAMK,GAAYM,CAAW,CAAC,GAGlCE,EAAU,MAAM;AACd,QAAI,CAACb,EAAM;AAEX,IAAAU,EAAkB,UAAU,SAAS,eAErCM,EAAW,KAAA;AAEX,UAAMC,IAAeV,EAAW,UAC5BW,EAAqBX,EAAW,OAAO,IACvC,CAAA,GAEEY,IAAcV,EAAU,UAC1BW,EAAUX,EAAU,OAAO,IAC3B;AAGJ,QAAIY;AACJ,WAAI,CAACf,KAAuBG,EAAU,YACpCY,IAAiBC,EAAeb,GAAWE,CAAW,IAGjD,MAAM;AACX,MAAAU,IAAA,GACAF,IAAA,GACAH,EAAW,OAAA,GACXO,EAAwBN,CAAY,GACpCO,EAAad,EAAkB,OAAO;AAAA,IACxC;AAAA,EACF,GAAG,CAACV,GAAMM,GAAqBK,CAAW,CAAC,GAEtCX,sBAGFyB,GAAA,EACC,UAAA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKnB;AAAA,MACL,WAAW,qBAAqBP,IAAO,SAAS,EAAE;AAAA,MAElD,UAAA,gBAAA0B;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKjB;AAAA,UACL,WAAW,aAAaP,CAAQ,IAAIF,IAAO,SAAS,EAAE,IAAIG,CAAS;AAAA,UACnE,MAAK;AAAA,UACL,cAAW;AAAA,UAEV,UAAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA,GAEJ,IAjBgB;AAmBpB;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),t=require("react");;/* empty css */const p=require("../../utils/keyboardnav/keyboardNav.cjs"),m=require("../../utils/restorefocus/restoreFocus.cjs"),w=require("../../utils/onclickoutside/onClickOutside.cjs"),v=require("../../utils/portal/portal.cjs"),f=t.createContext(null);function a(){const s=t.useContext(f);if(!s)throw new Error("Dropdown components must be inside <Dropdown>");return s}function g({children:s}){const[i,e]=t.useState(!1),r=t.useRef(null),o=t.useRef(null),n=t.useRef([]),u=d=>{n.current.push(d)};return t.useEffect(()=>{i||m.restoreFocus(r.current)},[i]),c.jsx(f.Provider,{value:{open:i,setOpen:e,triggerRef:r,menuRef:o,registerItem:u,items:n},children:c.jsx("div",{className:"ui-dropdown",children:s})})}function x({children:s,className:i=""}){const{open:e,setOpen:r,triggerRef:o}=a();return c.jsx("button",{ref:o,className:`ui-dropdown-trigger ${i}`,"aria-haspopup":"menu","aria-expanded":e,onClick:()=>r(n=>!n),children:s})}function k({className:s="",children:i}){const{open:e,setOpen:r,menuRef:o,items:n}=a();return t.useEffect(()=>{if(e)return w.onClickOutside(o,()=>r(!1))},[e,o,r]),t.useEffect(()=>{if(!e)return;const u=d=>{d.key==="Escape"&&r(!1)};return document.addEventListener("keydown",u),()=>document.removeEventListener("keydown",u)},[e,r]),t.useEffect(()=>{if(!e)return;const u=o.current;if(!u)return;const d=p.createKeyboardNavigation({items:n.current,onSelect:l=>n.current[l]?.click()});return u.addEventListener("keydown",d),n.current[0]?.focus(),()=>u.removeEventListener("keydown",d)},[e,o,n]),e?c.jsx(v.Portal,{children:c.jsx("div",{className:"ui-dropdown-menu-wrapper",children:c.jsx("div",{ref:o,className:`ui-dropdown-menu ${s}`,role:"menu",children:i})})}):null}function D({children:s,onSelect:i,className:e=""}){const{registerItem:r,setOpen:o}=a(),n=t.useRef(null);t.useEffect(()=>{n.current&&r(n.current)},[r]);const u=()=>{i?.(),o(!1)};return c.jsx("div",{ref:n,className:`ui-dropdown-item ${e}`,role:"menuitem",tabIndex:-1,onClick:u,children:s})}exports.Dropdown=g;exports.DropdownItem=D;exports.DropdownMenu=k;exports.DropdownTrigger=x;
2
+ //# sourceMappingURL=Dropdown.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.cjs","sources":["../../../../src/components/dropdown/Dropdown.tsx"],"sourcesContent":["/**\r\n * Dropdown.tsx (Fixed Version — No TS Errors)\r\n * -------------------------------------------\r\n * Accessible dropdown menu:\r\n * - Arrow key navigation\r\n * - Roving tabindex\r\n * - ESC and click outside to close\r\n * - Focus restore\r\n * - Portal rendering\r\n * - Fully typed with no TS or ESLint errors\r\n */\r\n\r\nimport React, {\r\n createContext,\r\n useState,\r\n useContext,\r\n useRef,\r\n useEffect,\r\n ReactNode,\r\n} from 'react';\r\n\r\nimport './Dropdown.css';\r\n\r\nimport { Portal, onClickOutside, restoreFocus, createKeyboardNavigation } from '../../utils/index';\r\n\r\n/* ============================================================\r\n * Context Types\r\n * ============================================================ */\r\n\r\ninterface DropdownContextProps {\r\n open: boolean;\r\n setOpen: React.Dispatch<React.SetStateAction<boolean>>;\r\n triggerRef: React.RefObject<HTMLButtonElement | null>;\r\n menuRef: React.RefObject<HTMLDivElement | null>;\r\n registerItem: (el: HTMLElement) => void;\r\n items: React.RefObject<HTMLElement[]>;\r\n}\r\n\r\nconst DropdownContext = createContext<DropdownContextProps | null>(null);\r\n\r\nfunction useDropdown() {\r\n const ctx = useContext(DropdownContext);\r\n if (!ctx) throw new Error('Dropdown components must be inside <Dropdown>');\r\n return ctx;\r\n}\r\n\r\n/* ============================================================\r\n * Dropdown root\r\n * ============================================================ */\r\n\r\nexport function Dropdown({ children }: { children: ReactNode }) {\r\n const [open, setOpen] = useState(false);\r\n\r\n const triggerRef = useRef<HTMLButtonElement>(null);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n const items = useRef<HTMLElement[]>([]);\r\n\r\n const registerItem = (el: HTMLElement) => {\r\n items.current.push(el);\r\n };\r\n\r\n // Restore focus to trigger when closing\r\n useEffect(() => {\r\n if (!open) restoreFocus(triggerRef.current);\r\n }, [open]);\r\n\r\n return (\r\n <DropdownContext.Provider\r\n value={{\r\n open,\r\n setOpen,\r\n triggerRef,\r\n menuRef,\r\n registerItem,\r\n items,\r\n }}\r\n >\r\n <div className=\"ui-dropdown\">{children}</div>\r\n </DropdownContext.Provider>\r\n );\r\n}\r\n\r\n/* ============================================================\r\n * Trigger\r\n * ============================================================ */\r\n\r\nexport function DropdownTrigger({\r\n children,\r\n className = '',\r\n}: {\r\n children: ReactNode;\r\n className?: string;\r\n}) {\r\n const { open, setOpen, triggerRef } = useDropdown();\r\n\r\n return (\r\n <button\r\n ref={triggerRef}\r\n className={`ui-dropdown-trigger ${className}`}\r\n aria-haspopup=\"menu\"\r\n aria-expanded={open}\r\n onClick={() => setOpen((prev) => !prev)}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\n/* ============================================================\r\n * Menu\r\n * ============================================================ */\r\n\r\nexport function DropdownMenu({\r\n className = '',\r\n children,\r\n}: {\r\n className?: string;\r\n children: ReactNode;\r\n}) {\r\n const { open, setOpen, menuRef, items } = useDropdown();\r\n\r\n // Click outside\r\n useEffect(() => {\r\n if (!open) return;\r\n return onClickOutside(menuRef, () => setOpen(false));\r\n }, [open, menuRef, setOpen]);\r\n\r\n // ESC\r\n useEffect(() => {\r\n if (!open) return;\r\n\r\n const handler = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') setOpen(false);\r\n };\r\n\r\n document.addEventListener('keydown', handler);\r\n return () => document.removeEventListener('keydown', handler);\r\n }, [open, setOpen]);\r\n\r\n // Keyboard navigation\r\n useEffect(() => {\r\n if (!open) return;\r\n\r\n const menu = menuRef.current;\r\n if (!menu) return;\r\n\r\n const nav = createKeyboardNavigation({\r\n items: items.current,\r\n onSelect: (i) => items.current[i]?.click(),\r\n });\r\n\r\n menu.addEventListener('keydown', nav);\r\n items.current[0]?.focus();\r\n\r\n return () => menu.removeEventListener('keydown', nav);\r\n }, [open, menuRef, items]);\r\n\r\n if (!open) return null;\r\n\r\n return (\r\n <Portal>\r\n <div className=\"ui-dropdown-menu-wrapper\">\r\n <div\r\n ref={menuRef}\r\n className={`ui-dropdown-menu ${className}`}\r\n role=\"menu\"\r\n >\r\n {children}\r\n </div>\r\n </div>\r\n </Portal>\r\n );\r\n}\r\n\r\n/* ============================================================\r\n * Menu Item\r\n * ============================================================ */\r\n\r\nexport function DropdownItem({\r\n children,\r\n onSelect,\r\n className = '',\r\n}: {\r\n children: ReactNode;\r\n onSelect?: () => void;\r\n className?: string;\r\n}) {\r\n const { registerItem, setOpen } = useDropdown();\r\n const itemRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (itemRef.current) registerItem(itemRef.current);\r\n }, [registerItem]);\r\n\r\n const handleClick = () => {\r\n onSelect?.();\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <div\r\n ref={itemRef}\r\n className={`ui-dropdown-item ${className}`}\r\n role=\"menuitem\"\r\n tabIndex={-1}\r\n onClick={handleClick}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n"],"names":["DropdownContext","createContext","useDropdown","ctx","useContext","Dropdown","children","open","setOpen","useState","triggerRef","useRef","menuRef","items","registerItem","el","useEffect","restoreFocus","jsx","DropdownTrigger","className","prev","DropdownMenu","onClickOutside","handler","e","menu","nav","createKeyboardNavigation","i","Portal","DropdownItem","onSelect","itemRef","handleClick"],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import { jsx as s } from "react/jsx-runtime";
2
+ import { useState as l, useRef as m, useEffect as d, createContext as w, useContext as v } from "react";
3
+ /* empty css */
4
+ import { createKeyboardNavigation as g } from "../../utils/keyboardnav/keyboardNav.js";
5
+ import { restoreFocus as k } from "../../utils/restorefocus/restoreFocus.js";
6
+ import { onClickOutside as h } from "../../utils/onclickoutside/onClickOutside.js";
7
+ import { Portal as x } from "../../utils/portal/portal.js";
8
+ const a = w(null);
9
+ function p() {
10
+ const o = v(a);
11
+ if (!o) throw new Error("Dropdown components must be inside <Dropdown>");
12
+ return o;
13
+ }
14
+ function b({ children: o }) {
15
+ const [u, e] = l(!1), r = m(null), t = m(null), n = m([]), i = (c) => {
16
+ n.current.push(c);
17
+ };
18
+ return d(() => {
19
+ u || k(r.current);
20
+ }, [u]), /* @__PURE__ */ s(
21
+ a.Provider,
22
+ {
23
+ value: {
24
+ open: u,
25
+ setOpen: e,
26
+ triggerRef: r,
27
+ menuRef: t,
28
+ registerItem: i,
29
+ items: n
30
+ },
31
+ children: /* @__PURE__ */ s("div", { className: "ui-dropdown", children: o })
32
+ }
33
+ );
34
+ }
35
+ function I({
36
+ children: o,
37
+ className: u = ""
38
+ }) {
39
+ const { open: e, setOpen: r, triggerRef: t } = p();
40
+ return /* @__PURE__ */ s(
41
+ "button",
42
+ {
43
+ ref: t,
44
+ className: `ui-dropdown-trigger ${u}`,
45
+ "aria-haspopup": "menu",
46
+ "aria-expanded": e,
47
+ onClick: () => r((n) => !n),
48
+ children: o
49
+ }
50
+ );
51
+ }
52
+ function L({
53
+ className: o = "",
54
+ children: u
55
+ }) {
56
+ const { open: e, setOpen: r, menuRef: t, items: n } = p();
57
+ return d(() => {
58
+ if (e)
59
+ return h(t, () => r(!1));
60
+ }, [e, t, r]), d(() => {
61
+ if (!e) return;
62
+ const i = (c) => {
63
+ c.key === "Escape" && r(!1);
64
+ };
65
+ return document.addEventListener("keydown", i), () => document.removeEventListener("keydown", i);
66
+ }, [e, r]), d(() => {
67
+ if (!e) return;
68
+ const i = t.current;
69
+ if (!i) return;
70
+ const c = g({
71
+ items: n.current,
72
+ onSelect: (f) => n.current[f]?.click()
73
+ });
74
+ return i.addEventListener("keydown", c), n.current[0]?.focus(), () => i.removeEventListener("keydown", c);
75
+ }, [e, t, n]), e ? /* @__PURE__ */ s(x, { children: /* @__PURE__ */ s("div", { className: "ui-dropdown-menu-wrapper", children: /* @__PURE__ */ s(
76
+ "div",
77
+ {
78
+ ref: t,
79
+ className: `ui-dropdown-menu ${o}`,
80
+ role: "menu",
81
+ children: u
82
+ }
83
+ ) }) }) : null;
84
+ }
85
+ function $({
86
+ children: o,
87
+ onSelect: u,
88
+ className: e = ""
89
+ }) {
90
+ const { registerItem: r, setOpen: t } = p(), n = m(null);
91
+ d(() => {
92
+ n.current && r(n.current);
93
+ }, [r]);
94
+ const i = () => {
95
+ u?.(), t(!1);
96
+ };
97
+ return /* @__PURE__ */ s(
98
+ "div",
99
+ {
100
+ ref: n,
101
+ className: `ui-dropdown-item ${e}`,
102
+ role: "menuitem",
103
+ tabIndex: -1,
104
+ onClick: i,
105
+ children: o
106
+ }
107
+ );
108
+ }
109
+ export {
110
+ b as Dropdown,
111
+ $ as DropdownItem,
112
+ L as DropdownMenu,
113
+ I as DropdownTrigger
114
+ };
115
+ //# sourceMappingURL=Dropdown.js.map