@nofinite/nui 1.1.2 → 2.0.0

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.

Potentially problematic release.


This version of @nofinite/nui might be problematic. Click here for more details.

Files changed (739) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +61 -48
  3. package/dist/CHANGELOG.md +8 -0
  4. package/dist/LICENSE +201 -0
  5. package/dist/README.md +48 -0
  6. package/dist/components/accordion/Accordion.cjs +1 -1
  7. package/dist/components/accordion/Accordion.cjs.map +1 -1
  8. package/dist/components/accordion/Accordion.js +64 -43
  9. package/dist/components/accordion/Accordion.js.map +1 -1
  10. package/dist/components/alert/Alert.cjs +1 -1
  11. package/dist/components/alert/Alert.cjs.map +1 -1
  12. package/dist/components/alert/Alert.js +39 -25
  13. package/dist/components/alert/Alert.js.map +1 -1
  14. package/dist/components/avatar/Avatar.cjs +1 -1
  15. package/dist/components/avatar/Avatar.cjs.map +1 -1
  16. package/dist/components/avatar/Avatar.js +58 -44
  17. package/dist/components/avatar/Avatar.js.map +1 -1
  18. package/dist/components/avatar/AvatarGroup.cjs +1 -1
  19. package/dist/components/avatar/AvatarGroup.cjs.map +1 -1
  20. package/dist/components/avatar/AvatarGroup.js +34 -25
  21. package/dist/components/avatar/AvatarGroup.js.map +1 -1
  22. package/dist/components/badge/Badge.cjs +1 -1
  23. package/dist/components/badge/Badge.cjs.map +1 -1
  24. package/dist/components/badge/Badge.js +43 -68
  25. package/dist/components/badge/Badge.js.map +1 -1
  26. package/dist/components/badge/BadgeGroup.cjs +1 -1
  27. package/dist/components/badge/BadgeGroup.cjs.map +1 -1
  28. package/dist/components/badge/BadgeGroup.js +20 -10
  29. package/dist/components/badge/BadgeGroup.js.map +1 -1
  30. package/dist/components/breadcrumbs/Breadcrumbs.cjs +1 -1
  31. package/dist/components/breadcrumbs/Breadcrumbs.cjs.map +1 -1
  32. package/dist/components/breadcrumbs/Breadcrumbs.js +59 -39
  33. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -1
  34. package/dist/components/button/Button.cjs +1 -1
  35. package/dist/components/button/Button.cjs.map +1 -1
  36. package/dist/components/button/Button.js +52 -17
  37. package/dist/components/button/Button.js.map +1 -1
  38. package/dist/components/card/Card.cjs +1 -1
  39. package/dist/components/card/Card.cjs.map +1 -1
  40. package/dist/components/card/Card.js +44 -41
  41. package/dist/components/card/Card.js.map +1 -1
  42. package/dist/components/checkbox/Checkbox.cjs +1 -1
  43. package/dist/components/checkbox/Checkbox.cjs.map +1 -1
  44. package/dist/components/checkbox/Checkbox.js +59 -40
  45. package/dist/components/checkbox/Checkbox.js.map +1 -1
  46. package/dist/components/chip/Chip.cjs +1 -1
  47. package/dist/components/chip/Chip.cjs.map +1 -1
  48. package/dist/components/chip/Chip.js +67 -47
  49. package/dist/components/chip/Chip.js.map +1 -1
  50. package/dist/components/combobox/Combobox.cjs +1 -1
  51. package/dist/components/combobox/Combobox.cjs.map +1 -1
  52. package/dist/components/combobox/Combobox.js +123 -108
  53. package/dist/components/combobox/Combobox.js.map +1 -1
  54. package/dist/components/commandpalette/CommandPalette.cjs +1 -1
  55. package/dist/components/commandpalette/CommandPalette.cjs.map +1 -1
  56. package/dist/components/commandpalette/CommandPalette.js +96 -73
  57. package/dist/components/commandpalette/CommandPalette.js.map +1 -1
  58. package/dist/components/contextmenu/ContextMenu.cjs +1 -1
  59. package/dist/components/contextmenu/ContextMenu.cjs.map +1 -1
  60. package/dist/components/contextmenu/ContextMenu.js +79 -58
  61. package/dist/components/contextmenu/ContextMenu.js.map +1 -1
  62. package/dist/components/datagrid/DataGrid.cjs +1 -1
  63. package/dist/components/datagrid/DataGrid.cjs.map +1 -1
  64. package/dist/components/datagrid/DataGrid.js +184 -202
  65. package/dist/components/datagrid/DataGrid.js.map +1 -1
  66. package/dist/components/datepicker/DatePicker.cjs +1 -1
  67. package/dist/components/datepicker/DatePicker.cjs.map +1 -1
  68. package/dist/components/datepicker/DatePicker.js +197 -164
  69. package/dist/components/datepicker/DatePicker.js.map +1 -1
  70. package/dist/components/daterangepicker/DateRangePicker.cjs +1 -1
  71. package/dist/components/daterangepicker/DateRangePicker.cjs.map +1 -1
  72. package/dist/components/daterangepicker/DateRangePicker.js +254 -213
  73. package/dist/components/daterangepicker/DateRangePicker.js.map +1 -1
  74. package/dist/components/dialog/DialogProvider.cjs +2 -0
  75. package/dist/components/dialog/DialogProvider.cjs.map +1 -0
  76. package/dist/components/dialog/DialogProvider.js +71 -0
  77. package/dist/components/dialog/DialogProvider.js.map +1 -0
  78. package/dist/components/dialog/dialogStore.cjs +2 -0
  79. package/dist/components/dialog/dialogStore.cjs.map +1 -0
  80. package/dist/components/dialog/dialogStore.js +60 -0
  81. package/dist/components/dialog/dialogStore.js.map +1 -0
  82. package/dist/components/drawer/Drawer.cjs +1 -1
  83. package/dist/components/drawer/Drawer.cjs.map +1 -1
  84. package/dist/components/drawer/Drawer.js +69 -47
  85. package/dist/components/drawer/Drawer.js.map +1 -1
  86. package/dist/components/dropdown/Dropdown.cjs +1 -1
  87. package/dist/components/dropdown/Dropdown.cjs.map +1 -1
  88. package/dist/components/dropdown/Dropdown.js +134 -108
  89. package/dist/components/dropdown/Dropdown.js.map +1 -1
  90. package/dist/components/fileuploader/FileUploader.cjs +1 -1
  91. package/dist/components/fileuploader/FileUploader.cjs.map +1 -1
  92. package/dist/components/fileuploader/FileUploader.js +96 -61
  93. package/dist/components/fileuploader/FileUploader.js.map +1 -1
  94. package/dist/components/hovercard/HoverCard.cjs +1 -1
  95. package/dist/components/hovercard/HoverCard.cjs.map +1 -1
  96. package/dist/components/hovercard/HoverCard.js +124 -69
  97. package/dist/components/hovercard/HoverCard.js.map +1 -1
  98. package/dist/components/input/Input.cjs +1 -1
  99. package/dist/components/input/Input.cjs.map +1 -1
  100. package/dist/components/input/Input.js +62 -37
  101. package/dist/components/input/Input.js.map +1 -1
  102. package/dist/components/layout/Container.cjs +1 -1
  103. package/dist/components/layout/Container.cjs.map +1 -1
  104. package/dist/components/layout/Container.js +21 -30
  105. package/dist/components/layout/Container.js.map +1 -1
  106. package/dist/components/layout/Flex.cjs +1 -1
  107. package/dist/components/layout/Flex.cjs.map +1 -1
  108. package/dist/components/layout/Flex.js +36 -19
  109. package/dist/components/layout/Flex.js.map +1 -1
  110. package/dist/components/layout/Grid.cjs +1 -1
  111. package/dist/components/layout/Grid.cjs.map +1 -1
  112. package/dist/components/layout/Grid.js +30 -18
  113. package/dist/components/layout/Grid.js.map +1 -1
  114. package/dist/components/link/Link.cjs +2 -0
  115. package/dist/components/link/Link.cjs.map +1 -0
  116. package/dist/components/link/Link.js +41 -0
  117. package/dist/components/link/Link.js.map +1 -0
  118. package/dist/components/megamenu/MegaMenu.cjs +1 -1
  119. package/dist/components/megamenu/MegaMenu.cjs.map +1 -1
  120. package/dist/components/megamenu/MegaMenu.js +107 -38
  121. package/dist/components/megamenu/MegaMenu.js.map +1 -1
  122. package/dist/components/modal/Modal.cjs +1 -1
  123. package/dist/components/modal/Modal.cjs.map +1 -1
  124. package/dist/components/modal/Modal.js +91 -83
  125. package/dist/components/modal/Modal.js.map +1 -1
  126. package/dist/components/multiselect/MultiSelect.cjs +2 -0
  127. package/dist/components/multiselect/MultiSelect.cjs.map +1 -0
  128. package/dist/components/multiselect/MultiSelect.js +176 -0
  129. package/dist/components/multiselect/MultiSelect.js.map +1 -0
  130. package/dist/components/nuiprovider/NUIProvider.cjs +2 -0
  131. package/dist/components/nuiprovider/NUIProvider.cjs.map +1 -0
  132. package/dist/components/nuiprovider/NUIProvider.js +36 -0
  133. package/dist/components/nuiprovider/NUIProvider.js.map +1 -0
  134. package/dist/components/pagination/Pagination.cjs +1 -1
  135. package/dist/components/pagination/Pagination.cjs.map +1 -1
  136. package/dist/components/pagination/Pagination.js +74 -41
  137. package/dist/components/pagination/Pagination.js.map +1 -1
  138. package/dist/components/popover/Popover.cjs +1 -1
  139. package/dist/components/popover/Popover.cjs.map +1 -1
  140. package/dist/components/popover/Popover.js +99 -100
  141. package/dist/components/popover/Popover.js.map +1 -1
  142. package/dist/components/progress/Progress.cjs +1 -1
  143. package/dist/components/progress/Progress.cjs.map +1 -1
  144. package/dist/components/progress/Progress.js +44 -22
  145. package/dist/components/progress/Progress.js.map +1 -1
  146. package/dist/components/radiogroup/RadioGroup.cjs +1 -1
  147. package/dist/components/radiogroup/RadioGroup.cjs.map +1 -1
  148. package/dist/components/radiogroup/RadioGroup.js +69 -74
  149. package/dist/components/radiogroup/RadioGroup.js.map +1 -1
  150. package/dist/components/rating/Rating.cjs +1 -1
  151. package/dist/components/rating/Rating.cjs.map +1 -1
  152. package/dist/components/rating/Rating.js +72 -33
  153. package/dist/components/rating/Rating.js.map +1 -1
  154. package/dist/components/resizable/Resizable.cjs +2 -0
  155. package/dist/components/resizable/Resizable.cjs.map +1 -0
  156. package/dist/components/resizable/Resizable.js +134 -0
  157. package/dist/components/resizable/Resizable.js.map +1 -0
  158. package/dist/components/select/Select.cjs +1 -1
  159. package/dist/components/select/Select.cjs.map +1 -1
  160. package/dist/components/select/Select.js +114 -113
  161. package/dist/components/select/Select.js.map +1 -1
  162. package/dist/components/skeleton/Skeleton.cjs +1 -1
  163. package/dist/components/skeleton/Skeleton.cjs.map +1 -1
  164. package/dist/components/skeleton/Skeleton.js +90 -67
  165. package/dist/components/skeleton/Skeleton.js.map +1 -1
  166. package/dist/components/slider/Slider.cjs +1 -1
  167. package/dist/components/slider/Slider.cjs.map +1 -1
  168. package/dist/components/slider/Slider.js +85 -82
  169. package/dist/components/slider/Slider.js.map +1 -1
  170. package/dist/components/spinner/Spinner.cjs +1 -1
  171. package/dist/components/spinner/Spinner.cjs.map +1 -1
  172. package/dist/components/spinner/Spinner.js +60 -17
  173. package/dist/components/spinner/Spinner.js.map +1 -1
  174. package/dist/components/stepper/Stepper.cjs +1 -5
  175. package/dist/components/stepper/Stepper.cjs.map +1 -1
  176. package/dist/components/stepper/Stepper.js +65 -39
  177. package/dist/components/stepper/Stepper.js.map +1 -1
  178. package/dist/components/switch/Switch.cjs +1 -1
  179. package/dist/components/switch/Switch.cjs.map +1 -1
  180. package/dist/components/switch/Switch.js +89 -62
  181. package/dist/components/switch/Switch.js.map +1 -1
  182. package/dist/components/table/Table.cjs +1 -1
  183. package/dist/components/table/Table.cjs.map +1 -1
  184. package/dist/components/table/Table.js +62 -35
  185. package/dist/components/table/Table.js.map +1 -1
  186. package/dist/components/tabs/Tabs.cjs +1 -1
  187. package/dist/components/tabs/Tabs.cjs.map +1 -1
  188. package/dist/components/tabs/Tabs.js +110 -50
  189. package/dist/components/tabs/Tabs.js.map +1 -1
  190. package/dist/components/textarea/Textarea.cjs +1 -1
  191. package/dist/components/textarea/Textarea.cjs.map +1 -1
  192. package/dist/components/textarea/Textarea.js +63 -58
  193. package/dist/components/textarea/Textarea.js.map +1 -1
  194. package/dist/components/timepicker/TimePicker.cjs +2 -0
  195. package/dist/components/timepicker/TimePicker.cjs.map +1 -0
  196. package/dist/components/timepicker/TimePicker.js +159 -0
  197. package/dist/components/timepicker/TimePicker.js.map +1 -0
  198. package/dist/components/timerangepicker/TimeRangePicker.cjs +2 -0
  199. package/dist/components/timerangepicker/TimeRangePicker.cjs.map +1 -0
  200. package/dist/components/timerangepicker/TimeRangePicker.js +208 -0
  201. package/dist/components/timerangepicker/TimeRangePicker.js.map +1 -0
  202. package/dist/components/toast/Toast.cjs +1 -1
  203. package/dist/components/toast/Toast.cjs.map +1 -1
  204. package/dist/components/toast/Toast.js +91 -38
  205. package/dist/components/toast/Toast.js.map +1 -1
  206. package/dist/components/tooltip/Tooltip.cjs +1 -1
  207. package/dist/components/tooltip/Tooltip.cjs.map +1 -1
  208. package/dist/components/tooltip/Tooltip.js +72 -56
  209. package/dist/components/tooltip/Tooltip.js.map +1 -1
  210. package/dist/components/treeview/TreeView.cjs +1 -1
  211. package/dist/components/treeview/TreeView.cjs.map +1 -1
  212. package/dist/components/treeview/TreeView.js +120 -90
  213. package/dist/components/treeview/TreeView.js.map +1 -1
  214. package/dist/components/virtuallist/VirtualList.cjs +1 -1
  215. package/dist/components/virtuallist/VirtualList.cjs.map +1 -1
  216. package/dist/components/virtuallist/VirtualList.js +52 -34
  217. package/dist/components/virtuallist/VirtualList.js.map +1 -1
  218. package/dist/dist/components/accordion/Accordion.cjs +2 -0
  219. package/dist/dist/components/accordion/Accordion.cjs.map +1 -0
  220. package/dist/dist/components/accordion/Accordion.js +51 -0
  221. package/dist/dist/components/accordion/Accordion.js.map +1 -0
  222. package/dist/dist/components/alert/Alert.cjs +2 -0
  223. package/dist/dist/components/alert/Alert.cjs.map +1 -0
  224. package/dist/dist/components/alert/Alert.js +32 -0
  225. package/dist/dist/components/alert/Alert.js.map +1 -0
  226. package/dist/dist/components/avatar/Avatar.cjs +2 -0
  227. package/dist/dist/components/avatar/Avatar.cjs.map +1 -0
  228. package/dist/dist/components/avatar/Avatar.js +51 -0
  229. package/dist/dist/components/avatar/Avatar.js.map +1 -0
  230. package/dist/dist/components/avatar/AvatarGroup.cjs +2 -0
  231. package/dist/dist/components/avatar/AvatarGroup.cjs.map +1 -0
  232. package/dist/dist/components/avatar/AvatarGroup.js +32 -0
  233. package/dist/dist/components/avatar/AvatarGroup.js.map +1 -0
  234. package/dist/dist/components/badge/Badge.cjs +2 -0
  235. package/dist/dist/components/badge/Badge.cjs.map +1 -0
  236. package/dist/dist/components/badge/Badge.js +81 -0
  237. package/dist/dist/components/badge/Badge.js.map +1 -0
  238. package/dist/dist/components/badge/BadgeGroup.cjs +2 -0
  239. package/dist/dist/components/badge/BadgeGroup.cjs.map +1 -0
  240. package/dist/dist/components/badge/BadgeGroup.js +17 -0
  241. package/dist/dist/components/badge/BadgeGroup.js.map +1 -0
  242. package/dist/dist/components/breadcrumbs/Breadcrumbs.cjs +2 -0
  243. package/dist/dist/components/breadcrumbs/Breadcrumbs.cjs.map +1 -0
  244. package/dist/dist/components/breadcrumbs/Breadcrumbs.js +46 -0
  245. package/dist/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
  246. package/dist/dist/components/button/Button.cjs +2 -0
  247. package/dist/dist/components/button/Button.cjs.map +1 -0
  248. package/dist/dist/components/button/Button.js +21 -0
  249. package/dist/dist/components/button/Button.js.map +1 -0
  250. package/dist/dist/components/card/Card.cjs +2 -0
  251. package/dist/dist/components/card/Card.cjs.map +1 -0
  252. package/dist/dist/components/card/Card.js +50 -0
  253. package/dist/dist/components/card/Card.js.map +1 -0
  254. package/dist/dist/components/checkbox/Checkbox.cjs +2 -0
  255. package/dist/dist/components/checkbox/Checkbox.cjs.map +1 -0
  256. package/dist/dist/components/checkbox/Checkbox.js +46 -0
  257. package/dist/dist/components/checkbox/Checkbox.js.map +1 -0
  258. package/dist/dist/components/chip/Chip.cjs +2 -0
  259. package/dist/dist/components/chip/Chip.cjs.map +1 -0
  260. package/dist/dist/components/chip/Chip.js +51 -0
  261. package/dist/dist/components/chip/Chip.js.map +1 -0
  262. package/dist/dist/components/combobox/Combobox.cjs +2 -0
  263. package/dist/dist/components/combobox/Combobox.cjs.map +1 -0
  264. package/dist/dist/components/combobox/Combobox.js +114 -0
  265. package/dist/dist/components/combobox/Combobox.js.map +1 -0
  266. package/dist/dist/components/commandpalette/CommandPalette.cjs +2 -0
  267. package/dist/dist/components/commandpalette/CommandPalette.cjs.map +1 -0
  268. package/dist/dist/components/commandpalette/CommandPalette.js +111 -0
  269. package/dist/dist/components/commandpalette/CommandPalette.js.map +1 -0
  270. package/dist/dist/components/contextmenu/ContextMenu.cjs +2 -0
  271. package/dist/dist/components/contextmenu/ContextMenu.cjs.map +1 -0
  272. package/dist/dist/components/contextmenu/ContextMenu.js +104 -0
  273. package/dist/dist/components/contextmenu/ContextMenu.js.map +1 -0
  274. package/dist/dist/components/datagrid/DataGrid.cjs +2 -0
  275. package/dist/dist/components/datagrid/DataGrid.cjs.map +1 -0
  276. package/dist/dist/components/datagrid/DataGrid.js +227 -0
  277. package/dist/dist/components/datagrid/DataGrid.js.map +1 -0
  278. package/dist/dist/components/datepicker/DatePicker.cjs +2 -0
  279. package/dist/dist/components/datepicker/DatePicker.cjs.map +1 -0
  280. package/dist/dist/components/datepicker/DatePicker.js +265 -0
  281. package/dist/dist/components/datepicker/DatePicker.js.map +1 -0
  282. package/dist/dist/components/daterangepicker/DateRangePicker.cjs +2 -0
  283. package/dist/dist/components/daterangepicker/DateRangePicker.cjs.map +1 -0
  284. package/dist/dist/components/daterangepicker/DateRangePicker.js +322 -0
  285. package/dist/dist/components/daterangepicker/DateRangePicker.js.map +1 -0
  286. package/dist/dist/components/drawer/Drawer.cjs +2 -0
  287. package/dist/dist/components/drawer/Drawer.cjs.map +1 -0
  288. package/dist/dist/components/drawer/Drawer.js +57 -0
  289. package/dist/dist/components/drawer/Drawer.js.map +1 -0
  290. package/dist/dist/components/dropdown/Dropdown.cjs +2 -0
  291. package/dist/dist/components/dropdown/Dropdown.cjs.map +1 -0
  292. package/dist/dist/components/dropdown/Dropdown.js +115 -0
  293. package/dist/dist/components/dropdown/Dropdown.js.map +1 -0
  294. package/dist/dist/components/fileuploader/FileUploader.cjs +2 -0
  295. package/dist/dist/components/fileuploader/FileUploader.cjs.map +1 -0
  296. package/dist/dist/components/fileuploader/FileUploader.js +83 -0
  297. package/dist/dist/components/fileuploader/FileUploader.js.map +1 -0
  298. package/dist/dist/components/hovercard/HoverCard.cjs +2 -0
  299. package/dist/dist/components/hovercard/HoverCard.cjs.map +1 -0
  300. package/dist/dist/components/hovercard/HoverCard.js +78 -0
  301. package/dist/dist/components/hovercard/HoverCard.js.map +1 -0
  302. package/dist/dist/components/input/Input.cjs +2 -0
  303. package/dist/dist/components/input/Input.cjs.map +1 -0
  304. package/dist/dist/components/input/Input.js +41 -0
  305. package/dist/dist/components/input/Input.js.map +1 -0
  306. package/dist/dist/components/layout/Container.cjs +2 -0
  307. package/dist/dist/components/layout/Container.cjs.map +1 -0
  308. package/dist/dist/components/layout/Container.js +33 -0
  309. package/dist/dist/components/layout/Container.js.map +1 -0
  310. package/dist/dist/components/layout/Flex.cjs +2 -0
  311. package/dist/dist/components/layout/Flex.cjs.map +1 -0
  312. package/dist/dist/components/layout/Flex.js +26 -0
  313. package/dist/dist/components/layout/Flex.js.map +1 -0
  314. package/dist/dist/components/layout/Grid.cjs +2 -0
  315. package/dist/dist/components/layout/Grid.cjs.map +1 -0
  316. package/dist/dist/components/layout/Grid.js +21 -0
  317. package/dist/dist/components/layout/Grid.js.map +1 -0
  318. package/dist/dist/components/layout/HStack.cjs.map +1 -0
  319. package/dist/dist/components/layout/HStack.js.map +1 -0
  320. package/dist/dist/components/layout/Stack.cjs.map +1 -0
  321. package/dist/dist/components/layout/Stack.js.map +1 -0
  322. package/dist/dist/components/megamenu/MegaMenu.cjs +2 -0
  323. package/dist/dist/components/megamenu/MegaMenu.cjs.map +1 -0
  324. package/dist/dist/components/megamenu/MegaMenu.js +43 -0
  325. package/dist/dist/components/megamenu/MegaMenu.js.map +1 -0
  326. package/dist/dist/components/modal/Modal.cjs +2 -0
  327. package/dist/dist/components/modal/Modal.cjs.map +1 -0
  328. package/dist/dist/components/modal/Modal.js +91 -0
  329. package/dist/dist/components/modal/Modal.js.map +1 -0
  330. package/dist/dist/components/pagination/Pagination.cjs +2 -0
  331. package/dist/dist/components/pagination/Pagination.cjs.map +1 -0
  332. package/dist/dist/components/pagination/Pagination.js +62 -0
  333. package/dist/dist/components/pagination/Pagination.js.map +1 -0
  334. package/dist/dist/components/popover/Popover.cjs +2 -0
  335. package/dist/dist/components/popover/Popover.cjs.map +1 -0
  336. package/dist/dist/components/popover/Popover.js +123 -0
  337. package/dist/dist/components/popover/Popover.js.map +1 -0
  338. package/dist/dist/components/progress/Progress.cjs +2 -0
  339. package/dist/dist/components/progress/Progress.cjs.map +1 -0
  340. package/dist/dist/components/progress/Progress.js +33 -0
  341. package/dist/dist/components/progress/Progress.js.map +1 -0
  342. package/dist/dist/components/radiogroup/RadioGroup.cjs +2 -0
  343. package/dist/dist/components/radiogroup/RadioGroup.cjs.map +1 -0
  344. package/dist/dist/components/radiogroup/RadioGroup.js +79 -0
  345. package/dist/dist/components/radiogroup/RadioGroup.js.map +1 -0
  346. package/dist/dist/components/rating/Rating.cjs +2 -0
  347. package/dist/dist/components/rating/Rating.cjs.map +1 -0
  348. package/dist/dist/components/rating/Rating.js +49 -0
  349. package/dist/dist/components/rating/Rating.js.map +1 -0
  350. package/dist/dist/components/skeleton/Skeleton.cjs +2 -0
  351. package/dist/dist/components/skeleton/Skeleton.cjs.map +1 -0
  352. package/dist/dist/components/skeleton/Skeleton.js +86 -0
  353. package/dist/dist/components/skeleton/Skeleton.js.map +1 -0
  354. package/dist/dist/components/slider/Slider.cjs +2 -0
  355. package/dist/dist/components/slider/Slider.cjs.map +1 -0
  356. package/dist/dist/components/slider/Slider.js +116 -0
  357. package/dist/dist/components/slider/Slider.js.map +1 -0
  358. package/dist/dist/components/spinner/Spinner.cjs +2 -0
  359. package/dist/dist/components/spinner/Spinner.cjs.map +1 -0
  360. package/dist/dist/components/spinner/Spinner.js +21 -0
  361. package/dist/dist/components/spinner/Spinner.js.map +1 -0
  362. package/dist/dist/components/stepper/Stepper.cjs +6 -0
  363. package/dist/dist/components/stepper/Stepper.cjs.map +1 -0
  364. package/dist/dist/components/stepper/Stepper.js +43 -0
  365. package/dist/dist/components/stepper/Stepper.js.map +1 -0
  366. package/dist/dist/components/switch/Switch.cjs +2 -0
  367. package/dist/dist/components/switch/Switch.cjs.map +1 -0
  368. package/dist/dist/components/switch/Switch.js +67 -0
  369. package/dist/dist/components/switch/Switch.js.map +1 -0
  370. package/dist/dist/components/table/Table.cjs +2 -0
  371. package/dist/dist/components/table/Table.cjs.map +1 -0
  372. package/dist/dist/components/table/Table.js +46 -0
  373. package/dist/dist/components/table/Table.js.map +1 -0
  374. package/dist/dist/components/tabs/Tabs.cjs +2 -0
  375. package/dist/dist/components/tabs/Tabs.cjs.map +1 -0
  376. package/dist/dist/components/tabs/Tabs.js +56 -0
  377. package/dist/dist/components/tabs/Tabs.js.map +1 -0
  378. package/dist/dist/components/textarea/Textarea.cjs +2 -0
  379. package/dist/dist/components/textarea/Textarea.cjs.map +1 -0
  380. package/dist/dist/components/textarea/Textarea.js +75 -0
  381. package/dist/dist/components/textarea/Textarea.js.map +1 -0
  382. package/dist/dist/components/toast/Toast.cjs +2 -0
  383. package/dist/dist/components/toast/Toast.cjs.map +1 -0
  384. package/dist/dist/components/toast/Toast.js +52 -0
  385. package/dist/dist/components/toast/Toast.js.map +1 -0
  386. package/dist/dist/components/tooltip/Tooltip.cjs +2 -0
  387. package/dist/dist/components/tooltip/Tooltip.cjs.map +1 -0
  388. package/dist/dist/components/tooltip/Tooltip.js +73 -0
  389. package/dist/dist/components/tooltip/Tooltip.js.map +1 -0
  390. package/dist/dist/components/treeview/TreeView.cjs +2 -0
  391. package/dist/dist/components/treeview/TreeView.cjs.map +1 -0
  392. package/dist/dist/components/treeview/TreeView.js +98 -0
  393. package/dist/dist/components/treeview/TreeView.js.map +1 -0
  394. package/dist/dist/components/virtuallist/VirtualList.cjs +2 -0
  395. package/dist/dist/components/virtuallist/VirtualList.cjs.map +1 -0
  396. package/dist/dist/components/virtuallist/VirtualList.js +58 -0
  397. package/dist/dist/components/virtuallist/VirtualList.js.map +1 -0
  398. package/dist/dist/index.cjs +2 -0
  399. package/dist/dist/index.cjs.map +1 -0
  400. package/dist/dist/index.js +109 -0
  401. package/dist/dist/index.js.map +1 -0
  402. package/dist/dist/styles/index.css +1 -0
  403. package/dist/dist/theme/NUIProvider.cjs.map +1 -0
  404. package/dist/dist/theme/NUIProvider.js.map +1 -0
  405. package/dist/dist/theme/useTheme.cjs.map +1 -0
  406. package/dist/dist/theme/useTheme.js.map +1 -0
  407. package/dist/dist/types/components/accordion/Accordion.d.ts +18 -0
  408. package/dist/dist/types/components/accordion/Accordion.d.ts.map +1 -0
  409. package/dist/dist/types/components/alert/Alert.d.ts +13 -0
  410. package/dist/dist/types/components/alert/Alert.d.ts.map +1 -0
  411. package/dist/dist/types/components/avatar/Avatar.d.ts +18 -0
  412. package/dist/dist/types/components/avatar/Avatar.d.ts.map +1 -0
  413. package/dist/dist/types/components/avatar/AvatarGroup.d.ts +10 -0
  414. package/dist/dist/types/components/avatar/AvatarGroup.d.ts.map +1 -0
  415. package/dist/dist/types/components/badge/Badge.d.ts +22 -0
  416. package/dist/dist/types/components/badge/Badge.d.ts.map +1 -0
  417. package/dist/dist/types/components/badge/BadgeGroup.d.ts +9 -0
  418. package/dist/dist/types/components/badge/BadgeGroup.d.ts.map +1 -0
  419. package/dist/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +15 -0
  420. package/dist/dist/types/components/breadcrumbs/Breadcrumbs.d.ts.map +1 -0
  421. package/dist/dist/types/components/button/Button.d.ts +15 -0
  422. package/dist/dist/types/components/button/Button.d.ts.map +1 -0
  423. package/dist/dist/types/components/card/Card.d.ts +27 -0
  424. package/dist/dist/types/components/card/Card.d.ts.map +1 -0
  425. package/dist/dist/types/components/checkbox/Checkbox.d.ts +15 -0
  426. package/dist/dist/types/components/checkbox/Checkbox.d.ts.map +1 -0
  427. package/dist/dist/types/components/chip/Chip.d.ts +21 -0
  428. package/dist/dist/types/components/chip/Chip.d.ts.map +1 -0
  429. package/dist/dist/types/components/combobox/Combobox.d.ts +24 -0
  430. package/dist/dist/types/components/combobox/Combobox.d.ts.map +1 -0
  431. package/dist/dist/types/components/commandpalette/CommandPalette.d.ts +21 -0
  432. package/dist/dist/types/components/commandpalette/CommandPalette.d.ts.map +1 -0
  433. package/dist/dist/types/components/contextmenu/ContextMenu.d.ts +17 -0
  434. package/dist/dist/types/components/contextmenu/ContextMenu.d.ts.map +1 -0
  435. package/dist/dist/types/components/datagrid/DataGrid.d.ts +28 -0
  436. package/dist/dist/types/components/datagrid/DataGrid.d.ts.map +1 -0
  437. package/dist/dist/types/components/datepicker/DatePicker.d.ts +14 -0
  438. package/dist/dist/types/components/datepicker/DatePicker.d.ts.map +1 -0
  439. package/dist/dist/types/components/daterangepicker/DateRangePicker.d.ts +19 -0
  440. package/dist/dist/types/components/daterangepicker/DateRangePicker.d.ts.map +1 -0
  441. package/dist/dist/types/components/drawer/Drawer.d.ts +12 -0
  442. package/dist/dist/types/components/drawer/Drawer.d.ts.map +1 -0
  443. package/dist/dist/types/components/dropdown/Dropdown.d.ts +18 -0
  444. package/dist/dist/types/components/dropdown/Dropdown.d.ts.map +1 -0
  445. package/dist/dist/types/components/fileuploader/FileUploader.d.ts +9 -0
  446. package/dist/dist/types/components/fileuploader/FileUploader.d.ts.map +1 -0
  447. package/dist/dist/types/components/hovercard/HoverCard.d.ts +10 -0
  448. package/dist/dist/types/components/hovercard/HoverCard.d.ts.map +1 -0
  449. package/dist/dist/types/components/input/Input.d.ts +15 -0
  450. package/dist/dist/types/components/input/Input.d.ts.map +1 -0
  451. package/dist/dist/types/components/layout/Container.d.ts +8 -0
  452. package/dist/dist/types/components/layout/Container.d.ts.map +1 -0
  453. package/dist/dist/types/components/layout/Flex.d.ts +14 -0
  454. package/dist/dist/types/components/layout/Flex.d.ts.map +1 -0
  455. package/dist/dist/types/components/layout/Grid.d.ts +10 -0
  456. package/dist/dist/types/components/layout/Grid.d.ts.map +1 -0
  457. package/dist/dist/types/components/layout/HStack.d.ts.map +1 -0
  458. package/dist/dist/types/components/layout/Stack.d.ts.map +1 -0
  459. package/dist/dist/types/components/megamenu/MegaMenu.d.ts +12 -0
  460. package/dist/dist/types/components/megamenu/MegaMenu.d.ts.map +1 -0
  461. package/dist/dist/types/components/modal/Modal.d.ts +16 -0
  462. package/dist/dist/types/components/modal/Modal.d.ts.map +1 -0
  463. package/dist/dist/types/components/pagination/Pagination.d.ts +9 -0
  464. package/dist/dist/types/components/pagination/Pagination.d.ts.map +1 -0
  465. package/dist/dist/types/components/popover/Popover.d.ts +21 -0
  466. package/dist/dist/types/components/popover/Popover.d.ts.map +1 -0
  467. package/dist/dist/types/components/progress/Progress.d.ts +13 -0
  468. package/dist/dist/types/components/progress/Progress.d.ts.map +1 -0
  469. package/dist/dist/types/components/radiogroup/RadioGroup.d.ts +18 -0
  470. package/dist/dist/types/components/radiogroup/RadioGroup.d.ts.map +1 -0
  471. package/dist/dist/types/components/rating/Rating.d.ts +19 -0
  472. package/dist/dist/types/components/rating/Rating.d.ts.map +1 -0
  473. package/dist/dist/types/components/select/Select.d.ts +20 -0
  474. package/dist/dist/types/components/select/Select.d.ts.map +1 -0
  475. package/dist/dist/types/components/skeleton/Skeleton.d.ts +44 -0
  476. package/dist/dist/types/components/skeleton/Skeleton.d.ts.map +1 -0
  477. package/dist/dist/types/components/slider/Slider.d.ts +13 -0
  478. package/dist/dist/types/components/slider/Slider.d.ts.map +1 -0
  479. package/dist/dist/types/components/spinner/Spinner.d.ts +7 -0
  480. package/dist/dist/types/components/spinner/Spinner.d.ts.map +1 -0
  481. package/dist/dist/types/components/stepper/Stepper.d.ts +12 -0
  482. package/dist/dist/types/components/stepper/Stepper.d.ts.map +1 -0
  483. package/dist/dist/types/components/switch/Switch.d.ts +15 -0
  484. package/dist/dist/types/components/switch/Switch.d.ts.map +1 -0
  485. package/dist/dist/types/components/table/Table.d.ts +14 -0
  486. package/dist/dist/types/components/table/Table.d.ts.map +1 -0
  487. package/dist/dist/types/components/tabs/Tabs.d.ts +14 -0
  488. package/dist/dist/types/components/tabs/Tabs.d.ts.map +1 -0
  489. package/dist/dist/types/components/textarea/Textarea.d.ts +14 -0
  490. package/dist/dist/types/components/textarea/Textarea.d.ts.map +1 -0
  491. package/dist/dist/types/components/toast/Toast.d.ts +16 -0
  492. package/dist/dist/types/components/toast/Toast.d.ts.map +1 -0
  493. package/dist/dist/types/components/tooltip/Tooltip.d.ts +10 -0
  494. package/dist/dist/types/components/tooltip/Tooltip.d.ts.map +1 -0
  495. package/dist/dist/types/components/treeview/TreeView.d.ts +16 -0
  496. package/dist/dist/types/components/treeview/TreeView.d.ts.map +1 -0
  497. package/dist/dist/types/components/virtuallist/VirtualList.d.ts +23 -0
  498. package/dist/dist/types/components/virtuallist/VirtualList.d.ts.map +1 -0
  499. package/dist/dist/types/index.d.ts +50 -0
  500. package/dist/dist/types/index.d.ts.map +1 -0
  501. package/dist/dist/types/theme/NUIProvider.d.ts.map +1 -0
  502. package/dist/dist/types/theme/useTheme.d.ts.map +1 -0
  503. package/dist/dist/types/utils/generateid/generateId.d.ts +2 -0
  504. package/dist/dist/types/utils/generateid/generateId.d.ts.map +1 -0
  505. package/dist/dist/types/utils/index.d.ts +9 -0
  506. package/dist/dist/types/utils/index.d.ts.map +1 -0
  507. package/dist/dist/types/utils/inertmanager/inertManager.d.ts +13 -0
  508. package/dist/dist/types/utils/inertmanager/inertManager.d.ts.map +1 -0
  509. package/dist/dist/types/utils/keyboardnav/keyboardNav.d.ts +11 -0
  510. package/dist/dist/types/utils/keyboardnav/keyboardNav.d.ts.map +1 -0
  511. package/dist/dist/types/utils/onclickoutside/onClickOutside.d.ts +3 -0
  512. package/dist/dist/types/utils/onclickoutside/onClickOutside.d.ts.map +1 -0
  513. package/dist/dist/types/utils/portal/portal.d.ts +4 -0
  514. package/dist/dist/types/utils/portal/portal.d.ts.map +1 -0
  515. package/dist/dist/types/utils/restorefocus/restoreFocus.d.ts +8 -0
  516. package/dist/dist/types/utils/restorefocus/restoreFocus.d.ts.map +1 -0
  517. package/dist/dist/types/utils/scrolllock/scrollLock.d.ts +11 -0
  518. package/dist/dist/types/utils/scrolllock/scrollLock.d.ts.map +1 -0
  519. package/dist/dist/types/utils/trapfocus/trapFocus.d.ts +8 -0
  520. package/dist/dist/types/utils/trapfocus/trapFocus.d.ts.map +1 -0
  521. package/dist/dist/utils/generateid/generateId.cjs.map +1 -0
  522. package/dist/dist/utils/generateid/generateId.js.map +1 -0
  523. package/dist/dist/utils/inertmanager/inertManager.cjs +2 -0
  524. package/dist/dist/utils/inertmanager/inertManager.cjs.map +1 -0
  525. package/dist/dist/utils/inertmanager/inertManager.js +18 -0
  526. package/dist/dist/utils/inertmanager/inertManager.js.map +1 -0
  527. package/dist/dist/utils/keyboardnav/keyboardNav.cjs.map +1 -0
  528. package/dist/dist/utils/keyboardnav/keyboardNav.js.map +1 -0
  529. package/dist/dist/utils/onclickoutside/onClickOutside.cjs +2 -0
  530. package/dist/dist/utils/onclickoutside/onClickOutside.cjs.map +1 -0
  531. package/dist/dist/utils/onclickoutside/onClickOutside.js +11 -0
  532. package/dist/dist/utils/onclickoutside/onClickOutside.js.map +1 -0
  533. package/dist/dist/utils/portal/portal.cjs +2 -0
  534. package/dist/dist/utils/portal/portal.cjs.map +1 -0
  535. package/dist/dist/utils/portal/portal.js +8 -0
  536. package/dist/dist/utils/portal/portal.js.map +1 -0
  537. package/dist/dist/utils/restorefocus/restoreFocus.cjs +2 -0
  538. package/dist/dist/utils/restorefocus/restoreFocus.cjs.map +1 -0
  539. package/dist/dist/utils/restorefocus/restoreFocus.js +7 -0
  540. package/dist/dist/utils/restorefocus/restoreFocus.js.map +1 -0
  541. package/dist/dist/utils/scrolllock/scrollLock.cjs +2 -0
  542. package/dist/dist/utils/scrolllock/scrollLock.cjs.map +1 -0
  543. package/dist/dist/utils/scrolllock/scrollLock.js +12 -0
  544. package/dist/dist/utils/scrolllock/scrollLock.js.map +1 -0
  545. package/dist/dist/utils/trapfocus/trapFocus.cjs +3 -0
  546. package/dist/dist/utils/trapfocus/trapFocus.cjs.map +1 -0
  547. package/dist/dist/utils/trapfocus/trapFocus.js +14 -0
  548. package/dist/dist/utils/trapfocus/trapFocus.js.map +1 -0
  549. package/dist/index.cjs +1 -1
  550. package/dist/index.js +118 -107
  551. package/dist/index.js.map +1 -1
  552. package/dist/package.json +2 -2
  553. package/dist/styles/nui.css +1 -1
  554. package/dist/types/components/accordion/Accordion.d.ts +7 -3
  555. package/dist/types/components/accordion/Accordion.d.ts.map +1 -1
  556. package/dist/types/components/alert/Alert.d.ts +18 -5
  557. package/dist/types/components/alert/Alert.d.ts.map +1 -1
  558. package/dist/types/components/avatar/Avatar.d.ts +12 -8
  559. package/dist/types/components/avatar/Avatar.d.ts.map +1 -1
  560. package/dist/types/components/avatar/AvatarGroup.d.ts +11 -4
  561. package/dist/types/components/avatar/AvatarGroup.d.ts.map +1 -1
  562. package/dist/types/components/badge/Badge.d.ts +19 -11
  563. package/dist/types/components/badge/Badge.d.ts.map +1 -1
  564. package/dist/types/components/badge/BadgeGroup.d.ts +7 -4
  565. package/dist/types/components/badge/BadgeGroup.d.ts.map +1 -1
  566. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +14 -6
  567. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  568. package/dist/types/components/button/Button.d.ts +25 -10
  569. package/dist/types/components/button/Button.d.ts.map +1 -1
  570. package/dist/types/components/card/Card.d.ts +12 -21
  571. package/dist/types/components/card/Card.d.ts.map +1 -1
  572. package/dist/types/components/checkbox/Checkbox.d.ts +12 -7
  573. package/dist/types/components/checkbox/Checkbox.d.ts.map +1 -1
  574. package/dist/types/components/chip/Chip.d.ts +14 -11
  575. package/dist/types/components/chip/Chip.d.ts.map +1 -1
  576. package/dist/types/components/combobox/Combobox.d.ts +15 -4
  577. package/dist/types/components/combobox/Combobox.d.ts.map +1 -1
  578. package/dist/types/components/commandpalette/CommandPalette.d.ts +12 -3
  579. package/dist/types/components/commandpalette/CommandPalette.d.ts.map +1 -1
  580. package/dist/types/components/contextmenu/ContextMenu.d.ts +14 -6
  581. package/dist/types/components/contextmenu/ContextMenu.d.ts.map +1 -1
  582. package/dist/types/components/datagrid/DataGrid.d.ts +16 -4
  583. package/dist/types/components/datagrid/DataGrid.d.ts.map +1 -1
  584. package/dist/types/components/datepicker/DatePicker.d.ts +13 -1
  585. package/dist/types/components/datepicker/DatePicker.d.ts.map +1 -1
  586. package/dist/types/components/daterangepicker/DateRangePicker.d.ts +3 -1
  587. package/dist/types/components/daterangepicker/DateRangePicker.d.ts.map +1 -1
  588. package/dist/types/components/dialog/DialogProvider.d.ts +2 -0
  589. package/dist/types/components/dialog/DialogProvider.d.ts.map +1 -0
  590. package/dist/types/components/dialog/dialogStore.d.ts +42 -0
  591. package/dist/types/components/dialog/dialogStore.d.ts.map +1 -0
  592. package/dist/types/components/drawer/Drawer.d.ts +18 -4
  593. package/dist/types/components/drawer/Drawer.d.ts.map +1 -1
  594. package/dist/types/components/dropdown/Dropdown.d.ts +21 -16
  595. package/dist/types/components/dropdown/Dropdown.d.ts.map +1 -1
  596. package/dist/types/components/fileuploader/FileUploader.d.ts +22 -3
  597. package/dist/types/components/fileuploader/FileUploader.d.ts.map +1 -1
  598. package/dist/types/components/hovercard/HoverCard.d.ts +45 -5
  599. package/dist/types/components/hovercard/HoverCard.d.ts.map +1 -1
  600. package/dist/types/components/input/Input.d.ts +20 -10
  601. package/dist/types/components/input/Input.d.ts.map +1 -1
  602. package/dist/types/components/layout/Container.d.ts +8 -4
  603. package/dist/types/components/layout/Container.d.ts.map +1 -1
  604. package/dist/types/components/layout/Flex.d.ts +27 -10
  605. package/dist/types/components/layout/Flex.d.ts.map +1 -1
  606. package/dist/types/components/layout/Grid.d.ts +11 -5
  607. package/dist/types/components/layout/Grid.d.ts.map +1 -1
  608. package/dist/types/components/link/Link.d.ts +22 -0
  609. package/dist/types/components/link/Link.d.ts.map +1 -0
  610. package/dist/types/components/megamenu/MegaMenu.d.ts +8 -11
  611. package/dist/types/components/megamenu/MegaMenu.d.ts.map +1 -1
  612. package/dist/types/components/modal/Modal.d.ts +8 -7
  613. package/dist/types/components/modal/Modal.d.ts.map +1 -1
  614. package/dist/types/components/multiselect/MultiSelect.d.ts +33 -0
  615. package/dist/types/components/multiselect/MultiSelect.d.ts.map +1 -0
  616. package/dist/types/components/nuiprovider/NUIProvider.d.ts +29 -0
  617. package/dist/types/components/nuiprovider/NUIProvider.d.ts.map +1 -0
  618. package/dist/types/components/pagination/Pagination.d.ts +17 -3
  619. package/dist/types/components/pagination/Pagination.d.ts.map +1 -1
  620. package/dist/types/components/popover/Popover.d.ts +54 -16
  621. package/dist/types/components/popover/Popover.d.ts.map +1 -1
  622. package/dist/types/components/progress/Progress.d.ts +17 -7
  623. package/dist/types/components/progress/Progress.d.ts.map +1 -1
  624. package/dist/types/components/radiogroup/RadioGroup.d.ts +15 -10
  625. package/dist/types/components/radiogroup/RadioGroup.d.ts.map +1 -1
  626. package/dist/types/components/rating/Rating.d.ts +24 -10
  627. package/dist/types/components/rating/Rating.d.ts.map +1 -1
  628. package/dist/types/components/resizable/Resizable.d.ts +24 -0
  629. package/dist/types/components/resizable/Resizable.d.ts.map +1 -0
  630. package/dist/types/components/select/Select.d.ts +17 -8
  631. package/dist/types/components/select/Select.d.ts.map +1 -1
  632. package/dist/types/components/skeleton/Skeleton.d.ts +37 -36
  633. package/dist/types/components/skeleton/Skeleton.d.ts.map +1 -1
  634. package/dist/types/components/slider/Slider.d.ts +15 -4
  635. package/dist/types/components/slider/Slider.d.ts.map +1 -1
  636. package/dist/types/components/spinner/Spinner.d.ts +14 -4
  637. package/dist/types/components/spinner/Spinner.d.ts.map +1 -1
  638. package/dist/types/components/stepper/Stepper.d.ts +17 -3
  639. package/dist/types/components/stepper/Stepper.d.ts.map +1 -1
  640. package/dist/types/components/switch/Switch.d.ts +20 -5
  641. package/dist/types/components/switch/Switch.d.ts.map +1 -1
  642. package/dist/types/components/table/Table.d.ts +24 -4
  643. package/dist/types/components/table/Table.d.ts.map +1 -1
  644. package/dist/types/components/tabs/Tabs.d.ts +25 -12
  645. package/dist/types/components/tabs/Tabs.d.ts.map +1 -1
  646. package/dist/types/components/textarea/Textarea.d.ts +8 -5
  647. package/dist/types/components/textarea/Textarea.d.ts.map +1 -1
  648. package/dist/types/components/timepicker/TimePicker.d.ts +26 -0
  649. package/dist/types/components/timepicker/TimePicker.d.ts.map +1 -0
  650. package/dist/types/components/timerangepicker/TimeRangePicker.d.ts +32 -0
  651. package/dist/types/components/timerangepicker/TimeRangePicker.d.ts.map +1 -0
  652. package/dist/types/components/toast/Toast.d.ts +23 -7
  653. package/dist/types/components/toast/Toast.d.ts.map +1 -1
  654. package/dist/types/components/tooltip/Tooltip.d.ts +13 -2
  655. package/dist/types/components/tooltip/Tooltip.d.ts.map +1 -1
  656. package/dist/types/components/treeview/TreeView.d.ts +20 -6
  657. package/dist/types/components/treeview/TreeView.d.ts.map +1 -1
  658. package/dist/types/components/virtuallist/VirtualList.d.ts +12 -16
  659. package/dist/types/components/virtuallist/VirtualList.d.ts.map +1 -1
  660. package/dist/types/index.d.ts +8 -4
  661. package/dist/types/index.d.ts.map +1 -1
  662. package/dist/types/utils/cn/cn.d.ts +19 -0
  663. package/dist/types/utils/cn/cn.d.ts.map +1 -0
  664. package/dist/types/utils/generateid/generateId.d.ts +7 -0
  665. package/dist/types/utils/generateid/generateId.d.ts.map +1 -1
  666. package/dist/types/utils/index.d.ts +2 -0
  667. package/dist/types/utils/index.d.ts.map +1 -1
  668. package/dist/types/utils/inertmanager/inertManager.d.ts +13 -0
  669. package/dist/types/utils/inertmanager/inertManager.d.ts.map +1 -1
  670. package/dist/types/utils/keyboardnav/keyboardNav.d.ts +17 -6
  671. package/dist/types/utils/keyboardnav/keyboardNav.d.ts.map +1 -1
  672. package/dist/types/utils/onclickoutside/onClickOutside.d.ts +9 -1
  673. package/dist/types/utils/onclickoutside/onClickOutside.d.ts.map +1 -1
  674. package/dist/types/utils/portal/portal.d.ts +14 -1
  675. package/dist/types/utils/portal/portal.d.ts.map +1 -1
  676. package/dist/types/utils/restorefocus/restoreFocus.d.ts +8 -4
  677. package/dist/types/utils/restorefocus/restoreFocus.d.ts.map +1 -1
  678. package/dist/types/utils/scrolllock/scrollLock.d.ts +10 -2
  679. package/dist/types/utils/scrolllock/scrollLock.d.ts.map +1 -1
  680. package/dist/types/utils/slot/slot.d.ts +12 -0
  681. package/dist/types/utils/slot/slot.d.ts.map +1 -0
  682. package/dist/types/utils/trapfocus/trapFocus.d.ts +6 -2
  683. package/dist/types/utils/trapfocus/trapFocus.d.ts.map +1 -1
  684. package/dist/utils/cn/cn.cjs +2 -0
  685. package/dist/utils/cn/cn.cjs.map +1 -0
  686. package/dist/utils/cn/cn.js +21 -0
  687. package/dist/utils/cn/cn.js.map +1 -0
  688. package/dist/utils/inertmanager/inertManager.cjs.map +1 -1
  689. package/dist/utils/inertmanager/inertManager.js.map +1 -1
  690. package/dist/utils/onclickoutside/onClickOutside.cjs +1 -1
  691. package/dist/utils/onclickoutside/onClickOutside.cjs.map +1 -1
  692. package/dist/utils/onclickoutside/onClickOutside.js +10 -6
  693. package/dist/utils/onclickoutside/onClickOutside.js.map +1 -1
  694. package/dist/utils/portal/portal.cjs.map +1 -1
  695. package/dist/utils/portal/portal.js.map +1 -1
  696. package/dist/utils/restorefocus/restoreFocus.cjs.map +1 -1
  697. package/dist/utils/restorefocus/restoreFocus.js.map +1 -1
  698. package/dist/utils/scrolllock/scrollLock.cjs.map +1 -1
  699. package/dist/utils/scrolllock/scrollLock.js +7 -0
  700. package/dist/utils/scrolllock/scrollLock.js.map +1 -1
  701. package/dist/utils/slot/slot.cjs +2 -0
  702. package/dist/utils/slot/slot.cjs.map +1 -0
  703. package/dist/utils/slot/slot.js +57 -0
  704. package/dist/utils/slot/slot.js.map +1 -0
  705. package/dist/utils/trapfocus/trapFocus.cjs.map +1 -1
  706. package/dist/utils/trapfocus/trapFocus.js.map +1 -1
  707. package/package.json +2 -2
  708. package/dist/components/layout/HStack.cjs.map +0 -1
  709. package/dist/components/layout/HStack.js.map +0 -1
  710. package/dist/components/layout/Stack.cjs.map +0 -1
  711. package/dist/components/layout/Stack.js.map +0 -1
  712. package/dist/theme/NUIProvider.cjs.map +0 -1
  713. package/dist/theme/NUIProvider.js.map +0 -1
  714. package/dist/theme/useTheme.cjs.map +0 -1
  715. package/dist/theme/useTheme.js.map +0 -1
  716. package/dist/types/components/layout/HStack.d.ts.map +0 -1
  717. package/dist/types/components/layout/Stack.d.ts.map +0 -1
  718. package/dist/types/theme/NUIProvider.d.ts.map +0 -1
  719. package/dist/types/theme/useTheme.d.ts.map +0 -1
  720. package/dist/utils/generateid/generateId.cjs.map +0 -1
  721. package/dist/utils/generateid/generateId.js.map +0 -1
  722. package/dist/utils/keyboardnav/keyboardNav.cjs.map +0 -1
  723. package/dist/utils/keyboardnav/keyboardNav.js.map +0 -1
  724. /package/dist/{components → dist/components}/layout/HStack.cjs +0 -0
  725. /package/dist/{components → dist/components}/layout/HStack.js +0 -0
  726. /package/dist/{components → dist/components}/layout/Stack.cjs +0 -0
  727. /package/dist/{components → dist/components}/layout/Stack.js +0 -0
  728. /package/dist/{theme → dist/theme}/NUIProvider.cjs +0 -0
  729. /package/dist/{theme → dist/theme}/NUIProvider.js +0 -0
  730. /package/dist/{theme → dist/theme}/useTheme.cjs +0 -0
  731. /package/dist/{theme → dist/theme}/useTheme.js +0 -0
  732. /package/dist/{types → dist/types}/components/layout/HStack.d.ts +0 -0
  733. /package/dist/{types → dist/types}/components/layout/Stack.d.ts +0 -0
  734. /package/dist/{types → dist/types}/theme/NUIProvider.d.ts +0 -0
  735. /package/dist/{types → dist/types}/theme/useTheme.d.ts +0 -0
  736. /package/dist/{utils → dist/utils}/generateid/generateId.cjs +0 -0
  737. /package/dist/{utils → dist/utils}/generateid/generateId.js +0 -0
  738. /package/dist/{utils → dist/utils}/keyboardnav/keyboardNav.cjs +0 -0
  739. /package/dist/{utils → dist/utils}/keyboardnav/keyboardNav.js +0 -0
