@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 +1 @@
1
- {"version":3,"file":"RadioGroup.cjs","sources":["../../../src/components/radiogroup/RadioGroup.tsx"],"sourcesContent":["/**\r\n * RadioGroup.tsx\r\n * ----------------\r\n * Fully accessible WAI-ARIA radio group.\r\n * - Arrow key navigation\r\n * - Home/End keys\r\n * - Controlled & uncontrolled\r\n * - Disabled support\r\n */\r\n\r\nimport React, { useState, useCallback, useRef } from 'react';\r\nimport './RadioGroup.css';\r\n\r\nexport interface RadioOption {\r\n label: React.ReactNode;\r\n value: string;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface RadioGroupProps {\r\n options: RadioOption[];\r\n value?: string; // controlled\r\n defaultValue?: string; // uncontrolled\r\n onChange?: (value: string) => void;\r\n name?: string; // form support\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function RadioGroup({\r\n options,\r\n value,\r\n defaultValue,\r\n onChange,\r\n name,\r\n disabled = false,\r\n className = '',\r\n}: RadioGroupProps) {\r\n const isControlled = value !== undefined;\r\n\r\n const [internalValue, setInternalValue] = useState(defaultValue);\r\n const selected = isControlled ? value : internalValue;\r\n\r\n const itemRefs = useRef<Array<HTMLInputElement | null>>([]);\r\n\r\n const select = useCallback(\r\n (val: string) => {\r\n if (!isControlled) setInternalValue(val);\r\n onChange?.(val);\r\n },\r\n [isControlled, onChange]\r\n );\r\n\r\n const onKeyDown = (e: React.KeyboardEvent, index: number) => {\r\n const enabledIndices = options\r\n .map((o, i) => (!o.disabled ? i : null))\r\n .filter((i) => i !== null) as number[];\r\n\r\n const currentIndex = enabledIndices.indexOf(index);\r\n if (currentIndex === -1) return;\r\n\r\n let nextIndex = currentIndex;\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n case 'ArrowRight':\r\n nextIndex = (currentIndex + 1) % enabledIndices.length;\r\n break;\r\n\r\n case 'ArrowUp':\r\n case 'ArrowLeft':\r\n nextIndex =\r\n (currentIndex - 1 + enabledIndices.length) % enabledIndices.length;\r\n break;\r\n\r\n case 'Home':\r\n nextIndex = 0;\r\n break;\r\n\r\n case 'End':\r\n nextIndex = enabledIndices.length - 1;\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n const targetIndex = enabledIndices[nextIndex];\r\n const target = itemRefs.current[targetIndex];\r\n target?.focus();\r\n select(options[targetIndex].value);\r\n };\r\n\r\n return (\r\n <div className={`ui-radio-group ${className}`} role=\"radiogroup\">\r\n {options.map((opt, i) => {\r\n const isChecked = selected === opt.value;\r\n\r\n return (\r\n <label\r\n key={opt.value}\r\n className=\"ui-radio-item\"\r\n aria-disabled={disabled || opt.disabled}\r\n >\r\n <input\r\n ref={(el) => {\r\n itemRefs.current[i] = el;\r\n }}\r\n type=\"radio\"\r\n className=\"ui-radio-input\"\r\n name={name}\r\n value={opt.value}\r\n disabled={disabled || opt.disabled}\r\n checked={isChecked}\r\n onChange={() => select(opt.value)}\r\n onKeyDown={(e) => onKeyDown(e, i)}\r\n data-state={isChecked ? 'checked' : 'unchecked'}\r\n />\r\n\r\n <span className=\"ui-radio-label\">{opt.label}</span>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n );\r\n}\r\n"],"names":["RadioGroup","options","value","defaultValue","onChange","name","disabled","className","isControlled","internalValue","setInternalValue","useState","selected","itemRefs","useRef","select","useCallback","val","onKeyDown","index","enabledIndices","o","i","currentIndex","nextIndex","targetIndex","jsx","opt","isChecked","jsxs","el","e"],"mappings":"wKA6BO,SAASA,EAAW,CACzB,QAAAC,EACA,MAAAC,EACA,aAAAC,EACA,SAAAC,EACA,KAAAC,EACA,SAAAC,EAAW,GACX,UAAAC,EAAY,EACd,EAAoB,CAClB,MAAMC,EAAeN,IAAU,OAEzB,CAACO,EAAeC,CAAgB,EAAIC,EAAAA,SAASR,CAAY,EACzDS,EAAWJ,EAAeN,EAAQO,EAElCI,EAAWC,EAAAA,OAAuC,EAAE,EAEpDC,EAASC,EAAAA,YACZC,GAAgB,CACVT,GAAcE,EAAiBO,CAAG,EACvCb,IAAWa,CAAG,CAChB,EACA,CAACT,EAAcJ,CAAQ,CAAA,EAGnBc,EAAY,CAAC,EAAwBC,IAAkB,CAC3D,MAAMC,EAAiBnB,EACpB,IAAI,CAACoB,EAAGC,IAAQD,EAAE,SAAe,KAAJC,CAAS,EACtC,OAAQ,GAAM,IAAM,IAAI,EAErBC,EAAeH,EAAe,QAAQD,CAAK,EACjD,GAAII,IAAiB,GAAI,OAEzB,IAAIC,EAAYD,EAEhB,OAAQ,EAAE,IAAA,CACR,IAAK,YACL,IAAK,aACHC,GAAaD,EAAe,GAAKH,EAAe,OAChD,MAEF,IAAK,UACL,IAAK,YACHI,GACGD,EAAe,EAAIH,EAAe,QAAUA,EAAe,OAC9D,MAEF,IAAK,OACHI,EAAY,EACZ,MAEF,IAAK,MACHA,EAAYJ,EAAe,OAAS,EACpC,MAEF,QACE,MAAA,CAGJ,EAAE,eAAA,EACF,MAAMK,EAAcL,EAAeI,CAAS,EAC7BX,EAAS,QAAQY,CAAW,GACnC,MAAA,EACRV,EAAOd,EAAQwB,CAAW,EAAE,KAAK,CACnC,EAEA,OACEC,EAAAA,IAAC,MAAA,CAAI,UAAW,kBAAkBnB,CAAS,GAAI,KAAK,aACjD,SAAAN,EAAQ,IAAI,CAAC0B,EAAKL,IAAM,CACvB,MAAMM,EAAYhB,IAAae,EAAI,MAEnC,OACEE,EAAAA,KAAC,QAAA,CAEC,UAAU,gBACV,gBAAevB,GAAYqB,EAAI,SAE/B,SAAA,CAAAD,EAAAA,IAAC,QAAA,CACC,IAAMI,GAAO,CACXjB,EAAS,QAAQS,CAAC,EAAIQ,CACxB,EACA,KAAK,QACL,UAAU,iBACV,KAAAzB,EACA,MAAOsB,EAAI,MACX,SAAUrB,GAAYqB,EAAI,SAC1B,QAASC,EACT,SAAU,IAAMb,EAAOY,EAAI,KAAK,EAChC,UAAYI,GAAMb,EAAUa,EAAGT,CAAC,EAChC,aAAYM,EAAY,UAAY,WAAA,CAAA,EAGtCF,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAkB,WAAI,KAAA,CAAM,CAAA,CAAA,EAnBvCC,EAAI,KAAA,CAsBf,CAAC,CAAA,CACH,CAEJ"}
1
+ {"version":3,"file":"RadioGroup.cjs","sources":["../../../src/components/radiogroup/RadioGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { createContext, useContext, forwardRef, useState, useCallback } from 'react';\nimport { cn } from '../../utils';\nimport './RadioGroup.css';\n\n/* ============================================================\n * Context\n * ============================================================ */\n\ninterface RadioGroupContextValue {\n value?: string;\n onChange: (value: string) => void;\n name: string;\n disabled: boolean;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nfunction useRadioGroup() {\n const ctx = useContext(RadioGroupContext);\n if (!ctx) throw new Error('RadioGroup.Item must be used within a <RadioGroup>');\n return ctx;\n}\n\n/* ============================================================\n * 1. RadioGroup Root\n * ============================================================ */\n\nexport interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'dir'> {\n /** Controlled state value */\n value?: string;\n /** Uncontrolled default value */\n defaultValue?: string;\n /** Callback fired when a new radio item is selected */\n onChange?: (value: string) => void;\n /** The name attribute applied to all children to group them natively for forms */\n name?: string;\n /** Disables the entire radio group */\n disabled?: boolean;\n /** Determines the flex layout direction of the group */\n orientation?: 'horizontal' | 'vertical';\n}\n\n/**\n * RadioGroup Component\n * * A WAI-ARIA compliant wrapper for a set of mutually exclusive radio buttons.\n * * Automatically manages the native `name` attribute to enable built-in browser keyboard navigation (arrow keys).\n */\nconst RadioGroupRoot = forwardRef<HTMLDivElement, RadioGroupProps>(({\n value,\n defaultValue,\n onChange,\n name,\n disabled = false,\n orientation = 'vertical',\n className,\n children,\n ...props\n}, ref) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = isControlled ? value : internalValue;\n\n // Auto-generate a stable name so native arrow-key navigation works flawlessly!\n const reactId = React.useId();\n const groupName = name || `nui-radiogroup-${reactId}`;\n\n const handleChange = useCallback((val: string) => {\n if (!isControlled) setInternalValue(val);\n onChange?.(val);\n }, [isControlled, onChange]);\n\n return (\n <RadioGroupContext.Provider value={{ value: currentValue, onChange: handleChange, name: groupName, disabled }}>\n <div\n ref={ref}\n role=\"radiogroup\"\n aria-orientation={orientation}\n className={cn(\n \"nui-radio-group\",\n orientation === 'horizontal' && \"nui-radio-group--horizontal\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n );\n});\nRadioGroupRoot.displayName = 'RadioGroup';\n\n/* ============================================================\n * 2. RadioGroup Item\n * ============================================================ */\n\nexport interface RadioItemProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'name' | 'onChange' | 'type'> {\n /** The unique value of this specific radio option */\n value: string;\n}\n\n/**\n * RadioGroup Item Component\n * * A styled native radio input. Must be rendered inside a `<RadioGroup>`.\n */\nconst RadioGroupItem = forwardRef<HTMLInputElement, RadioItemProps>(({\n value,\n disabled: itemDisabled,\n className,\n id,\n ...props\n}, ref) => {\n const context = useRadioGroup();\n const isDisabled = context.disabled || itemDisabled;\n const isChecked = context.value === value;\n\n // We generate a fallback ID so standard <label htmlFor=\"...\"> clicks always work\n const autoId = React.useId();\n const inputId = id || `nui-radio-${autoId}`;\n\n return (\n <input\n ref={ref}\n id={inputId}\n type=\"radio\"\n name={context.name}\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n aria-checked={isChecked}\n onChange={(e) => context.onChange(e.target.value)}\n className={cn(\"nui-radio-input\", className)}\n {...props}\n />\n );\n});\nRadioGroupItem.displayName = 'RadioGroup.Item';\n\n/* ============================================================\n * Export\n * ============================================================ */\n\nexport const RadioGroup = Object.assign(RadioGroupRoot, {\n Item: RadioGroupItem,\n});"],"names":["RadioGroupContext","createContext","useRadioGroup","ctx","useContext","RadioGroupRoot","forwardRef","value","defaultValue","onChange","name","disabled","orientation","className","children","props","ref","isControlled","internalValue","setInternalValue","useState","currentValue","reactId","React","groupName","handleChange","useCallback","val","jsx","cn","RadioGroupItem","itemDisabled","id","context","isDisabled","isChecked","autoId","inputId","e","RadioGroup"],"mappings":"iNAiBMA,EAAoBC,EAAAA,cAA6C,IAAI,EAE3E,SAASC,GAAgB,CACvB,MAAMC,EAAMC,EAAAA,WAAWJ,CAAiB,EACxC,GAAI,CAACG,EAAK,MAAM,IAAI,MAAM,oDAAoD,EAC9E,OAAOA,CACT,CA0BA,MAAME,EAAiBC,EAAAA,WAA4C,CAAC,CAClE,MAAAC,EACA,aAAAC,EACA,SAAAC,EACA,KAAAC,EACA,SAAAC,EAAW,GACX,YAAAC,EAAc,WACd,UAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAGC,IAAQ,CACT,MAAMC,EAAeV,IAAU,OACzB,CAACW,EAAeC,CAAgB,EAAIC,EAAAA,SAASZ,CAAY,EACzDa,EAAeJ,EAAeV,EAAQW,EAGtCI,EAAUC,EAAM,MAAA,EAChBC,EAAYd,GAAQ,kBAAkBY,CAAO,GAE7CG,EAAeC,cAAaC,GAAgB,CAC3CV,GAAcE,EAAiBQ,CAAG,EACvClB,IAAWkB,CAAG,CAChB,EAAG,CAACV,EAAcR,CAAQ,CAAC,EAE3B,OACEmB,EAAAA,IAAC5B,EAAkB,SAAlB,CAA2B,MAAO,CAAE,MAAOqB,EAAc,SAAUI,EAAc,KAAMD,EAAW,SAAAb,GACjG,SAAAiB,EAAAA,IAAC,MAAA,CACC,IAAAZ,EACA,KAAK,aACL,mBAAkBJ,EAClB,UAAWiB,EAAAA,GACT,kBACAjB,IAAgB,cAAgB,8BAChCC,CAAA,EAED,GAAGE,EAEH,SAAAD,CAAA,CAAA,EAEL,CAEJ,CAAC,EACDT,EAAe,YAAc,aAe7B,MAAMyB,EAAiBxB,EAAAA,WAA6C,CAAC,CACnE,MAAAC,EACA,SAAUwB,EACV,UAAAlB,EACA,GAAAmB,EACA,GAAGjB,CACL,EAAGC,IAAQ,CACT,MAAMiB,EAAU/B,EAAA,EACVgC,EAAaD,EAAQ,UAAYF,EACjCI,EAAYF,EAAQ,QAAU1B,EAG9B6B,EAASb,EAAM,MAAA,EACfc,EAAUL,GAAM,aAAaI,CAAM,GAEzC,OACER,EAAAA,IAAC,QAAA,CACC,IAAAZ,EACA,GAAIqB,EACJ,KAAK,QACL,KAAMJ,EAAQ,KACd,MAAA1B,EACA,QAAS4B,EACT,SAAUD,EACV,eAAcC,EACd,SAAWG,GAAML,EAAQ,SAASK,EAAE,OAAO,KAAK,EAChD,UAAWT,EAAAA,GAAG,kBAAmBhB,CAAS,EACzC,GAAGE,CAAA,CAAA,CAGV,CAAC,EACDe,EAAe,YAAc,kBAMtB,MAAMS,EAAa,OAAO,OAAOlC,EAAgB,CACtD,KAAMyB,CACR,CAAC"}
@@ -1,79 +1,74 @@
1
- import { jsx as i, jsxs as y } from "react/jsx-runtime";
2
- import { useState as A, useRef as D, useCallback as N } from "react";
1
+ import { jsx as p } from "react/jsx-runtime";
2
+ import h, { forwardRef as R, useState as k, useCallback as w, createContext as y, useContext as V } from "react";
3
3
  /* empty css */
