@nofinite/nui 1.1.2 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/README.md +61 -48
  2. package/dist/components/accordion/Accordion.cjs +1 -1
  3. package/dist/components/accordion/Accordion.cjs.map +1 -1
  4. package/dist/components/accordion/Accordion.js +64 -43
  5. package/dist/components/accordion/Accordion.js.map +1 -1
  6. package/dist/components/alert/Alert.cjs +1 -1
  7. package/dist/components/alert/Alert.cjs.map +1 -1
  8. package/dist/components/alert/Alert.js +39 -25
  9. package/dist/components/alert/Alert.js.map +1 -1
  10. package/dist/components/avatar/Avatar.cjs +1 -1
  11. package/dist/components/avatar/Avatar.cjs.map +1 -1
  12. package/dist/components/avatar/Avatar.js +58 -44
  13. package/dist/components/avatar/Avatar.js.map +1 -1
  14. package/dist/components/avatar/AvatarGroup.cjs +1 -1
  15. package/dist/components/avatar/AvatarGroup.cjs.map +1 -1
  16. package/dist/components/avatar/AvatarGroup.js +34 -25
  17. package/dist/components/avatar/AvatarGroup.js.map +1 -1
  18. package/dist/components/badge/Badge.cjs +1 -1
  19. package/dist/components/badge/Badge.cjs.map +1 -1
  20. package/dist/components/badge/Badge.js +43 -68
  21. package/dist/components/badge/Badge.js.map +1 -1
  22. package/dist/components/badge/BadgeGroup.cjs +1 -1
  23. package/dist/components/badge/BadgeGroup.cjs.map +1 -1
  24. package/dist/components/badge/BadgeGroup.js +20 -10
  25. package/dist/components/badge/BadgeGroup.js.map +1 -1
  26. package/dist/components/breadcrumbs/Breadcrumbs.cjs +1 -1
  27. package/dist/components/breadcrumbs/Breadcrumbs.cjs.map +1 -1
  28. package/dist/components/breadcrumbs/Breadcrumbs.js +59 -39
  29. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -1
  30. package/dist/components/button/Button.cjs +1 -1
  31. package/dist/components/button/Button.cjs.map +1 -1
  32. package/dist/components/button/Button.js +52 -17
  33. package/dist/components/button/Button.js.map +1 -1
  34. package/dist/components/card/Card.cjs +1 -1
  35. package/dist/components/card/Card.cjs.map +1 -1
  36. package/dist/components/card/Card.js +44 -41
  37. package/dist/components/card/Card.js.map +1 -1
  38. package/dist/components/checkbox/Checkbox.cjs +1 -1
  39. package/dist/components/checkbox/Checkbox.cjs.map +1 -1
  40. package/dist/components/checkbox/Checkbox.js +59 -40
  41. package/dist/components/checkbox/Checkbox.js.map +1 -1
  42. package/dist/components/chip/Chip.cjs +1 -1
  43. package/dist/components/chip/Chip.cjs.map +1 -1
  44. package/dist/components/chip/Chip.js +67 -47
  45. package/dist/components/chip/Chip.js.map +1 -1
  46. package/dist/components/combobox/Combobox.cjs +1 -1
  47. package/dist/components/combobox/Combobox.cjs.map +1 -1
  48. package/dist/components/combobox/Combobox.js +123 -108
  49. package/dist/components/combobox/Combobox.js.map +1 -1
  50. package/dist/components/commandpalette/CommandPalette.cjs +1 -1
  51. package/dist/components/commandpalette/CommandPalette.cjs.map +1 -1
  52. package/dist/components/commandpalette/CommandPalette.js +96 -73
  53. package/dist/components/commandpalette/CommandPalette.js.map +1 -1
  54. package/dist/components/contextmenu/ContextMenu.cjs +1 -1
  55. package/dist/components/contextmenu/ContextMenu.cjs.map +1 -1
  56. package/dist/components/contextmenu/ContextMenu.js +79 -58
  57. package/dist/components/contextmenu/ContextMenu.js.map +1 -1
  58. package/dist/components/datagrid/DataGrid.cjs +1 -1
  59. package/dist/components/datagrid/DataGrid.cjs.map +1 -1
  60. package/dist/components/datagrid/DataGrid.js +184 -202
  61. package/dist/components/datagrid/DataGrid.js.map +1 -1
  62. package/dist/components/datepicker/DatePicker.cjs +1 -1
  63. package/dist/components/datepicker/DatePicker.cjs.map +1 -1
  64. package/dist/components/datepicker/DatePicker.js +197 -164
  65. package/dist/components/datepicker/DatePicker.js.map +1 -1
  66. package/dist/components/daterangepicker/DateRangePicker.cjs +1 -1
  67. package/dist/components/daterangepicker/DateRangePicker.cjs.map +1 -1
  68. package/dist/components/daterangepicker/DateRangePicker.js +254 -213
  69. package/dist/components/daterangepicker/DateRangePicker.js.map +1 -1
  70. package/dist/components/dialog/DialogProvider.cjs +2 -0
  71. package/dist/components/dialog/DialogProvider.cjs.map +1 -0
  72. package/dist/components/dialog/DialogProvider.js +71 -0
  73. package/dist/components/dialog/DialogProvider.js.map +1 -0
  74. package/dist/components/dialog/dialogStore.cjs +2 -0
  75. package/dist/components/dialog/dialogStore.cjs.map +1 -0
  76. package/dist/components/dialog/dialogStore.js +60 -0
  77. package/dist/components/dialog/dialogStore.js.map +1 -0
  78. package/dist/components/drawer/Drawer.cjs +1 -1
  79. package/dist/components/drawer/Drawer.cjs.map +1 -1
  80. package/dist/components/drawer/Drawer.js +69 -47
  81. package/dist/components/drawer/Drawer.js.map +1 -1
  82. package/dist/components/dropdown/Dropdown.cjs +1 -1
  83. package/dist/components/dropdown/Dropdown.cjs.map +1 -1
  84. package/dist/components/dropdown/Dropdown.js +134 -108
  85. package/dist/components/dropdown/Dropdown.js.map +1 -1
  86. package/dist/components/fileuploader/FileUploader.cjs +1 -1
  87. package/dist/components/fileuploader/FileUploader.cjs.map +1 -1
  88. package/dist/components/fileuploader/FileUploader.js +96 -61
  89. package/dist/components/fileuploader/FileUploader.js.map +1 -1
  90. package/dist/components/hovercard/HoverCard.cjs +1 -1
  91. package/dist/components/hovercard/HoverCard.cjs.map +1 -1
  92. package/dist/components/hovercard/HoverCard.js +124 -69
  93. package/dist/components/hovercard/HoverCard.js.map +1 -1
  94. package/dist/components/input/Input.cjs +1 -1
  95. package/dist/components/input/Input.cjs.map +1 -1
  96. package/dist/components/input/Input.js +62 -37
  97. package/dist/components/input/Input.js.map +1 -1
  98. package/dist/components/layout/Container.cjs +1 -1
  99. package/dist/components/layout/Container.cjs.map +1 -1
  100. package/dist/components/layout/Container.js +21 -30
  101. package/dist/components/layout/Container.js.map +1 -1
  102. package/dist/components/layout/Flex.cjs +1 -1
  103. package/dist/components/layout/Flex.cjs.map +1 -1
  104. package/dist/components/layout/Flex.js +36 -19
  105. package/dist/components/layout/Flex.js.map +1 -1
  106. package/dist/components/layout/Grid.cjs +1 -1
  107. package/dist/components/layout/Grid.cjs.map +1 -1
  108. package/dist/components/layout/Grid.js +30 -18
  109. package/dist/components/layout/Grid.js.map +1 -1
  110. package/dist/components/link/Link.cjs +2 -0
  111. package/dist/components/link/Link.cjs.map +1 -0
  112. package/dist/components/link/Link.js +41 -0
  113. package/dist/components/link/Link.js.map +1 -0
  114. package/dist/components/megamenu/MegaMenu.cjs +1 -1
  115. package/dist/components/megamenu/MegaMenu.cjs.map +1 -1
  116. package/dist/components/megamenu/MegaMenu.js +107 -38
  117. package/dist/components/megamenu/MegaMenu.js.map +1 -1
  118. package/dist/components/modal/Modal.cjs +1 -1
  119. package/dist/components/modal/Modal.cjs.map +1 -1
  120. package/dist/components/modal/Modal.js +91 -83
  121. package/dist/components/modal/Modal.js.map +1 -1
  122. package/dist/components/multiselect/MultiSelect.cjs +2 -0
  123. package/dist/components/multiselect/MultiSelect.cjs.map +1 -0
  124. package/dist/components/multiselect/MultiSelect.js +176 -0
  125. package/dist/components/multiselect/MultiSelect.js.map +1 -0
  126. package/dist/components/nuiprovider/NUIProvider.cjs +2 -0
  127. package/dist/components/nuiprovider/NUIProvider.cjs.map +1 -0
  128. package/dist/components/nuiprovider/NUIProvider.js +36 -0
  129. package/dist/components/nuiprovider/NUIProvider.js.map +1 -0
  130. package/dist/components/pagination/Pagination.cjs +1 -1
  131. package/dist/components/pagination/Pagination.cjs.map +1 -1
  132. package/dist/components/pagination/Pagination.js +74 -41
  133. package/dist/components/pagination/Pagination.js.map +1 -1
  134. package/dist/components/popover/Popover.cjs +1 -1
  135. package/dist/components/popover/Popover.cjs.map +1 -1
  136. package/dist/components/popover/Popover.js +99 -100
  137. package/dist/components/popover/Popover.js.map +1 -1
  138. package/dist/components/progress/Progress.cjs +1 -1
  139. package/dist/components/progress/Progress.cjs.map +1 -1
  140. package/dist/components/progress/Progress.js +44 -22
  141. package/dist/components/progress/Progress.js.map +1 -1
  142. package/dist/components/radiogroup/RadioGroup.cjs +1 -1
  143. package/dist/components/radiogroup/RadioGroup.cjs.map +1 -1
  144. package/dist/components/radiogroup/RadioGroup.js +69 -74
  145. package/dist/components/radiogroup/RadioGroup.js.map +1 -1
  146. package/dist/components/rating/Rating.cjs +1 -1
  147. package/dist/components/rating/Rating.cjs.map +1 -1
  148. package/dist/components/rating/Rating.js +72 -33
  149. package/dist/components/rating/Rating.js.map +1 -1
  150. package/dist/components/resizable/Resizable.cjs +2 -0
  151. package/dist/components/resizable/Resizable.cjs.map +1 -0
  152. package/dist/components/resizable/Resizable.js +134 -0
  153. package/dist/components/resizable/Resizable.js.map +1 -0
  154. package/dist/components/select/Select.cjs +1 -1
  155. package/dist/components/select/Select.cjs.map +1 -1
  156. package/dist/components/select/Select.js +114 -113
  157. package/dist/components/select/Select.js.map +1 -1
  158. package/dist/components/skeleton/Skeleton.cjs +1 -1
  159. package/dist/components/skeleton/Skeleton.cjs.map +1 -1
  160. package/dist/components/skeleton/Skeleton.js +90 -67
  161. package/dist/components/skeleton/Skeleton.js.map +1 -1
  162. package/dist/components/slider/Slider.cjs +1 -1
  163. package/dist/components/slider/Slider.cjs.map +1 -1
  164. package/dist/components/slider/Slider.js +85 -82
  165. package/dist/components/slider/Slider.js.map +1 -1
  166. package/dist/components/spinner/Spinner.cjs +1 -1
  167. package/dist/components/spinner/Spinner.cjs.map +1 -1
  168. package/dist/components/spinner/Spinner.js +60 -17
  169. package/dist/components/spinner/Spinner.js.map +1 -1
  170. package/dist/components/stepper/Stepper.cjs +1 -5
  171. package/dist/components/stepper/Stepper.cjs.map +1 -1
  172. package/dist/components/stepper/Stepper.js +65 -39
  173. package/dist/components/stepper/Stepper.js.map +1 -1
  174. package/dist/components/switch/Switch.cjs +1 -1
  175. package/dist/components/switch/Switch.cjs.map +1 -1
  176. package/dist/components/switch/Switch.js +89 -62
  177. package/dist/components/switch/Switch.js.map +1 -1
  178. package/dist/components/table/Table.cjs +1 -1
  179. package/dist/components/table/Table.cjs.map +1 -1
  180. package/dist/components/table/Table.js +62 -35
  181. package/dist/components/table/Table.js.map +1 -1
  182. package/dist/components/tabs/Tabs.cjs +1 -1
  183. package/dist/components/tabs/Tabs.cjs.map +1 -1
  184. package/dist/components/tabs/Tabs.js +110 -50
  185. package/dist/components/tabs/Tabs.js.map +1 -1
  186. package/dist/components/textarea/Textarea.cjs +1 -1
  187. package/dist/components/textarea/Textarea.cjs.map +1 -1
  188. package/dist/components/textarea/Textarea.js +63 -58
  189. package/dist/components/textarea/Textarea.js.map +1 -1
  190. package/dist/components/timepicker/TimePicker.cjs +2 -0
  191. package/dist/components/timepicker/TimePicker.cjs.map +1 -0
  192. package/dist/components/timepicker/TimePicker.js +159 -0
  193. package/dist/components/timepicker/TimePicker.js.map +1 -0
  194. package/dist/components/timerangepicker/TimeRangePicker.cjs +2 -0
  195. package/dist/components/timerangepicker/TimeRangePicker.cjs.map +1 -0
  196. package/dist/components/timerangepicker/TimeRangePicker.js +208 -0
  197. package/dist/components/timerangepicker/TimeRangePicker.js.map +1 -0
  198. package/dist/components/toast/Toast.cjs +1 -1
  199. package/dist/components/toast/Toast.cjs.map +1 -1
  200. package/dist/components/toast/Toast.js +91 -38
  201. package/dist/components/toast/Toast.js.map +1 -1
  202. package/dist/components/tooltip/Tooltip.cjs +1 -1
  203. package/dist/components/tooltip/Tooltip.cjs.map +1 -1
  204. package/dist/components/tooltip/Tooltip.js +72 -56
  205. package/dist/components/tooltip/Tooltip.js.map +1 -1
  206. package/dist/components/treeview/TreeView.cjs +1 -1
  207. package/dist/components/treeview/TreeView.cjs.map +1 -1
  208. package/dist/components/treeview/TreeView.js +120 -90
  209. package/dist/components/treeview/TreeView.js.map +1 -1
  210. package/dist/components/virtuallist/VirtualList.cjs +1 -1
  211. package/dist/components/virtuallist/VirtualList.cjs.map +1 -1
  212. package/dist/components/virtuallist/VirtualList.js +52 -34
  213. package/dist/components/virtuallist/VirtualList.js.map +1 -1
  214. package/dist/index.cjs +1 -1
  215. package/dist/index.css +1 -0
  216. package/dist/index.js +118 -107
  217. package/dist/index.js.map +1 -1
  218. package/dist/package.json +49 -6
  219. package/dist/types/components/accordion/Accordion.d.ts +7 -3
  220. package/dist/types/components/accordion/Accordion.d.ts.map +1 -1
  221. package/dist/types/components/alert/Alert.d.ts +18 -5
  222. package/dist/types/components/alert/Alert.d.ts.map +1 -1
  223. package/dist/types/components/avatar/Avatar.d.ts +12 -8
  224. package/dist/types/components/avatar/Avatar.d.ts.map +1 -1
  225. package/dist/types/components/avatar/AvatarGroup.d.ts +11 -4
  226. package/dist/types/components/avatar/AvatarGroup.d.ts.map +1 -1
  227. package/dist/types/components/badge/Badge.d.ts +19 -11
  228. package/dist/types/components/badge/Badge.d.ts.map +1 -1
  229. package/dist/types/components/badge/BadgeGroup.d.ts +7 -4
  230. package/dist/types/components/badge/BadgeGroup.d.ts.map +1 -1
  231. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +14 -6
  232. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  233. package/dist/types/components/button/Button.d.ts +25 -10
  234. package/dist/types/components/button/Button.d.ts.map +1 -1
  235. package/dist/types/components/card/Card.d.ts +12 -21
  236. package/dist/types/components/card/Card.d.ts.map +1 -1
  237. package/dist/types/components/checkbox/Checkbox.d.ts +12 -7
  238. package/dist/types/components/checkbox/Checkbox.d.ts.map +1 -1
  239. package/dist/types/components/chip/Chip.d.ts +14 -11
  240. package/dist/types/components/chip/Chip.d.ts.map +1 -1
  241. package/dist/types/components/combobox/Combobox.d.ts +15 -4
  242. package/dist/types/components/combobox/Combobox.d.ts.map +1 -1
  243. package/dist/types/components/commandpalette/CommandPalette.d.ts +12 -3
  244. package/dist/types/components/commandpalette/CommandPalette.d.ts.map +1 -1
  245. package/dist/types/components/contextmenu/ContextMenu.d.ts +14 -6
  246. package/dist/types/components/contextmenu/ContextMenu.d.ts.map +1 -1
  247. package/dist/types/components/datagrid/DataGrid.d.ts +16 -4
  248. package/dist/types/components/datagrid/DataGrid.d.ts.map +1 -1
  249. package/dist/types/components/datepicker/DatePicker.d.ts +13 -1
  250. package/dist/types/components/datepicker/DatePicker.d.ts.map +1 -1
  251. package/dist/types/components/daterangepicker/DateRangePicker.d.ts +3 -1
  252. package/dist/types/components/daterangepicker/DateRangePicker.d.ts.map +1 -1
  253. package/dist/types/components/dialog/DialogProvider.d.ts +2 -0
  254. package/dist/types/components/dialog/DialogProvider.d.ts.map +1 -0
  255. package/dist/types/components/dialog/dialogStore.d.ts +42 -0
  256. package/dist/types/components/dialog/dialogStore.d.ts.map +1 -0
  257. package/dist/types/components/drawer/Drawer.d.ts +18 -4
  258. package/dist/types/components/drawer/Drawer.d.ts.map +1 -1
  259. package/dist/types/components/dropdown/Dropdown.d.ts +21 -16
  260. package/dist/types/components/dropdown/Dropdown.d.ts.map +1 -1
  261. package/dist/types/components/fileuploader/FileUploader.d.ts +22 -3
  262. package/dist/types/components/fileuploader/FileUploader.d.ts.map +1 -1
  263. package/dist/types/components/hovercard/HoverCard.d.ts +45 -5
  264. package/dist/types/components/hovercard/HoverCard.d.ts.map +1 -1
  265. package/dist/types/components/input/Input.d.ts +20 -10
  266. package/dist/types/components/input/Input.d.ts.map +1 -1
  267. package/dist/types/components/layout/Container.d.ts +8 -4
  268. package/dist/types/components/layout/Container.d.ts.map +1 -1
  269. package/dist/types/components/layout/Flex.d.ts +27 -10
  270. package/dist/types/components/layout/Flex.d.ts.map +1 -1
  271. package/dist/types/components/layout/Grid.d.ts +11 -5
  272. package/dist/types/components/layout/Grid.d.ts.map +1 -1
  273. package/dist/types/components/link/Link.d.ts +22 -0
  274. package/dist/types/components/link/Link.d.ts.map +1 -0
  275. package/dist/types/components/megamenu/MegaMenu.d.ts +8 -11
  276. package/dist/types/components/megamenu/MegaMenu.d.ts.map +1 -1
  277. package/dist/types/components/modal/Modal.d.ts +8 -7
  278. package/dist/types/components/modal/Modal.d.ts.map +1 -1
  279. package/dist/types/components/multiselect/MultiSelect.d.ts +33 -0
  280. package/dist/types/components/multiselect/MultiSelect.d.ts.map +1 -0
  281. package/dist/types/components/nuiprovider/NUIProvider.d.ts +29 -0
  282. package/dist/types/components/nuiprovider/NUIProvider.d.ts.map +1 -0
  283. package/dist/types/components/pagination/Pagination.d.ts +17 -3
  284. package/dist/types/components/pagination/Pagination.d.ts.map +1 -1
  285. package/dist/types/components/popover/Popover.d.ts +54 -16
  286. package/dist/types/components/popover/Popover.d.ts.map +1 -1
  287. package/dist/types/components/progress/Progress.d.ts +17 -7
  288. package/dist/types/components/progress/Progress.d.ts.map +1 -1
  289. package/dist/types/components/radiogroup/RadioGroup.d.ts +15 -10
  290. package/dist/types/components/radiogroup/RadioGroup.d.ts.map +1 -1
  291. package/dist/types/components/rating/Rating.d.ts +24 -10
  292. package/dist/types/components/rating/Rating.d.ts.map +1 -1
  293. package/dist/types/components/resizable/Resizable.d.ts +24 -0
  294. package/dist/types/components/resizable/Resizable.d.ts.map +1 -0
  295. package/dist/types/components/select/Select.d.ts +17 -8
  296. package/dist/types/components/select/Select.d.ts.map +1 -1
  297. package/dist/types/components/skeleton/Skeleton.d.ts +37 -36
  298. package/dist/types/components/skeleton/Skeleton.d.ts.map +1 -1
  299. package/dist/types/components/slider/Slider.d.ts +15 -4
  300. package/dist/types/components/slider/Slider.d.ts.map +1 -1
  301. package/dist/types/components/spinner/Spinner.d.ts +14 -4
  302. package/dist/types/components/spinner/Spinner.d.ts.map +1 -1
  303. package/dist/types/components/stepper/Stepper.d.ts +17 -3
  304. package/dist/types/components/stepper/Stepper.d.ts.map +1 -1
  305. package/dist/types/components/switch/Switch.d.ts +20 -5
  306. package/dist/types/components/switch/Switch.d.ts.map +1 -1
  307. package/dist/types/components/table/Table.d.ts +24 -4
  308. package/dist/types/components/table/Table.d.ts.map +1 -1
  309. package/dist/types/components/tabs/Tabs.d.ts +25 -12
  310. package/dist/types/components/tabs/Tabs.d.ts.map +1 -1
  311. package/dist/types/components/textarea/Textarea.d.ts +8 -5
  312. package/dist/types/components/textarea/Textarea.d.ts.map +1 -1
  313. package/dist/types/components/timepicker/TimePicker.d.ts +26 -0
  314. package/dist/types/components/timepicker/TimePicker.d.ts.map +1 -0
  315. package/dist/types/components/timerangepicker/TimeRangePicker.d.ts +32 -0
  316. package/dist/types/components/timerangepicker/TimeRangePicker.d.ts.map +1 -0
  317. package/dist/types/components/toast/Toast.d.ts +23 -7
  318. package/dist/types/components/toast/Toast.d.ts.map +1 -1
  319. package/dist/types/components/tooltip/Tooltip.d.ts +13 -2
  320. package/dist/types/components/tooltip/Tooltip.d.ts.map +1 -1
  321. package/dist/types/components/treeview/TreeView.d.ts +20 -6
  322. package/dist/types/components/treeview/TreeView.d.ts.map +1 -1
  323. package/dist/types/components/virtuallist/VirtualList.d.ts +12 -16
  324. package/dist/types/components/virtuallist/VirtualList.d.ts.map +1 -1
  325. package/dist/types/index.d.ts +8 -4
  326. package/dist/types/index.d.ts.map +1 -1
  327. package/dist/types/utils/cn/cn.d.ts +19 -0
  328. package/dist/types/utils/cn/cn.d.ts.map +1 -0
  329. package/dist/types/utils/generateid/generateId.d.ts +7 -0
  330. package/dist/types/utils/generateid/generateId.d.ts.map +1 -1
  331. package/dist/types/utils/index.d.ts +2 -0
  332. package/dist/types/utils/index.d.ts.map +1 -1
  333. package/dist/types/utils/inertmanager/inertManager.d.ts +13 -0
  334. package/dist/types/utils/inertmanager/inertManager.d.ts.map +1 -1
  335. package/dist/types/utils/keyboardnav/keyboardNav.d.ts +17 -6
  336. package/dist/types/utils/keyboardnav/keyboardNav.d.ts.map +1 -1
  337. package/dist/types/utils/onclickoutside/onClickOutside.d.ts +9 -1
  338. package/dist/types/utils/onclickoutside/onClickOutside.d.ts.map +1 -1
  339. package/dist/types/utils/portal/portal.d.ts +14 -1
  340. package/dist/types/utils/portal/portal.d.ts.map +1 -1
  341. package/dist/types/utils/restorefocus/restoreFocus.d.ts +8 -4
  342. package/dist/types/utils/restorefocus/restoreFocus.d.ts.map +1 -1
  343. package/dist/types/utils/scrolllock/scrollLock.d.ts +10 -2
  344. package/dist/types/utils/scrolllock/scrollLock.d.ts.map +1 -1
  345. package/dist/types/utils/slot/slot.d.ts +12 -0
  346. package/dist/types/utils/slot/slot.d.ts.map +1 -0
  347. package/dist/types/utils/trapfocus/trapFocus.d.ts +6 -2
  348. package/dist/types/utils/trapfocus/trapFocus.d.ts.map +1 -1
  349. package/dist/utils/cn/cn.cjs +2 -0
  350. package/dist/utils/cn/cn.cjs.map +1 -0
  351. package/dist/utils/cn/cn.js +21 -0
  352. package/dist/utils/cn/cn.js.map +1 -0
  353. package/dist/utils/inertmanager/inertManager.cjs.map +1 -1
  354. package/dist/utils/inertmanager/inertManager.js.map +1 -1
  355. package/dist/utils/onclickoutside/onClickOutside.cjs +1 -1
  356. package/dist/utils/onclickoutside/onClickOutside.cjs.map +1 -1
  357. package/dist/utils/onclickoutside/onClickOutside.js +10 -6
  358. package/dist/utils/onclickoutside/onClickOutside.js.map +1 -1
  359. package/dist/utils/portal/portal.cjs.map +1 -1
  360. package/dist/utils/portal/portal.js.map +1 -1
  361. package/dist/utils/restorefocus/restoreFocus.cjs.map +1 -1
  362. package/dist/utils/restorefocus/restoreFocus.js.map +1 -1
  363. package/dist/utils/scrolllock/scrollLock.cjs.map +1 -1
  364. package/dist/utils/scrolllock/scrollLock.js +7 -0
  365. package/dist/utils/scrolllock/scrollLock.js.map +1 -1
  366. package/dist/utils/slot/slot.cjs +2 -0
  367. package/dist/utils/slot/slot.cjs.map +1 -0
  368. package/dist/utils/slot/slot.js +57 -0
  369. package/dist/utils/slot/slot.js.map +1 -0
  370. package/dist/utils/trapfocus/trapFocus.cjs.map +1 -1
  371. package/dist/utils/trapfocus/trapFocus.js.map +1 -1
  372. package/package.json +49 -6
  373. package/dist/components/layout/HStack.cjs +0 -2
  374. package/dist/components/layout/HStack.cjs.map +0 -1
  375. package/dist/components/layout/HStack.js +0 -9
  376. package/dist/components/layout/HStack.js.map +0 -1
  377. package/dist/components/layout/Stack.cjs +0 -2
  378. package/dist/components/layout/Stack.cjs.map +0 -1
  379. package/dist/components/layout/Stack.js +0 -9
  380. package/dist/components/layout/Stack.js.map +0 -1
  381. package/dist/styles/nui.css +0 -1
  382. package/dist/theme/NUIProvider.cjs +0 -2
  383. package/dist/theme/NUIProvider.cjs.map +0 -1
  384. package/dist/theme/NUIProvider.js +0 -34
  385. package/dist/theme/NUIProvider.js.map +0 -1
  386. package/dist/theme/useTheme.cjs +0 -2
  387. package/dist/theme/useTheme.cjs.map +0 -1
  388. package/dist/theme/useTheme.js +0 -9
  389. package/dist/theme/useTheme.js.map +0 -1
  390. package/dist/types/components/layout/HStack.d.ts +0 -8
  391. package/dist/types/components/layout/HStack.d.ts.map +0 -1
  392. package/dist/types/components/layout/Stack.d.ts +0 -8
  393. package/dist/types/components/layout/Stack.d.ts.map +0 -1
  394. package/dist/types/theme/NUIProvider.d.ts +0 -14
  395. package/dist/types/theme/NUIProvider.d.ts.map +0 -1
  396. package/dist/types/theme/useTheme.d.ts +0 -11
  397. package/dist/types/theme/useTheme.d.ts.map +0 -1
  398. package/dist/utils/generateid/generateId.cjs +0 -2
  399. package/dist/utils/generateid/generateId.cjs.map +0 -1
  400. package/dist/utils/generateid/generateId.js +0 -7
  401. package/dist/utils/generateid/generateId.js.map +0 -1
  402. package/dist/utils/keyboardnav/keyboardNav.cjs +0 -2
  403. package/dist/utils/keyboardnav/keyboardNav.cjs.map +0 -1
  404. package/dist/utils/keyboardnav/keyboardNav.js +0 -10
  405. package/dist/utils/keyboardnav/keyboardNav.js.map +0 -1