@@ -1,98 +1,128 @@
1
- import { jsx as a, jsxs as m } from "react/jsx-runtime";
2
- import { useState as w } from "react";
1
+ import { jsx as a, jsxs as w } from "react/jsx-runtime";
2
+ import T, { forwardRef as D, useState as L, useRef as $, useCallback as g } from "react";
3
3
  /* empty css */
4
- function b({
5
- data: p,
6
- selectedId: A,
4
+ import { cn as u } from "../../utils/cn/cn.js";
5
+ const P = D(({
6
+ data: k,
7
+ selectedId: x,
8
+ defaultExpandedIds: A = [],
7
9
  onSelect: h,
8
- className: N = ""
9
- }) {
10
- const [d, g] = w(/* @__PURE__ */ new Set()), [y, o] = w(null), f = (i) => {
11
- g((e) => {
12
- const r = new Set(e);
13
- return r.has(i) ? r.delete(i) : r.add(i), r;
10
+ className: E,
11
+ ...N
12
+ }, y) => {
13
+ const [f, I] = L(new Set(A)), p = $(null), v = `nui-tree-${T.useId().replace(/:/g, "")}`, c = g((t, r) => {
14
+ r?.stopPropagation(), I((o) => {
15
+ const e = new Set(o);
16
+ return e.has(t) ? e.delete(t) : e.add(t), e;
14
17
  });
15
- }, u = (i, e = []) => (i.forEach((r) => {
16
- e.push(r);
17
- const t = d.has(r.id);
18
- r.children && r.children.length > 0 && t && u(r.children, e);
19
- }), e), x = (i, e, r) => {
20
- const t = i.key;
21
- if (t === "Enter" || t === " ") {
22
- i.preventDefault(), h && h(e.id);
23
- return;
24
- }
25
- if (t === "ArrowLeft") {
26
- i.preventDefault();
27
- const s = e.children && e.children.length > 0, n = d.has(e.id);
28
- if (s && n) {
29
- f(e.id);
30
- return;
31
- }
32
- r && o(r.id);
33
- return;
34
- }
35
- if (t === "ArrowRight") {
36
- i.preventDefault();
37
- const s = e.children && e.children.length > 0, n = d.has(e.id);
38
- if (s && !n) {
39
- f(e.id);
40
- return;
41
- }
42
- if (s && n) {
43
- const c = Array.isArray(e.children) && e.children.length > 0 ? e.children[0] : void 0;
44
- c && o(c.id);
18
+ }, []), C = g(
19
+ (t, r, o) => {
20
+ ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End", " ", "Enter"].includes(t.key) && t.preventDefault(), t.stopPropagation();
21
+ const e = t.currentTarget, d = f.has(r.id), s = !!r.children?.length, i = p.current ? Array.from(
22
+ p.current.querySelectorAll('[role="treeitem"]:not([aria-disabled="true"])')
23
+ ) : [], l = i.indexOf(e);
24
+ switch (t.key) {
25
+ case "Enter":
26
+ case " ":
27
+ if (r.disabled) return;
28
+ s && c(r.id), h?.(r.id, r);
29
+ break;
30
+ case "ArrowRight":
31
+ s && !d ? c(r.id) : s && d && i[l + 1]?.focus();
32
+ break;
33
+ case "ArrowLeft":
34
+ s && d ? c(r.id) : o && i.find((R) => R.id.endsWith(`-${o.id}`))?.focus();
35
+ break;
36
+ case "ArrowDown":
37
+ i[l + 1]?.focus();
38
+ break;
39
+ case "ArrowUp":
40
+ i[l - 1]?.focus();
41
+ break;
42
+ case "Home":
43
+ i[0]?.focus();
44
+ break;
45
+ case "End":
46
+ i[i.length - 1]?.focus();
47
+ break;
45
48
  }
46
- return;
47
- }
48
- if (t === "ArrowUp" || t === "ArrowDown") {
49
- i.preventDefault();
50
- const s = u(p), n = s.findIndex((C) => C.id === e.id);
51
- if (n === -1) return;
52
- const c = t === "ArrowUp" ? n - 1 : n + 1, l = s[c];
53
- l && o(l.id);
54
- }
55
- }, v = (i, e, r) => {
56
- const t = d.has(i.id), s = i.id === A, n = i.id === y, c = Array.isArray(i.children) && i.children.length > 0;
57
- return /* @__PURE__ */ m("div", { children: [
58
- /* @__PURE__ */ m(
59
- "div",
60
- {
61
- role: "treeitem",
62
- "aria-expanded": c ? t : void 0,
63
- tabIndex: n ? 0 : -1,
64
- className: [
65
- "ui-tree-node",
66
- s ? "selected" : "",
67
- n ? "active" : ""
68
- ].filter(Boolean).join(" "),
69
- style: { paddingLeft: r * 16 },
70
- onClick: () => {
71
- h && h(i.id), o(i.id), Array.isArray(i.children) && i.children.length > 0 && f(i.id);
49
+ },
50
+ [f, c, h]
51
+ ), b = (t, r = 1, o) => /* @__PURE__ */ a(
52
+ "ul",
53
+ {
54
+ role: r === 1 ? "tree" : "group",
55
+ className: u("nui-tree", r > 1 && "nui-tree--nested"),
56
+ ref: r === 1 ? p : void 0,
57
+ children: t.map((e, d) => {
58
+ const s = f.has(e.id), m = x === e.id, i = !!e.children?.length, l = r === 1 && d === 0;
59
+ return /* @__PURE__ */ w(
60
+ "li",
61
+ {
62
+ id: `${v}-${e.id}`,
63
+ role: "treeitem",
64
+ "aria-expanded": i ? s : void 0,
65
+ "aria-selected": m,
66
+ "aria-disabled": e.disabled,
67
+ tabIndex: l ? 0 : -1,
68
+ className: u(
69
+ "nui-tree-item",
70
+ m && "nui-tree-item--selected",
71
+ e.disabled && "nui-tree-item--disabled"
72
+ ),
73
+ onKeyDown: (n) => C(n, e, o),
74
+ onClick: (n) => {
75
+ n.stopPropagation(), !e.disabled && (n.currentTarget.focus(), i && c(e.id), h?.(e.id, e));
76
+ },
77
+ children: [
78
+ /* @__PURE__ */ w(
79
+ "div",
80
+ {
81
+ className: "nui-tree-item-content",
82
+ style: { paddingLeft: `${(r - 1) * 16}px` },
83
+ children: [
84
+ /* @__PURE__ */ a(
85
+ "span",
86
+ {
87
+ className: u("nui-tree-chevron", !i && "nui-tree-chevron--hidden"),
88
+ onClick: (n) => {
89
+ i && c(e.id, n);
90
+ },
91
+ children: /* @__PURE__ */ a(
92
+ "svg",
93
+ {
94
+ width: "14",
95
+ height: "14",
96
+ viewBox: "0 0 24 24",
97
+ fill: "none",
98
+ stroke: "currentColor",
99
+ strokeWidth: "2.5",
100
+ strokeLinecap: "round",
101
+ strokeLinejoin: "round",
102
+ className: u("nui-tree-chevron-icon", s && "nui-tree-chevron-icon--open"),
103
+ "aria-hidden": "true",
104
+ children: /* @__PURE__ */ a("polyline", { points: "9 18 15 12 9 6" })
105
+ }
106
+ )
107
+ }
108
+ ),
109
+ e.icon && /* @__PURE__ */ a("span", { className: "nui-tree-icon", "aria-hidden": "true", children: e.icon }),
110
+ /* @__PURE__ */ a("span", { className: "nui-tree-label", children: e.label })
111
+ ]
112
+ }
113
+ ),
114
+ i && s && e.children && b(e.children, r + 1, e)
115
+ ]
72
116
  },
73
- onKeyDown: (l) => x(l, i, e),
74
- children: [
75
- c ? /* @__PURE__ */ a(
76
- "span",
77
- {
78
- className: `ui-tree-arrow ${t ? "open" : ""}`,
79
- onClick: (l) => {
80
- l.stopPropagation(), f(i.id);
81
- },
82
- children: "▶"
83
- }
84
- ) : /* @__PURE__ */ a("span", { className: "ui-tree-arrow empty", children: "•" }),
85
- i.icon && /* @__PURE__ */ a("span", { className: "ui-tree-icon", children: i.icon }),
86
- /* @__PURE__ */ a("span", { className: "ui-tree-label", children: i.label })
87
- ]
88
- }
89
- ),
90
- c && t && i.children && /* @__PURE__ */ a("div", { role: "group", children: i.children.map((l) => v(l, i, r + 1)) })
91
- ] }, i.id);
92
- };
93
- return /* @__PURE__ */ a("div", { className: `ui-treeview ${N}`, role: "tree", children: p.map((i) => v(i, void 0, 0)) });
94
- }
117
+ e.id
118
+ );
119
+ })
120
+ }
121
+ );
122
+ return /* @__PURE__ */ a("div", { ref: y, className: u("nui-tree-wrapper", E), ...N, children: b(k) });
123
+ });
124
+ P.displayName = "TreeView";
95
125
  export {
96
- b as TreeView
126
+ P as TreeView
97
127
  };
98
128
  //# sourceMappingURL=TreeView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TreeView.js","sources":["../../../src/components/treeview/TreeView.tsx"],"sourcesContent":["/**\r\n * TreeView.tsx — FINAL VERSION\r\n * ----------------------------\r\n * Features:\r\n * - Expand/collapse\r\n * - Recursive rendering\r\n * - Arrow key navigation\r\n * - Enter/Space to select\r\n * - ARIA TreeView roles\r\n * - Value controlled OR internal state\r\n */\r\n\r\nimport React, { useState } from 'react';\r\nimport './TreeView.css';\r\n\r\nexport interface TreeNode {\r\n id: string;\r\n label: string;\r\n icon?: React.ReactNode;\r\n children?: TreeNode[];\r\n}\r\n\r\ninterface TreeViewProps {\r\n data: TreeNode[];\r\n selectedId?: string;\r\n onSelect?: (id: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport function TreeView({\r\n data,\r\n selectedId,\r\n onSelect,\r\n className = '',\r\n}: TreeViewProps) {\r\n const [openNodes, setOpenNodes] = useState<Set<string>>(new Set());\r\n const [activeNode, setActiveNode] = useState<string | null>(null);\r\n\r\n const toggleNode = (id: string) => {\r\n setOpenNodes((prev) => {\r\n const next = new Set(prev);\r\n if (next.has(id)) next.delete(id);\r\n else next.add(id);\r\n return next;\r\n });\r\n };\r\n\r\n const flatten = (nodes: TreeNode[], acc: TreeNode[] = []): TreeNode[] => {\r\n nodes.forEach((node) => {\r\n acc.push(node);\r\n\r\n const isOpen = openNodes.has(node.id);\r\n if (node.children && node.children.length > 0 && isOpen) {\r\n flatten(node.children, acc);\r\n }\r\n });\r\n return acc;\r\n };\r\n\r\n const handleKeyDown = (\r\n e: React.KeyboardEvent,\r\n node: TreeNode,\r\n parent: TreeNode | undefined\r\n ) => {\r\n const key = e.key;\r\n\r\n // Select\r\n if (key === 'Enter' || key === ' ') {\r\n e.preventDefault();\r\n if (onSelect) onSelect(node.id);\r\n return;\r\n }\r\n\r\n // Collapse or go to parent\r\n if (key === 'ArrowLeft') {\r\n e.preventDefault();\r\n\r\n const hasChildren = node.children && node.children.length > 0;\r\n const isOpen = openNodes.has(node.id);\r\n\r\n if (hasChildren && isOpen) {\r\n toggleNode(node.id);\r\n return;\r\n }\r\n\r\n if (parent) {\r\n setActiveNode(parent.id);\r\n }\r\n return;\r\n }\r\n\r\n // Expand or go to first child\r\n if (key === 'ArrowRight') {\r\n e.preventDefault();\r\n\r\n const hasChildren = node.children && node.children.length > 0;\r\n const isOpen = openNodes.has(node.id);\r\n\r\n if (hasChildren && !isOpen) {\r\n toggleNode(node.id);\r\n return;\r\n }\r\n\r\n if (hasChildren && isOpen) {\r\n const firstChild =\r\n Array.isArray(node.children) && node.children.length > 0\r\n ? node.children[0]\r\n : undefined;\r\n\r\n if (firstChild) {\r\n setActiveNode(firstChild.id);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n // Up/Down navigation\r\n if (key === 'ArrowUp' || key === 'ArrowDown') {\r\n e.preventDefault();\r\n const flat = flatten(data);\r\n const index = flat.findIndex((n) => n.id === node.id);\r\n\r\n if (index === -1) return;\r\n\r\n const nextIndex = key === 'ArrowUp' ? index - 1 : index + 1;\r\n const nextNode = flat[nextIndex];\r\n\r\n if (nextNode) {\r\n setActiveNode(nextNode.id);\r\n }\r\n }\r\n };\r\n\r\n const renderNode = (\r\n node: TreeNode,\r\n parent: TreeNode | undefined,\r\n depth: number\r\n ) => {\r\n const isOpen = openNodes.has(node.id);\r\n const isSelected = node.id === selectedId;\r\n const isActive = node.id === activeNode;\r\n const hasChildren =\r\n Array.isArray(node.children) && node.children.length > 0;\r\n\r\n return (\r\n <div key={node.id}>\r\n <div\r\n role=\"treeitem\"\r\n aria-expanded={hasChildren ? isOpen : undefined}\r\n tabIndex={isActive ? 0 : -1}\r\n className={[\r\n 'ui-tree-node',\r\n isSelected ? 'selected' : '',\r\n isActive ? 'active' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n style={{ paddingLeft: depth * 16 }}\r\n onClick={() => {\r\n if (onSelect) onSelect(node.id);\r\n setActiveNode(node.id);\r\n\r\n const hasChildren =\r\n Array.isArray(node.children) && node.children.length > 0;\r\n\r\n // Clicking node should expand/collapse just like arrow\r\n if (hasChildren) {\r\n toggleNode(node.id);\r\n }\r\n }}\r\n onKeyDown={(e) => handleKeyDown(e, node, parent)}\r\n >\r\n {/* Arrow */}\r\n {hasChildren ? (\r\n <span\r\n className={`ui-tree-arrow ${isOpen ? 'open' : ''}`}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n toggleNode(node.id);\r\n }}\r\n >\r\n ▶\r\n </span>\r\n ) : (\r\n <span className=\"ui-tree-arrow empty\">•</span>\r\n )}\r\n\r\n {/* Icon */}\r\n {node.icon && <span className=\"ui-tree-icon\">{node.icon}</span>}\r\n\r\n <span className=\"ui-tree-label\">{node.label}</span>\r\n </div>\r\n\r\n {/* Children */}\r\n {hasChildren && isOpen && node.children && (\r\n <div role=\"group\">\r\n {node.children.map((child) => renderNode(child, node, depth + 1))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <div className={`ui-treeview ${className}`} role=\"tree\">\r\n {data.map((node) => renderNode(node, undefined, 0))}\r\n </div>\r\n );\r\n}\r\n"],"names":["TreeView","data","selectedId","onSelect","className","openNodes","setOpenNodes","useState","activeNode","setActiveNode","toggleNode","id","prev","next","flatten","nodes","acc","node","isOpen","handleKeyDown","e","parent","key","hasChildren","firstChild","flat","index","n","nextIndex","nextNode","renderNode","depth","isSelected","isActive","jsxs","jsx","child"],"mappings":"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"}
1
+ {"version":3,"file":"TreeView.js","sources":["../../../src/components/treeview/TreeView.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState, useCallback, useRef, forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport './TreeView.css';\n\n/* ============================================================\n * Types\n * ============================================================ */\n\nexport interface TreeNode {\n /** Unique identifier for the node */\n id: string;\n /** Text or element to display */\n label: React.ReactNode;\n /** Optional icon to display next to the label */\n icon?: React.ReactNode;\n /** Nested children nodes */\n children?: TreeNode[];\n /** Prevents interaction and applies muted styles */\n disabled?: boolean;\n}\n\nexport interface TreeViewProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n /** The hierarchical data structure to render */\n data: TreeNode[];\n /** The ID of the currently selected node (Controlled) */\n selectedId?: string;\n /** Array of node IDs to expand by default on initial render */\n defaultExpandedIds?: string[];\n /** Callback fired when a node is selected */\n onSelect?: (id: string, node: TreeNode) => void;\n}\n\n/* ============================================================\n * Component\n * ============================================================ */\n\n/**\n * TreeView Component\n * * A hierarchical list display with nested collapsible folders.\n * * Fully WAI-ARIA compliant with a smart roving tabindex for keyboard navigation.\n */\nexport const TreeView = forwardRef<HTMLDivElement, TreeViewProps>(({\n data,\n selectedId,\n defaultExpandedIds = [],\n onSelect,\n className,\n ...props\n}, ref) => {\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set(defaultExpandedIds));\n const treeRef = useRef<HTMLUListElement>(null);\n \n // Generate a unique prefix so multiple TreeViews on the same page never clash IDs\n const baseId = React.useId();\n // Strip the colons that React adds to make it strictly valid for query selectors\n const treeIdPrefix = `nui-tree-${baseId.replace(/:/g, '')}`;\n\n const toggleExpand = useCallback((id: string, e?: React.MouseEvent) => {\n e?.stopPropagation();\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n }, []);\n\n /* ----------------------------------------------------\n Keyboard Navigation (WAI-ARIA Standard)\n ---------------------------------------------------- */\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent, node: TreeNode, parentNode?: TreeNode) => {\n // 1. Instantly kill all default browser scrolling for arrow keys\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End', ' ', 'Enter'].includes(e.key)) {\n e.preventDefault();\n }\n \n // 2. Stop parent folders from stealing the keypress\n e.stopPropagation();\n\n const target = e.currentTarget as HTMLLIElement;\n const isExpanded = expandedIds.has(node.id);\n const hasChildren = !!node.children?.length;\n\n // Get all currently visible nodes in the exact DOM order\n const getVisibleNodes = () => {\n if (!treeRef.current) return [];\n return Array.from(\n treeRef.current.querySelectorAll('[role=\"treeitem\"]:not([aria-disabled=\"true\"])')\n ) as HTMLLIElement[];\n };\n\n const nodes = getVisibleNodes();\n const currentIndex = nodes.indexOf(target);\n\n switch (e.key) {\n case 'Enter':\n case ' ':\n if (node.disabled) return;\n // Modern UX: Enter/Space should expand/collapse folders\n if (hasChildren) toggleExpand(node.id);\n onSelect?.(node.id, node);\n break;\n\n case 'ArrowRight':\n if (hasChildren && !isExpanded) {\n // Closed folder -> Open it\n toggleExpand(node.id);\n } else if (hasChildren && isExpanded) {\n // Open folder -> The very next visible node in the DOM is ALWAYS its first child!\n nodes[currentIndex + 1]?.focus();\n }\n break;\n\n case 'ArrowLeft':\n if (hasChildren && isExpanded) {\n // Open folder -> Close it\n toggleExpand(node.id);\n } else if (parentNode) {\n // Closed folder or File -> Safely find parent by checking the end of the ID\n const parentEl = nodes.find(n => n.id.endsWith(`-${parentNode.id}`));\n parentEl?.focus();\n }\n break;\n\n case 'ArrowDown':\n nodes[currentIndex + 1]?.focus();\n break;\n\n case 'ArrowUp':\n nodes[currentIndex - 1]?.focus();\n break;\n\n case 'Home':\n nodes[0]?.focus();\n break;\n\n case 'End':\n nodes[nodes.length - 1]?.focus();\n break;\n }\n },\n [expandedIds, toggleExpand, onSelect]\n );\n\n /* ----------------------------------------------------\n Recursive Render Function\n ---------------------------------------------------- */\n const renderTree = (nodes: TreeNode[], level = 1, parentNode?: TreeNode) => {\n return (\n <ul\n role={level === 1 ? 'tree' : 'group'}\n className={cn(\"nui-tree\", level > 1 && \"nui-tree--nested\")}\n ref={level === 1 ? treeRef : undefined}\n >\n {nodes.map((node, index) => {\n const isExpanded = expandedIds.has(node.id);\n const isSelected = selectedId === node.id;\n const hasChildren = !!node.children?.length;\n \n // Only the first item in the entire tree is tabbable by default (Roving Tabindex)\n const isTabbable = level === 1 && index === 0;\n\n return (\n <li\n key={node.id}\n id={`${treeIdPrefix}-${node.id}`} \n role=\"treeitem\"\n aria-expanded={hasChildren ? isExpanded : undefined}\n aria-selected={isSelected}\n aria-disabled={node.disabled}\n tabIndex={isTabbable ? 0 : -1}\n className={cn(\n \"nui-tree-item\",\n isSelected && \"nui-tree-item--selected\",\n node.disabled && \"nui-tree-item--disabled\"\n )}\n onKeyDown={(e) => handleKeyDown(e, node, parentNode)} \n onClick={(e) => {\n e.stopPropagation();\n if (node.disabled) return;\n \n (e.currentTarget as HTMLElement).focus();\n \n if (hasChildren) {\n toggleExpand(node.id);\n }\n onSelect?.(node.id, node);\n }}\n >\n <div \n className=\"nui-tree-item-content\"\n style={{ paddingLeft: `${(level - 1) * 16}px` }}\n >\n <span \n className={cn(\"nui-tree-chevron\", !hasChildren && \"nui-tree-chevron--hidden\")}\n onClick={(e) => {\n if (hasChildren) toggleExpand(node.id, e);\n }}\n >\n <svg \n width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n className={cn(\"nui-tree-chevron-icon\", isExpanded && \"nui-tree-chevron-icon--open\")}\n aria-hidden=\"true\"\n >\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n </span>\n\n {node.icon && (\n <span className=\"nui-tree-icon\" aria-hidden=\"true\">{node.icon}</span>\n )}\n\n <span className=\"nui-tree-label\">{node.label}</span>\n </div>\n\n {hasChildren && isExpanded && node.children && (\n renderTree(node.children, level + 1, node) // Pass 'node' as the parent for the next level\n )}\n </li>\n );\n })}\n </ul>\n );\n };\n\n return (\n <div ref={ref} className={cn(\"nui-tree-wrapper\", className)} {...props}>\n {renderTree(data)}\n </div>\n );\n});\n\nTreeView.displayName = 'TreeView';"],"names":["TreeView","forwardRef","data","selectedId","defaultExpandedIds","onSelect","className","props","ref","expandedIds","setExpandedIds","useState","treeRef","useRef","treeIdPrefix","React","toggleExpand","useCallback","id","e","prev","next","handleKeyDown","node","parentNode","target","isExpanded","hasChildren","nodes","currentIndex","n","renderTree","level","jsx","cn","index","isSelected","isTabbable","jsxs"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),n=require("react");;/* empty css */function L({items:o,height:a,itemHeight:e=36,renderItem:d,className:v=""}){const s=n.useRef(null),[f,x]=n.useState(0),c=n.useCallback(()=>{s.current&&x(s.current.scrollTop)},[]),i=o.length,p=Math.ceil(a/e)+2,r=Math.max(0,Math.floor(f/e)-1),m=Math.min(i-1,r+p),y=r*e,h=o.slice(r,m+1);return n.useLayoutEffect(()=>{const t=s.current;if(t)return t.addEventListener("scroll",c,{passive:!0}),()=>t.removeEventListener("scroll",c)},[c]),l.jsxs("div",{ref:s,className:`ui-virtual-list ${v}`,style:{height:a},children:[l.jsx("div",{className:"ui-virtual-spacer",style:{height:i*e}}),l.jsx("div",{className:"ui-virtual-items",style:{transform:`translateY(${y}px)`},children:h.map((t,j)=>{const u=r+j;return l.jsx("div",{className:"ui-virtual-row",style:{height:e},children:d(t,u)},u)})})]})}exports.VirtualList=L;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),l=require("react");;/* empty css */const w=require("../../utils/cn/cn.cjs");function L({items:c,height:i,itemHeight:s=40,overscan:o=3,keyExtractor:u,renderItem:h,className:m,onScroll:d,...v},e){const[f,y]=l.useState(0),j=l.useRef(null),I=l.useCallback(t=>{j.current=t,typeof e=="function"?e(t):e&&(e.current=t)},[e]),R=l.useCallback(t=>{y(t.currentTarget.scrollTop),d?.(t)},[d]),p=c.length,b=p*s,r=Math.max(0,Math.floor(f/s)-o),M=Math.min(p-1,Math.floor((f+i)/s)+o),N=c.slice(r,M+1),S=r*s;return n.jsxs("div",{ref:I,className:w.cn("nui-virtual-list",m),style:{height:`${i}px`},onScroll:R,role:"list",...v,children:[n.jsx("div",{className:"nui-virtual-spacer",style:{height:`${b}px`}}),n.jsx("div",{className:"nui-virtual-window",style:{transform:`translateY(${S}px)`},children:N.map((t,T)=>{const a=r+T,q=u?u(t,a):a;return n.jsx("div",{role:"listitem",className:"nui-virtual-row",style:{height:`${s}px`},children:h(t,a)},q)})})]})}const x=l.forwardRef(L);x.displayName="VirtualList";exports.VirtualList=x;
2
2
  //# sourceMappingURL=VirtualList.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualList.cjs","sources":["../../../src/components/virtuallist/VirtualList.tsx"],"sourcesContent":["import React, { useRef, useState, useLayoutEffect, useCallback } from 'react';\r\nimport './VirtualList.css';\r\n\r\nexport interface VirtualListProps<T> {\r\n items: T[];\r\n /** Height of the viewport container */\r\n height: number;\r\n /** Fixed height for each row */\r\n itemHeight?: number; // default: 36px\r\n /** Renderer function */\r\n renderItem: (item: T, index: number) => React.ReactNode;\r\n /** Optional class */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Virtualized List (Fixed Row Height)\r\n * -----------------------------------\r\n * Ultra-fast\r\n * Handles 10k+ rows easily\r\n * Smooth scroll\r\n * Zero dependencies\r\n * Precision scrolling\r\n */\r\nexport function VirtualList<T>({\r\n items,\r\n height,\r\n itemHeight = 36,\r\n renderItem,\r\n className = '',\r\n}: VirtualListProps<T>) {\r\n const containerRef = useRef<HTMLDivElement | null>(null);\r\n\r\n // visible window\r\n const [scrollTop, setScrollTop] = useState(0);\r\n\r\n const onScroll = useCallback(() => {\r\n if (containerRef.current) {\r\n setScrollTop(containerRef.current.scrollTop);\r\n }\r\n }, []);\r\n\r\n // compute visible range\r\n const total = items.length;\r\n const viewCount = Math.ceil(height / itemHeight) + 2; // overscan\r\n const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - 1);\r\n const endIndex = Math.min(total - 1, startIndex + viewCount);\r\n\r\n // positioning\r\n const offsetTop = startIndex * itemHeight;\r\n const visibleItems = items.slice(startIndex, endIndex + 1);\r\n\r\n // ensure scroll events update immediately\r\n useLayoutEffect(() => {\r\n const el = containerRef.current;\r\n if (!el) return;\r\n\r\n el.addEventListener('scroll', onScroll, { passive: true });\r\n return () => el.removeEventListener('scroll', onScroll);\r\n }, [onScroll]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={`ui-virtual-list ${className}`}\r\n style={{ height }}\r\n >\r\n <div\r\n className=\"ui-virtual-spacer\"\r\n style={{ height: total * itemHeight }}\r\n />\r\n\r\n <div\r\n className=\"ui-virtual-items\"\r\n style={{ transform: `translateY(${offsetTop}px)` }}\r\n >\r\n {visibleItems.map((item, i) => {\r\n const index = startIndex + i;\r\n return (\r\n <div\r\n key={index}\r\n className=\"ui-virtual-row\"\r\n style={{ height: itemHeight }}\r\n >\r\n {renderItem(item, index)}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["VirtualList","items","height","itemHeight","renderItem","className","containerRef","useRef","scrollTop","setScrollTop","useState","onScroll","useCallback","total","viewCount","startIndex","endIndex","offsetTop","visibleItems","useLayoutEffect","el","jsxs","jsx","item","i","index"],"mappings":"yKAwBO,SAASA,EAAe,CAC7B,MAAAC,EACA,OAAAC,EACA,WAAAC,EAAa,GACb,WAAAC,EACA,UAAAC,EAAY,EACd,EAAwB,CACtB,MAAMC,EAAeC,EAAAA,OAA8B,IAAI,EAGjD,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAS,CAAC,EAEtCC,EAAWC,EAAAA,YAAY,IAAM,CAC7BN,EAAa,SACfG,EAAaH,EAAa,QAAQ,SAAS,CAE/C,EAAG,CAAA,CAAE,EAGCO,EAAQZ,EAAM,OACda,EAAY,KAAK,KAAKZ,EAASC,CAAU,EAAI,EAC7CY,EAAa,KAAK,IAAI,EAAG,KAAK,MAAMP,EAAYL,CAAU,EAAI,CAAC,EAC/Da,EAAW,KAAK,IAAIH,EAAQ,EAAGE,EAAaD,CAAS,EAGrDG,EAAYF,EAAaZ,EACzBe,EAAejB,EAAM,MAAMc,EAAYC,EAAW,CAAC,EAGzDG,OAAAA,EAAAA,gBAAgB,IAAM,CACpB,MAAMC,EAAKd,EAAa,QACxB,GAAKc,EAEL,OAAAA,EAAG,iBAAiB,SAAUT,EAAU,CAAE,QAAS,GAAM,EAClD,IAAMS,EAAG,oBAAoB,SAAUT,CAAQ,CACxD,EAAG,CAACA,CAAQ,CAAC,EAGXU,EAAAA,KAAC,MAAA,CACC,IAAKf,EACL,UAAW,mBAAmBD,CAAS,GACvC,MAAO,CAAE,OAAAH,CAAA,EAET,SAAA,CAAAoB,EAAAA,IAAC,MAAA,CACC,UAAU,oBACV,MAAO,CAAE,OAAQT,EAAQV,CAAA,CAAW,CAAA,EAGtCmB,EAAAA,IAAC,MAAA,CACC,UAAU,mBACV,MAAO,CAAE,UAAW,cAAcL,CAAS,KAAA,EAE1C,SAAAC,EAAa,IAAI,CAACK,EAAMC,IAAM,CAC7B,MAAMC,EAAQV,EAAaS,EAC3B,OACEF,EAAAA,IAAC,MAAA,CAEC,UAAU,iBACV,MAAO,CAAE,OAAQnB,CAAA,EAEhB,SAAAC,EAAWmB,EAAME,CAAK,CAAA,EAJlBA,CAAA,CAOX,CAAC,CAAA,CAAA,CACH,CAAA,CAAA,CAGN"}
1
+ {"version":3,"file":"VirtualList.cjs","sources":["../../../src/components/virtuallist/VirtualList.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useRef, useState, useCallback, UIEvent, forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport './VirtualList.css';\n\n/* ============================================================\n * Types\n * ============================================================ */\n\nexport interface VirtualListProps<T> extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Array of data items to render */\n items: T[];\n /** Height of the scrollable viewport in pixels */\n height: number;\n /** Fixed height for each row in pixels. Defaults to 40. */\n itemHeight?: number;\n /** Extra rows to render above and below the viewport to prevent white flashes during fast scrolling */\n overscan?: number;\n /** Extracts a unique React key for each item. Crucial for stable rendering during sorts/filters! */\n keyExtractor?: (item: T, index: number) => string | number;\n /** The render function for the row */\n renderItem: (item: T, index: number) => React.ReactNode;\n}\n\n/* ============================================================\n * Component\n * ============================================================ */\n\n/**\n * VirtualList Component\n * * High-performance scrolling for massive datasets.\n * * Uses GPU-accelerated transforms and strict mathematical windowing to only render visible DOM nodes.\n */\nfunction VirtualListInner<T>(\n {\n items,\n height,\n itemHeight = 40,\n overscan = 3,\n keyExtractor,\n renderItem,\n className,\n onScroll,\n ...props\n }: VirtualListProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const [scrollTop, setScrollTop] = useState(0);\n\n // Internal ref for scroll tracking, merged with forwarded ref\n const internalRef = useRef<HTMLDivElement>(null);\n const setRefs = useCallback(\n (node: HTMLDivElement | null) => {\n internalRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref]\n );\n\n /* ----------------------------------------------------\n Scroll Handling (React Synthetic Event)\n ---------------------------------------------------- */\n const handleScroll = useCallback(\n (e: UIEvent<HTMLDivElement>) => {\n // React's Synthetic events are perfectly batched in React 18+\n setScrollTop(e.currentTarget.scrollTop);\n // Preserve any consumer-provided onScroll handlers\n onScroll?.(e);\n },\n [onScroll]\n );\n\n /* ----------------------------------------------------\n Virtualization Math\n ---------------------------------------------------- */\n const totalItems = items.length;\n const totalHeight = totalItems * itemHeight;\n\n // Calculate exactly which indices are currently visible in the viewport\n const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);\n const endIndex = Math.min(\n totalItems - 1,\n Math.floor((scrollTop + height) / itemHeight) + overscan\n );\n\n const visibleItems = items.slice(startIndex, endIndex + 1);\n\n // Calculate the exact pixel offset to push the visible window down\n const offsetY = startIndex * itemHeight;\n\n /* ----------------------------------------------------\n Render\n ---------------------------------------------------- */\n return (\n <div\n ref={setRefs}\n className={cn(\"nui-virtual-list\", className)}\n style={{ height: `${height}px` }}\n onScroll={handleScroll}\n role=\"list\"\n {...props}\n >\n {/* 1. The Spacer: Forces the container to be the exact scrollable height of 10k+ rows */}\n <div\n className=\"nui-virtual-spacer\"\n style={{ height: `${totalHeight}px` }}\n />\n\n {/* 2. The Window: Hardware accelerated sliding container */}\n <div\n className=\"nui-virtual-window\"\n style={{ transform: `translateY(${offsetY}px)` }}\n >\n {visibleItems.map((item, i) => {\n const actualIndex = startIndex + i;\n // Safely fall back to index if no keyExtractor is provided\n const itemKey = keyExtractor ? keyExtractor(item, actualIndex) : actualIndex;\n\n return (\n <div\n key={itemKey}\n role=\"listitem\"\n className=\"nui-virtual-row\"\n style={{ height: `${itemHeight}px` }}\n >\n {renderItem(item, actualIndex)}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n// Type assertion required to allow forwardRef to support generics <T>\nexport const VirtualList = forwardRef(VirtualListInner) as <T>(\n props: VirtualListProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => React.ReactElement;\n\n(VirtualList as React.FC).displayName = 'VirtualList';"],"names":["VirtualListInner","items","height","itemHeight","overscan","keyExtractor","renderItem","className","onScroll","props","ref","scrollTop","setScrollTop","useState","internalRef","useRef","setRefs","useCallback","node","handleScroll","e","totalItems","totalHeight","startIndex","endIndex","visibleItems","offsetY","jsxs","cn","jsx","item","i","actualIndex","itemKey","VirtualList","forwardRef"],"mappings":"kNAkCA,SAASA,EACP,CACE,MAAAC,EACA,OAAAC,EACA,WAAAC,EAAa,GACb,SAAAC,EAAW,EACX,aAAAC,EACA,WAAAC,EACA,UAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EACAC,EACA,CACA,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAS,CAAC,EAGtCC,EAAcC,EAAAA,OAAuB,IAAI,EACzCC,EAAUC,EAAAA,YACbC,GAAgC,CAC/BJ,EAAY,QAAUI,EAClB,OAAOR,GAAQ,WACjBA,EAAIQ,CAAI,EACCR,IACTA,EAAI,QAAUQ,EAElB,EACA,CAACR,CAAG,CAAA,EAMAS,EAAeF,EAAAA,YAClBG,GAA+B,CAE9BR,EAAaQ,EAAE,cAAc,SAAS,EAEtCZ,IAAWY,CAAC,CACd,EACA,CAACZ,CAAQ,CAAA,EAMLa,EAAapB,EAAM,OACnBqB,EAAcD,EAAalB,EAG3BoB,EAAa,KAAK,IAAI,EAAG,KAAK,MAAMZ,EAAYR,CAAU,EAAIC,CAAQ,EACtEoB,EAAW,KAAK,IACpBH,EAAa,EACb,KAAK,OAAOV,EAAYT,GAAUC,CAAU,EAAIC,CAAA,EAG5CqB,EAAexB,EAAM,MAAMsB,EAAYC,EAAW,CAAC,EAGnDE,EAAUH,EAAapB,EAK7B,OACEwB,EAAAA,KAAC,MAAA,CACC,IAAKX,EACL,UAAWY,EAAAA,GAAG,mBAAoBrB,CAAS,EAC3C,MAAO,CAAE,OAAQ,GAAGL,CAAM,IAAA,EAC1B,SAAUiB,EACV,KAAK,OACJ,GAAGV,EAGJ,SAAA,CAAAoB,EAAAA,IAAC,MAAA,CACC,UAAU,qBACV,MAAO,CAAE,OAAQ,GAAGP,CAAW,IAAA,CAAK,CAAA,EAItCO,EAAAA,IAAC,MAAA,CACC,UAAU,qBACV,MAAO,CAAE,UAAW,cAAcH,CAAO,KAAA,EAExC,SAAAD,EAAa,IAAI,CAACK,EAAMC,IAAM,CAC7B,MAAMC,EAAcT,EAAaQ,EAE3BE,EAAU5B,EAAeA,EAAayB,EAAME,CAAW,EAAIA,EAEjE,OACEH,EAAAA,IAAC,MAAA,CAEC,KAAK,WACL,UAAU,kBACV,MAAO,CAAE,OAAQ,GAAG1B,CAAU,IAAA,EAE7B,SAAAG,EAAWwB,EAAME,CAAW,CAAA,EALxBC,CAAA,CAQX,CAAC,CAAA,CAAA,CACH,CAAA,CAAA,CAGN,CAGO,MAAMC,EAAcC,EAAAA,WAAWnC,CAAgB,EAIrDkC,EAAyB,YAAc"}
@@ -1,49 +1,65 @@
1
- import { jsxs as L, jsx as n } from "react/jsx-runtime";
2
- import { useRef as M, useState as N, useCallback as T, useLayoutEffect as E } from "react";
1
+ import { jsxs as S, jsx as o } from "react/jsx-runtime";
2
+ import { forwardRef as V, useState as b, useRef as j, useCallback as m } from "react";
3
3
  /* empty css */
4
- function j({
5
- items: o,
6
- height: c,
7
- itemHeight: t = 36,
8
- renderItem: u,
9
- className: f = ""
10
- }) {
11
- const e = M(null), [v, d] = N(0), l = T(() => {
12
- e.current && d(e.current.scrollTop);
13
- }, []), a = o.length, p = Math.ceil(c / t) + 2, r = Math.max(0, Math.floor(v / t) - 1), m = Math.min(a - 1, r + p), x = r * t, h = o.slice(r, m + 1);
14
- return E(() => {
15
- const s = e.current;
16
- if (s)
17
- return s.addEventListener("scroll", l, { passive: !0 }), () => s.removeEventListener("scroll", l);
18
- }, [l]), /* @__PURE__ */ L(
4
+ import { cn as Y } from "../../utils/cn/cn.js";
5
+ function g({
6
+ items: a,
7
+ height: e,
8
+ itemHeight: s = 40,
9
+ overscan: i = 3,
10
+ keyExtractor: c,
11
+ renderItem: d,
12
+ className: h,
13
+ onScroll: u,
14
+ ...x
15
+ }, l) {
16
+ const [p, v] = b(0), y = j(null), I = m(
17
+ (t) => {
18
+ y.current = t, typeof l == "function" ? l(t) : l && (l.current = t);
19
+ },
20
+ [l]
21
+ ), N = m(
22
+ (t) => {
23
+ v(t.currentTarget.scrollTop), u?.(t);
24
+ },
25
+ [u]
26
+ ), f = a.length, w = f * s, n = Math.max(0, Math.floor(p / s) - i), M = Math.min(
27
+ f - 1,
28
+ Math.floor((p + e) / s) + i
29
+ ), R = a.slice(n, M + 1), T = n * s;
30
+ return /* @__PURE__ */ S(
19
31
  "div",
20
32
  {
21
- ref: e,
22
- className: `ui-virtual-list ${f}`,
23
- style: { height: c },
33
+ ref: I,
34
+ className: Y("nui-virtual-list", h),
35
+ style: { height: `${e}px` },
36
+ onScroll: N,
37
+ role: "list",
38
+ ...x,
24
39
  children: [
25
- /* @__PURE__ */ n(
40
+ /* @__PURE__ */ o(
26
41
  "div",
27
42
  {
28
- className: "ui-virtual-spacer",
29
- style: { height: a * t }
43
+ className: "nui-virtual-spacer",
44
+ style: { height: `${w}px` }
30
45
  }
31
46
  ),
32
- /* @__PURE__ */ n(
47
+ /* @__PURE__ */ o(
33
48
  "div",
34
49
  {
35
- className: "ui-virtual-items",
36
- style: { transform: `translateY(${x}px)` },
37
- children: h.map((s, y) => {
38
- const i = r + y;
39
- return /* @__PURE__ */ n(
50
+ className: "nui-virtual-window",
51
+ style: { transform: `translateY(${T}px)` },
52
+ children: R.map((t, $) => {
53
+ const r = n + $, L = c ? c(t, r) : r;
54
+ return /* @__PURE__ */ o(
40
55
  "div",
41
56
  {
42
- className: "ui-virtual-row",
43
- style: { height: t },
44
- children: u(s, i)
57
+ role: "listitem",
58
+ className: "nui-virtual-row",
59
+ style: { height: `${s}px` },
60
+ children: d(t, r)
45
61
  },
46
- i
62
+ L
47
63
  );
48
64
  })
49
65
  }
@@ -52,7 +68,9 @@ function j({
52
68
  }
53
69
  );
54
70
  }
71
+ const C = V(g);
72
+ C.displayName = "VirtualList";
55
73
  export {
56
- j as VirtualList
74
+ C as VirtualList
57
75
  };
58
76
  //# sourceMappingURL=VirtualList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualList.js","sources":["../../../src/components/virtuallist/VirtualList.tsx"],"sourcesContent":["import React, { useRef, useState, useLayoutEffect, useCallback } from 'react';\r\nimport './VirtualList.css';\r\n\r\nexport interface VirtualListProps<T> {\r\n items: T[];\r\n /** Height of the viewport container */\r\n height: number;\r\n /** Fixed height for each row */\r\n itemHeight?: number; // default: 36px\r\n /** Renderer function */\r\n renderItem: (item: T, index: number) => React.ReactNode;\r\n /** Optional class */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Virtualized List (Fixed Row Height)\r\n * -----------------------------------\r\n * Ultra-fast\r\n * Handles 10k+ rows easily\r\n * Smooth scroll\r\n * Zero dependencies\r\n * Precision scrolling\r\n */\r\nexport function VirtualList<T>({\r\n items,\r\n height,\r\n itemHeight = 36,\r\n renderItem,\r\n className = '',\r\n}: VirtualListProps<T>) {\r\n const containerRef = useRef<HTMLDivElement | null>(null);\r\n\r\n // visible window\r\n const [scrollTop, setScrollTop] = useState(0);\r\n\r\n const onScroll = useCallback(() => {\r\n if (containerRef.current) {\r\n setScrollTop(containerRef.current.scrollTop);\r\n }\r\n }, []);\r\n\r\n // compute visible range\r\n const total = items.length;\r\n const viewCount = Math.ceil(height / itemHeight) + 2; // overscan\r\n const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - 1);\r\n const endIndex = Math.min(total - 1, startIndex + viewCount);\r\n\r\n // positioning\r\n const offsetTop = startIndex * itemHeight;\r\n const visibleItems = items.slice(startIndex, endIndex + 1);\r\n\r\n // ensure scroll events update immediately\r\n useLayoutEffect(() => {\r\n const el = containerRef.current;\r\n if (!el) return;\r\n\r\n el.addEventListener('scroll', onScroll, { passive: true });\r\n return () => el.removeEventListener('scroll', onScroll);\r\n }, [onScroll]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={`ui-virtual-list ${className}`}\r\n style={{ height }}\r\n >\r\n <div\r\n className=\"ui-virtual-spacer\"\r\n style={{ height: total * itemHeight }}\r\n />\r\n\r\n <div\r\n className=\"ui-virtual-items\"\r\n style={{ transform: `translateY(${offsetTop}px)` }}\r\n >\r\n {visibleItems.map((item, i) => {\r\n const index = startIndex + i;\r\n return (\r\n <div\r\n key={index}\r\n className=\"ui-virtual-row\"\r\n style={{ height: itemHeight }}\r\n >\r\n {renderItem(item, index)}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["VirtualList","items","height","itemHeight","renderItem","className","containerRef","useRef","scrollTop","setScrollTop","useState","onScroll","useCallback","total","viewCount","startIndex","endIndex","offsetTop","visibleItems","useLayoutEffect","el","jsxs","jsx","item","i","index"],"mappings":";;;AAwBO,SAASA,EAAe;AAAA,EAC7B,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,YAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAAwB;AACtB,QAAMC,IAAeC,EAA8B,IAAI,GAGjD,CAACC,GAAWC,CAAY,IAAIC,EAAS,CAAC,GAEtCC,IAAWC,EAAY,MAAM;AACjC,IAAIN,EAAa,WACfG,EAAaH,EAAa,QAAQ,SAAS;AAAA,EAE/C,GAAG,CAAA,CAAE,GAGCO,IAAQZ,EAAM,QACda,IAAY,KAAK,KAAKZ,IAASC,CAAU,IAAI,GAC7CY,IAAa,KAAK,IAAI,GAAG,KAAK,MAAMP,IAAYL,CAAU,IAAI,CAAC,GAC/Da,IAAW,KAAK,IAAIH,IAAQ,GAAGE,IAAaD,CAAS,GAGrDG,IAAYF,IAAaZ,GACzBe,IAAejB,EAAM,MAAMc,GAAYC,IAAW,CAAC;AAGzD,SAAAG,EAAgB,MAAM;AACpB,UAAMC,IAAKd,EAAa;AACxB,QAAKc;AAEL,aAAAA,EAAG,iBAAiB,UAAUT,GAAU,EAAE,SAAS,IAAM,GAClD,MAAMS,EAAG,oBAAoB,UAAUT,CAAQ;AAAA,EACxD,GAAG,CAACA,CAAQ,CAAC,GAGX,gBAAAU;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKf;AAAA,MACL,WAAW,mBAAmBD,CAAS;AAAA,MACvC,OAAO,EAAE,QAAAH,EAAA;AAAA,MAET,UAAA;AAAA,QAAA,gBAAAoB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,QAAQT,IAAQV,EAAA;AAAA,UAAW;AAAA,QAAA;AAAA,QAGtC,gBAAAmB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,WAAW,cAAcL,CAAS,MAAA;AAAA,YAE1C,UAAAC,EAAa,IAAI,CAACK,GAAMC,MAAM;AAC7B,oBAAMC,IAAQV,IAAaS;AAC3B,qBACE,gBAAAF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBACV,OAAO,EAAE,QAAQnB,EAAA;AAAA,kBAEhB,UAAAC,EAAWmB,GAAME,CAAK;AAAA,gBAAA;AAAA,gBAJlBA;AAAA,cAAA;AAAA,YAOX,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"VirtualList.js","sources":["../../../src/components/virtuallist/VirtualList.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useRef, useState, useCallback, UIEvent, forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport './VirtualList.css';\n\n/* ============================================================\n * Types\n * ============================================================ */\n\nexport interface VirtualListProps<T> extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Array of data items to render */\n items: T[];\n /** Height of the scrollable viewport in pixels */\n height: number;\n /** Fixed height for each row in pixels. Defaults to 40. */\n itemHeight?: number;\n /** Extra rows to render above and below the viewport to prevent white flashes during fast scrolling */\n overscan?: number;\n /** Extracts a unique React key for each item. Crucial for stable rendering during sorts/filters! */\n keyExtractor?: (item: T, index: number) => string | number;\n /** The render function for the row */\n renderItem: (item: T, index: number) => React.ReactNode;\n}\n\n/* ============================================================\n * Component\n * ============================================================ */\n\n/**\n * VirtualList Component\n * * High-performance scrolling for massive datasets.\n * * Uses GPU-accelerated transforms and strict mathematical windowing to only render visible DOM nodes.\n */\nfunction VirtualListInner<T>(\n {\n items,\n height,\n itemHeight = 40,\n overscan = 3,\n keyExtractor,\n renderItem,\n className,\n onScroll,\n ...props\n }: VirtualListProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const [scrollTop, setScrollTop] = useState(0);\n\n // Internal ref for scroll tracking, merged with forwarded ref\n const internalRef = useRef<HTMLDivElement>(null);\n const setRefs = useCallback(\n (node: HTMLDivElement | null) => {\n internalRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref]\n );\n\n /* ----------------------------------------------------\n Scroll Handling (React Synthetic Event)\n ---------------------------------------------------- */\n const handleScroll = useCallback(\n (e: UIEvent<HTMLDivElement>) => {\n // React's Synthetic events are perfectly batched in React 18+\n setScrollTop(e.currentTarget.scrollTop);\n // Preserve any consumer-provided onScroll handlers\n onScroll?.(e);\n },\n [onScroll]\n );\n\n /* ----------------------------------------------------\n Virtualization Math\n ---------------------------------------------------- */\n const totalItems = items.length;\n const totalHeight = totalItems * itemHeight;\n\n // Calculate exactly which indices are currently visible in the viewport\n const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);\n const endIndex = Math.min(\n totalItems - 1,\n Math.floor((scrollTop + height) / itemHeight) + overscan\n );\n\n const visibleItems = items.slice(startIndex, endIndex + 1);\n\n // Calculate the exact pixel offset to push the visible window down\n const offsetY = startIndex * itemHeight;\n\n /* ----------------------------------------------------\n Render\n ---------------------------------------------------- */\n return (\n <div\n ref={setRefs}\n className={cn(\"nui-virtual-list\", className)}\n style={{ height: `${height}px` }}\n onScroll={handleScroll}\n role=\"list\"\n {...props}\n >\n {/* 1. The Spacer: Forces the container to be the exact scrollable height of 10k+ rows */}\n <div\n className=\"nui-virtual-spacer\"\n style={{ height: `${totalHeight}px` }}\n />\n\n {/* 2. The Window: Hardware accelerated sliding container */}\n <div\n className=\"nui-virtual-window\"\n style={{ transform: `translateY(${offsetY}px)` }}\n >\n {visibleItems.map((item, i) => {\n const actualIndex = startIndex + i;\n // Safely fall back to index if no keyExtractor is provided\n const itemKey = keyExtractor ? keyExtractor(item, actualIndex) : actualIndex;\n\n return (\n <div\n key={itemKey}\n role=\"listitem\"\n className=\"nui-virtual-row\"\n style={{ height: `${itemHeight}px` }}\n >\n {renderItem(item, actualIndex)}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n// Type assertion required to allow forwardRef to support generics <T>\nexport const VirtualList = forwardRef(VirtualListInner) as <T>(\n props: VirtualListProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => React.ReactElement;\n\n(VirtualList as React.FC).displayName = 'VirtualList';"],"names":["VirtualListInner","items","height","itemHeight","overscan","keyExtractor","renderItem","className","onScroll","props","ref","scrollTop","setScrollTop","useState","internalRef","useRef","setRefs","useCallback","node","handleScroll","e","totalItems","totalHeight","startIndex","endIndex","visibleItems","offsetY","jsxs","cn","jsx","item","i","actualIndex","itemKey","VirtualList","forwardRef"],"mappings":";;;;AAkCA,SAASA,EACP;AAAA,EACE,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,UAAAC,IAAW;AAAA,EACX,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAS,CAAC,GAGtCC,IAAcC,EAAuB,IAAI,GACzCC,IAAUC;AAAA,IACd,CAACC,MAAgC;AAC/B,MAAAJ,EAAY,UAAUI,GAClB,OAAOR,KAAQ,aACjBA,EAAIQ,CAAI,IACCR,MACTA,EAAI,UAAUQ;AAAA,IAElB;AAAA,IACA,CAACR,CAAG;AAAA,EAAA,GAMAS,IAAeF;AAAA,IACnB,CAACG,MAA+B;AAE9B,MAAAR,EAAaQ,EAAE,cAAc,SAAS,GAEtCZ,IAAWY,CAAC;AAAA,IACd;AAAA,IACA,CAACZ,CAAQ;AAAA,EAAA,GAMLa,IAAapB,EAAM,QACnBqB,IAAcD,IAAalB,GAG3BoB,IAAa,KAAK,IAAI,GAAG,KAAK,MAAMZ,IAAYR,CAAU,IAAIC,CAAQ,GACtEoB,IAAW,KAAK;AAAA,IACpBH,IAAa;AAAA,IACb,KAAK,OAAOV,IAAYT,KAAUC,CAAU,IAAIC;AAAA,EAAA,GAG5CqB,IAAexB,EAAM,MAAMsB,GAAYC,IAAW,CAAC,GAGnDE,IAAUH,IAAapB;AAK7B,SACE,gBAAAwB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKX;AAAA,MACL,WAAWY,EAAG,oBAAoBrB,CAAS;AAAA,MAC3C,OAAO,EAAE,QAAQ,GAAGL,CAAM,KAAA;AAAA,MAC1B,UAAUiB;AAAA,MACV,MAAK;AAAA,MACJ,GAAGV;AAAA,MAGJ,UAAA;AAAA,QAAA,gBAAAoB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,QAAQ,GAAGP,CAAW,KAAA;AAAA,UAAK;AAAA,QAAA;AAAA,QAItC,gBAAAO;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,WAAW,cAAcH,CAAO,MAAA;AAAA,YAExC,UAAAD,EAAa,IAAI,CAACK,GAAMC,MAAM;AAC7B,oBAAMC,IAAcT,IAAaQ,GAE3BE,IAAU5B,IAAeA,EAAayB,GAAME,CAAW,IAAIA;AAEjE,qBACE,gBAAAH;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,OAAO,EAAE,QAAQ,GAAG1B,CAAU,KAAA;AAAA,kBAE7B,UAAAG,EAAWwB,GAAME,CAAW;AAAA,gBAAA;AAAA,gBALxBC;AAAA,cAAA;AAAA,YAQX,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;AAGO,MAAMC,IAAcC,EAAWnC,CAAgB;AAIrDkC,EAAyB,cAAc;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),p=require("react");;/* empty css */function x({items:s,defaultOpenId:i,multiple:d=!1,className:l=""}){const[t,u]=p.useState(i?[i]:[]),c=e=>t.includes(e),a=e=>{u(n=>d?c(e)?n.filter(r=>r!==e):[...n,e]:c(e)?[]:[e])};return o.jsx("div",{className:`ui-accordion ${l}`,children:s.map(e=>{const n=c(e.id);return o.jsxs("div",{className:"ui-accordion-item",children:[o.jsxs("button",{className:"ui-accordion-header","aria-expanded":n,"aria-controls":`panel-${e.id}`,id:`accordion-${e.id}`,onClick:()=>a(e.id),onKeyDown:r=>{(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),a(e.id))},children:[e.title,o.jsx("span",{children:n?"–":"+"})]}),o.jsx("div",{id:`panel-${e.id}`,role:"region","aria-labelledby":`accordion-${e.id}`,className:`ui-accordion-panel ${n?"ui-accordion-panel--open":""}`,children:n&&o.jsx("div",{style:{padding:"8px 0",color:"var(--color-text)"},children:e.content})})]},e.id)})})}exports.Accordion=x;
2
+ //# sourceMappingURL=Accordion.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Accordion.cjs","sources":["../../../../src/components/accordion/Accordion.tsx"],"sourcesContent":["/**\r\n * Accordion.tsx\r\n * ---------------\r\n * Fully accessible WAI-ARIA accordion.\r\n * Single-component API.\r\n */\r\n\r\nimport React, { useState } from 'react';\r\n\r\nimport './Accordion.css';\r\n\r\nexport interface AccordionItem {\r\n id: string;\r\n title: string;\r\n content: React.ReactNode;\r\n}\r\n\r\ninterface AccordionProps {\r\n /** List of accordion sections */\r\n items: AccordionItem[];\r\n\r\n /** Default opened item ID (optional) */\r\n defaultOpenId?: string;\r\n\r\n /** Allow multiple open panels? Default: false */\r\n multiple?: boolean;\r\n\r\n className?: string;\r\n}\r\n\r\nexport function Accordion({\r\n items,\r\n defaultOpenId,\r\n multiple = false,\r\n className = '',\r\n}: AccordionProps) {\r\n const [openIds, setOpenIds] = useState<string[]>(\r\n defaultOpenId ? [defaultOpenId] : []\r\n );\r\n\r\n const isOpen = (id: string) => openIds.includes(id);\r\n\r\n const toggle = (id: string) => {\r\n setOpenIds((prev) => {\r\n if (multiple) {\r\n return isOpen(id) ? prev.filter((x) => x !== id) : [...prev, id];\r\n } else {\r\n return isOpen(id) ? [] : [id];\r\n }\r\n });\r\n };\r\n\r\n return (\r\n <div className={`ui-accordion ${className}`}>\r\n {items.map((item) => {\r\n const open = isOpen(item.id);\r\n\r\n return (\r\n <div key={item.id} className=\"ui-accordion-item\">\r\n {/* HEADER BUTTON */}\r\n <button\r\n className=\"ui-accordion-header\"\r\n aria-expanded={open}\r\n aria-controls={`panel-${item.id}`}\r\n id={`accordion-${item.id}`}\r\n onClick={() => toggle(item.id)}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n toggle(item.id);\r\n }\r\n }}\r\n >\r\n {item.title}\r\n <span>{open ? '–' : '+'}</span>\r\n </button>\r\n\r\n {/* PANEL */}\r\n <div\r\n id={`panel-${item.id}`}\r\n role=\"region\"\r\n aria-labelledby={`accordion-${item.id}`}\r\n className={`ui-accordion-panel ${\r\n open ? 'ui-accordion-panel--open' : ''\r\n }`}\r\n >\r\n {open && (\r\n <div style={{ padding: '8px 0', color: 'var(--color-text)' }}>\r\n {item.content}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n}\r\n"],"names":["Accordion","items","defaultOpenId","multiple","className","openIds","setOpenIds","useState","isOpen","id","toggle","prev","x","jsx","item","open","jsxs","e"],"mappings":"uKA8BO,SAASA,EAAU,CACxB,MAAAC,EACA,cAAAC,EACA,SAAAC,EAAW,GACX,UAAAC,EAAY,EACd,EAAmB,CACjB,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAC5BL,EAAgB,CAACA,CAAa,EAAI,CAAA,CAAC,EAG/BM,EAAUC,GAAeJ,EAAQ,SAASI,CAAE,EAE5CC,EAAUD,GAAe,CAC7BH,EAAYK,GACNR,EACKK,EAAOC,CAAE,EAAIE,EAAK,OAAQC,GAAMA,IAAMH,CAAE,EAAI,CAAC,GAAGE,EAAMF,CAAE,EAExDD,EAAOC,CAAE,EAAI,CAAA,EAAK,CAACA,CAAE,CAE/B,CACH,EAEA,OACEI,MAAC,OAAI,UAAW,gBAAgBT,CAAS,GACtC,SAAAH,EAAM,IAAKa,GAAS,CACnB,MAAMC,EAAOP,EAAOM,EAAK,EAAE,EAE3B,OACEE,EAAAA,KAAC,MAAA,CAAkB,UAAU,oBAE3B,SAAA,CAAAA,EAAAA,KAAC,SAAA,CACC,UAAU,sBACV,gBAAeD,EACf,gBAAe,SAASD,EAAK,EAAE,GAC/B,GAAI,aAAaA,EAAK,EAAE,GACxB,QAAS,IAAMJ,EAAOI,EAAK,EAAE,EAC7B,UAAYG,GAAM,EACZA,EAAE,MAAQ,SAAWA,EAAE,MAAQ,OACjCA,EAAE,eAAA,EACFP,EAAOI,EAAK,EAAE,EAElB,EAEC,SAAA,CAAAA,EAAK,MACND,EAAAA,IAAC,OAAA,CAAM,SAAAE,EAAO,IAAM,GAAA,CAAI,CAAA,CAAA,CAAA,EAI1BF,EAAAA,IAAC,MAAA,CACC,GAAI,SAASC,EAAK,EAAE,GACpB,KAAK,SACL,kBAAiB,aAAaA,EAAK,EAAE,GACrC,UAAW,sBACTC,EAAO,2BAA6B,EACtC,GAEC,SAAAA,GACCF,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,QAAS,QAAS,MAAO,mBAAA,EACpC,SAAAC,EAAK,OAAA,CACR,CAAA,CAAA,CAEJ,CAAA,EAjCQA,EAAK,EAkCf,CAEJ,CAAC,CAAA,CACH,CAEJ"}
@@ -0,0 +1,51 @@
1
+ import { jsx as e, jsxs as d } from "react/jsx-runtime";
2
+ import { useState as f } from "react";
3
+ /* empty css */
4
+ function v({
5
+ items: l,
6
+ defaultOpenId: i,
7
+ multiple: s = !1,
8
+ className: t = ""
9
+ }) {
10
+ const [p, u] = f(
11
+ i ? [i] : []
12
+ ), c = (n) => p.includes(n), a = (n) => {
13
+ u((o) => s ? c(n) ? o.filter((r) => r !== n) : [...o, n] : c(n) ? [] : [n]);
14
+ };
15
+ return /* @__PURE__ */ e("div", { className: `ui-accordion ${t}`, children: l.map((n) => {
16
+ const o = c(n.id);
17
+ return /* @__PURE__ */ d("div", { className: "ui-accordion-item", children: [
18
+ /* @__PURE__ */ d(
19
+ "button",
20
+ {
21
+ className: "ui-accordion-header",
22
+ "aria-expanded": o,
23
+ "aria-controls": `panel-${n.id}`,
24
+ id: `accordion-${n.id}`,
25
+ onClick: () => a(n.id),
26
+ onKeyDown: (r) => {
27
+ (r.key === "Enter" || r.key === " ") && (r.preventDefault(), a(n.id));
28
+ },
29
+ children: [
30
+ n.title,
31
+ /* @__PURE__ */ e("span", { children: o ? "–" : "+" })
32
+ ]
33
+ }
34
+ ),
35
+ /* @__PURE__ */ e(
36
+ "div",
37
+ {
38
+ id: `panel-${n.id}`,
39
+ role: "region",
40
+ "aria-labelledby": `accordion-${n.id}`,
41
+ className: `ui-accordion-panel ${o ? "ui-accordion-panel--open" : ""}`,
42
+ children: o && /* @__PURE__ */ e("div", { style: { padding: "8px 0", color: "var(--color-text)" }, children: n.content })
43
+ }
44
+ )
45
+ ] }, n.id);
46
+ }) });
47
+ }
48
+ export {
49
+ v as Accordion
50
+ };
51
+ //# sourceMappingURL=Accordion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Accordion.js","sources":["../../../../src/components/accordion/Accordion.tsx"],"sourcesContent":["/**\r\n * Accordion.tsx\r\n * ---------------\r\n * Fully accessible WAI-ARIA accordion.\r\n * Single-component API.\r\n */\r\n\r\nimport React, { useState } from 'react';\r\n\r\nimport './Accordion.css';\r\n\r\nexport interface AccordionItem {\r\n id: string;\r\n title: string;\r\n content: React.ReactNode;\r\n}\r\n\r\ninterface AccordionProps {\r\n /** List of accordion sections */\r\n items: AccordionItem[];\r\n\r\n /** Default opened item ID (optional) */\r\n defaultOpenId?: string;\r\n\r\n /** Allow multiple open panels? Default: false */\r\n multiple?: boolean;\r\n\r\n className?: string;\r\n}\r\n\r\nexport function Accordion({\r\n items,\r\n defaultOpenId,\r\n multiple = false,\r\n className = '',\r\n}: AccordionProps) {\r\n const [openIds, setOpenIds] = useState<string[]>(\r\n defaultOpenId ? [defaultOpenId] : []\r\n );\r\n\r\n const isOpen = (id: string) => openIds.includes(id);\r\n\r\n const toggle = (id: string) => {\r\n setOpenIds((prev) => {\r\n if (multiple) {\r\n return isOpen(id) ? prev.filter((x) => x !== id) : [...prev, id];\r\n } else {\r\n return isOpen(id) ? [] : [id];\r\n }\r\n });\r\n };\r\n\r\n return (\r\n <div className={`ui-accordion ${className}`}>\r\n {items.map((item) => {\r\n const open = isOpen(item.id);\r\n\r\n return (\r\n <div key={item.id} className=\"ui-accordion-item\">\r\n {/* HEADER BUTTON */}\r\n <button\r\n className=\"ui-accordion-header\"\r\n aria-expanded={open}\r\n aria-controls={`panel-${item.id}`}\r\n id={`accordion-${item.id}`}\r\n onClick={() => toggle(item.id)}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n toggle(item.id);\r\n }\r\n }}\r\n >\r\n {item.title}\r\n <span>{open ? '–' : '+'}</span>\r\n </button>\r\n\r\n {/* PANEL */}\r\n <div\r\n id={`panel-${item.id}`}\r\n role=\"region\"\r\n aria-labelledby={`accordion-${item.id}`}\r\n className={`ui-accordion-panel ${\r\n open ? 'ui-accordion-panel--open' : ''\r\n }`}\r\n >\r\n {open && (\r\n <div style={{ padding: '8px 0', color: 'var(--color-text)' }}>\r\n {item.content}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n}\r\n"],"names":["Accordion","items","defaultOpenId","multiple","className","openIds","setOpenIds","useState","isOpen","id","toggle","prev","x","jsx","item","open","jsxs","e"],"mappings":";;;AA8BO,SAASA,EAAU;AAAA,EACxB,OAAAC;AAAA,EACA,eAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AACd,GAAmB;AACjB,QAAM,CAACC,GAASC,CAAU,IAAIC;AAAA,IAC5BL,IAAgB,CAACA,CAAa,IAAI,CAAA;AAAA,EAAC,GAG/BM,IAAS,CAACC,MAAeJ,EAAQ,SAASI,CAAE,GAE5CC,IAAS,CAACD,MAAe;AAC7B,IAAAH,EAAW,CAACK,MACNR,IACKK,EAAOC,CAAE,IAAIE,EAAK,OAAO,CAACC,MAAMA,MAAMH,CAAE,IAAI,CAAC,GAAGE,GAAMF,CAAE,IAExDD,EAAOC,CAAE,IAAI,CAAA,IAAK,CAACA,CAAE,CAE/B;AAAA,EACH;AAEA,SACE,gBAAAI,EAAC,SAAI,WAAW,gBAAgBT,CAAS,IACtC,UAAAH,EAAM,IAAI,CAACa,MAAS;AACnB,UAAMC,IAAOP,EAAOM,EAAK,EAAE;AAE3B,WACE,gBAAAE,EAAC,OAAA,EAAkB,WAAU,qBAE3B,UAAA;AAAA,MAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,iBAAeD;AAAA,UACf,iBAAe,SAASD,EAAK,EAAE;AAAA,UAC/B,IAAI,aAAaA,EAAK,EAAE;AAAA,UACxB,SAAS,MAAMJ,EAAOI,EAAK,EAAE;AAAA,UAC7B,WAAW,CAACG,MAAM;AAChB,aAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAA,GACFP,EAAOI,EAAK,EAAE;AAAA,UAElB;AAAA,UAEC,UAAA;AAAA,YAAAA,EAAK;AAAA,YACN,gBAAAD,EAAC,QAAA,EAAM,UAAAE,IAAO,MAAM,IAAA,CAAI;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAI1B,gBAAAF;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAI,SAASC,EAAK,EAAE;AAAA,UACpB,MAAK;AAAA,UACL,mBAAiB,aAAaA,EAAK,EAAE;AAAA,UACrC,WAAW,sBACTC,IAAO,6BAA6B,EACtC;AAAA,UAEC,UAAAA,KACC,gBAAAF,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,SAAS,OAAO,oBAAA,GACpC,UAAAC,EAAK,QAAA,CACR;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ,EAAA,GAjCQA,EAAK,EAkCf;AAAA,EAEJ,CAAC,EAAA,CACH;AAEJ;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");;/* empty css */function c({type:r="info",title:l,children:t,closable:s=!1,onClose:a,className:i=""}){const n=r==="error"||r==="warning"?"alert":"status";return e.jsxs("div",{className:`ui-alert ui-alert--${r} ${i}`,role:n,children:[e.jsxs("div",{className:"ui-alert-content",children:[l&&e.jsx("div",{className:"ui-alert-title",children:l}),t]}),s&&e.jsx("button",{type:"button",className:"ui-alert-close","aria-label":"Close alert",onClick:a,children:"×"})]})}exports.Alert=c;
2
+ //# sourceMappingURL=Alert.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.cjs","sources":["../../../../src/components/alert/Alert.tsx"],"sourcesContent":["/**\r\n * Alert.tsx\r\n * ----------\r\n * WCAG-compliant alert component.\r\n *\r\n * - Uses correct roles:\r\n * type=\"error\"/\"warning\" → role=\"alert\" (urgent)\r\n * type=\"info\"/\"success\" → role=\"status\" (non-urgent)\r\n *\r\n * - Supports:\r\n * - title\r\n * - closable\r\n * - variants\r\n * - icons (optional)\r\n */\r\n\r\nimport React from 'react';\r\nimport './Alert.css';\r\n\r\ntype AlertType = 'info' | 'success' | 'warning' | 'error';\r\n\r\ninterface AlertProps {\r\n type?: AlertType;\r\n title?: string;\r\n children?: React.ReactNode;\r\n closable?: boolean;\r\n onClose?: () => void;\r\n className?: string;\r\n}\r\n\r\nexport function Alert({\r\n type = 'info',\r\n title,\r\n children,\r\n closable = false,\r\n onClose,\r\n className = '',\r\n}: AlertProps) {\r\n // WCAG rule:\r\n // - errors & warnings = role=\"alert\"\r\n // - info & success = role=\"status\"\r\n const role = type === 'error' || type === 'warning' ? 'alert' : 'status';\r\n\r\n return (\r\n <div className={`ui-alert ui-alert--${type} ${className}`} role={role}>\r\n <div className=\"ui-alert-content\">\r\n {title && <div className=\"ui-alert-title\">{title}</div>}\r\n {children}\r\n </div>\r\n\r\n {closable && (\r\n <button\r\n type=\"button\"\r\n className=\"ui-alert-close\"\r\n aria-label=\"Close alert\"\r\n onClick={onClose}\r\n >\r\n ×\r\n </button>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["Alert","type","title","children","closable","onClose","className","role","jsxs","jsx"],"mappings":"gJA8BO,SAASA,EAAM,CACpB,KAAAC,EAAO,OACP,MAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,GACX,QAAAC,EACA,UAAAC,EAAY,EACd,EAAe,CAIb,MAAMC,EAAON,IAAS,SAAWA,IAAS,UAAY,QAAU,SAEhE,OACEO,OAAC,OAAI,UAAW,sBAAsBP,CAAI,IAAIK,CAAS,GAAI,KAAAC,EACzD,SAAA,CAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,mBACZ,SAAA,CAAAN,GAASO,EAAAA,IAAC,MAAA,CAAI,UAAU,iBAAkB,SAAAP,EAAM,EAChDC,CAAA,EACH,EAECC,GACCK,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,UAAU,iBACV,aAAW,cACX,QAASJ,EACV,SAAA,GAAA,CAAA,CAED,EAEJ,CAEJ"}