4
- function V({
5
- options: l,
6
- value: d,
7
- defaultValue: h,
8
- onChange: o,
9
- name: g,
10
- disabled: u = !1,
11
- className: k = ""
12
- }) {
13
- const s = d !== void 0, [w, x] = A(h), p = s ? d : w, f = D([]), m = N(
14
- (e) => {
15
- s || x(e), o?.(e);
16
- },
17
- [s, o]
18
- ), v = (e, t) => {
19
- const a = l.map((c, I) => c.disabled ? null : I).filter((c) => c !== null), r = a.indexOf(t);
20
- if (r === -1) return;
21
- let n = r;
22
- switch (e.key) {
23
- case "ArrowDown":
24
- case "ArrowRight":
25
- n = (r + 1) % a.length;
26
- break;
27
- case "ArrowUp":
28
- case "ArrowLeft":
29
- n = (r - 1 + a.length) % a.length;
30
- break;
31
- case "Home":
32
- n = 0;
33
- break;
34
- case "End":
35
- n = a.length - 1;
36
- break;
37
- default:
38
- return;
39
- }
40
- e.preventDefault();
41
- const b = a[n];
42
- f.current[b]?.focus(), m(l[b].value);
43
- };
44
- return /* @__PURE__ */ i("div", { className: `ui-radio-group ${k}`, role: "radiogroup", children: l.map((e, t) => {
45
- const a = p === e.value;
46
- return /* @__PURE__ */ y(
47
- "label",
48
- {
49
- className: "ui-radio-item",
50
- "aria-disabled": u || e.disabled,
51
- children: [
52
- /* @__PURE__ */ i(
53
- "input",
54
- {
55
- ref: (r) => {
56
- f.current[t] = r;
57
- },
58
- type: "radio",
59
- className: "ui-radio-input",
60
- name: g,
61
- value: e.value,
62
- disabled: u || e.disabled,
63
- checked: a,
64
- onChange: () => m(e.value),
65
- onKeyDown: (r) => v(r, t),
66
- "data-state": a ? "checked" : "unchecked"
67
- }
68
- ),
69
- /* @__PURE__ */ i("span", { className: "ui-radio-label", children: e.label })
70
- ]
71
- },
72
- e.value
73
- );
74
- }) });
4
+ import { cn as g } from "../../utils/cn/cn.js";
5
+ const I = y(null);
6
+ function j() {
7
+ const o = V(I);
8
+ if (!o) throw new Error("RadioGroup.Item must be used within a <RadioGroup>");
9
+ return o;
75
10
  }
11
+ const f = R(({
12
+ value: o,
13
+ defaultValue: i,
14
+ onChange: a,
15
+ name: d,
16
+ disabled: s = !1,
17
+ orientation: r = "vertical",
18
+ className: e,
19
+ children: u,
20
+ ...n
21
+ }, c) => {
22
+ const t = o !== void 0, [l, G] = k(i), b = t ? o : l, x = h.useId(), v = d || `nui-radiogroup-${x}`, N = w((m) => {
23
+ t || G(m), a?.(m);
24
+ }, [t, a]);
25
+ return /* @__PURE__ */ p(I.Provider, { value: { value: b, onChange: N, name: v, disabled: s }, children: /* @__PURE__ */ p(
26
+ "div",
27
+ {
28
+ ref: c,
29
+ role: "radiogroup",
30
+ "aria-orientation": r,
31
+ className: g(
32
+ "nui-radio-group",
33
+ r === "horizontal" && "nui-radio-group--horizontal",
34
+ e
35
+ ),
36
+ ...n,
37
+ children: u
38
+ }
39
+ ) });
40
+ });
41
+ f.displayName = "RadioGroup";
42
+ const C = R(({
43
+ value: o,
44
+ disabled: i,
45
+ className: a,
46
+ id: d,
47
+ ...s
48
+ }, r) => {
49
+ const e = j(), u = e.disabled || i, n = e.value === o, c = h.useId(), t = d || `nui-radio-${c}`;
50
+ return /* @__PURE__ */ p(
51
+ "input",
52
+ {
53
+ ref: r,
54
+ id: t,
55
+ type: "radio",
56
+ name: e.name,
57
+ value: o,
58
+ checked: n,
59
+ disabled: u,
60
+ "aria-checked": n,
61
+ onChange: (l) => e.onChange(l.target.value),
62
+ className: g("nui-radio-input", a),
63
+ ...s
64
+ }
65
+ );
66
+ });
67
+ C.displayName = "RadioGroup.Item";
68
+ const O = Object.assign(f, {
69
+ Item: C
70
+ });
76
71
  export {
77
- V as RadioGroup
72
+ O as RadioGroup
78
73
  };
79
74
  //# sourceMappingURL=RadioGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup.js","sources":["../../../src/components/radiogroup/RadioGroup.tsx"],"sourcesContent":["/**\r\n * RadioGroup.tsx\r\n * ----------------\r\n * Fully accessible WAI-ARIA radio group.\r\n * - Arrow key navigation\r\n * - Home/End keys\r\n * - Controlled & uncontrolled\r\n * - Disabled support\r\n */\r\n\r\nimport React, { useState, useCallback, useRef } from 'react';\r\nimport './RadioGroup.css';\r\n\r\nexport interface RadioOption {\r\n label: React.ReactNode;\r\n value: string;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface RadioGroupProps {\r\n options: RadioOption[];\r\n value?: string; // controlled\r\n defaultValue?: string; // uncontrolled\r\n onChange?: (value: string) => void;\r\n name?: string; // form support\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function RadioGroup({\r\n options,\r\n value,\r\n defaultValue,\r\n onChange,\r\n name,\r\n disabled = false,\r\n className = '',\r\n}: RadioGroupProps) {\r\n const isControlled = value !== undefined;\r\n\r\n const [internalValue, setInternalValue] = useState(defaultValue);\r\n const selected = isControlled ? value : internalValue;\r\n\r\n const itemRefs = useRef<Array<HTMLInputElement | null>>([]);\r\n\r\n const select = useCallback(\r\n (val: string) => {\r\n if (!isControlled) setInternalValue(val);\r\n onChange?.(val);\r\n },\r\n [isControlled, onChange]\r\n );\r\n\r\n const onKeyDown = (e: React.KeyboardEvent, index: number) => {\r\n const enabledIndices = options\r\n .map((o, i) => (!o.disabled ? i : null))\r\n .filter((i) => i !== null) as number[];\r\n\r\n const currentIndex = enabledIndices.indexOf(index);\r\n if (currentIndex === -1) return;\r\n\r\n let nextIndex = currentIndex;\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n case 'ArrowRight':\r\n nextIndex = (currentIndex + 1) % enabledIndices.length;\r\n break;\r\n\r\n case 'ArrowUp':\r\n case 'ArrowLeft':\r\n nextIndex =\r\n (currentIndex - 1 + enabledIndices.length) % enabledIndices.length;\r\n break;\r\n\r\n case 'Home':\r\n nextIndex = 0;\r\n break;\r\n\r\n case 'End':\r\n nextIndex = enabledIndices.length - 1;\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n const targetIndex = enabledIndices[nextIndex];\r\n const target = itemRefs.current[targetIndex];\r\n target?.focus();\r\n select(options[targetIndex].value);\r\n };\r\n\r\n return (\r\n <div className={`ui-radio-group ${className}`} role=\"radiogroup\">\r\n {options.map((opt, i) => {\r\n const isChecked = selected === opt.value;\r\n\r\n return (\r\n <label\r\n key={opt.value}\r\n className=\"ui-radio-item\"\r\n aria-disabled={disabled || opt.disabled}\r\n >\r\n <input\r\n ref={(el) => {\r\n itemRefs.current[i] = el;\r\n }}\r\n type=\"radio\"\r\n className=\"ui-radio-input\"\r\n name={name}\r\n value={opt.value}\r\n disabled={disabled || opt.disabled}\r\n checked={isChecked}\r\n onChange={() => select(opt.value)}\r\n onKeyDown={(e) => onKeyDown(e, i)}\r\n data-state={isChecked ? 'checked' : 'unchecked'}\r\n />\r\n\r\n <span className=\"ui-radio-label\">{opt.label}</span>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n );\r\n}\r\n"],"names":["RadioGroup","options","value","defaultValue","onChange","name","disabled","className","isControlled","internalValue","setInternalValue","useState","selected","itemRefs","useRef","select","useCallback","val","onKeyDown","index","enabledIndices","o","i","currentIndex","nextIndex","targetIndex","jsx","opt","isChecked","jsxs","el","e"],"mappings":";;;AA6BO,SAASA,EAAW;AAAA,EACzB,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AACd,GAAoB;AAClB,QAAMC,IAAeN,MAAU,QAEzB,CAACO,GAAeC,CAAgB,IAAIC,EAASR,CAAY,GACzDS,IAAWJ,IAAeN,IAAQO,GAElCI,IAAWC,EAAuC,EAAE,GAEpDC,IAASC;AAAA,IACb,CAACC,MAAgB;AACf,MAAKT,KAAcE,EAAiBO,CAAG,GACvCb,IAAWa,CAAG;AAAA,IAChB;AAAA,IACA,CAACT,GAAcJ,CAAQ;AAAA,EAAA,GAGnBc,IAAY,CAAC,GAAwBC,MAAkB;AAC3D,UAAMC,IAAiBnB,EACpB,IAAI,CAACoB,GAAGC,MAAQD,EAAE,WAAe,OAAJC,CAAS,EACtC,OAAO,CAACA,MAAMA,MAAM,IAAI,GAErBC,IAAeH,EAAe,QAAQD,CAAK;AACjD,QAAII,MAAiB,GAAI;AAEzB,QAAIC,IAAYD;AAEhB,YAAQ,EAAE,KAAA;AAAA,MACR,KAAK;AAAA,MACL,KAAK;AACH,QAAAC,KAAaD,IAAe,KAAKH,EAAe;AAChD;AAAA,MAEF,KAAK;AAAA,MACL,KAAK;AACH,QAAAI,KACGD,IAAe,IAAIH,EAAe,UAAUA,EAAe;AAC9D;AAAA,MAEF,KAAK;AACH,QAAAI,IAAY;AACZ;AAAA,MAEF,KAAK;AACH,QAAAA,IAAYJ,EAAe,SAAS;AACpC;AAAA,MAEF;AACE;AAAA,IAAA;AAGJ,MAAE,eAAA;AACF,UAAMK,IAAcL,EAAeI,CAAS;AAE5C,IADeX,EAAS,QAAQY,CAAW,GACnC,MAAA,GACRV,EAAOd,EAAQwB,CAAW,EAAE,KAAK;AAAA,EACnC;AAEA,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAW,kBAAkBnB,CAAS,IAAI,MAAK,cACjD,UAAAN,EAAQ,IAAI,CAAC0B,GAAKL,MAAM;AACvB,UAAMM,IAAYhB,MAAae,EAAI;AAEnC,WACE,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QACV,iBAAevB,KAAYqB,EAAI;AAAA,QAE/B,UAAA;AAAA,UAAA,gBAAAD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK,CAACI,MAAO;AACX,gBAAAjB,EAAS,QAAQS,CAAC,IAAIQ;AAAA,cACxB;AAAA,cACA,MAAK;AAAA,cACL,WAAU;AAAA,cACV,MAAAzB;AAAA,cACA,OAAOsB,EAAI;AAAA,cACX,UAAUrB,KAAYqB,EAAI;AAAA,cAC1B,SAASC;AAAA,cACT,UAAU,MAAMb,EAAOY,EAAI,KAAK;AAAA,cAChC,WAAW,CAACI,MAAMb,EAAUa,GAAGT,CAAC;AAAA,cAChC,cAAYM,IAAY,YAAY;AAAA,YAAA;AAAA,UAAA;AAAA,UAGtC,gBAAAF,EAAC,QAAA,EAAK,WAAU,kBAAkB,YAAI,MAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,MAnBvCC,EAAI;AAAA,IAAA;AAAA,EAsBf,CAAC,EAAA,CACH;AAEJ;"}
1
+ {"version":3,"file":"RadioGroup.js","sources":["../../../src/components/radiogroup/RadioGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { createContext, useContext, forwardRef, useState, useCallback } from 'react';\nimport { cn } from '../../utils';\nimport './RadioGroup.css';\n\n/* ============================================================\n * Context\n * ============================================================ */\n\ninterface RadioGroupContextValue {\n value?: string;\n onChange: (value: string) => void;\n name: string;\n disabled: boolean;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nfunction useRadioGroup() {\n const ctx = useContext(RadioGroupContext);\n if (!ctx) throw new Error('RadioGroup.Item must be used within a <RadioGroup>');\n return ctx;\n}\n\n/* ============================================================\n * 1. RadioGroup Root\n * ============================================================ */\n\nexport interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'dir'> {\n /** Controlled state value */\n value?: string;\n /** Uncontrolled default value */\n defaultValue?: string;\n /** Callback fired when a new radio item is selected */\n onChange?: (value: string) => void;\n /** The name attribute applied to all children to group them natively for forms */\n name?: string;\n /** Disables the entire radio group */\n disabled?: boolean;\n /** Determines the flex layout direction of the group */\n orientation?: 'horizontal' | 'vertical';\n}\n\n/**\n * RadioGroup Component\n * * A WAI-ARIA compliant wrapper for a set of mutually exclusive radio buttons.\n * * Automatically manages the native `name` attribute to enable built-in browser keyboard navigation (arrow keys).\n */\nconst RadioGroupRoot = forwardRef<HTMLDivElement, RadioGroupProps>(({\n value,\n defaultValue,\n onChange,\n name,\n disabled = false,\n orientation = 'vertical',\n className,\n children,\n ...props\n}, ref) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = isControlled ? value : internalValue;\n\n // Auto-generate a stable name so native arrow-key navigation works flawlessly!\n const reactId = React.useId();\n const groupName = name || `nui-radiogroup-${reactId}`;\n\n const handleChange = useCallback((val: string) => {\n if (!isControlled) setInternalValue(val);\n onChange?.(val);\n }, [isControlled, onChange]);\n\n return (\n <RadioGroupContext.Provider value={{ value: currentValue, onChange: handleChange, name: groupName, disabled }}>\n <div\n ref={ref}\n role=\"radiogroup\"\n aria-orientation={orientation}\n className={cn(\n \"nui-radio-group\",\n orientation === 'horizontal' && \"nui-radio-group--horizontal\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n );\n});\nRadioGroupRoot.displayName = 'RadioGroup';\n\n/* ============================================================\n * 2. RadioGroup Item\n * ============================================================ */\n\nexport interface RadioItemProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'name' | 'onChange' | 'type'> {\n /** The unique value of this specific radio option */\n value: string;\n}\n\n/**\n * RadioGroup Item Component\n * * A styled native radio input. Must be rendered inside a `<RadioGroup>`.\n */\nconst RadioGroupItem = forwardRef<HTMLInputElement, RadioItemProps>(({\n value,\n disabled: itemDisabled,\n className,\n id,\n ...props\n}, ref) => {\n const context = useRadioGroup();\n const isDisabled = context.disabled || itemDisabled;\n const isChecked = context.value === value;\n\n // We generate a fallback ID so standard <label htmlFor=\"...\"> clicks always work\n const autoId = React.useId();\n const inputId = id || `nui-radio-${autoId}`;\n\n return (\n <input\n ref={ref}\n id={inputId}\n type=\"radio\"\n name={context.name}\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n aria-checked={isChecked}\n onChange={(e) => context.onChange(e.target.value)}\n className={cn(\"nui-radio-input\", className)}\n {...props}\n />\n );\n});\nRadioGroupItem.displayName = 'RadioGroup.Item';\n\n/* ============================================================\n * Export\n * ============================================================ */\n\nexport const RadioGroup = Object.assign(RadioGroupRoot, {\n Item: RadioGroupItem,\n});"],"names":["RadioGroupContext","createContext","useRadioGroup","ctx","useContext","RadioGroupRoot","forwardRef","value","defaultValue","onChange","name","disabled","orientation","className","children","props","ref","isControlled","internalValue","setInternalValue","useState","currentValue","reactId","React","groupName","handleChange","useCallback","val","jsx","cn","RadioGroupItem","itemDisabled","id","context","isDisabled","isChecked","autoId","inputId","e","RadioGroup"],"mappings":";;;;AAiBA,MAAMA,IAAoBC,EAA6C,IAAI;AAE3E,SAASC,IAAgB;AACvB,QAAMC,IAAMC,EAAWJ,CAAiB;AACxC,MAAI,CAACG,EAAK,OAAM,IAAI,MAAM,oDAAoD;AAC9E,SAAOA;AACT;AA0BA,MAAME,IAAiBC,EAA4C,CAAC;AAAA,EAClE,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,aAAAC,IAAc;AAAA,EACd,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GAAGC,MAAQ;AACT,QAAMC,IAAeV,MAAU,QACzB,CAACW,GAAeC,CAAgB,IAAIC,EAASZ,CAAY,GACzDa,IAAeJ,IAAeV,IAAQW,GAGtCI,IAAUC,EAAM,MAAA,GAChBC,IAAYd,KAAQ,kBAAkBY,CAAO,IAE7CG,IAAeC,EAAY,CAACC,MAAgB;AAChD,IAAKV,KAAcE,EAAiBQ,CAAG,GACvClB,IAAWkB,CAAG;AAAA,EAChB,GAAG,CAACV,GAAcR,CAAQ,CAAC;AAE3B,SACE,gBAAAmB,EAAC5B,EAAkB,UAAlB,EAA2B,OAAO,EAAE,OAAOqB,GAAc,UAAUI,GAAc,MAAMD,GAAW,UAAAb,KACjG,UAAA,gBAAAiB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAZ;AAAA,MACA,MAAK;AAAA,MACL,oBAAkBJ;AAAA,MAClB,WAAWiB;AAAA,QACT;AAAA,QACAjB,MAAgB,gBAAgB;AAAA,QAChCC;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MAEH,UAAAD;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ,CAAC;AACDT,EAAe,cAAc;AAe7B,MAAMyB,IAAiBxB,EAA6C,CAAC;AAAA,EACnE,OAAAC;AAAA,EACA,UAAUwB;AAAA,EACV,WAAAlB;AAAA,EACA,IAAAmB;AAAA,EACA,GAAGjB;AACL,GAAGC,MAAQ;AACT,QAAMiB,IAAU/B,EAAA,GACVgC,IAAaD,EAAQ,YAAYF,GACjCI,IAAYF,EAAQ,UAAU1B,GAG9B6B,IAASb,EAAM,MAAA,GACfc,IAAUL,KAAM,aAAaI,CAAM;AAEzC,SACE,gBAAAR;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAZ;AAAA,MACA,IAAIqB;AAAA,MACJ,MAAK;AAAA,MACL,MAAMJ,EAAQ;AAAA,MACd,OAAA1B;AAAA,MACA,SAAS4B;AAAA,MACT,UAAUD;AAAA,MACV,gBAAcC;AAAA,MACd,UAAU,CAACG,MAAML,EAAQ,SAASK,EAAE,OAAO,KAAK;AAAA,MAChD,WAAWT,EAAG,mBAAmBhB,CAAS;AAAA,MACzC,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AACDe,EAAe,cAAc;AAMtB,MAAMS,IAAa,OAAO,OAAOlC,GAAgB;AAAA,EACtD,MAAMyB;AACR,CAAC;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),c=require("react");;/* empty css */function S({value:i,max:a=5,onChange:u,icon:d="☆",iconFilled:g="★",size:f="md",className:h=""}){const[m,y]=c.useState(0),t=i??m,[x,o]=c.useState(null),R=x??t,r=e=>{i===void 0&&y(e),u?.(e)},b=e=>{e.key==="ArrowRight"&&r(Math.min((t??0)+1,a)),e.key==="ArrowLeft"&&r(Math.max((t??0)-1,1))};return s.jsx("div",{className:`ui-rating ui-rating--${f} ${h}`,role:"radiogroup",tabIndex:0,onKeyDown:b,"aria-label":"Rating",children:Array.from({length:a},(e,M)=>{const n=M+1,l=n<=R;return s.jsx("span",{role:"radio","aria-checked":t===n,tabIndex:-1,className:`ui-rating-item ${l?"filled":""}`,onMouseEnter:()=>o(n),onMouseLeave:()=>o(null),onClick:()=>r(n),children:l?g:d},n)})})}exports.Rating=S;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),g=require("react");;/* empty css */const A=require("../../utils/cn/cn.cjs"),M=o.jsx("svg",{width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:o.jsx("polygon",{points:"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"})}),q=o.jsx("svg",{width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"currentColor",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:o.jsx("polygon",{points:"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"})});function N({value:v,defaultValue:x=0,max:a=5,onChange:p,icon:j=M,iconFilled:w=q,size:y="md",readOnly:n=!1,disabled:r=!1,allowHalf:m=!1,className:D,...L}){const u=v!==void 0,[S,C]=g.useState(x),s=u?v:S,[c,f]=g.useState(null),h=c!==null?c:s,k=g.useCallback(e=>{n||r||(u||C(e),p?.(e))},[n,r,u,p]),P=(e,i)=>{if(!(n||r))if(m){const t=e.currentTarget.getBoundingClientRect(),d=e.clientX-t.left<t.width/2;f(d?i-.5:i)}else f(i)},R=()=>{n||r||f(null)},V=e=>{if(n||r)return;const i=m?.5:1;let t=s;e.key==="ArrowRight"||e.key==="ArrowUp"?(t=Math.min(s+i,a),e.preventDefault()):e.key==="ArrowLeft"||e.key==="ArrowDown"?(t=Math.max(s-i,0),e.preventDefault()):e.key==="Home"?(t=0,e.preventDefault()):e.key==="End"&&(t=a,e.preventDefault()),t!==s&&k(t)};return o.jsx("div",{className:A.cn("nui-rating",`nui-rating--${y}`,n&&"nui-rating--readonly",r&&"nui-rating--disabled",D),role:"slider","aria-valuemin":0,"aria-valuemax":a,"aria-valuenow":s,"aria-disabled":r||void 0,"aria-readonly":n||void 0,tabIndex:n||r?-1:0,onKeyDown:V,onPointerLeave:R,...L,children:Array.from({length:a},(e,i)=>{const t=i+1;let l=0;return h>=t?l=100:h>t-1&&(l=(h-(t-1))*100),o.jsxs("span",{"data-testid":"star-item",className:"nui-rating-item",onPointerMove:d=>P(d,t),onClick:()=>k(c??t),children:[o.jsx("span",{className:"nui-rating-icon-empty",children:j}),o.jsx("span",{className:"nui-rating-icon-filled",style:{width:`${l}%`},children:w})]},t)})})}exports.Rating=N;
2
2
  //# sourceMappingURL=Rating.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Rating.cjs","sources":["../../../src/components/rating/Rating.tsx"],"sourcesContent":["/**\r\n * Rating.tsx FINAL VERSION\r\n * ---------------------------\r\n * Features:\r\n * - Click to select\r\n * - Hover preview\r\n * - Keyboard navigation\r\n * - Theme-aware\r\n * - Accessible\r\n */\r\n\r\nimport React, { useState } from 'react';\r\nimport './Rating.css';\r\n\r\nexport interface RatingProps {\r\n /** Current value (1–max). If undefined uncontrolled mode */\r\n value?: number;\r\n\r\n /** Max number of stars */\r\n max?: number;\r\n\r\n /** Change handler */\r\n onChange?: (value: number) => void;\r\n\r\n /** Custom icon */\r\n icon?: React.ReactNode;\r\n\r\n /** Custom filled icon */\r\n iconFilled?: React.ReactNode;\r\n\r\n /** Size */\r\n size?: 'sm' | 'md' | 'lg';\r\n\r\n /** Optional class */\r\n className?: string;\r\n}\r\n\r\nexport function Rating({\r\n value,\r\n max = 5,\r\n onChange,\r\n icon = '☆',\r\n iconFilled = '★',\r\n size = 'md',\r\n className = '',\r\n}: RatingProps) {\r\n // uncontrolled internal value\r\n const [internal, setInternal] = useState(0);\r\n const current = value ?? internal;\r\n\r\n const [hover, setHover] = useState<number | null>(null);\r\n\r\n const finalValue = hover ?? current;\r\n\r\n const handleSelect = (v: number) => {\r\n if (value === undefined) setInternal(v);\r\n onChange?.(v);\r\n };\r\n\r\n const handleKey = (e: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key === 'ArrowRight') handleSelect(Math.min((current ?? 0) + 1, max));\r\n if (e.key === 'ArrowLeft') handleSelect(Math.max((current ?? 0) - 1, 1));\r\n };\r\n\r\n return (\r\n <div\r\n className={`ui-rating ui-rating--${size} ${className}`}\r\n role=\"radiogroup\"\r\n tabIndex={0}\r\n onKeyDown={handleKey}\r\n aria-label=\"Rating\"\r\n >\r\n {Array.from({ length: max }, (_, i) => {\r\n const index = i + 1;\r\n const filled = index <= finalValue;\r\n\r\n return (\r\n <span\r\n key={index}\r\n role=\"radio\"\r\n aria-checked={current === index}\r\n tabIndex={-1}\r\n className={`ui-rating-item ${filled ? 'filled' : ''}`}\r\n onMouseEnter={() => setHover(index)}\r\n onMouseLeave={() => setHover(null)}\r\n onClick={() => handleSelect(index)}\r\n >\r\n {filled ? iconFilled : icon}\r\n </span>\r\n );\r\n })}\r\n </div>\r\n );\r\n}\r\n"],"names":["Rating","value","max","onChange","icon","iconFilled","size","className","internal","setInternal","useState","current","hover","setHover","finalValue","handleSelect","v","handleKey","jsx","_","i","index","filled"],"mappings":"oKAqCO,SAASA,EAAO,CACrB,MAAAC,EACA,IAAAC,EAAM,EACN,SAAAC,EACA,KAAAC,EAAO,IACP,WAAAC,EAAa,IACb,KAAAC,EAAO,KACP,UAAAC,EAAY,EACd,EAAgB,CAEd,KAAM,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAAS,CAAC,EACpCC,EAAUV,GAASO,EAEnB,CAACI,EAAOC,CAAQ,EAAIH,EAAAA,SAAwB,IAAI,EAEhDI,EAAaF,GAASD,EAEtBI,EAAgBC,GAAc,CAC9Bf,IAAU,QAAWQ,EAAYO,CAAC,EACtCb,IAAWa,CAAC,CACd,EAEMC,EAAa,GAA2C,CACxD,EAAE,MAAQ,cAAcF,EAAa,KAAK,KAAKJ,GAAW,GAAK,EAAGT,CAAG,CAAC,EACtE,EAAE,MAAQ,aAAaa,EAAa,KAAK,KAAKJ,GAAW,GAAK,EAAG,CAAC,CAAC,CACzE,EAEA,OACEO,EAAAA,IAAC,MAAA,CACC,UAAW,wBAAwBZ,CAAI,IAAIC,CAAS,GACpD,KAAK,aACL,SAAU,EACV,UAAWU,EACX,aAAW,SAEV,SAAA,MAAM,KAAK,CAAE,OAAQf,GAAO,CAACiB,EAAGC,IAAM,CACrC,MAAMC,EAAQD,EAAI,EACZE,EAASD,GAASP,EAExB,OACEI,EAAAA,IAAC,OAAA,CAEC,KAAK,QACL,eAAcP,IAAYU,EAC1B,SAAU,GACV,UAAW,kBAAkBC,EAAS,SAAW,EAAE,GACnD,aAAc,IAAMT,EAASQ,CAAK,EAClC,aAAc,IAAMR,EAAS,IAAI,EACjC,QAAS,IAAME,EAAaM,CAAK,EAEhC,WAAShB,EAAaD,CAAA,EATlBiB,CAAA,CAYX,CAAC,CAAA,CAAA,CAGP"}
1
+ {"version":3,"file":"Rating.cjs","sources":["../../../src/components/rating/Rating.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState, useCallback } from 'react';\nimport { cn } from '../../utils';\nimport './Rating.css';\n\n/* ============================================================\n * Default Icons (Crisp, scalable SVGs)\n * ============================================================ */\nconst DefaultStarEmpty = (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"></polygon>\n </svg>\n);\n\nconst DefaultStarFilled = (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"currentColor\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"></polygon>\n </svg>\n);\n\n/* ============================================================\n * Types\n * ============================================================ */\nexport interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Controlled state value */\n value?: number;\n /** Uncontrolled initial value */\n defaultValue?: number;\n /** The maximum possible rating. Determines how many icons to render. Defaults to 5. */\n max?: number;\n /** Callback fired when a rating is selected */\n onChange?: (value: number) => void;\n /** Custom React node for the empty state */\n icon?: React.ReactNode;\n /** Custom React node for the filled state */\n iconFilled?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Makes the rating strictly decorative */\n readOnly?: boolean;\n /** Disables interactions and applies a muted style */\n disabled?: boolean;\n /** Enables fractional half-step selections (e.g., 3.5 stars) */\n allowHalf?: boolean; \n}\n\n/* ============================================================\n * Component\n * ============================================================ */\n\n/**\n * Rating Component\n * * A WAI-ARIA compliant slider that allows users to provide a numerical rating.\n * * Architecture Note (Fractional Display):\n * The component supports infinitely precise fractional rendering (e.g., 4.7 stars). \n * It achieves this by overlaying an `absolute` filled icon on top of the empty icon \n * and using CSS `overflow: hidden` combined with an inline `width: X%` style to \"clip\" the SVG.\n */\nexport function Rating({\n value,\n defaultValue = 0,\n max = 5,\n onChange,\n icon = DefaultStarEmpty,\n iconFilled = DefaultStarFilled,\n size = 'md',\n readOnly = false,\n disabled = false,\n allowHalf = false,\n className,\n ...props\n}: RatingProps) {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const current = isControlled ? value : internalValue;\n\n const [hoverValue, setHoverValue] = useState<number | null>(null);\n\n // If hovering, temporarily show the hover value for visual feedback\n const displayValue = hoverValue !== null ? hoverValue : current;\n\n /* ----------------------------------------------------\n Event Handlers\n ---------------------------------------------------- */\n const handleSelect = useCallback((v: number) => {\n if (readOnly || disabled) return;\n if (!isControlled) setInternalValue(v);\n onChange?.(v);\n }, [readOnly, disabled, isControlled, onChange]);\n\n const handlePointerMove = (e: React.PointerEvent<HTMLSpanElement>, index: number) => {\n if (readOnly || disabled) return;\n \n // Calculate if we are hovering over the left half or right half of the star\n if (allowHalf) {\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const isLeftHalf = x < rect.width / 2;\n setHoverValue(isLeftHalf ? index - 0.5 : index);\n } else {\n setHoverValue(index);\n }\n };\n\n const handlePointerLeave = () => {\n if (readOnly || disabled) return;\n setHoverValue(null);\n };\n\n const handleKey = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (readOnly || disabled) return;\n\n const step = allowHalf ? 0.5 : 1;\n let nextValue = current;\n\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n nextValue = Math.min(current + step, max);\n e.preventDefault();\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n nextValue = Math.max(current - step, 0);\n e.preventDefault();\n } else if (e.key === 'Home') {\n nextValue = 0;\n e.preventDefault();\n } else if (e.key === 'End') {\n nextValue = max;\n e.preventDefault();\n }\n\n if (nextValue !== current) {\n handleSelect(nextValue);\n }\n };\n\n /* ----------------------------------------------------\n Render Math\n ---------------------------------------------------- */\n return (\n <div\n className={cn(\n \"nui-rating\",\n `nui-rating--${size}`,\n readOnly && \"nui-rating--readonly\",\n disabled && \"nui-rating--disabled\",\n className\n )}\n role=\"slider\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={current}\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n tabIndex={readOnly || disabled ? -1 : 0}\n onKeyDown={handleKey}\n onPointerLeave={handlePointerLeave}\n {...props}\n >\n {Array.from({ length: max }, (_, i) => {\n const starIndex = i + 1;\n \n // Calculate exact fill percentage for fractional display (e.g., 4.7)\n let fillPercent = 0;\n if (displayValue >= starIndex) {\n fillPercent = 100;\n } else if (displayValue > starIndex - 1) {\n fillPercent = (displayValue - (starIndex - 1)) * 100;\n }\n\n return (\n <span\n key={starIndex}\n data-testid=\"star-item\"\n className=\"nui-rating-item\"\n onPointerMove={(e) => handlePointerMove(e, starIndex)}\n onClick={() => handleSelect(hoverValue ?? starIndex)}\n >\n {/* 1. Base Empty Icon */}\n <span className=\"nui-rating-icon-empty\">\n {icon}\n </span>\n \n {/* 2. Absolute Overlay Filled Icon (Clipped by width math) */}\n <span \n className=\"nui-rating-icon-filled\"\n style={{ width: `${fillPercent}%` }}\n >\n {iconFilled}\n </span>\n </span>\n );\n })}\n </div>\n );\n}"],"names":["DefaultStarEmpty","jsx","DefaultStarFilled","Rating","value","defaultValue","max","onChange","icon","iconFilled","size","readOnly","disabled","allowHalf","className","props","isControlled","internalValue","setInternalValue","useState","current","hoverValue","setHoverValue","displayValue","handleSelect","useCallback","v","handlePointerMove","index","rect","isLeftHalf","handlePointerLeave","handleKey","step","nextValue","cn","_","starIndex","fillPercent","jsxs","e"],"mappings":"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"}
@@ -1,49 +1,88 @@
1
- import { jsx as s } from "react/jsx-runtime";
2
- import { useState as c } from "react";
1
+ import { jsx as o, jsxs as N } from "react/jsx-runtime";
2
+ import { useState as k, useCallback as S } from "react";
3
3
  /* empty css */
4
- function A({
5
- value: o,
6
- max: i = 5,
7
- onChange: d,
8
- icon: u = "☆",
9
- iconFilled: f = "★",
10
- size: m = "md",
11
- className: h = ""
4
+ import { cn as B } from "../../utils/cn/cn.js";
5
+ const I = /* @__PURE__ */ o("svg", { width: "1em", height: "1em", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ o("polygon", { points: "12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" }) }), R = /* @__PURE__ */ o("svg", { width: "1em", height: "1em", viewBox: "0 0 24 24", fill: "currentColor", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ o("polygon", { points: "12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" }) });
6
+ function $({
7
+ value: m,
8
+ defaultValue: w = 0,
9
+ max: a = 5,
10
+ onChange: p,
11
+ icon: y = I,
12
+ iconFilled: D = R,
13
+ size: L = "md",
14
+ readOnly: n = !1,
15
+ disabled: r = !1,
16
+ allowHalf: v = !1,
17
+ className: x,
18
+ ...C
12
19
  }) {
13
- const [g, p] = c(0), t = o ?? g, [x, a] = c(null), y = x ?? t, r = (e) => {
14
- o === void 0 && p(e), d?.(e);
15
- }, k = (e) => {
16
- e.key === "ArrowRight" && r(Math.min((t ?? 0) + 1, i)), e.key === "ArrowLeft" && r(Math.max((t ?? 0) - 1, 1));
20
+ const u = m !== void 0, [V, A] = k(w), l = u ? m : V, [c, f] = k(null), h = c !== null ? c : l, g = S((e) => {
21
+ n || r || (u || A(e), p?.(e));
22
+ }, [n, r, u, p]), P = (e, i) => {
23
+ if (!(n || r))
24
+ if (v) {
25
+ const t = e.currentTarget.getBoundingClientRect(), d = e.clientX - t.left < t.width / 2;
26
+ f(d ? i - 0.5 : i);
27
+ } else
28
+ f(i);
29
+ }, j = () => {
30
+ n || r || f(null);
31
+ }, M = (e) => {
32
+ if (n || r) return;
33
+ const i = v ? 0.5 : 1;
34
+ let t = l;
35
+ e.key === "ArrowRight" || e.key === "ArrowUp" ? (t = Math.min(l + i, a), e.preventDefault()) : e.key === "ArrowLeft" || e.key === "ArrowDown" ? (t = Math.max(l - i, 0), e.preventDefault()) : e.key === "Home" ? (t = 0, e.preventDefault()) : e.key === "End" && (t = a, e.preventDefault()), t !== l && g(t);
17
36
  };
18
- return /* @__PURE__ */ s(
37
+ return /* @__PURE__ */ o(
19
38
  "div",
20
39
  {
21
- className: `ui-rating ui-rating--${m} ${h}`,
22
- role: "radiogroup",
23
- tabIndex: 0,
24
- onKeyDown: k,
25
- "aria-label": "Rating",
26
- children: Array.from({ length: i }, (e, M) => {
27
- const n = M + 1, l = n <= y;
28
- return /* @__PURE__ */ s(
40
+ className: B(
41
+ "nui-rating",
42
+ `nui-rating--${L}`,
43
+ n && "nui-rating--readonly",
44
+ r && "nui-rating--disabled",
45
+ x
46
+ ),
47
+ role: "slider",
48
+ "aria-valuemin": 0,
49
+ "aria-valuemax": a,
50
+ "aria-valuenow": l,
51
+ "aria-disabled": r || void 0,
52
+ "aria-readonly": n || void 0,
53
+ tabIndex: n || r ? -1 : 0,
54
+ onKeyDown: M,
55
+ onPointerLeave: j,
56
+ ...C,
57
+ children: Array.from({ length: a }, (e, i) => {
58
+ const t = i + 1;
59
+ let s = 0;
60
+ return h >= t ? s = 100 : h > t - 1 && (s = (h - (t - 1)) * 100), /* @__PURE__ */ N(
29
61
  "span",
30
62
  {
31
- role: "radio",
32
- "aria-checked": t === n,
33
- tabIndex: -1,
34
- className: `ui-rating-item ${l ? "filled" : ""}`,
35
- onMouseEnter: () => a(n),
36
- onMouseLeave: () => a(null),
37
- onClick: () => r(n),
38
- children: l ? f : u
63
+ "data-testid": "star-item",
64
+ className: "nui-rating-item",
65
+ onPointerMove: (d) => P(d, t),
66
+ onClick: () => g(c ?? t),
67
+ children: [
68
+ /* @__PURE__ */ o("span", { className: "nui-rating-icon-empty", children: y }),
69
+ /* @__PURE__ */ o(
70
+ "span",
71
+ {
72
+ className: "nui-rating-icon-filled",
73
+ style: { width: `${s}%` },
74
+ children: D
75
+ }
76
+ )
77
+ ]
39
78
  },
40
- n
79
+ t
41
80
  );
42
81
  })
43
82
  }
44
83
  );
45
84
  }
46
85
  export {
47
- A as Rating
86
+ $ as Rating
48
87
  };
49
88
  //# sourceMappingURL=Rating.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Rating.js","sources":["../../../src/components/rating/Rating.tsx"],"sourcesContent":["/**\r\n * Rating.tsx — FINAL VERSION\r\n * ---------------------------\r\n * Features:\r\n * - Click to select\r\n * - Hover preview\r\n * - Keyboard navigation\r\n * - Theme-aware\r\n * - Accessible\r\n */\r\n\r\nimport React, { useState } from 'react';\r\nimport './Rating.css';\r\n\r\nexport interface RatingProps {\r\n /** Current value (1–max). If undefined → uncontrolled mode */\r\n value?: number;\r\n\r\n /** Max number of stars */\r\n max?: number;\r\n\r\n /** Change handler */\r\n onChange?: (value: number) => void;\r\n\r\n /** Custom icon */\r\n icon?: React.ReactNode;\r\n\r\n /** Custom filled icon */\r\n iconFilled?: React.ReactNode;\r\n\r\n /** Size */\r\n size?: 'sm' | 'md' | 'lg';\r\n\r\n /** Optional class */\r\n className?: string;\r\n}\r\n\r\nexport function Rating({\r\n value,\r\n max = 5,\r\n onChange,\r\n icon = '☆',\r\n iconFilled = '★',\r\n size = 'md',\r\n className = '',\r\n}: RatingProps) {\r\n // uncontrolled internal value\r\n const [internal, setInternal] = useState(0);\r\n const current = value ?? internal;\r\n\r\n const [hover, setHover] = useState<number | null>(null);\r\n\r\n const finalValue = hover ?? current;\r\n\r\n const handleSelect = (v: number) => {\r\n if (value === undefined) setInternal(v);\r\n onChange?.(v);\r\n };\r\n\r\n const handleKey = (e: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key === 'ArrowRight') handleSelect(Math.min((current ?? 0) + 1, max));\r\n if (e.key === 'ArrowLeft') handleSelect(Math.max((current ?? 0) - 1, 1));\r\n };\r\n\r\n return (\r\n <div\r\n className={`ui-rating ui-rating--${size} ${className}`}\r\n role=\"radiogroup\"\r\n tabIndex={0}\r\n onKeyDown={handleKey}\r\n aria-label=\"Rating\"\r\n >\r\n {Array.from({ length: max }, (_, i) => {\r\n const index = i + 1;\r\n const filled = index <= finalValue;\r\n\r\n return (\r\n <span\r\n key={index}\r\n role=\"radio\"\r\n aria-checked={current === index}\r\n tabIndex={-1}\r\n className={`ui-rating-item ${filled ? 'filled' : ''}`}\r\n onMouseEnter={() => setHover(index)}\r\n onMouseLeave={() => setHover(null)}\r\n onClick={() => handleSelect(index)}\r\n >\r\n {filled ? iconFilled : icon}\r\n </span>\r\n );\r\n })}\r\n </div>\r\n );\r\n}\r\n"],"names":["Rating","value","max","onChange","icon","iconFilled","size","className","internal","setInternal","useState","current","hover","setHover","finalValue","handleSelect","v","handleKey","jsx","_","i","index","filled"],"mappings":";;;AAqCO,SAASA,EAAO;AAAA,EACrB,OAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,UAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,YAAAC,IAAa;AAAA,EACb,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AACd,GAAgB;AAEd,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,CAAC,GACpCC,IAAUV,KAASO,GAEnB,CAACI,GAAOC,CAAQ,IAAIH,EAAwB,IAAI,GAEhDI,IAAaF,KAASD,GAEtBI,IAAe,CAACC,MAAc;AAClC,IAAIf,MAAU,UAAWQ,EAAYO,CAAC,GACtCb,IAAWa,CAAC;AAAA,EACd,GAEMC,IAAY,CAAC,MAA2C;AAC5D,IAAI,EAAE,QAAQ,gBAAcF,EAAa,KAAK,KAAKJ,KAAW,KAAK,GAAGT,CAAG,CAAC,GACtE,EAAE,QAAQ,eAAaa,EAAa,KAAK,KAAKJ,KAAW,KAAK,GAAG,CAAC,CAAC;AAAA,EACzE;AAEA,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,wBAAwBZ,CAAI,IAAIC,CAAS;AAAA,MACpD,MAAK;AAAA,MACL,UAAU;AAAA,MACV,WAAWU;AAAA,MACX,cAAW;AAAA,MAEV,UAAA,MAAM,KAAK,EAAE,QAAQf,KAAO,CAACiB,GAAGC,MAAM;AACrC,cAAMC,IAAQD,IAAI,GACZE,IAASD,KAASP;AAExB,eACE,gBAAAI;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,MAAK;AAAA,YACL,gBAAcP,MAAYU;AAAA,YAC1B,UAAU;AAAA,YACV,WAAW,kBAAkBC,IAAS,WAAW,EAAE;AAAA,YACnD,cAAc,MAAMT,EAASQ,CAAK;AAAA,YAClC,cAAc,MAAMR,EAAS,IAAI;AAAA,YACjC,SAAS,MAAME,EAAaM,CAAK;AAAA,YAEhC,cAAShB,IAAaD;AAAA,UAAA;AAAA,UATlBiB;AAAA,QAAA;AAAA,MAYX,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"Rating.js","sources":["../../../src/components/rating/Rating.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState, useCallback } from 'react';\nimport { cn } from '../../utils';\nimport './Rating.css';\n\n/* ============================================================\n * Default Icons (Crisp, scalable SVGs)\n * ============================================================ */\nconst DefaultStarEmpty = (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"></polygon>\n </svg>\n);\n\nconst DefaultStarFilled = (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"currentColor\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"></polygon>\n </svg>\n);\n\n/* ============================================================\n * Types\n * ============================================================ */\nexport interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Controlled state value */\n value?: number;\n /** Uncontrolled initial value */\n defaultValue?: number;\n /** The maximum possible rating. Determines how many icons to render. Defaults to 5. */\n max?: number;\n /** Callback fired when a rating is selected */\n onChange?: (value: number) => void;\n /** Custom React node for the empty state */\n icon?: React.ReactNode;\n /** Custom React node for the filled state */\n iconFilled?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Makes the rating strictly decorative */\n readOnly?: boolean;\n /** Disables interactions and applies a muted style */\n disabled?: boolean;\n /** Enables fractional half-step selections (e.g., 3.5 stars) */\n allowHalf?: boolean; \n}\n\n/* ============================================================\n * Component\n * ============================================================ */\n\n/**\n * Rating Component\n * * A WAI-ARIA compliant slider that allows users to provide a numerical rating.\n * * Architecture Note (Fractional Display):\n * The component supports infinitely precise fractional rendering (e.g., 4.7 stars). \n * It achieves this by overlaying an `absolute` filled icon on top of the empty icon \n * and using CSS `overflow: hidden` combined with an inline `width: X%` style to \"clip\" the SVG.\n */\nexport function Rating({\n value,\n defaultValue = 0,\n max = 5,\n onChange,\n icon = DefaultStarEmpty,\n iconFilled = DefaultStarFilled,\n size = 'md',\n readOnly = false,\n disabled = false,\n allowHalf = false,\n className,\n ...props\n}: RatingProps) {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const current = isControlled ? value : internalValue;\n\n const [hoverValue, setHoverValue] = useState<number | null>(null);\n\n // If hovering, temporarily show the hover value for visual feedback\n const displayValue = hoverValue !== null ? hoverValue : current;\n\n /* ----------------------------------------------------\n Event Handlers\n ---------------------------------------------------- */\n const handleSelect = useCallback((v: number) => {\n if (readOnly || disabled) return;\n if (!isControlled) setInternalValue(v);\n onChange?.(v);\n }, [readOnly, disabled, isControlled, onChange]);\n\n const handlePointerMove = (e: React.PointerEvent<HTMLSpanElement>, index: number) => {\n if (readOnly || disabled) return;\n \n // Calculate if we are hovering over the left half or right half of the star\n if (allowHalf) {\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const isLeftHalf = x < rect.width / 2;\n setHoverValue(isLeftHalf ? index - 0.5 : index);\n } else {\n setHoverValue(index);\n }\n };\n\n const handlePointerLeave = () => {\n if (readOnly || disabled) return;\n setHoverValue(null);\n };\n\n const handleKey = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (readOnly || disabled) return;\n\n const step = allowHalf ? 0.5 : 1;\n let nextValue = current;\n\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n nextValue = Math.min(current + step, max);\n e.preventDefault();\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n nextValue = Math.max(current - step, 0);\n e.preventDefault();\n } else if (e.key === 'Home') {\n nextValue = 0;\n e.preventDefault();\n } else if (e.key === 'End') {\n nextValue = max;\n e.preventDefault();\n }\n\n if (nextValue !== current) {\n handleSelect(nextValue);\n }\n };\n\n /* ----------------------------------------------------\n Render Math\n ---------------------------------------------------- */\n return (\n <div\n className={cn(\n \"nui-rating\",\n `nui-rating--${size}`,\n readOnly && \"nui-rating--readonly\",\n disabled && \"nui-rating--disabled\",\n className\n )}\n role=\"slider\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={current}\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n tabIndex={readOnly || disabled ? -1 : 0}\n onKeyDown={handleKey}\n onPointerLeave={handlePointerLeave}\n {...props}\n >\n {Array.from({ length: max }, (_, i) => {\n const starIndex = i + 1;\n \n // Calculate exact fill percentage for fractional display (e.g., 4.7)\n let fillPercent = 0;\n if (displayValue >= starIndex) {\n fillPercent = 100;\n } else if (displayValue > starIndex - 1) {\n fillPercent = (displayValue - (starIndex - 1)) * 100;\n }\n\n return (\n <span\n key={starIndex}\n data-testid=\"star-item\"\n className=\"nui-rating-item\"\n onPointerMove={(e) => handlePointerMove(e, starIndex)}\n onClick={() => handleSelect(hoverValue ?? starIndex)}\n >\n {/* 1. Base Empty Icon */}\n <span className=\"nui-rating-icon-empty\">\n {icon}\n </span>\n \n {/* 2. Absolute Overlay Filled Icon (Clipped by width math) */}\n <span \n className=\"nui-rating-icon-filled\"\n style={{ width: `${fillPercent}%` }}\n >\n {iconFilled}\n </span>\n </span>\n );\n })}\n </div>\n );\n}"],"names":["DefaultStarEmpty","jsx","DefaultStarFilled","Rating","value","defaultValue","max","onChange","icon","iconFilled","size","readOnly","disabled","allowHalf","className","props","isControlled","internalValue","setInternalValue","useState","current","hoverValue","setHoverValue","displayValue","handleSelect","useCallback","v","handlePointerMove","index","rect","isLeftHalf","handlePointerLeave","handleKey","step","nextValue","cn","_","starIndex","fillPercent","jsxs","e"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("react/jsx-runtime"),u=require("react");;/* empty css */const P=require("../../utils/cn/cn.cjs"),k=u.createContext(null);function F(){const i=u.useContext(k);if(!i)throw new Error("Resizable components must be used within <Resizable>");return i}const D=u.forwardRef(({direction:i="horizontal",onLayout:d,className:x,children:y,...f},m)=>{const o=u.useRef(null),z=u.useRef([]),g=u.useCallback((e,s)=>{const l=o.current;if(!l)return!1;const a=Array.from(l.querySelectorAll("[data-resizable-panel]")),c=Array.from(l.querySelectorAll("[data-resizable-handle]")),t=a[e],r=a[e+1];if(!t||!r)return!1;const n=z.current,S=parseFloat(t.dataset.minSize||"0"),w=parseFloat(t.dataset.maxSize||"100"),A=parseFloat(r.dataset.minSize||"0"),R=parseFloat(r.dataset.maxSize||"100"),h=Math.min(w-n[e],n[e+1]-A),p=Math.max(S-n[e],n[e+1]-R),v=Math.max(p,Math.min(h,s));return v!==0?(n[e]+=v,n[e+1]-=v,t.style.flexGrow=n[e].toString(),r.style.flexGrow=n[e+1].toString(),c[e]?.setAttribute("aria-valuenow",n[e].toFixed(0)),!0):!1},[]),M=u.useCallback((e,s)=>{s.preventDefault(),e.focus();const l=o.current;if(!l)return;const a=Array.from(l.querySelectorAll("[data-resizable-handle]")),c=a.indexOf(e);if(c===-1)return;const t=i==="horizontal",r=t?l.clientWidth:l.clientHeight,n=a.reduce((h,p)=>h+(t?p.offsetWidth:p.offsetHeight),0),S=r-n;let w=t?s.clientX:s.clientY;const A=h=>{const p=t?h.clientX:h.clientY,C=(p-w)/S*100;g(c,C),w=p},R=()=>{document.removeEventListener("pointermove",A),document.removeEventListener("pointerup",R),document.body.style.cursor="",document.body.style.userSelect="",e.removeAttribute("data-dragging"),d&&d([...z.current])};document.addEventListener("pointermove",A),document.addEventListener("pointerup",R),document.body.style.cursor=t?"col-resize":"row-resize",document.body.style.userSelect="none",e.setAttribute("data-dragging","true")},[i,d,g]),q=u.useCallback((e,s)=>{const l=o.current;if(!l)return;const c=Array.from(l.querySelectorAll("[data-resizable-handle]")).indexOf(e);if(c===-1)return;let t=0;const r=s.shiftKey?10:2;i==="horizontal"?(s.key==="ArrowRight"&&(t=r),s.key==="ArrowLeft"&&(t=-r)):(s.key==="ArrowDown"&&(t=r),s.key==="ArrowUp"&&(t=-r)),s.key==="Home"&&(t=-100),s.key==="End"&&(t=100),t!==0&&(g(c,t),d&&d([...z.current]))},[i,d,g]);return u.useLayoutEffect(()=>{const e=o.current;if(!e)return;const s=Array.from(e.querySelectorAll("[data-resizable-panel]")),l=Array.from(e.querySelectorAll("[data-resizable-handle]"));if(z.current.length!==s.length){const a=s.map(r=>parseFloat(r.dataset.defaultSize||"0")),c=a.reduce((r,n)=>r+n,0),t=a.filter(r=>r===0).length;if(t>0){const r=Math.max(0,100-c)/t;for(let n=0;n<a.length;n++)a[n]===0&&(a[n]=r)}z.current=a}s.forEach((a,c)=>{a.style.flexGrow=z.current[c].toString(),a.style.flexBasis="0px"}),l.forEach((a,c)=>{a.setAttribute("aria-valuenow",z.current[c].toFixed(0))})},[y]),b.jsx(k.Provider,{value:{direction:i,startDrag:M,keyboardResize:q},children:b.jsx("div",{ref:e=>{o.current=e,typeof m=="function"?m(e):m&&(m.current=e)},"data-direction":i,className:P.cn("nui-resizable-group",x),...f,children:y})})});D.displayName="Resizable";const j=u.forwardRef(({defaultSize:i,minSize:d=0,maxSize:x=100,className:y,children:f,...m},o)=>b.jsx("div",{ref:o,"data-resizable-panel":!0,"data-default-size":i,"data-min-size":d,"data-max-size":x,className:P.cn("nui-resizable-panel",y),...m,children:f}));j.displayName="Resizable.Panel";const H=u.forwardRef(({withIcon:i=!1,className:d,...x},y)=>{const f=F(),m=o=>{["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(o.key)&&(o.preventDefault(),f.keyboardResize(o.currentTarget,o))};return b.jsx("div",{ref:y,"data-resizable-handle":!0,role:"separator","aria-orientation":f.direction,tabIndex:0,onPointerDown:o=>f.startDrag(o.currentTarget,o),onKeyDown:m,className:P.cn("nui-resizable-handle",d),...x,children:i&&b.jsx("div",{className:"nui-resizable-handle-icon","aria-hidden":"true",children:b.jsx("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",stroke:"currentColor",children:f.direction==="horizontal"?b.jsx("path",{d:"M5.5 4.5V10.5M9.5 4.5V10.5",strokeLinecap:"round"}):b.jsx("path",{d:"M4.5 5.5H10.5M4.5 9.5H10.5",strokeLinecap:"round"})})})})});H.displayName="Resizable.Handle";const N=Object.assign(D,{Panel:j,Handle:H});exports.Resizable=N;
2
+ //# sourceMappingURL=Resizable.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Resizable.cjs","sources":["../../../src/components/resizable/Resizable.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { createContext, useContext, useRef, useCallback, useLayoutEffect, forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport './Resizable.css';\n\n/* ============================================================\n * Context\n * ============================================================ */\n\ninterface ResizableContextValue {\n direction: 'horizontal' | 'vertical';\n startDrag: (handleElement: HTMLElement, e: React.PointerEvent) => void;\n keyboardResize: (handleElement: HTMLElement, e: React.KeyboardEvent) => void;\n}\n\nconst ResizableContext = createContext<ResizableContextValue | null>(null);\n\nfunction useResizable() {\n const ctx = useContext(ResizableContext);\n if (!ctx) throw new Error('Resizable components must be used within <Resizable>');\n return ctx;\n}\n\n/* ============================================================\n * 1. Resizable Group (Root)\n * ============================================================ */\n\nexport interface ResizableProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The flex layout direction. Defaults to 'horizontal'. */\n direction?: 'horizontal' | 'vertical';\n /** Callback fired when the user completes a resize action, providing an array of panel sizes (percentages) */\n onLayout?: (sizes: number[]) => void;\n}\n\n/**\n * Resizable Component (Root)\n * * A Compound Component wrapper that manages the complex math and event delegation \n * required to dynamically resize panels via pointer or keyboard.\n */\nconst ResizableRoot = forwardRef<HTMLDivElement, ResizableProps>(({\n direction = 'horizontal',\n onLayout,\n className,\n children,\n ...props\n}, ref) => {\n const containerRef = useRef<HTMLDivElement>(null);\n \n // We store current sizes in a ref rather than state to avoid constant React re-renders during dragging (60fps performance!)\n const currentSizes = useRef<number[]>([]);\n\n /* ----------------------------------------------------\n Core Math Engine\n ---------------------------------------------------- */\n const resizePanels = useCallback((handleIndex: number, deltaPct: number) => {\n const container = containerRef.current;\n if (!container) return false;\n\n const panels = Array.from(container.querySelectorAll('[data-resizable-panel]')) as HTMLElement[];\n const handles = Array.from(container.querySelectorAll('[data-resizable-handle]')) as HTMLElement[];\n\n const panelA = panels[handleIndex];\n const panelB = panels[handleIndex + 1];\n if (!panelA || !panelB) return false;\n\n const startSizes = currentSizes.current;\n \n // Read constraints from DOM attributes\n const minA = parseFloat(panelA.dataset.minSize || '0');\n const maxA = parseFloat(panelA.dataset.maxSize || '100');\n const minB = parseFloat(panelB.dataset.minSize || '0');\n const maxB = parseFloat(panelB.dataset.maxSize || '100');\n\n // Calculate maximum allowable movement based on panel constraints\n const maxDeltaRight = Math.min(maxA - startSizes[handleIndex], startSizes[handleIndex + 1] - minB);\n const maxDeltaLeft = Math.max(minA - startSizes[handleIndex], startSizes[handleIndex + 1] - maxB);\n\n // Clamp the requested delta to the allowed range\n const allowedDelta = Math.max(maxDeltaLeft, Math.min(maxDeltaRight, deltaPct));\n\n if (allowedDelta !== 0) {\n startSizes[handleIndex] += allowedDelta;\n startSizes[handleIndex + 1] -= allowedDelta;\n\n // Apply sizes directly to DOM for performance\n panelA.style.flexGrow = startSizes[handleIndex].toString();\n panelB.style.flexGrow = startSizes[handleIndex + 1].toString();\n \n // Update WAI-ARIA states\n handles[handleIndex]?.setAttribute('aria-valuenow', startSizes[handleIndex].toFixed(0));\n return true;\n }\n return false;\n }, []);\n\n /* ----------------------------------------------------\n Pointer Event Listeners\n ---------------------------------------------------- */\n const startDrag = useCallback((handleElement: HTMLElement, e: React.PointerEvent) => {\n e.preventDefault();\n \n // Because preventDefault() stops the browser from naturally focusing the element,\n // we MUST manually force focus so the user's arrow keys start working immediately!\n handleElement.focus(); \n \n const container = containerRef.current;\n if (!container) return;\n\n const handles = Array.from(container.querySelectorAll('[data-resizable-handle]')) as HTMLElement[];\n const handleIndex = handles.indexOf(handleElement);\n if (handleIndex === -1) return;\n\n const isHorizontal = direction === 'horizontal';\n const availablePx = isHorizontal ? container.clientWidth : container.clientHeight;\n \n // We must subtract the size of the handles themselves so the math calculates percentage of *free* space\n const totalHandlePx = handles.reduce((acc, h) => acc + (isHorizontal ? h.offsetWidth : h.offsetHeight), 0);\n const flexAvailable = availablePx - totalHandlePx;\n\n let lastPos = isHorizontal ? e.clientX : e.clientY;\n\n const handlePointerMove = (moveEvent: PointerEvent) => {\n const currentPos = isHorizontal ? moveEvent.clientX : moveEvent.clientY;\n const deltaPx = currentPos - lastPos;\n \n // Convert physical pixel delta to a percentage of the flex container\n const deltaPct = (deltaPx / flexAvailable) * 100;\n\n resizePanels(handleIndex, deltaPct);\n lastPos = currentPos;\n };\n\n const handlePointerUp = () => {\n document.removeEventListener('pointermove', handlePointerMove);\n document.removeEventListener('pointerup', handlePointerUp);\n \n // Restore default cursor interactions\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n handleElement.removeAttribute('data-dragging');\n \n if (onLayout) onLayout([...currentSizes.current]);\n };\n\n // Attach listeners to document so drag continues even if mouse leaves the handle hitbox\n document.addEventListener('pointermove', handlePointerMove);\n document.addEventListener('pointerup', handlePointerUp);\n \n document.body.style.cursor = isHorizontal ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n handleElement.setAttribute('data-dragging', 'true');\n }, [direction, onLayout, resizePanels]);\n\n /* ----------------------------------------------------\n Keyboard Navigation Engine (WAI-ARIA)\n ---------------------------------------------------- */\n const keyboardResize = useCallback((handleElement: HTMLElement, e: React.KeyboardEvent) => {\n const container = containerRef.current;\n if (!container) return;\n \n const handles = Array.from(container.querySelectorAll('[data-resizable-handle]')) as HTMLElement[];\n const handleIndex = handles.indexOf(handleElement);\n if (handleIndex === -1) return;\n\n let deltaPct = 0;\n const step = e.shiftKey ? 10 : 2; // Modern UX: Shift + Arrow jumps by 10%\n\n // 1. Directional locking\n if (direction === 'horizontal') {\n if (e.key === 'ArrowRight') deltaPct = step;\n if (e.key === 'ArrowLeft') deltaPct = -step;\n } else {\n if (e.key === 'ArrowDown') deltaPct = step;\n if (e.key === 'ArrowUp') deltaPct = -step;\n }\n\n // 2. Absolute limits (Home/End)\n if (e.key === 'Home') deltaPct = -100; // Will be mathematically clamped by resizePanels\n if (e.key === 'End') deltaPct = 100;\n\n if (deltaPct !== 0) {\n resizePanels(handleIndex, deltaPct);\n if (onLayout) onLayout([...currentSizes.current]);\n }\n }, [direction, onLayout, resizePanels]);\n\n /* ----------------------------------------------------\n Initialization\n ---------------------------------------------------- */\n useLayoutEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const panels = Array.from(container.querySelectorAll('[data-resizable-panel]')) as HTMLElement[];\n const handles = Array.from(container.querySelectorAll('[data-resizable-handle]')) as HTMLElement[];\n\n // Only initialize if we haven't already (or if the number of panels changes)\n if (currentSizes.current.length !== panels.length) {\n const initial = panels.map(p => parseFloat(p.dataset.defaultSize || '0'));\n const total = initial.reduce((a, b) => a + b, 0);\n const unassignedCount = initial.filter(s => s === 0).length;\n\n // Distribute remaining space evenly among panels without a defaultSize\n if (unassignedCount > 0) {\n const share = Math.max(0, 100 - total) / unassignedCount;\n for (let i = 0; i < initial.length; i++) {\n if (initial[i] === 0) initial[i] = share;\n }\n }\n currentSizes.current = initial;\n }\n\n // Apply initialized sizes\n panels.forEach((p, i) => {\n p.style.flexGrow = currentSizes.current[i].toString();\n p.style.flexBasis = '0px'; \n });\n\n handles.forEach((h, i) => {\n h.setAttribute('aria-valuenow', currentSizes.current[i].toFixed(0));\n });\n }, [children]);\n\n return (\n <ResizableContext.Provider value={{ direction, startDrag, keyboardResize }}>\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) ref.current = el;\n }}\n data-direction={direction}\n className={cn(\"nui-resizable-group\", className)}\n {...props}\n >\n {children}\n </div>\n </ResizableContext.Provider>\n );\n});\nResizableRoot.displayName = 'Resizable';\n\n/* ============================================================\n * 2. Resizable Panel\n * ============================================================ */\n\nexport interface ResizablePanelProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The initial size of the panel as a percentage of the available space (0-100) */\n defaultSize?: number; \n /** The absolute minimum size the panel can shrink to */\n minSize?: number; \n /** The absolute maximum size the panel can grow to */\n maxSize?: number; \n}\n\nconst ResizablePanel = forwardRef<HTMLDivElement, ResizablePanelProps>(({\n defaultSize,\n minSize = 0,\n maxSize = 100,\n className,\n children,\n ...props\n}, ref) => {\n return (\n <div\n ref={ref}\n data-resizable-panel\n data-default-size={defaultSize}\n data-min-size={minSize}\n data-max-size={maxSize}\n className={cn(\"nui-resizable-panel\", className)}\n {...props}\n >\n {children}\n </div>\n );\n});\nResizablePanel.displayName = 'Resizable.Panel';\n\n/* ============================================================\n * 3. Resizable Handle\n * ============================================================ */\n\nexport interface ResizableHandleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Renders a visual grip icon in the center of the handle */\n withIcon?: boolean; \n}\n\nconst ResizableHandle = forwardRef<HTMLDivElement, ResizableHandleProps>(({\n withIcon = false,\n className,\n ...props\n}, ref) => {\n const ctx = useResizable();\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n // Intercept standard split-view control keys\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'].includes(e.key)) {\n e.preventDefault();\n ctx.keyboardResize(e.currentTarget, e); // Pass the full event for e.shiftKey\n }\n };\n\n return (\n <div\n ref={ref}\n data-resizable-handle\n role=\"separator\"\n aria-orientation={ctx.direction}\n tabIndex={0}\n onPointerDown={(e) => ctx.startDrag(e.currentTarget, e)}\n onKeyDown={handleKeyDown}\n className={cn(\"nui-resizable-handle\", className)}\n {...props}\n >\n {withIcon && (\n <div className=\"nui-resizable-handle-icon\" aria-hidden=\"true\">\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" stroke=\"currentColor\">\n {ctx.direction === 'horizontal' ? (\n <path d=\"M5.5 4.5V10.5M9.5 4.5V10.5\" strokeLinecap=\"round\" />\n ) : (\n <path d=\"M4.5 5.5H10.5M4.5 9.5H10.5\" strokeLinecap=\"round\" />\n )}\n </svg>\n </div>\n )}\n </div>\n );\n});\nResizableHandle.displayName = 'Resizable.Handle';\n\n/* ============================================================\n * Export\n * ============================================================ */\n\nexport const Resizable = Object.assign(ResizableRoot, {\n Panel: ResizablePanel,\n Handle: ResizableHandle,\n});"],"names":["ResizableContext","createContext","useResizable","ctx","useContext","ResizableRoot","forwardRef","direction","onLayout","className","children","props","ref","containerRef","useRef","currentSizes","resizePanels","useCallback","handleIndex","deltaPct","container","panels","handles","panelA","panelB","startSizes","minA","maxA","minB","maxB","maxDeltaRight","maxDeltaLeft","allowedDelta","startDrag","handleElement","e","isHorizontal","availablePx","totalHandlePx","acc","h","flexAvailable","lastPos","handlePointerMove","moveEvent","currentPos","handlePointerUp","keyboardResize","step","useLayoutEffect","initial","p","total","a","b","unassignedCount","s","share","i","jsx","el","cn","ResizablePanel","defaultSize","minSize","maxSize","ResizableHandle","withIcon","handleKeyDown","Resizable"],"mappings":"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"}