@@ -1,116 +1,119 @@
1
- import { jsx as g, jsxs as R } from "react/jsx-runtime";
2
- import { useState as p, useCallback as i, useRef as S, useEffect as $ } from "react";
1
+ import { jsx as l, jsxs as P } from "react/jsx-runtime";
2
+ import { useState as M, useRef as D, useCallback as w, useEffect as C } from "react";
3
3
  /* empty css */
4
- function I({
5
- min: n = 0,
6
- max: s = 100,
7
- step: c = 1,
8
- value: k,
9
- defaultValue: M,
10
- onChange: m,
11
- disabled: o = !1,
12
- className: V = ""
4
+ import { cn as I } from "../../utils/cn/cn.js";
5
+ function B({
6
+ min: r = 0,
7
+ max: a = 100,
8
+ step: s = 1,
9
+ value: v,
10
+ defaultValue: b,
11
+ onChange: f,
12
+ disabled: c = !1,
13
+ className: N,
14
+ ...V
15
+ // <-- Capture the rest of the HTML attributes (like style, id, etc.)
13
16
  }) {
14
- const h = k !== void 0, [X, y] = p(M ?? n), r = h ? k : X, a = i(
15
- (t) => {
16
- const e = Math.min(s, Math.max(n, t)), d = Math.round(e / c) * c;
17
- h || y(d), m?.(d);
17
+ const u = v !== void 0, [R, x] = M(b ?? r), n = Math.min(a, Math.max(r, u ? v : R)), h = D(null), m = D(null), [k, g] = M(!1), i = w(
18
+ (e) => {
19
+ const t = Math.min(a, Math.max(r, e));
20
+ let o = r + Math.round((t - r) / s) * s;
21
+ o = Number(o.toFixed(5)), u || x(o), f?.(o);
18
22
  },
19
- [h, s, n, c, m]
20
- ), E = S(null), D = (r - n) / (s - n) * 100, w = i(
21
- (t) => {
22
- const e = E.current;
23
- if (!e) return r;
24
- const d = e.getBoundingClientRect(), N = (t - d.left) / d.width;
25
- return n + N * (s - n);
23
+ [u, a, r, s, f]
24
+ ), d = w(
25
+ (e) => {
26
+ const t = h.current;
27
+ if (!t) return n;
28
+ const o = t.getBoundingClientRect(), A = Math.max(0, Math.min(e - o.left, o.width)) / o.width;
29
+ return r + A * (a - r);
26
30
  },
27
- [n, s, r]
28
- ), [v, L] = p(!1), f = i(
29
- (t) => {
30
- if (o) return;
31
- L(!0);
32
- const e = "touches" in t ? t.touches[0].clientX : t.clientX;
33
- a(w(e));
34
- },
35
- [o, w, a]
36
- ), u = i(
37
- (t) => {
38
- if (!v || o) return;
39
- const e = t.touches?.[0]?.clientX ?? t.clientX;
40
- a(w(e));
41
- },
42
- [v, o, w, a]
43
- ), l = i(() => {
44
- L(!1);
45
- }, []);
46
- $(() => {
47
- if (v)
48
- return window.addEventListener("mousemove", u), window.addEventListener("touchmove", u), window.addEventListener("mouseup", l), window.addEventListener("touchend", l), () => {
49
- window.removeEventListener("mousemove", u), window.removeEventListener("touchmove", u), window.removeEventListener("mouseup", l), window.removeEventListener("touchend", l);
50
- };
51
- }, [v, u, l]);
52
- const A = i(
53
- (t) => {
54
- if (o) return;
55
- let e = r;
56
- switch (t.key) {
31
+ [r, a, n]
32
+ ), E = (e) => "touches" in e ? e.touches[0].clientX : e.clientX, p = (e) => {
33
+ c || (m.current?.focus(), g(!0), i(d(E(e))));
34
+ };
35
+ C(() => {
36
+ if (!k || c) return;
37
+ const e = (o) => {
38
+ i(d(E(o)));
39
+ }, t = () => {
40
+ g(!1);
41
+ };
42
+ return window.addEventListener("mousemove", e), window.addEventListener("touchmove", e, { passive: !1 }), window.addEventListener("mouseup", t), window.addEventListener("touchend", t), () => {
43
+ window.removeEventListener("mousemove", e), window.removeEventListener("touchmove", e), window.removeEventListener("mouseup", t), window.removeEventListener("touchend", t);
44
+ };
45
+ }, [k, c, d, i]);
46
+ const y = w(
47
+ (e) => {
48
+ if (c) return;
49
+ let t = n;
50
+ switch (e.key) {
57
51
  case "ArrowRight":
58
52
  case "ArrowUp":
59
- e = r + c;
53
+ t = n + s;
60
54
  break;
61
55
  case "ArrowLeft":
62
56
  case "ArrowDown":
63
- e = r - c;
57
+ t = n - s;
64
58
  break;
65
59
  case "PageUp":
66
- e = r + c * 10;
60
+ t = n + s * 10;
67
61
  break;
68
62
  case "PageDown":
69
- e = r - c * 10;
63
+ t = n - s * 10;
70
64
  break;
71
65
  case "Home":
72
- e = n;
66
+ t = r;
73
67
  break;
74
68
  case "End":
75
- e = s;
69
+ t = a;
76
70
  break;
77
71
  default:
78
72
  return;
79
73
  }
80
- t.preventDefault(), a(e);
74
+ e.preventDefault(), i(t);
81
75
  },
82
- [o, r, c, n, s, a]
83
- );
84
- return /* @__PURE__ */ g("div", { className: `ui-slider ${o ? "disabled" : ""} ${V}`, children: /* @__PURE__ */ R(
76
+ [c, n, s, r, a, i]
77
+ ), L = (n - r) / (a - r) * 100;
78
+ return /* @__PURE__ */ l(
85
79
  "div",
86
80
  {
87
- ref: E,
88
- className: "ui-slider-track",
89
- onMouseDown: f,
90
- onTouchStart: f,
91
- children: [
92
- /* @__PURE__ */ g("div", { className: "ui-slider-fill", style: { width: `${D}%` } }),
93
- /* @__PURE__ */ g(
81
+ className: I(
82
+ "nui-slider-root",
83
+ c && "nui-slider--disabled",
84
+ N
85
+ ),
86
+ onMouseDown: p,
87
+ onTouchStart: p,
88
+ ...V,
89
+ children: /* @__PURE__ */ l("div", { className: "nui-slider-track-container", children: /* @__PURE__ */ P("div", { ref: h, className: "nui-slider-track", children: [
90
+ /* @__PURE__ */ l(
94
91
  "div",
95
92
  {
96
- className: "ui-slider-thumb",
93
+ className: "nui-slider-fill",
94
+ style: { width: `${L}%` }
95
+ }
96
+ ),
97
+ /* @__PURE__ */ l(
98
+ "div",
99
+ {
100
+ ref: m,
101
+ className: "nui-slider-thumb",
97
102
  role: "slider",
98
- tabIndex: o ? -1 : 0,
99
- "aria-valuemin": n,
100
- "aria-valuemax": s,
101
- "aria-valuenow": r,
102
- "aria-disabled": o || void 0,
103
- onKeyDown: A,
104
- onMouseDown: f,
105
- onTouchStart: f,
106
- style: { left: `${D}%` }
103
+ tabIndex: c ? -1 : 0,
104
+ "aria-valuemin": r,
105
+ "aria-valuemax": a,
106
+ "aria-valuenow": n,
107
+ "aria-disabled": c || void 0,
108
+ onKeyDown: y,
109
+ style: { left: `${L}%` }
107
110
  }
108
111
  )
109
- ]
112
+ ] }) })
110
113
  }
111
- ) });
114
+ );
112
115
  }
113
116
  export {
114
- I as Slider
117
+ B as Slider
115
118
  };
116
119
  //# sourceMappingURL=Slider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Slider.js","sources":["../../../src/components/slider/Slider.tsx"],"sourcesContent":["/**\r\n * Slider.tsx\r\n * -----------\r\n * Fully accessible single-thumb slider.\r\n * WAI-ARIA compliant, supports pointer, touch, keyboard.\r\n */\r\n\r\nimport React, { useRef, useEffect, useState, useCallback } from 'react';\r\nimport './Slider.css';\r\n\r\ninterface SliderProps {\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n value?: number;\r\n defaultValue?: number;\r\n onChange?: (value: number) => void;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function Slider({\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n value,\r\n defaultValue,\r\n onChange,\r\n disabled = false,\r\n className = '',\r\n}: SliderProps) {\r\n const isControlled = value !== undefined;\r\n\r\n const [internalValue, setInternalValue] = useState(defaultValue ?? min);\r\n\r\n const val = isControlled ? value : internalValue;\r\n\r\n /** Safe setter */\r\n const setVal = useCallback(\r\n (v: number) => {\r\n const clamped = Math.min(max, Math.max(min, v));\r\n const stepped = Math.round(clamped / step) * step;\r\n\r\n if (!isControlled) setInternalValue(stepped);\r\n onChange?.(stepped);\r\n },\r\n [isControlled, max, min, step, onChange]\r\n );\r\n\r\n const trackRef = useRef<HTMLDivElement | null>(null);\r\n\r\n /** Calculate percentage for UI */\r\n const percent = ((val - min) / (max - min)) * 100;\r\n\r\n /** Pixel → value conversion (FIXED: wrapped in useCallback) */\r\n const pixelToValue = useCallback(\r\n (clientX: number) => {\r\n const track = trackRef.current;\r\n if (!track) return val;\r\n\r\n const rect = track.getBoundingClientRect();\r\n const x = clientX - rect.left;\r\n const ratio = x / rect.width;\r\n const rawValue = min + ratio * (max - min);\r\n return rawValue;\r\n },\r\n [min, max, val]\r\n );\r\n\r\n /** Dragging state */\r\n const [dragging, setDragging] = useState(false);\r\n\r\n const startDrag = useCallback(\r\n (e: React.MouseEvent | React.TouchEvent) => {\r\n if (disabled) return;\r\n setDragging(true);\r\n\r\n const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX;\r\n\r\n setVal(pixelToValue(clientX));\r\n },\r\n [disabled, pixelToValue, setVal]\r\n );\r\n\r\n const onMove = useCallback(\r\n (e: MouseEvent | TouchEvent) => {\r\n if (!dragging || disabled) return;\r\n\r\n const clientX =\r\n (e as TouchEvent).touches?.[0]?.clientX ?? (e as MouseEvent).clientX;\r\n\r\n setVal(pixelToValue(clientX));\r\n },\r\n [dragging, disabled, pixelToValue, setVal]\r\n );\r\n\r\n const endDrag = useCallback(() => {\r\n setDragging(false);\r\n }, []);\r\n\r\n /** Global listeners while dragging */\r\n useEffect(() => {\r\n if (!dragging) return;\r\n\r\n window.addEventListener('mousemove', onMove);\r\n window.addEventListener('touchmove', onMove);\r\n window.addEventListener('mouseup', endDrag);\r\n window.addEventListener('touchend', endDrag);\r\n\r\n return () => {\r\n window.removeEventListener('mousemove', onMove);\r\n window.removeEventListener('touchmove', onMove);\r\n window.removeEventListener('mouseup', endDrag);\r\n window.removeEventListener('touchend', endDrag);\r\n };\r\n }, [dragging, onMove, endDrag]);\r\n\r\n /** Keyboard handling */\r\n const onKeyDown = useCallback(\r\n (e: React.KeyboardEvent) => {\r\n if (disabled) return;\r\n\r\n let next = val;\r\n\r\n switch (e.key) {\r\n case 'ArrowRight':\r\n case 'ArrowUp':\r\n next = val + step;\r\n break;\r\n case 'ArrowLeft':\r\n case 'ArrowDown':\r\n next = val - step;\r\n break;\r\n case 'PageUp':\r\n next = val + step * 10;\r\n break;\r\n case 'PageDown':\r\n next = val - step * 10;\r\n break;\r\n case 'Home':\r\n next = min;\r\n break;\r\n case 'End':\r\n next = max;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n setVal(next);\r\n },\r\n [disabled, val, step, min, max, setVal]\r\n );\r\n\r\n return (\r\n <div className={`ui-slider ${disabled ? 'disabled' : ''} ${className}`}>\r\n <div\r\n ref={trackRef}\r\n className=\"ui-slider-track\"\r\n onMouseDown={startDrag}\r\n onTouchStart={startDrag}\r\n >\r\n <div className=\"ui-slider-fill\" style={{ width: `${percent}%` }} />\r\n\r\n <div\r\n className=\"ui-slider-thumb\"\r\n role=\"slider\"\r\n tabIndex={disabled ? -1 : 0}\r\n aria-valuemin={min}\r\n aria-valuemax={max}\r\n aria-valuenow={val}\r\n aria-disabled={disabled || undefined}\r\n onKeyDown={onKeyDown}\r\n onMouseDown={startDrag}\r\n onTouchStart={startDrag}\r\n style={{ left: `${percent}%` }}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["Slider","min","max","step","value","defaultValue","onChange","disabled","className","isControlled","internalValue","setInternalValue","useState","val","setVal","useCallback","v","clamped","stepped","trackRef","useRef","percent","pixelToValue","clientX","track","rect","ratio","dragging","setDragging","startDrag","e","onMove","endDrag","useEffect","onKeyDown","next","jsx","jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"Slider.js","sources":["../../../src/components/slider/Slider.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useRef, useEffect, useState, useCallback } from 'react';\nimport { cn } from '../../utils';\nimport './Slider.css';\n\n/* ============================================================\n * Types\n * ============================================================ */\n\nexport interface SliderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n /** The minimum allowed value. Defaults to 0. */\n min?: number;\n /** The maximum allowed value. Defaults to 100. */\n max?: number;\n /** The interval between valid values. Defaults to 1. */\n step?: number;\n /** The controlled value of the slider. */\n value?: number;\n /** The initial uncontrolled value of the slider. */\n defaultValue?: number;\n /** Callback fired when the value changes. */\n onChange?: (value: number) => void;\n /** Disables the slider and prevents interaction. */\n disabled?: boolean;\n}\n\n/* ============================================================\n * Component\n * ============================================================ */\n\n/**\n * Slider Component\n * * A WAI-ARIA compliant input that allows users to select a value from a given range.\n * * Automatically handles global window pointer events for smooth dragging outside the hit area.\n */\nexport function Slider({\n min = 0,\n max = 100,\n step = 1,\n value,\n defaultValue,\n onChange,\n disabled = false,\n className,\n ...props // <-- Capture the rest of the HTML attributes (like style, id, etc.)\n}: SliderProps) {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? min);\n \n // Safely clamp the initial/current value to prevent out-of-bounds rendering\n const rawVal = isControlled ? value : internalValue;\n const val = Math.min(max, Math.max(min, rawVal as number));\n\n const trackRef = useRef<HTMLDivElement | null>(null);\n const thumbRef = useRef<HTMLDivElement | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n\n /* ----------------------------------------------------\n Value Management\n ---------------------------------------------------- */\n const setVal = useCallback(\n (v: number) => {\n const clamped = Math.min(max, Math.max(min, v));\n // Ensures the stepped value correctly aligns with the minimum bound\n let stepped = min + Math.round((clamped - min) / step) * step;\n \n // Fixes JavaScript floating point math errors (e.g., 0.3000000000004)\n stepped = Number(stepped.toFixed(5));\n\n if (!isControlled) setInternalValue(stepped);\n onChange?.(stepped);\n },\n [isControlled, max, min, step, onChange]\n );\n\n const calculateValueFromPointer = useCallback(\n (clientX: number) => {\n const track = trackRef.current;\n if (!track) return val;\n\n const rect = track.getBoundingClientRect();\n const x = Math.max(0, Math.min(clientX - rect.left, rect.width));\n const ratio = x / rect.width;\n \n return min + ratio * (max - min);\n },\n [min, max, val]\n );\n\n /* ----------------------------------------------------\n Drag State Management\n ---------------------------------------------------- */\n const getClientX = (e: MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent) => {\n return 'touches' in e ? e.touches[0].clientX : (e as MouseEvent | React.MouseEvent).clientX;\n };\n\n const handlePointerDown = (e: React.MouseEvent | React.TouchEvent) => {\n if (disabled) return;\n \n // Instantly focus the thumb so Arrow Keys work immediately!\n thumbRef.current?.focus(); \n \n setIsDragging(true);\n setVal(calculateValueFromPointer(getClientX(e)));\n };\n\n // Syncs global drag listeners without memory leaks\n useEffect(() => {\n if (!isDragging || disabled) return;\n\n const handleMove = (e: MouseEvent | TouchEvent) => {\n setVal(calculateValueFromPointer(getClientX(e)));\n };\n\n const handleUp = () => {\n setIsDragging(false);\n };\n\n window.addEventListener('mousemove', handleMove);\n window.addEventListener('touchmove', handleMove, { passive: false });\n window.addEventListener('mouseup', handleUp);\n window.addEventListener('touchend', handleUp);\n\n return () => {\n window.removeEventListener('mousemove', handleMove);\n window.removeEventListener('touchmove', handleMove);\n window.removeEventListener('mouseup', handleUp);\n window.removeEventListener('touchend', handleUp);\n };\n }, [isDragging, disabled, calculateValueFromPointer, setVal]);\n\n /* ----------------------------------------------------\n Keyboard Navigation (WAI-ARIA)\n ---------------------------------------------------- */\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n let next = val;\n\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = val + step;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n next = val - step;\n break;\n case 'PageUp':\n next = val + step * 10;\n break;\n case 'PageDown':\n next = val - step * 10;\n break;\n case 'Home':\n next = min;\n break;\n case 'End':\n next = max;\n break;\n default:\n return; // Exit if it's not a recognized key\n }\n\n e.preventDefault(); // Prevent page scrolling ONLY when using valid arrow keys\n setVal(next);\n },\n [disabled, val, step, min, max, setVal]\n );\n\n /* ----------------------------------------------------\n Render\n ---------------------------------------------------- */\n const percent = ((val - min) / (max - min)) * 100;\n\n return (\n <div \n className={cn(\n \"nui-slider-root\", \n disabled && \"nui-slider--disabled\",\n className\n )}\n onMouseDown={handlePointerDown}\n onTouchStart={handlePointerDown}\n {...props} // <-- Spread the rest of the props (including style) to the root element\n >\n <div className=\"nui-slider-track-container\">\n <div ref={trackRef} className=\"nui-slider-track\">\n \n <div \n className=\"nui-slider-fill\" \n style={{ width: `${percent}%` }} \n />\n\n <div\n ref={thumbRef}\n className=\"nui-slider-thumb\"\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={val}\n aria-disabled={disabled || undefined}\n onKeyDown={onKeyDown}\n style={{ left: `${percent}%` }}\n />\n </div>\n </div>\n </div>\n );\n}"],"names":["Slider","min","max","step","value","defaultValue","onChange","disabled","className","props","isControlled","internalValue","setInternalValue","useState","val","trackRef","useRef","thumbRef","isDragging","setIsDragging","setVal","useCallback","v","clamped","stepped","calculateValueFromPointer","clientX","track","rect","ratio","getClientX","handlePointerDown","useEffect","handleMove","e","handleUp","onKeyDown","next","percent","jsx","cn"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");;/* empty css */function s({size:i="md",className:n="",label:r="Loading"}){return e.jsx("div",{className:`ui-spinner ui-spinner--${i} ${n}`,role:"status","aria-label":r,children:e.jsx("div",{className:"ui-spinner-circle"})})}exports.Spinner=s;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),l=require("react");;/* empty css */const o=require("../../utils/cn/cn.cjs"),r=l.forwardRef(({size:s="md",variant:i="primary",className:a,label:n="Loading...",...c},t)=>e.jsxs("div",{ref:t,role:"status","aria-label":n,className:o.cn("nui-spinner",`nui-spinner--${s}`,`nui-spinner--${i}`,a),...c,children:[e.jsxs("svg",{className:"nui-spinner__svg",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","aria-hidden":"true",children:[e.jsx("circle",{className:"nui-spinner__track",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3"}),e.jsx("path",{className:"nui-spinner__head",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),e.jsx("span",{className:"nui-spinner__sr-only",children:n})]}));r.displayName="Spinner";exports.Spinner=r;
2
2
  //# sourceMappingURL=Spinner.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Spinner.cjs","sources":["../../../src/components/spinner/Spinner.tsx"],"sourcesContent":["/**\r\n * Spinner.tsx FINAL VERSION\r\n * ----------------------------\r\n * Accessible, theme-aware loading indicator.\r\n */\r\n\r\nimport './Spinner.css';\r\n\r\nexport interface SpinnerProps {\r\n size?: 'sm' | 'md' | 'lg';\r\n className?: string;\r\n label?: string; // screen reader text\r\n}\r\n\r\nexport function Spinner({\r\n size = 'md',\r\n className = '',\r\n label = 'Loading',\r\n}: SpinnerProps) {\r\n return (\r\n <div\r\n className={`ui-spinner ui-spinner--${size} ${className}`}\r\n role=\"status\"\r\n aria-label={label}\r\n >\r\n <div className=\"ui-spinner-circle\" />\r\n </div>\r\n );\r\n}\r\n"],"names":["Spinner","size","className","label","jsx"],"mappings":"kJAcO,SAASA,EAAQ,CACtB,KAAAC,EAAO,KACP,UAAAC,EAAY,GACZ,MAAAC,EAAQ,SACV,EAAiB,CACf,OACEC,EAAAA,IAAC,MAAA,CACC,UAAW,0BAA0BH,CAAI,IAAIC,CAAS,GACtD,KAAK,SACL,aAAYC,EAEZ,SAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,mBAAA,CAAoB,CAAA,CAAA,CAGzC"}
1
+ {"version":3,"file":"Spinner.cjs","sources":["../../../src/components/spinner/Spinner.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport './Spinner.css';\n\n/* ============================================================\n * Types\n * ============================================================ */\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The predefined size of the spinner. Defaults to 'md'. */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** The color theme variant. Defaults to 'primary'. */\n variant?: 'primary' | 'muted' | 'inverse';\n /** WAI-ARIA label read by screen readers. Defaults to 'Loading...'. */\n label?: string;\n}\n\n/* ============================================================\n * Component\n * ============================================================ */\n\n/**\n * Spinner Component\n * * A visual indicator for loading states.\n * * WAI-ARIA compliant: Uses role=\"status\" to announce the loading state politely\n * to screen readers without immediately interrupting the user.\n */\nexport const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(({\n size = 'md',\n variant = 'primary',\n className,\n label = 'Loading...',\n ...props\n}, ref) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label}\n className={cn(\n \"nui-spinner\",\n `nui-spinner--${size}`,\n `nui-spinner--${variant}`,\n className\n )}\n {...props}\n >\n <svg\n className=\"nui-spinner__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\" /* Hide SVG itself, relying on the aria-label and hidden text */\n >\n {/* The faint background track */}\n <circle\n className=\"nui-spinner__track\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n />\n {/* The solid moving head */}\n <path\n className=\"nui-spinner__head\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n \n {/* Visually hidden text fallback for older screen readers */}\n <span className=\"nui-spinner__sr-only\">{label}</span>\n </div>\n );\n});\n\nSpinner.displayName = 'Spinner';"],"names":["Spinner","forwardRef","size","variant","className","label","props","ref","jsxs","cn","jsx"],"mappings":"8MA2BaA,EAAUC,EAAAA,WAAyC,CAAC,CAC/D,KAAAC,EAAO,KACP,QAAAC,EAAU,UACV,UAAAC,EACA,MAAAC,EAAQ,aACR,GAAGC,CACL,EAAGC,IAECC,EAAAA,KAAC,MAAA,CACC,IAAAD,EACA,KAAK,SACL,aAAYF,EACZ,UAAWI,EAAAA,GACT,cACA,gBAAgBP,CAAI,GACpB,gBAAgBC,CAAO,GACvBC,CAAA,EAED,GAAGE,EAEJ,SAAA,CAAAE,EAAAA,KAAC,MAAA,CACC,UAAU,mBACV,MAAM,6BACN,KAAK,OACL,QAAQ,YACR,cAAY,OAGZ,SAAA,CAAAE,EAAAA,IAAC,SAAA,CACC,UAAU,qBACV,GAAG,KACH,GAAG,KACH,EAAE,KACF,OAAO,eACP,YAAY,GAAA,CAAA,EAGdA,EAAAA,IAAC,OAAA,CACC,UAAU,oBACV,KAAK,eACL,EAAE,iHAAA,CAAA,CACJ,CAAA,CAAA,EAIFA,EAAAA,IAAC,OAAA,CAAK,UAAU,uBAAwB,SAAAL,CAAA,CAAM,CAAA,CAAA,CAAA,CAGnD,EAEDL,EAAQ,YAAc"}
@@ -1,21 +1,64 @@
1
- import { jsx as i } from "react/jsx-runtime";
1
+ import { jsxs as i, jsx as r } from "react/jsx-runtime";
2
+ import { forwardRef as p } from "react";
2
3
  /* empty css */
3
- function l({
4
- size: r = "md",
5
- className: n = "",
6
- label: e = "Loading"
7
- }) {
8
- return /* @__PURE__ */ i(
9
- "div",
10
- {
11
- className: `ui-spinner ui-spinner--${r} ${n}`,
12
- role: "status",
13
- "aria-label": e,
14
- children: /* @__PURE__ */ i("div", { className: "ui-spinner-circle" })
15
- }
16
- );
17
- }
4
+ import { cn as t } from "../../utils/cn/cn.js";
5
+ const c = p(({
6
+ size: e = "md",
7
+ variant: s = "primary",
8
+ className: a,
9
+ label: n = "Loading...",
10
+ ...o
11
+ }, l) => /* @__PURE__ */ i(
12
+ "div",
13
+ {
14
+ ref: l,
15
+ role: "status",
16
+ "aria-label": n,
17
+ className: t(
18
+ "nui-spinner",
19
+ `nui-spinner--${e}`,
20
+ `nui-spinner--${s}`,
21
+ a
22
+ ),
23
+ ...o,
24
+ children: [
25
+ /* @__PURE__ */ i(
26
+ "svg",
27
+ {
28
+ className: "nui-spinner__svg",
29
+ xmlns: "http://www.w3.org/2000/svg",
30
+ fill: "none",
31
+ viewBox: "0 0 24 24",
32
+ "aria-hidden": "true",
33
+ children: [
34
+ /* @__PURE__ */ r(
35
+ "circle",
36
+ {
37
+ className: "nui-spinner__track",
38
+ cx: "12",
39
+ cy: "12",
40
+ r: "10",
41
+ stroke: "currentColor",
42
+ strokeWidth: "3"
43
+ }
44
+ ),
45
+ /* @__PURE__ */ r(
46
+ "path",
47
+ {
48
+ className: "nui-spinner__head",
49
+ fill: "currentColor",
50
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
51
+ }
52
+ )
53
+ ]
54
+ }
55
+ ),
56
+ /* @__PURE__ */ r("span", { className: "nui-spinner__sr-only", children: n })
57
+ ]
58
+ }
59
+ ));
60
+ c.displayName = "Spinner";
18
61
  export {
19
- l as Spinner
62
+ c as Spinner
20
63
  };
21
64
  //# sourceMappingURL=Spinner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Spinner.js","sources":["../../../src/components/spinner/Spinner.tsx"],"sourcesContent":["/**\r\n * Spinner.tsx FINAL VERSION\r\n * ----------------------------\r\n * Accessible, theme-aware loading indicator.\r\n */\r\n\r\nimport './Spinner.css';\r\n\r\nexport interface SpinnerProps {\r\n size?: 'sm' | 'md' | 'lg';\r\n className?: string;\r\n label?: string; // screen reader text\r\n}\r\n\r\nexport function Spinner({\r\n size = 'md',\r\n className = '',\r\n label = 'Loading',\r\n}: SpinnerProps) {\r\n return (\r\n <div\r\n className={`ui-spinner ui-spinner--${size} ${className}`}\r\n role=\"status\"\r\n aria-label={label}\r\n >\r\n <div className=\"ui-spinner-circle\" />\r\n </div>\r\n );\r\n}\r\n"],"names":["Spinner","size","className","label","jsx"],"mappings":";;AAcO,SAASA,EAAQ;AAAA,EACtB,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,OAAAC,IAAQ;AACV,GAAiB;AACf,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,0BAA0BH,CAAI,IAAIC,CAAS;AAAA,MACtD,MAAK;AAAA,MACL,cAAYC;AAAA,MAEZ,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,oBAAA,CAAoB;AAAA,IAAA;AAAA,EAAA;AAGzC;"}
1
+ {"version":3,"file":"Spinner.js","sources":["../../../src/components/spinner/Spinner.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport './Spinner.css';\n\n/* ============================================================\n * Types\n * ============================================================ */\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The predefined size of the spinner. Defaults to 'md'. */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** The color theme variant. Defaults to 'primary'. */\n variant?: 'primary' | 'muted' | 'inverse';\n /** WAI-ARIA label read by screen readers. Defaults to 'Loading...'. */\n label?: string;\n}\n\n/* ============================================================\n * Component\n * ============================================================ */\n\n/**\n * Spinner Component\n * * A visual indicator for loading states.\n * * WAI-ARIA compliant: Uses role=\"status\" to announce the loading state politely\n * to screen readers without immediately interrupting the user.\n */\nexport const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(({\n size = 'md',\n variant = 'primary',\n className,\n label = 'Loading...',\n ...props\n}, ref) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label}\n className={cn(\n \"nui-spinner\",\n `nui-spinner--${size}`,\n `nui-spinner--${variant}`,\n className\n )}\n {...props}\n >\n <svg\n className=\"nui-spinner__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\" /* Hide SVG itself, relying on the aria-label and hidden text */\n >\n {/* The faint background track */}\n <circle\n className=\"nui-spinner__track\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n />\n {/* The solid moving head */}\n <path\n className=\"nui-spinner__head\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n \n {/* Visually hidden text fallback for older screen readers */}\n <span className=\"nui-spinner__sr-only\">{label}</span>\n </div>\n );\n});\n\nSpinner.displayName = 'Spinner';"],"names":["Spinner","forwardRef","size","variant","className","label","props","ref","jsxs","cn","jsx"],"mappings":";;;;AA2BO,MAAMA,IAAUC,EAAyC,CAAC;AAAA,EAC/D,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,WAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,GAAGC;AACL,GAAGC,MAEC,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,MAAK;AAAA,IACL,cAAYF;AAAA,IACZ,WAAWI;AAAA,MACT;AAAA,MACA,gBAAgBP,CAAI;AAAA,MACpB,gBAAgBC,CAAO;AAAA,MACvBC;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,IAEJ,UAAA;AAAA,MAAA,gBAAAE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAM;AAAA,UACN,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,eAAY;AAAA,UAGZ,UAAA;AAAA,YAAA,gBAAAE;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,GAAE;AAAA,gBACF,QAAO;AAAA,gBACP,aAAY;AAAA,cAAA;AAAA,YAAA;AAAA,YAGd,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,MAAK;AAAA,gBACL,GAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UACJ;AAAA,QAAA;AAAA,MAAA;AAAA,MAIF,gBAAAA,EAAC,QAAA,EAAK,WAAU,wBAAwB,UAAAL,EAAA,CAAM;AAAA,IAAA;AAAA,EAAA;AAAA,CAGnD;AAEDL,EAAQ,cAAc;"}
@@ -1,6 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");;/* empty css */function u({steps:r,active:l,onChange:c,className:p=""}){const n=t=>typeof t=="string"?t:t.label;return e.jsx("nav",{className:`ui-stepper ${p}`,"aria-label":"Progress Steps",children:e.jsx("ol",{className:"ui-stepper-list",children:r.map((t,s)=>{const i=s===l,a=s<l;return e.jsxs("li",{className:`
2
- ui-stepper-item
3
- ${i?"active":""}
4
- ${a?"completed":""}
5
- `,children:[e.jsxs("button",{className:"ui-stepper-button","aria-current":i?"step":void 0,onClick:()=>c?.(s),children:[e.jsx("div",{className:"ui-stepper-circle",children:a?"✓":s+1}),e.jsx("span",{className:"ui-stepper-label",children:n(t)})]}),s!==r.length-1&&e.jsx("div",{className:"ui-stepper-line"})]},s)})})})}exports.Stepper=u;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("react");;/* empty css */const c=require("../../utils/cn/cn.cjs"),o=b.forwardRef(({steps:u,active:i,onChange:n,className:d,disableFuture:h=!1,...m},j)=>{const _=t=>typeof t=="string"?{label:t}:t;return e.jsx("nav",{ref:j,className:c.cn("nui-stepper-root",d),"aria-label":"Progress Steps",...m,children:e.jsx("ol",{className:"nui-stepper__list",children:u.map((t,s)=>{const r=_(t),l=s===i,a=s<i,p=h&&s>i;return e.jsx("li",{className:c.cn("nui-stepper__item",l&&"active",a&&"completed"),children:e.jsxs("button",{type:"button",className:"nui-stepper__button","aria-current":l?"step":void 0,disabled:p,onClick:()=>{!p&&n&&n(s)},children:[e.jsx("div",{className:"nui-stepper__circle",children:a?e.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})}):e.jsx("span",{"aria-hidden":"true",children:s+1})}),e.jsxs("div",{className:"nui-stepper__content",children:[e.jsxs("span",{className:"nui-stepper__label",children:[e.jsxs("span",{className:"sr-only",children:["Step ",s+1,": "]}),r.label,r.optional&&e.jsx("span",{className:"nui-stepper__optional",children:"(Optional)"})]}),r.description&&e.jsx("span",{className:"nui-stepper__description",children:r.description})]})]})},s)})})})});o.displayName="Stepper";exports.Stepper=o;
6
2
  //# sourceMappingURL=Stepper.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stepper.cjs","sources":["../../../src/components/stepper/Stepper.tsx"],"sourcesContent":["/**\r\n * Stepper.tsx FINAL VERSION\r\n * ----------------------------\r\n * Features:\r\n * - Linear step navigation\r\n * - Clickable steps\r\n * - Keyboard navigation\r\n * - ARIA labels\r\n * - Full theme support\r\n * - Minimal, clean API\r\n */\r\n\r\nimport React from 'react';\r\nimport './Stepper.css';\r\n\r\nexport interface StepItem {\r\n label: React.ReactNode;\r\n}\r\n\r\nexport interface StepperProps {\r\n steps: (string | StepItem)[];\r\n active: number; // 0-based active index\r\n onChange?: (index: number) => void;\r\n className?: string;\r\n}\r\n\r\nexport function Stepper({\r\n steps,\r\n active,\r\n onChange,\r\n className = '',\r\n}: StepperProps) {\r\n const getLabel = (s: string | StepItem) =>\r\n typeof s === 'string' ? s : s.label;\r\n\r\n return (\r\n <nav className={`ui-stepper ${className}`} aria-label=\"Progress Steps\">\r\n <ol className=\"ui-stepper-list\">\r\n {steps.map((step, index) => {\r\n const isActive = index === active;\r\n const isCompleted = index < active;\r\n\r\n return (\r\n <li\r\n key={index}\r\n className={`\r\n ui-stepper-item \r\n ${isActive ? 'active' : ''} \r\n ${isCompleted ? 'completed' : ''}\r\n `}\r\n >\r\n <button\r\n className=\"ui-stepper-button\"\r\n aria-current={isActive ? 'step' : undefined}\r\n onClick={() => onChange?.(index)}\r\n >\r\n <div className=\"ui-stepper-circle\">\r\n {isCompleted ? '✓' : index + 1}\r\n </div>\r\n\r\n <span className=\"ui-stepper-label\">{getLabel(step)}</span>\r\n </button>\r\n\r\n {/* Connector Line */}\r\n {index !== steps.length - 1 && (\r\n <div className=\"ui-stepper-line\" />\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ol>\r\n </nav>\r\n );\r\n}\r\n"],"names":["Stepper","steps","active","onChange","className","getLabel","s","jsx","step","index","isActive","isCompleted","jsxs"],"mappings":"kJA0BO,SAASA,EAAQ,CACtB,MAAAC,EACA,OAAAC,EACA,SAAAC,EACA,UAAAC,EAAY,EACd,EAAiB,CACf,MAAMC,EAAYC,GAChB,OAAOA,GAAM,SAAWA,EAAIA,EAAE,MAEhC,aACG,MAAA,CAAI,UAAW,cAAcF,CAAS,GAAI,aAAW,iBACpD,SAAAG,EAAAA,IAAC,KAAA,CAAG,UAAU,kBACX,SAAAN,EAAM,IAAI,CAACO,EAAMC,IAAU,CAC1B,MAAMC,EAAWD,IAAUP,EACrBS,EAAcF,EAAQP,EAE5B,OACEU,EAAAA,KAAC,KAAA,CAEC,UAAW;AAAA;AAAA,kBAEPF,EAAW,SAAW,EAAE;AAAA,kBACxBC,EAAc,YAAc,EAAE;AAAA,gBAGlC,SAAA,CAAAC,EAAAA,KAAC,SAAA,CACC,UAAU,oBACV,eAAcF,EAAW,OAAS,OAClC,QAAS,IAAMP,IAAWM,CAAK,EAE/B,SAAA,CAAAF,MAAC,OAAI,UAAU,oBACZ,SAAAI,EAAc,IAAMF,EAAQ,EAC/B,QAEC,OAAA,CAAK,UAAU,mBAAoB,SAAAJ,EAASG,CAAI,CAAA,CAAE,CAAA,CAAA,CAAA,EAIpDC,IAAUR,EAAM,OAAS,GACxBM,EAAAA,IAAC,MAAA,CAAI,UAAU,iBAAA,CAAkB,CAAA,CAAA,EArB9BE,CAAA,CAyBX,CAAC,EACH,EACF,CAEJ"}
1
+ {"version":3,"file":"Stepper.cjs","sources":["../../../src/components/stepper/Stepper.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport './Stepper.css';\n\n/* ============================================================\n * Types\n * ============================================================ */\n\nexport interface StepItem {\n /** The primary title of the step */\n label: React.ReactNode;\n /** Secondary descriptive text displayed below the label */\n description?: React.ReactNode;\n /** Marks the step with an \"(Optional)\" tag */\n optional?: boolean;\n}\n\nexport interface StepperProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange'> {\n /** Array of steps. Can be simple strings or rich objects. */\n steps: (string | StepItem)[];\n /** The 0-based index of the currently active step. */\n active: number;\n /** Callback fired when a step is clicked. */\n onChange?: (index: number) => void;\n /** Prevents the user from clicking on steps that come after the currently active one. */\n disableFuture?: boolean; \n}\n\n/* ============================================================\n * Component\n * ============================================================ */\n\n/**\n * Stepper Component\n * * A visual indicator for multi-step workflows.\n * * Uses standard `<nav>` and `<ol>` HTML elements for strict WAI-ARIA compliance.\n */\nexport const Stepper = forwardRef<HTMLElement, StepperProps>(({\n steps,\n active,\n onChange,\n className,\n disableFuture = false,\n ...props\n}, ref) => {\n \n // Helper to normalize string arrays into StepItem objects\n const getStepData = (s: string | StepItem): StepItem => {\n if (typeof s === 'string') return { label: s };\n return s;\n };\n\n return (\n <nav \n ref={ref}\n className={cn(\"nui-stepper-root\", className)} \n aria-label=\"Progress Steps\"\n {...props}\n >\n <ol className=\"nui-stepper__list\">\n {steps.map((rawStep, index) => {\n const step = getStepData(rawStep);\n const isActive = index === active;\n const isCompleted = index < active;\n const isDisabled = disableFuture && index > active;\n\n return (\n <li\n key={index}\n className={cn(\n \"nui-stepper__item\",\n isActive && \"active\",\n isCompleted && \"completed\"\n )}\n >\n <button\n type=\"button\"\n className=\"nui-stepper__button\"\n aria-current={isActive ? 'step' : undefined}\n disabled={isDisabled}\n onClick={() => {\n if (!isDisabled && onChange) onChange(index);\n }}\n >\n {/* Circle Indicator */}\n <div className=\"nui-stepper__circle\">\n {isCompleted ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n ) : (\n <span aria-hidden=\"true\">{index + 1}</span>\n )}\n </div>\n\n {/* Text Content */}\n <div className=\"nui-stepper__content\">\n <span className=\"nui-stepper__label\">\n {/* Invisible text for screen readers so they announce \"Step 1: Shipping\" */}\n <span className=\"sr-only\">Step {index + 1}: </span>\n {step.label}\n {step.optional && (\n <span className=\"nui-stepper__optional\">(Optional)</span>\n )}\n </span>\n {step.description && (\n <span className=\"nui-stepper__description\">\n {step.description}\n </span>\n )}\n </div>\n </button>\n </li>\n );\n })}\n </ol>\n </nav>\n );\n});\n\nStepper.displayName = 'Stepper';"],"names":["Stepper","forwardRef","steps","active","onChange","className","disableFuture","props","ref","getStepData","s","jsx","cn","rawStep","index","step","isActive","isCompleted","isDisabled","jsxs"],"mappings":"8MAqCaA,EAAUC,EAAAA,WAAsC,CAAC,CAC5D,MAAAC,EACA,OAAAC,EACA,SAAAC,EACA,UAAAC,EACA,cAAAC,EAAgB,GAChB,GAAGC,CACL,EAAGC,IAAQ,CAGT,MAAMC,EAAeC,GACf,OAAOA,GAAM,SAAiB,CAAE,MAAOA,CAAA,EACpCA,EAGT,OACEC,EAAAA,IAAC,MAAA,CACC,IAAAH,EACA,UAAWI,EAAAA,GAAG,mBAAoBP,CAAS,EAC3C,aAAW,iBACV,GAAGE,EAEJ,SAAAI,EAAAA,IAAC,MAAG,UAAU,oBACX,WAAM,IAAI,CAACE,EAASC,IAAU,CAC7B,MAAMC,EAAON,EAAYI,CAAO,EAC1BG,EAAWF,IAAUX,EACrBc,EAAcH,EAAQX,EACtBe,EAAaZ,GAAiBQ,EAAQX,EAE5C,OACEQ,EAAAA,IAAC,KAAA,CAEC,UAAWC,EAAAA,GACT,oBACAI,GAAY,SACZC,GAAe,WAAA,EAGjB,SAAAE,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,UAAU,sBACV,eAAcH,EAAW,OAAS,OAClC,SAAUE,EACV,QAAS,IAAM,CACT,CAACA,GAAcd,GAAUA,EAASU,CAAK,CAC7C,EAGA,SAAA,CAAAH,MAAC,OAAI,UAAU,sBACZ,SAAAM,EACCN,EAAAA,IAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,OAAO,eAAe,YAAY,IAAI,cAAc,QAAQ,eAAe,QAAQ,cAAY,OACzJ,SAAAA,MAAC,YAAS,OAAO,gBAAA,CAAiB,CAAA,CACpC,QAEC,OAAA,CAAK,cAAY,OAAQ,SAAAG,EAAQ,EAAE,EAExC,EAGAK,EAAAA,KAAC,MAAA,CAAI,UAAU,uBACb,SAAA,CAAAA,EAAAA,KAAC,OAAA,CAAK,UAAU,qBAEd,SAAA,CAAAA,EAAAA,KAAC,OAAA,CAAK,UAAU,UAAU,SAAA,CAAA,QAAML,EAAQ,EAAE,IAAA,EAAE,EAC3CC,EAAK,MACLA,EAAK,UACJJ,EAAAA,IAAC,OAAA,CAAK,UAAU,wBAAwB,SAAA,YAAA,CAAU,CAAA,EAEtD,EACCI,EAAK,aACJJ,EAAAA,IAAC,QAAK,UAAU,2BACb,WAAK,WAAA,CACR,CAAA,CAAA,CAEJ,CAAA,CAAA,CAAA,CACF,EA3CKG,CAAA,CA8CX,CAAC,CAAA,CACH,CAAA,CAAA,CAGN,CAAC,EAEDd,EAAQ,YAAc"}
@@ -1,43 +1,69 @@
1
- import { jsx as t, jsxs as p } from "react/jsx-runtime";
1
+ import { jsx as e, jsxs as i } from "react/jsx-runtime";
2
+ import { forwardRef as f } from "react";
2
3
  /* empty css */
3
- function h({
4
- steps: r,
5
- active: l,
6
- onChange: c,
7
- className: n = ""
8
- }) {
9
- const o = (s) => typeof s == "string" ? s : s.label;
10
- return /* @__PURE__ */ t("nav", { className: `ui-stepper ${n}`, "aria-label": "Progress Steps", children: /* @__PURE__ */ t("ol", { className: "ui-stepper-list", children: r.map((s, e) => {
11
- const i = e === l, a = e < l;
12
- return /* @__PURE__ */ p(
13
- "li",
14
- {
15
- className: `
16
- ui-stepper-item
17
- ${i ? "active" : ""}
18
- ${a ? "completed" : ""}
19
- `,
20
- children: [
21
- /* @__PURE__ */ p(
22
- "button",
23
- {
24
- className: "ui-stepper-button",
25
- "aria-current": i ? "step" : void 0,
26
- onClick: () => c?.(e),
27
- children: [
28
- /* @__PURE__ */ t("div", { className: "ui-stepper-circle", children: a ? "" : e + 1 }),
29
- /* @__PURE__ */ t("span", { className: "ui-stepper-label", children: o(s) })
30
- ]
31
- }
32
- ),
33
- e !== r.length - 1 && /* @__PURE__ */ t("div", { className: "ui-stepper-line" })
34
- ]
35
- },
36
- e
37
- );
38
- }) }) });
39
- }
4
+ import { cn as c } from "../../utils/cn/cn.js";
5
+ const b = f(({
6
+ steps: d,
7
+ active: n,
8
+ onChange: p,
9
+ className: m,
10
+ disableFuture: u = !1,
11
+ ...h
12
+ }, _) => {
13
+ const N = (t) => typeof t == "string" ? { label: t } : t;
14
+ return /* @__PURE__ */ e(
15
+ "nav",
16
+ {
17
+ ref: _,
18
+ className: c("nui-stepper-root", m),
19
+ "aria-label": "Progress Steps",
20
+ ...h,
21
+ children: /* @__PURE__ */ e("ol", { className: "nui-stepper__list", children: d.map((t, r) => {
22
+ const s = N(t), l = r === n, a = r < n, o = u && r > n;
23
+ return /* @__PURE__ */ e(
24
+ "li",
25
+ {
26
+ className: c(
27
+ "nui-stepper__item",
28
+ l && "active",
29
+ a && "completed"
30
+ ),
31
+ children: /* @__PURE__ */ i(
32
+ "button",
33
+ {
34
+ type: "button",
35
+ className: "nui-stepper__button",
36
+ "aria-current": l ? "step" : void 0,
37
+ disabled: o,
38
+ onClick: () => {
39
+ !o && p && p(r);
40
+ },
41
+ children: [
42
+ /* @__PURE__ */ e("div", { className: "nui-stepper__circle", children: a ? /* @__PURE__ */ e("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ e("polyline", { points: "20 6 9 17 4 12" }) }) : /* @__PURE__ */ e("span", { "aria-hidden": "true", children: r + 1 }) }),
43
+ /* @__PURE__ */ i("div", { className: "nui-stepper__content", children: [
44
+ /* @__PURE__ */ i("span", { className: "nui-stepper__label", children: [
45
+ /* @__PURE__ */ i("span", { className: "sr-only", children: [
46
+ "Step ",
47
+ r + 1,
48
+ ": "
49
+ ] }),
50
+ s.label,
51
+ s.optional && /* @__PURE__ */ e("span", { className: "nui-stepper__optional", children: "(Optional)" })
52
+ ] }),
53
+ s.description && /* @__PURE__ */ e("span", { className: "nui-stepper__description", children: s.description })
54
+ ] })
55
+ ]
56
+ }
57
+ )
58
+ },
59
+ r
60
+ );
61
+ }) })
62
+ }
63
+ );
64
+ });
65
+ b.displayName = "Stepper";
40
66
  export {
41
- h as Stepper
67
+ b as Stepper
42
68
  };
43
69
  //# sourceMappingURL=Stepper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stepper.js","sources":["../../../src/components/stepper/Stepper.tsx"],"sourcesContent":["/**\r\n * Stepper.tsx FINAL VERSION\r\n * ----------------------------\r\n * Features:\r\n * - Linear step navigation\r\n * - Clickable steps\r\n * - Keyboard navigation\r\n * - ARIA labels\r\n * - Full theme support\r\n * - Minimal, clean API\r\n */\r\n\r\nimport React from 'react';\r\nimport './Stepper.css';\r\n\r\nexport interface StepItem {\r\n label: React.ReactNode;\r\n}\r\n\r\nexport interface StepperProps {\r\n steps: (string | StepItem)[];\r\n active: number; // 0-based active index\r\n onChange?: (index: number) => void;\r\n className?: string;\r\n}\r\n\r\nexport function Stepper({\r\n steps,\r\n active,\r\n onChange,\r\n className = '',\r\n}: StepperProps) {\r\n const getLabel = (s: string | StepItem) =>\r\n typeof s === 'string' ? s : s.label;\r\n\r\n return (\r\n <nav className={`ui-stepper ${className}`} aria-label=\"Progress Steps\">\r\n <ol className=\"ui-stepper-list\">\r\n {steps.map((step, index) => {\r\n const isActive = index === active;\r\n const isCompleted = index < active;\r\n\r\n return (\r\n <li\r\n key={index}\r\n className={`\r\n ui-stepper-item \r\n ${isActive ? 'active' : ''} \r\n ${isCompleted ? 'completed' : ''}\r\n `}\r\n >\r\n <button\r\n className=\"ui-stepper-button\"\r\n aria-current={isActive ? 'step' : undefined}\r\n onClick={() => onChange?.(index)}\r\n >\r\n <div className=\"ui-stepper-circle\">\r\n {isCompleted ? '✓' : index + 1}\r\n </div>\r\n\r\n <span className=\"ui-stepper-label\">{getLabel(step)}</span>\r\n </button>\r\n\r\n {/* Connector Line */}\r\n {index !== steps.length - 1 && (\r\n <div className=\"ui-stepper-line\" />\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ol>\r\n </nav>\r\n );\r\n}\r\n"],"names":["Stepper","steps","active","onChange","className","getLabel","jsx","step","index","isActive","isCompleted","jsxs"],"mappings":";;AA0BO,SAASA,EAAQ;AAAA,EACtB,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAAiB;AACf,QAAMC,IAAW,CAAC,MAChB,OAAO,KAAM,WAAW,IAAI,EAAE;AAEhC,2BACG,OAAA,EAAI,WAAW,cAAcD,CAAS,IAAI,cAAW,kBACpD,UAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,mBACX,UAAAL,EAAM,IAAI,CAACM,GAAMC,MAAU;AAC1B,UAAMC,IAAWD,MAAUN,GACrBQ,IAAcF,IAAQN;AAE5B,WACE,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAW;AAAA;AAAA,kBAEPF,IAAW,WAAW,EAAE;AAAA,kBACxBC,IAAc,cAAc,EAAE;AAAA;AAAA,QAGlC,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,gBAAcF,IAAW,SAAS;AAAA,cAClC,SAAS,MAAMN,IAAWK,CAAK;AAAA,cAE/B,UAAA;AAAA,gBAAA,gBAAAF,EAAC,SAAI,WAAU,qBACZ,UAAAI,IAAc,MAAMF,IAAQ,GAC/B;AAAA,kCAEC,QAAA,EAAK,WAAU,oBAAoB,UAAAH,EAASE,CAAI,EAAA,CAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAIpDC,MAAUP,EAAM,SAAS,KACxB,gBAAAK,EAAC,OAAA,EAAI,WAAU,kBAAA,CAAkB;AAAA,QAAA;AAAA,MAAA;AAAA,MArB9BE;AAAA,IAAA;AAAA,EAyBX,CAAC,GACH,GACF;AAEJ;"}
1
+ {"version":3,"file":"Stepper.js","sources":["../../../src/components/stepper/Stepper.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport './Stepper.css';\n\n/* ============================================================\n * Types\n * ============================================================ */\n\nexport interface StepItem {\n /** The primary title of the step */\n label: React.ReactNode;\n /** Secondary descriptive text displayed below the label */\n description?: React.ReactNode;\n /** Marks the step with an \"(Optional)\" tag */\n optional?: boolean;\n}\n\nexport interface StepperProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange'> {\n /** Array of steps. Can be simple strings or rich objects. */\n steps: (string | StepItem)[];\n /** The 0-based index of the currently active step. */\n active: number;\n /** Callback fired when a step is clicked. */\n onChange?: (index: number) => void;\n /** Prevents the user from clicking on steps that come after the currently active one. */\n disableFuture?: boolean; \n}\n\n/* ============================================================\n * Component\n * ============================================================ */\n\n/**\n * Stepper Component\n * * A visual indicator for multi-step workflows.\n * * Uses standard `<nav>` and `<ol>` HTML elements for strict WAI-ARIA compliance.\n */\nexport const Stepper = forwardRef<HTMLElement, StepperProps>(({\n steps,\n active,\n onChange,\n className,\n disableFuture = false,\n ...props\n}, ref) => {\n \n // Helper to normalize string arrays into StepItem objects\n const getStepData = (s: string | StepItem): StepItem => {\n if (typeof s === 'string') return { label: s };\n return s;\n };\n\n return (\n <nav \n ref={ref}\n className={cn(\"nui-stepper-root\", className)} \n aria-label=\"Progress Steps\"\n {...props}\n >\n <ol className=\"nui-stepper__list\">\n {steps.map((rawStep, index) => {\n const step = getStepData(rawStep);\n const isActive = index === active;\n const isCompleted = index < active;\n const isDisabled = disableFuture && index > active;\n\n return (\n <li\n key={index}\n className={cn(\n \"nui-stepper__item\",\n isActive && \"active\",\n isCompleted && \"completed\"\n )}\n >\n <button\n type=\"button\"\n className=\"nui-stepper__button\"\n aria-current={isActive ? 'step' : undefined}\n disabled={isDisabled}\n onClick={() => {\n if (!isDisabled && onChange) onChange(index);\n }}\n >\n {/* Circle Indicator */}\n <div className=\"nui-stepper__circle\">\n {isCompleted ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n ) : (\n <span aria-hidden=\"true\">{index + 1}</span>\n )}\n </div>\n\n {/* Text Content */}\n <div className=\"nui-stepper__content\">\n <span className=\"nui-stepper__label\">\n {/* Invisible text for screen readers so they announce \"Step 1: Shipping\" */}\n <span className=\"sr-only\">Step {index + 1}: </span>\n {step.label}\n {step.optional && (\n <span className=\"nui-stepper__optional\">(Optional)</span>\n )}\n </span>\n {step.description && (\n <span className=\"nui-stepper__description\">\n {step.description}\n </span>\n )}\n </div>\n </button>\n </li>\n );\n })}\n </ol>\n </nav>\n );\n});\n\nStepper.displayName = 'Stepper';"],"names":["Stepper","forwardRef","steps","active","onChange","className","disableFuture","props","ref","getStepData","s","jsx","cn","rawStep","index","step","isActive","isCompleted","isDisabled","jsxs"],"mappings":";;;;AAqCO,MAAMA,IAAUC,EAAsC,CAAC;AAAA,EAC5D,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,GAAGC;AACL,GAAGC,MAAQ;AAGT,QAAMC,IAAc,CAACC,MACf,OAAOA,KAAM,WAAiB,EAAE,OAAOA,EAAA,IACpCA;AAGT,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAH;AAAA,MACA,WAAWI,EAAG,oBAAoBP,CAAS;AAAA,MAC3C,cAAW;AAAA,MACV,GAAGE;AAAA,MAEJ,UAAA,gBAAAI,EAAC,QAAG,WAAU,qBACX,YAAM,IAAI,CAACE,GAASC,MAAU;AAC7B,cAAMC,IAAON,EAAYI,CAAO,GAC1BG,IAAWF,MAAUX,GACrBc,IAAcH,IAAQX,GACtBe,IAAaZ,KAAiBQ,IAAQX;AAE5C,eACE,gBAAAQ;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAWC;AAAA,cACT;AAAA,cACAI,KAAY;AAAA,cACZC,KAAe;AAAA,YAAA;AAAA,YAGjB,UAAA,gBAAAE;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,gBAAcH,IAAW,SAAS;AAAA,gBAClC,UAAUE;AAAA,gBACV,SAAS,MAAM;AACb,kBAAI,CAACA,KAAcd,KAAUA,EAASU,CAAK;AAAA,gBAC7C;AAAA,gBAGA,UAAA;AAAA,kBAAA,gBAAAH,EAAC,SAAI,WAAU,uBACZ,UAAAM,IACC,gBAAAN,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,eAAY,QACzJ,UAAA,gBAAAA,EAAC,cAAS,QAAO,iBAAA,CAAiB,EAAA,CACpC,sBAEC,QAAA,EAAK,eAAY,QAAQ,UAAAG,IAAQ,GAAE,GAExC;AAAA,kBAGA,gBAAAK,EAAC,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,oBAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,sBAEd,UAAA;AAAA,sBAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,WAAU,UAAA;AAAA,wBAAA;AAAA,wBAAML,IAAQ;AAAA,wBAAE;AAAA,sBAAA,GAAE;AAAA,sBAC3CC,EAAK;AAAA,sBACLA,EAAK,YACJ,gBAAAJ,EAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,aAAA,CAAU;AAAA,oBAAA,GAEtD;AAAA,oBACCI,EAAK,eACJ,gBAAAJ,EAAC,UAAK,WAAU,4BACb,YAAK,YAAA,CACR;AAAA,kBAAA,EAAA,CAEJ;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,UA3CKG;AAAA,QAAA;AAAA,MA8CX,CAAC,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;AAEDd,EAAQ,cAAc;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),c=require("react");;/* empty css */function I({checked:a,defaultChecked:x,onChange:o,disabled:e=!1,label:l,id:m,name:f,value:p,className:y=""}){const s=a!==void 0,[j,d]=c.useState(x??!1),t=s?a:j,i=c.useRef(null),S=c.useId(),h=m??S;c.useEffect(()=>{const n=i.current;if(!n)return;const v=u=>{if(!e&&(u.key===" "||u.key==="Spacebar")){u.preventDefault();const w=!t;s||d(w),o?.(w)}};return n.addEventListener("keydown",v),()=>{n.removeEventListener("keydown",v)}},[t,e,s,o]);const b=()=>{if(e)return;const n=!t;s||d(n),o?.(n),i.current&&i.current.focus()},k=p??(t?"on":"off");return r.jsxs("label",{className:`ui-switch-root ${y}`,htmlFor:h,"aria-disabled":e||void 0,children:[f&&r.jsx("input",{type:"hidden",name:f,value:t?k:""}),r.jsx("button",{id:h,ref:i,type:"button",role:"switch","aria-checked":t,"aria-disabled":e||void 0,className:"ui-switch-control","data-state":t?"on":"off",onClick:b,tabIndex:e?-1:0,children:r.jsx("span",{className:"ui-switch-thumb","aria-hidden":"true"})}),l&&r.jsx("span",{className:"ui-switch-label",children:l})]})}exports.Switch=I;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),o=require("react");;/* empty css */const u=require("../../utils/cn/cn.cjs"),y=o.forwardRef(({checked:h,defaultChecked:_,onChange:k,disabled:c=!1,label:r,description:i,id:p,name:d,value:x,size:l="md",className:j,wrapperClassName:v,...w},b)=>{const C=o.useId(),s=p??`nui-switch-${C}`,m=`${s}-description`,f=h!==void 0,[N,S]=o.useState(_??!1),n=f?h:N,a=()=>{if(c)return;const e=!n;f||S(e),k?.(e)},I=e=>{(e.key===" "||e.key==="Enter")&&(e.preventDefault(),a()),w.onKeyDown?.(e)},g=e=>{c||(e.preventDefault(),a(),document.getElementById(s)?.focus())},D=x??(n?"on":"off");return t.jsxs("div",{className:u.cn("nui-switch-wrapper",c&&"nui-switch-wrapper--disabled",v),children:[d&&t.jsx("input",{type:"hidden",name:d,value:n?D:""}),t.jsx("button",{ref:b,id:s,type:"button",role:"switch","aria-checked":n,"aria-disabled":c,"aria-describedby":i?m:void 0,className:u.cn("nui-switch",`nui-switch--${l}`,n&&"nui-switch--checked",j),onClick:a,onKeyDown:I,disabled:c,...w,children:t.jsx("span",{className:u.cn("nui-switch__thumb",`nui-switch__thumb--${l}`,n&&"nui-switch__thumb--checked"),"aria-hidden":"true"})}),(r||i)&&t.jsxs("div",{className:"nui-switch__text-container",children:[r&&t.jsx("label",{htmlFor:s,className:"nui-switch__label",onClick:g,children:r}),i&&t.jsx("div",{id:m,className:"nui-switch__description",children:i})]})]})});y.displayName="Switch";exports.Switch=y;
2
2
  //# sourceMappingURL=Switch.cjs.map