@nofinite/nui 1.1.2 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +120 -106
  217. package/dist/index.js.map +1 -1
  218. package/dist/package.json +49 -6
  219. package/dist/types/components/accordion/Accordion.d.ts +7 -3
  220. package/dist/types/components/accordion/Accordion.d.ts.map +1 -1
  221. package/dist/types/components/alert/Alert.d.ts +18 -5
  222. package/dist/types/components/alert/Alert.d.ts.map +1 -1
  223. package/dist/types/components/avatar/Avatar.d.ts +12 -8
  224. package/dist/types/components/avatar/Avatar.d.ts.map +1 -1
  225. package/dist/types/components/avatar/AvatarGroup.d.ts +11 -4
  226. package/dist/types/components/avatar/AvatarGroup.d.ts.map +1 -1
  227. package/dist/types/components/badge/Badge.d.ts +19 -11
  228. package/dist/types/components/badge/Badge.d.ts.map +1 -1
  229. package/dist/types/components/badge/BadgeGroup.d.ts +7 -4
  230. package/dist/types/components/badge/BadgeGroup.d.ts.map +1 -1
  231. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +14 -6
  232. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  233. package/dist/types/components/button/Button.d.ts +25 -10
  234. package/dist/types/components/button/Button.d.ts.map +1 -1
  235. package/dist/types/components/card/Card.d.ts +12 -21
  236. package/dist/types/components/card/Card.d.ts.map +1 -1
  237. package/dist/types/components/checkbox/Checkbox.d.ts +12 -7
  238. package/dist/types/components/checkbox/Checkbox.d.ts.map +1 -1
  239. package/dist/types/components/chip/Chip.d.ts +14 -11
  240. package/dist/types/components/chip/Chip.d.ts.map +1 -1
  241. package/dist/types/components/combobox/Combobox.d.ts +15 -4
  242. package/dist/types/components/combobox/Combobox.d.ts.map +1 -1
  243. package/dist/types/components/commandpalette/CommandPalette.d.ts +12 -3
  244. package/dist/types/components/commandpalette/CommandPalette.d.ts.map +1 -1
  245. package/dist/types/components/contextmenu/ContextMenu.d.ts +14 -6
  246. package/dist/types/components/contextmenu/ContextMenu.d.ts.map +1 -1
  247. package/dist/types/components/datagrid/DataGrid.d.ts +16 -4
  248. package/dist/types/components/datagrid/DataGrid.d.ts.map +1 -1
  249. package/dist/types/components/datepicker/DatePicker.d.ts +13 -1
  250. package/dist/types/components/datepicker/DatePicker.d.ts.map +1 -1
  251. package/dist/types/components/daterangepicker/DateRangePicker.d.ts +3 -1
  252. package/dist/types/components/daterangepicker/DateRangePicker.d.ts.map +1 -1
  253. package/dist/types/components/dialog/DialogProvider.d.ts +2 -0
  254. package/dist/types/components/dialog/DialogProvider.d.ts.map +1 -0
  255. package/dist/types/components/dialog/dialogStore.d.ts +42 -0
  256. package/dist/types/components/dialog/dialogStore.d.ts.map +1 -0
  257. package/dist/types/components/drawer/Drawer.d.ts +18 -4
  258. package/dist/types/components/drawer/Drawer.d.ts.map +1 -1
  259. package/dist/types/components/dropdown/Dropdown.d.ts +21 -16
  260. package/dist/types/components/dropdown/Dropdown.d.ts.map +1 -1
  261. package/dist/types/components/fileuploader/FileUploader.d.ts +22 -3
  262. package/dist/types/components/fileuploader/FileUploader.d.ts.map +1 -1
  263. package/dist/types/components/hovercard/HoverCard.d.ts +45 -5
  264. package/dist/types/components/hovercard/HoverCard.d.ts.map +1 -1
  265. package/dist/types/components/input/Input.d.ts +20 -10
  266. package/dist/types/components/input/Input.d.ts.map +1 -1
  267. package/dist/types/components/layout/Container.d.ts +8 -4
  268. package/dist/types/components/layout/Container.d.ts.map +1 -1
  269. package/dist/types/components/layout/Flex.d.ts +27 -10
  270. package/dist/types/components/layout/Flex.d.ts.map +1 -1
  271. package/dist/types/components/layout/Grid.d.ts +11 -5
  272. package/dist/types/components/layout/Grid.d.ts.map +1 -1
  273. package/dist/types/components/link/Link.d.ts +22 -0
  274. package/dist/types/components/link/Link.d.ts.map +1 -0
  275. package/dist/types/components/megamenu/MegaMenu.d.ts +8 -11
  276. package/dist/types/components/megamenu/MegaMenu.d.ts.map +1 -1
  277. package/dist/types/components/modal/Modal.d.ts +8 -7
  278. package/dist/types/components/modal/Modal.d.ts.map +1 -1
  279. package/dist/types/components/multiselect/MultiSelect.d.ts +33 -0
  280. package/dist/types/components/multiselect/MultiSelect.d.ts.map +1 -0
  281. package/dist/types/components/nuiprovider/NUIProvider.d.ts +29 -0
  282. package/dist/types/components/nuiprovider/NUIProvider.d.ts.map +1 -0
  283. package/dist/types/components/pagination/Pagination.d.ts +17 -3
  284. package/dist/types/components/pagination/Pagination.d.ts.map +1 -1
  285. package/dist/types/components/popover/Popover.d.ts +54 -16
  286. package/dist/types/components/popover/Popover.d.ts.map +1 -1
  287. package/dist/types/components/progress/Progress.d.ts +17 -7
  288. package/dist/types/components/progress/Progress.d.ts.map +1 -1
  289. package/dist/types/components/radiogroup/RadioGroup.d.ts +15 -10
  290. package/dist/types/components/radiogroup/RadioGroup.d.ts.map +1 -1
  291. package/dist/types/components/rating/Rating.d.ts +24 -10
  292. package/dist/types/components/rating/Rating.d.ts.map +1 -1
  293. package/dist/types/components/resizable/Resizable.d.ts +24 -0
  294. package/dist/types/components/resizable/Resizable.d.ts.map +1 -0
  295. package/dist/types/components/select/Select.d.ts +17 -8
  296. package/dist/types/components/select/Select.d.ts.map +1 -1
  297. package/dist/types/components/skeleton/Skeleton.d.ts +37 -36
  298. package/dist/types/components/skeleton/Skeleton.d.ts.map +1 -1
  299. package/dist/types/components/slider/Slider.d.ts +15 -4
  300. package/dist/types/components/slider/Slider.d.ts.map +1 -1
  301. package/dist/types/components/spinner/Spinner.d.ts +14 -4
  302. package/dist/types/components/spinner/Spinner.d.ts.map +1 -1
  303. package/dist/types/components/stepper/Stepper.d.ts +17 -3
  304. package/dist/types/components/stepper/Stepper.d.ts.map +1 -1
  305. package/dist/types/components/switch/Switch.d.ts +20 -5
  306. package/dist/types/components/switch/Switch.d.ts.map +1 -1
  307. package/dist/types/components/table/Table.d.ts +24 -4
  308. package/dist/types/components/table/Table.d.ts.map +1 -1
  309. package/dist/types/components/tabs/Tabs.d.ts +25 -12
  310. package/dist/types/components/tabs/Tabs.d.ts.map +1 -1
  311. package/dist/types/components/textarea/Textarea.d.ts +8 -5
  312. package/dist/types/components/textarea/Textarea.d.ts.map +1 -1
  313. package/dist/types/components/timepicker/TimePicker.d.ts +26 -0
  314. package/dist/types/components/timepicker/TimePicker.d.ts.map +1 -0
  315. package/dist/types/components/timerangepicker/TimeRangePicker.d.ts +32 -0
  316. package/dist/types/components/timerangepicker/TimeRangePicker.d.ts.map +1 -0
  317. package/dist/types/components/toast/Toast.d.ts +23 -7
  318. package/dist/types/components/toast/Toast.d.ts.map +1 -1
  319. package/dist/types/components/tooltip/Tooltip.d.ts +13 -2
  320. package/dist/types/components/tooltip/Tooltip.d.ts.map +1 -1
  321. package/dist/types/components/treeview/TreeView.d.ts +20 -6
  322. package/dist/types/components/treeview/TreeView.d.ts.map +1 -1
  323. package/dist/types/components/virtuallist/VirtualList.d.ts +12 -16
  324. package/dist/types/components/virtuallist/VirtualList.d.ts.map +1 -1
  325. package/dist/types/index.d.ts +8 -4
  326. package/dist/types/index.d.ts.map +1 -1
  327. package/dist/types/utils/cn/cn.d.ts +19 -0
  328. package/dist/types/utils/cn/cn.d.ts.map +1 -0
  329. package/dist/types/utils/generateid/generateId.d.ts +7 -0
  330. package/dist/types/utils/generateid/generateId.d.ts.map +1 -1
  331. package/dist/types/utils/index.d.ts +2 -0
  332. package/dist/types/utils/index.d.ts.map +1 -1
  333. package/dist/types/utils/inertmanager/inertManager.d.ts +13 -0
  334. package/dist/types/utils/inertmanager/inertManager.d.ts.map +1 -1
  335. package/dist/types/utils/keyboardnav/keyboardNav.d.ts +17 -6
  336. package/dist/types/utils/keyboardnav/keyboardNav.d.ts.map +1 -1
  337. package/dist/types/utils/onclickoutside/onClickOutside.d.ts +9 -1
  338. package/dist/types/utils/onclickoutside/onClickOutside.d.ts.map +1 -1
  339. package/dist/types/utils/portal/portal.d.ts +14 -1
  340. package/dist/types/utils/portal/portal.d.ts.map +1 -1
  341. package/dist/types/utils/restorefocus/restoreFocus.d.ts +8 -4
  342. package/dist/types/utils/restorefocus/restoreFocus.d.ts.map +1 -1
  343. package/dist/types/utils/scrolllock/scrollLock.d.ts +10 -2
  344. package/dist/types/utils/scrolllock/scrollLock.d.ts.map +1 -1
  345. package/dist/types/utils/slot/slot.d.ts +12 -0
  346. package/dist/types/utils/slot/slot.d.ts.map +1 -0
  347. package/dist/types/utils/trapfocus/trapFocus.d.ts +6 -2
  348. package/dist/types/utils/trapfocus/trapFocus.d.ts.map +1 -1
  349. package/dist/utils/cn/cn.cjs +2 -0
  350. package/dist/utils/cn/cn.cjs.map +1 -0
  351. package/dist/utils/cn/cn.js +21 -0
  352. package/dist/utils/cn/cn.js.map +1 -0
  353. package/dist/utils/inertmanager/inertManager.cjs.map +1 -1
  354. package/dist/utils/inertmanager/inertManager.js.map +1 -1
  355. package/dist/utils/onclickoutside/onClickOutside.cjs +1 -1
  356. package/dist/utils/onclickoutside/onClickOutside.cjs.map +1 -1
  357. package/dist/utils/onclickoutside/onClickOutside.js +10 -6
  358. package/dist/utils/onclickoutside/onClickOutside.js.map +1 -1
  359. package/dist/utils/portal/portal.cjs.map +1 -1
  360. package/dist/utils/portal/portal.js.map +1 -1
  361. package/dist/utils/restorefocus/restoreFocus.cjs.map +1 -1
  362. package/dist/utils/restorefocus/restoreFocus.js.map +1 -1
  363. package/dist/utils/scrolllock/scrollLock.cjs.map +1 -1
  364. package/dist/utils/scrolllock/scrollLock.js +7 -0
  365. package/dist/utils/scrolllock/scrollLock.js.map +1 -1
  366. package/dist/utils/slot/slot.cjs +2 -0
  367. package/dist/utils/slot/slot.cjs.map +1 -0
  368. package/dist/utils/slot/slot.js +57 -0
  369. package/dist/utils/slot/slot.js.map +1 -0
  370. package/dist/utils/trapfocus/trapFocus.cjs.map +1 -1
  371. package/dist/utils/trapfocus/trapFocus.js.map +1 -1
  372. package/package.json +49 -6
  373. package/dist/components/layout/HStack.cjs +0 -2
  374. package/dist/components/layout/HStack.cjs.map +0 -1
  375. package/dist/components/layout/HStack.js +0 -9
  376. package/dist/components/layout/HStack.js.map +0 -1
  377. package/dist/components/layout/Stack.cjs +0 -2
  378. package/dist/components/layout/Stack.cjs.map +0 -1
  379. package/dist/components/layout/Stack.js +0 -9
  380. package/dist/components/layout/Stack.js.map +0 -1
  381. package/dist/styles/nui.css +0 -1
  382. package/dist/theme/NUIProvider.cjs +0 -2
  383. package/dist/theme/NUIProvider.cjs.map +0 -1
  384. package/dist/theme/NUIProvider.js +0 -34
  385. package/dist/theme/NUIProvider.js.map +0 -1
  386. package/dist/theme/useTheme.cjs +0 -2
  387. package/dist/theme/useTheme.cjs.map +0 -1
  388. package/dist/theme/useTheme.js +0 -9
  389. package/dist/theme/useTheme.js.map +0 -1
  390. package/dist/types/components/layout/HStack.d.ts +0 -8
  391. package/dist/types/components/layout/HStack.d.ts.map +0 -1
  392. package/dist/types/components/layout/Stack.d.ts +0 -8
  393. package/dist/types/components/layout/Stack.d.ts.map +0 -1
  394. package/dist/types/theme/NUIProvider.d.ts +0 -14
  395. package/dist/types/theme/NUIProvider.d.ts.map +0 -1
  396. package/dist/types/theme/useTheme.d.ts +0 -11
  397. package/dist/types/theme/useTheme.d.ts.map +0 -1
  398. package/dist/utils/generateid/generateId.cjs +0 -2
  399. package/dist/utils/generateid/generateId.cjs.map +0 -1
  400. package/dist/utils/generateid/generateId.js +0 -7
  401. package/dist/utils/generateid/generateId.js.map +0 -1
  402. package/dist/utils/keyboardnav/keyboardNav.cjs +0 -2
  403. package/dist/utils/keyboardnav/keyboardNav.cjs.map +0 -1
  404. package/dist/utils/keyboardnav/keyboardNav.js +0 -10
  405. package/dist/utils/keyboardnav/keyboardNav.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.js","sources":["../../../src/components/avatar/Avatar.tsx"],"sourcesContent":["/**\r\n * Avatar.tsx\r\n * Enterprise-grade Avatar component.\r\n */\r\nimport React, { useState } from 'react';\r\nimport './Avatar.css';\r\n\r\ntype AvatarSize = 'sm' | 'md' | 'lg' | 'xl';\r\ntype AvatarShape = 'circle' | 'rounded' | 'square';\r\ntype Status = 'online' | 'offline' | 'busy' | undefined;\r\n\r\ninterface AvatarProps {\r\n src?: string;\r\n alt?: string;\r\n name?: string; // For initials fallback\r\n size?: AvatarSize;\r\n shape?: AvatarShape;\r\n status?: Status;\r\n loading?: boolean; // skeleton\r\n className?: string;\r\n fallbackIcon?: React.ReactNode;\r\n}\r\n\r\nfunction getInitials(name?: string): string {\r\n if (!name) return '';\r\n const parts = name.trim().split(' ');\r\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\r\n return (parts[0][0] + parts[1][0]).toUpperCase();\r\n}\r\n\r\nexport function Avatar({\r\n src,\r\n alt,\r\n name,\r\n size = 'md',\r\n shape = 'circle',\r\n status,\r\n loading = false,\r\n className = '',\r\n fallbackIcon,\r\n}: AvatarProps) {\r\n const [errored, setErrored] = useState(false);\r\n const initials = getInitials(name);\r\n\r\n const classes = [\r\n 'ui-avatar',\r\n `ui-avatar--${size}`,\r\n `ui-avatar--${shape}`,\r\n loading && 'ui-avatar-loading',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n const showImage = src && !errored && !loading;\r\n\r\n return (\r\n <div className={classes} aria-label={alt || name}>\r\n {showImage ? (\r\n <img\r\n src={src}\r\n alt={alt || name || 'avatar'}\r\n onError={() => setErrored(true)}\r\n />\r\n ) : initials ? (\r\n <span>{initials}</span>\r\n ) : fallbackIcon ? (\r\n <span>{fallbackIcon}</span>\r\n ) : (\r\n <span>?</span>\r\n )}\r\n\r\n {status && (\r\n <span\r\n className={[\r\n 'ui-avatar-status',\r\n status && `ui-avatar-status--${status}`,\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n aria-label={status}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["getInitials","name","parts","Avatar","src","alt","size","shape","status","loading","className","fallbackIcon","errored","setErrored","useState","initials","classes","jsx"],"mappings":";;;AAuBA,SAASA,EAAYC,GAAuB;AAC1C,MAAI,CAACA,EAAM,QAAO;AAClB,QAAMC,IAAQD,EAAK,KAAA,EAAO,MAAM,GAAG;AACnC,SAAIC,EAAM,WAAW,IAAUA,EAAM,CAAC,EAAE,OAAO,CAAC,EAAE,YAAA,KAC1CA,EAAM,CAAC,EAAE,CAAC,IAAIA,EAAM,CAAC,EAAE,CAAC,GAAG,YAAA;AACrC;AAEO,SAASC,EAAO;AAAA,EACrB,KAAAC;AAAA,EACA,KAAAC;AAAA,EACA,MAAAJ;AAAA,EACA,MAAAK,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,QAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,WAAAC,IAAY;AAAA,EACZ,cAAAC;AACF,GAAgB;AACd,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAS,EAAK,GACtCC,IAAWf,EAAYC,CAAI,GAE3Be,IAAU;AAAA,IACd;AAAA,IACA,cAAcV,CAAI;AAAA,IAClB,cAAcC,CAAK;AAAA,IACnBE,KAAW;AAAA,IACXC;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAIX,2BACG,OAAA,EAAI,WAAWM,GAAS,cAAYX,KAAOJ,GACzC,UAAA;AAAA,IAJaG,KAAO,CAACQ,KAAW,CAACH,IAKhC,gBAAAQ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAb;AAAA,QACA,KAAKC,KAAOJ,KAAQ;AAAA,QACpB,SAAS,MAAMY,EAAW,EAAI;AAAA,MAAA;AAAA,IAAA,IAE9BE,IACF,gBAAAE,EAAC,QAAA,EAAM,UAAAF,EAAA,CAAS,IACdJ,IACF,gBAAAM,EAAC,QAAA,EAAM,UAAAN,EAAA,CAAa,IAEpB,gBAAAM,EAAC,UAAK,UAAA,KAAC;AAAA,IAGRT,KACC,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACAT,KAAU,qBAAqBA,CAAM;AAAA,QAAA,EAEpC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QACX,cAAYA;AAAA,MAAA;AAAA,IAAA;AAAA,EACd,GAEJ;AAEJ;"}
1
+ {"version":3,"file":"Avatar.js","sources":["../../../src/components/avatar/Avatar.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from 'react';\nimport { cn } from '../../utils';\nimport './Avatar.css';\n\nexport type AvatarSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type AvatarShape = 'circle' | 'rounded' | 'square';\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string;\n alt?: string;\n name?: string;\n size?: AvatarSize;\n shape?: AvatarShape;\n status?: AvatarStatus;\n fallbackIcon?: React.ReactNode; \n loading?: boolean; \n className?: string;\n}\n\n/**\n * Utility to extract initials from a name string.\n * Handles single words and multi-word names appropriately.\n */\nfunction getInitials(name?: string): string {\n if (!name) return '';\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 0) return '';\n if (parts.length === 1) return parts[0].substring(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\n/**\n * Avatar Component\n * * A visual representation of a user or entity.\n * Implements a strict fallback sequence: Image -> Initials -> Fallback Icon -> Default Icon.\n */\nexport function Avatar({\n src,\n alt,\n name,\n size = 'md',\n shape = 'circle',\n status,\n fallbackIcon, \n loading, \n className,\n ...props \n}: AvatarProps) {\n // * Native error handling: We track if the image fails to load via the native onError event\n // to seamlessly trigger the fallback UI without needing complex fetch checks.\n const [hasError, setHasError] = useState(false);\n const initials = getInitials(name);\n \n // If loading is true, we force the fallback/skeleton state by hiding the image\n const showImage = src && !hasError && !loading;\n\n return (\n <div\n className={cn(\n \"nui-avatar\", \n loading && \"nui-avatar--loading\", \n className\n )}\n data-size={size}\n data-shape={shape}\n role=\"img\"\n aria-label={alt || name || \"Avatar\"}\n {...props} \n >\n {showImage ? (\n <img\n src={src}\n alt={alt || name}\n className=\"nui-avatar__image\"\n onError={() => setHasError(true)}\n />\n ) : (\n <div className=\"nui-avatar__fallback\" aria-hidden=\"true\">\n {/* Fallback Waterfall Logic */}\n {!loading && (initials || fallbackIcon || (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"></path>\n <circle cx=\"12\" cy=\"7\" r=\"4\"></circle>\n </svg>\n ))}\n </div>\n )}\n\n {status && (\n <span \n className=\"nui-avatar__status\" \n data-status={status} \n role=\"status\"\n aria-label={status}\n />\n )}\n </div>\n );\n}"],"names":["getInitials","name","parts","Avatar","src","alt","size","shape","status","fallbackIcon","loading","className","props","hasError","setHasError","useState","initials","showImage","jsxs","cn","jsx"],"mappings":";;;;AA0BA,SAASA,EAAYC,GAAuB;AAC1C,MAAI,CAACA,EAAM,QAAO;AAClB,QAAMC,IAAQD,EAAK,KAAA,EAAO,MAAM,KAAK;AACrC,SAAIC,EAAM,WAAW,IAAU,KAC3BA,EAAM,WAAW,IAAUA,EAAM,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,YAAA,KAChDA,EAAM,CAAC,EAAE,CAAC,IAAIA,EAAMA,EAAM,SAAS,CAAC,EAAE,CAAC,GAAG,YAAA;AACpD;AAOO,SAASC,EAAO;AAAA,EACrB,KAAAC;AAAA,EACA,KAAAC;AAAA,EACA,MAAAJ;AAAA,EACA,MAAAK,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,GAAgB;AAGd,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,EAAK,GACxCC,IAAWhB,EAAYC,CAAI,GAG3BgB,IAAYb,KAAO,CAACS,KAAY,CAACH;AAEvC,SACE,gBAAAQ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAT,KAAW;AAAA,QACXC;AAAA,MAAA;AAAA,MAEF,aAAWL;AAAA,MACX,cAAYC;AAAA,MACZ,MAAK;AAAA,MACL,cAAYF,KAAOJ,KAAQ;AAAA,MAC1B,GAAGW;AAAA,MAEH,UAAA;AAAA,QAAAK,IACC,gBAAAG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAAhB;AAAA,YACA,KAAKC,KAAOJ;AAAA,YACZ,WAAU;AAAA,YACV,SAAS,MAAMa,EAAY,EAAI;AAAA,UAAA;AAAA,QAAA,IAGjC,gBAAAM,EAAC,OAAA,EAAI,WAAU,wBAAuB,eAAY,QAE/C,UAAA,CAACV,MAAYM,KAAYP,KACxB,gBAAAS,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SACrI,UAAA;AAAA,UAAA,gBAAAE,EAAC,QAAA,EAAK,GAAE,4CAAA,CAA4C;AAAA,4BACnD,UAAA,EAAO,IAAG,MAAK,IAAG,KAAI,GAAE,IAAA,CAAI;AAAA,QAAA,EAAA,CAC/B,GAAA,CAEJ;AAAA,QAGDZ,KACC,gBAAAY;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAaZ;AAAA,YACb,MAAK;AAAA,YACL,cAAYA;AAAA,UAAA;AAAA,QAAA;AAAA,MACd;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),i=require("react");;/* empty css */function v({children:s,max:e=3,size:n="md",className:o=""}){const a=i.Children.toArray(s),u=a.slice(0,e),t=a.length-e;return r.jsxs("div",{className:["ui-avatar-group",o].join(" "),children:[u.map((c,l)=>r.jsx(i.Fragment,{children:c},l)),t>0&&r.jsxs("div",{className:["ui-avatar",`ui-avatar--${n}`,"ui-avatar-group-overflow"].join(" "),children:["+",t]})]})}exports.AvatarGroup=v;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),t=require("react");;/* empty css */const u=require("../../utils/cn/cn.cjs");function d({children:l,max:s=3,size:a="md",className:o,...m}){const n=t.Children.toArray(l),v=n.slice(0,s),i=n.length-s;return r.jsxs("div",{className:u.cn("nui-avatar-group",o),"data-size":a,...m,children:[v.map(e=>{if(t.isValidElement(e)){const c=e;return t.cloneElement(c,{size:a,className:u.cn("nui-avatar-group__item",c.props.className)})}return e}),i>0&&r.jsx("div",{className:"nui-avatar nui-avatar--excess","data-size":a,children:r.jsxs("span",{className:"nui-avatar__fallback",children:["+",i]})})]})}exports.AvatarGroup=d;
2
2
  //# sourceMappingURL=AvatarGroup.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarGroup.cjs","sources":["../../../src/components/avatar/AvatarGroup.tsx"],"sourcesContent":["/**\r\n * AvatarGroup.tsx\r\n * Displays overlapping avatars, with overflow like +3\r\n */\r\nimport React from 'react';\r\nimport './Avatar.css';\r\n\r\ninterface AvatarGroupProps {\r\n children: React.ReactNode[];\r\n max?: number;\r\n size?: 'sm' | 'md' | 'lg' | 'xl';\r\n className?: string;\r\n}\r\n\r\nexport function AvatarGroup({\r\n children,\r\n max = 3,\r\n size = 'md',\r\n className = '',\r\n}: AvatarGroupProps) {\r\n const items = React.Children.toArray(children);\r\n const visible = items.slice(0, max);\r\n const extra = items.length - max;\r\n\r\n return (\r\n <div className={['ui-avatar-group', className].join(' ')}>\r\n {visible.map((child, i) => (\r\n <React.Fragment key={i}>{child}</React.Fragment>\r\n ))}\r\n\r\n {extra > 0 && (\r\n <div\r\n className={[\r\n 'ui-avatar',\r\n `ui-avatar--${size}`,\r\n 'ui-avatar-group-overflow',\r\n ].join(' ')}\r\n >\r\n +{extra}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["AvatarGroup","children","max","size","className","items","React","visible","extra","jsxs","child","i","jsx"],"mappings":"oKAcO,SAASA,EAAY,CAC1B,SAAAC,EACA,IAAAC,EAAM,EACN,KAAAC,EAAO,KACP,UAAAC,EAAY,EACd,EAAqB,CACnB,MAAMC,EAAQC,EAAM,SAAS,QAAQL,CAAQ,EACvCM,EAAUF,EAAM,MAAM,EAAGH,CAAG,EAC5BM,EAAQH,EAAM,OAASH,EAE7B,OACEO,OAAC,OAAI,UAAW,CAAC,kBAAmBL,CAAS,EAAE,KAAK,GAAG,EACpD,SAAA,CAAAG,EAAQ,IAAI,CAACG,EAAOC,IACnBC,EAAAA,IAACN,EAAM,SAAN,CAAwB,SAAAI,CAAA,EAAJC,CAAU,CAChC,EAEAH,EAAQ,GACPC,EAAAA,KAAC,MAAA,CACC,UAAW,CACT,YACA,cAAcN,CAAI,GAClB,0BAAA,EACA,KAAK,GAAG,EACX,SAAA,CAAA,IACGK,CAAA,CAAA,CAAA,CACJ,EAEJ,CAEJ"}
1
+ {"version":3,"file":"AvatarGroup.cjs","sources":["../../../src/components/avatar/AvatarGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils'; \nimport { AvatarSize, AvatarProps } from './Avatar'; \nimport './Avatar.css';\n\ninterface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n /** Maximum number of avatars to display before truncating */\n max?: number;\n /** Size passed down to all nested Avatar components */\n size?: AvatarSize;\n className?: string;\n}\n\n/**\n * AvatarGroup Component\n * * Visually groups multiple Avatar components together, handling truncation and overlapping.\n */\nexport function AvatarGroup({\n children,\n max = 3,\n size = 'md',\n className,\n ...props\n}: AvatarGroupProps) {\n const items = React.Children.toArray(children);\n const visibleItems = items.slice(0, max);\n const extraCount = items.length - max;\n\n return (\n <div \n className={cn(\"nui-avatar-group\", className)} \n data-size={size}\n {...props}\n >\n {visibleItems.map((child) => {\n // * Library Architecture: We strictly check and cast children to ensure we are only\n // injecting props into valid Avatar elements, preventing runtime crashes if users\n // accidentally pass text or invalid DOM nodes as children.\n if (React.isValidElement(child)) {\n const avatarChild = child as React.ReactElement<AvatarProps>;\n \n return React.cloneElement(avatarChild, { \n size,\n className: cn(\"nui-avatar-group__item\", avatarChild.props.className) \n });\n }\n return child;\n })}\n\n {/* Overflow Indicator */}\n {extraCount > 0 && (\n <div className=\"nui-avatar nui-avatar--excess\" data-size={size}>\n <span className=\"nui-avatar__fallback\">+{extraCount}</span>\n </div>\n )}\n </div>\n );\n}"],"names":["AvatarGroup","children","max","size","className","props","items","React","visibleItems","extraCount","jsxs","cn","child","avatarChild","jsx"],"mappings":"6MAkBO,SAASA,EAAY,CAC1B,SAAAC,EACA,IAAAC,EAAM,EACN,KAAAC,EAAO,KACP,UAAAC,EACA,GAAGC,CACL,EAAqB,CACnB,MAAMC,EAAQC,EAAM,SAAS,QAAQN,CAAQ,EACvCO,EAAeF,EAAM,MAAM,EAAGJ,CAAG,EACjCO,EAAaH,EAAM,OAASJ,EAElC,OACEQ,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GAAG,mBAAoBP,CAAS,EAC3C,YAAWD,EACV,GAAGE,EAEH,SAAA,CAAAG,EAAa,IAAKI,GAAU,CAI3B,GAAIL,EAAM,eAAeK,CAAK,EAAG,CAC/B,MAAMC,EAAcD,EAEpB,OAAOL,EAAM,aAAaM,EAAa,CACrC,KAAAV,EACA,UAAWQ,EAAAA,GAAG,yBAA0BE,EAAY,MAAM,SAAS,CAAA,CACpE,CACH,CACA,OAAOD,CACT,CAAC,EAGAH,EAAa,GACZK,EAAAA,IAAC,MAAA,CAAI,UAAU,gCAAgC,YAAWX,EACxD,SAAAO,EAAAA,KAAC,OAAA,CAAK,UAAU,uBAAuB,SAAA,CAAA,IAAED,CAAA,CAAA,CAAW,CAAA,CACtD,CAAA,CAAA,CAAA,CAIR"}
@@ -1,32 +1,41 @@
1
- import { jsxs as t, jsx as u } from "react/jsx-runtime";
2
- import o from "react";
1
+ import { jsxs as o, jsx as v } from "react/jsx-runtime";
2
+ import t from "react";
3
3
  /* empty css */
4
- function h({
5
- children: e,
6
- max: r = 3,
7
- size: n = "md",
8
- className: s = ""
4
+ import { cn as m } from "../../utils/cn/cn.js";
5
+ function x({
6
+ children: c,
7
+ max: e = 3,
8
+ size: a = "md",
9
+ className: l,
10
+ ...u
9
11
  }) {
10
- const a = o.Children.toArray(e), c = a.slice(0, r), i = a.length - r;
11
- return /* @__PURE__ */ t("div", { className: ["ui-avatar-group", s].join(" "), children: [
12
- c.map((l, m) => /* @__PURE__ */ u(o.Fragment, { children: l }, m)),
13
- i > 0 && /* @__PURE__ */ t(
14
- "div",
15
- {
16
- className: [
17
- "ui-avatar",
18
- `ui-avatar--${n}`,
19
- "ui-avatar-group-overflow"
20
- ].join(" "),
21
- children: [
12
+ const s = t.Children.toArray(c), p = s.slice(0, e), n = s.length - e;
13
+ return /* @__PURE__ */ o(
14
+ "div",
15
+ {
16
+ className: m("nui-avatar-group", l),
17
+ "data-size": a,
18
+ ...u,
19
+ children: [
20
+ p.map((r) => {
21
+ if (t.isValidElement(r)) {
22
+ const i = r;
23
+ return t.cloneElement(i, {
24
+ size: a,
25
+ className: m("nui-avatar-group__item", i.props.className)
26
+ });
27
+ }
28
+ return r;
29
+ }),
30
+ n > 0 && /* @__PURE__ */ v("div", { className: "nui-avatar nui-avatar--excess", "data-size": a, children: /* @__PURE__ */ o("span", { className: "nui-avatar__fallback", children: [
22
31
  "+",
23
- i
24
- ]
25
- }
26
- )
27
- ] });
32
+ n
33
+ ] }) })
34
+ ]
35
+ }
36
+ );
28
37
  }
29
38
  export {
30
- h as AvatarGroup
39
+ x as AvatarGroup
31
40
  };
32
41
  //# sourceMappingURL=AvatarGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarGroup.js","sources":["../../../src/components/avatar/AvatarGroup.tsx"],"sourcesContent":["/**\r\n * AvatarGroup.tsx\r\n * Displays overlapping avatars, with overflow like +3\r\n */\r\nimport React from 'react';\r\nimport './Avatar.css';\r\n\r\ninterface AvatarGroupProps {\r\n children: React.ReactNode[];\r\n max?: number;\r\n size?: 'sm' | 'md' | 'lg' | 'xl';\r\n className?: string;\r\n}\r\n\r\nexport function AvatarGroup({\r\n children,\r\n max = 3,\r\n size = 'md',\r\n className = '',\r\n}: AvatarGroupProps) {\r\n const items = React.Children.toArray(children);\r\n const visible = items.slice(0, max);\r\n const extra = items.length - max;\r\n\r\n return (\r\n <div className={['ui-avatar-group', className].join(' ')}>\r\n {visible.map((child, i) => (\r\n <React.Fragment key={i}>{child}</React.Fragment>\r\n ))}\r\n\r\n {extra > 0 && (\r\n <div\r\n className={[\r\n 'ui-avatar',\r\n `ui-avatar--${size}`,\r\n 'ui-avatar-group-overflow',\r\n ].join(' ')}\r\n >\r\n +{extra}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["AvatarGroup","children","max","size","className","items","React","visible","extra","jsxs","child","i","jsx"],"mappings":";;;AAcO,SAASA,EAAY;AAAA,EAC1B,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AACd,GAAqB;AACnB,QAAMC,IAAQC,EAAM,SAAS,QAAQL,CAAQ,GACvCM,IAAUF,EAAM,MAAM,GAAGH,CAAG,GAC5BM,IAAQH,EAAM,SAASH;AAE7B,SACE,gBAAAO,EAAC,SAAI,WAAW,CAAC,mBAAmBL,CAAS,EAAE,KAAK,GAAG,GACpD,UAAA;AAAA,IAAAG,EAAQ,IAAI,CAACG,GAAOC,MACnB,gBAAAC,EAACN,EAAM,UAAN,EAAwB,UAAAI,EAAA,GAAJC,CAAU,CAChC;AAAA,IAEAH,IAAQ,KACP,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,cAAcN,CAAI;AAAA,UAClB;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,QACX,UAAA;AAAA,UAAA;AAAA,UACGK;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACJ,GAEJ;AAEJ;"}
1
+ {"version":3,"file":"AvatarGroup.js","sources":["../../../src/components/avatar/AvatarGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils'; \nimport { AvatarSize, AvatarProps } from './Avatar'; \nimport './Avatar.css';\n\ninterface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n /** Maximum number of avatars to display before truncating */\n max?: number;\n /** Size passed down to all nested Avatar components */\n size?: AvatarSize;\n className?: string;\n}\n\n/**\n * AvatarGroup Component\n * * Visually groups multiple Avatar components together, handling truncation and overlapping.\n */\nexport function AvatarGroup({\n children,\n max = 3,\n size = 'md',\n className,\n ...props\n}: AvatarGroupProps) {\n const items = React.Children.toArray(children);\n const visibleItems = items.slice(0, max);\n const extraCount = items.length - max;\n\n return (\n <div \n className={cn(\"nui-avatar-group\", className)} \n data-size={size}\n {...props}\n >\n {visibleItems.map((child) => {\n // * Library Architecture: We strictly check and cast children to ensure we are only\n // injecting props into valid Avatar elements, preventing runtime crashes if users\n // accidentally pass text or invalid DOM nodes as children.\n if (React.isValidElement(child)) {\n const avatarChild = child as React.ReactElement<AvatarProps>;\n \n return React.cloneElement(avatarChild, { \n size,\n className: cn(\"nui-avatar-group__item\", avatarChild.props.className) \n });\n }\n return child;\n })}\n\n {/* Overflow Indicator */}\n {extraCount > 0 && (\n <div className=\"nui-avatar nui-avatar--excess\" data-size={size}>\n <span className=\"nui-avatar__fallback\">+{extraCount}</span>\n </div>\n )}\n </div>\n );\n}"],"names":["AvatarGroup","children","max","size","className","props","items","React","visibleItems","extraCount","jsxs","cn","child","avatarChild","jsx"],"mappings":";;;;AAkBO,SAASA,EAAY;AAAA,EAC1B,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,GAAGC;AACL,GAAqB;AACnB,QAAMC,IAAQC,EAAM,SAAS,QAAQN,CAAQ,GACvCO,IAAeF,EAAM,MAAM,GAAGJ,CAAG,GACjCO,IAAaH,EAAM,SAASJ;AAElC,SACE,gBAAAQ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAG,oBAAoBP,CAAS;AAAA,MAC3C,aAAWD;AAAA,MACV,GAAGE;AAAA,MAEH,UAAA;AAAA,QAAAG,EAAa,IAAI,CAACI,MAAU;AAI3B,cAAIL,EAAM,eAAeK,CAAK,GAAG;AAC/B,kBAAMC,IAAcD;AAEpB,mBAAOL,EAAM,aAAaM,GAAa;AAAA,cACrC,MAAAV;AAAA,cACA,WAAWQ,EAAG,0BAA0BE,EAAY,MAAM,SAAS;AAAA,YAAA,CACpE;AAAA,UACH;AACA,iBAAOD;AAAA,QACT,CAAC;AAAA,QAGAH,IAAa,KACZ,gBAAAK,EAAC,OAAA,EAAI,WAAU,iCAAgC,aAAWX,GACxD,UAAA,gBAAAO,EAAC,QAAA,EAAK,WAAU,wBAAuB,UAAA;AAAA,UAAA;AAAA,UAAED;AAAA,QAAA,EAAA,CAAW,EAAA,CACtD;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime");;/* empty css */function f(r){return typeof r=="number"||typeof r=="string"&&r.trim()!==""&&!Number.isNaN(Number(r))}function h({children:r,count:a,max:s,variant:p="default",size:g="md",pill:N=!1,dot:o=!1,href:u,onClick:d,ariaLabel:j,className:y="",title:n,iconLeft:c,iconRight:m}){let l=r;f(a)&&(f(s)&&typeof s=="number"&&typeof a=="number"&&a>s?l=`${s}+`:l=a);let e=j;!e&&f(a)&&(e=typeof a=="number"?`${a} notifications`:void 0);const t=["ui-badge",`ui-badge--${p}`,`ui-badge--${g}`,N&&"ui-badge--pill",o&&"ui-badge--dot",(u||d)&&"ui-badge--interactive",y].filter(Boolean).join(" ");if(o)return i.jsx("span",{className:t,"aria-label":e,"aria-hidden":e?void 0:!0,title:n});const b=i.jsxs("span",{className:"ui-badge-content","aria-hidden":e?!0:void 0,children:[c&&i.jsx("span",{className:"ui-badge__icon",children:c}),l,m&&i.jsx("span",{className:"ui-badge__icon",children:m})]});return u?i.jsx("a",{href:u,className:t,"aria-label":e,title:n,children:b}):d?i.jsx("button",{type:"button",onClick:d,className:t,"aria-label":e,title:n,children:b}):i.jsx("span",{className:t,"aria-label":e,title:n,children:b})}exports.Badge=h;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");;/* empty css */const x=require("../../utils/cn/cn.cjs");function N({children:g,count:n,max:d=99,variant:j="default",size:m="md",pill:f=!1,dot:a=!1,href:s,onClick:i,className:o,iconLeft:c,iconRight:b,...l}){let t=g;n!==void 0&&(a?t=null:t=n>d?`${d}+`:n);const r=x.cn("nui-badge",`nui-badge--${j}`,`nui-badge--${m}`,f&&"nui-badge--pill",a&&"nui-badge--dot",(s||i)&&"nui-badge--interactive",o),u=e.jsxs(e.Fragment,{children:[c&&e.jsx("span",{className:"nui-badge__icon",children:c}),!a&&t,b&&e.jsx("span",{className:"nui-badge__icon",children:b})]});return s?e.jsx("a",{href:s,className:r,...l,children:u}):i?e.jsx("button",{type:"button",onClick:i,className:r,...l,children:u}):e.jsx("span",{className:r,...l,children:u})}exports.Badge=N;
2
2
  //# sourceMappingURL=Badge.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.cjs","sources":["../../../src/components/badge/Badge.tsx"],"sourcesContent":["/**\r\n * Badge.tsx\r\n * ---------\r\n * Simple accessible badge component.\r\n *\r\n * Renders:\r\n * - <span> (default non-interactive)\r\n * - <a href=\"...\"> when `href` provided\r\n * - <button> when `onClick` provided\r\n *\r\n * Accessibility:\r\n * - If numeric content is provided, the component will add an accessible label\r\n * (e.g. \"5 new notifications\") if `ariaLabel` prop is omitted — this helps\r\n * screen reader users understand the meaning of the number.\r\n *\r\n * Usage:\r\n * <Badge>Beta</Badge>\r\n * <Badge variant=\"primary\" size=\"sm\">New</Badge>\r\n * <Badge onClick={() => {}} pill>5</Badge>\r\n */\r\n\r\nimport React from 'react';\r\nimport './Badge.css';\r\n\r\ntype Variant = 'default' | 'primary' | 'success' | 'warning' | 'danger';\r\ntype Size = 'sm' | 'md' | 'lg';\r\n\r\ninterface BadgeProps {\r\n children?: React.ReactNode;\r\n\r\n // count overflow\r\n count?: number;\r\n max?: number;\r\n\r\n variant?: Variant;\r\n size?: Size;\r\n pill?: boolean;\r\n dot?: boolean;\r\n\r\n href?: string;\r\n onClick?: () => void;\r\n\r\n ariaLabel?: string;\r\n className?: string;\r\n title?: string;\r\n\r\n iconLeft?: React.ReactNode;\r\n iconRight?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Helper: detect if something is number-like\r\n * (string numeric or number)\r\n */\r\nfunction isNumberLike(val: unknown): val is number | string {\r\n if (typeof val === 'number') return true;\r\n if (\r\n typeof val === 'string' &&\r\n val.trim() !== '' &&\r\n !Number.isNaN(Number(val))\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function Badge({\r\n children,\r\n count,\r\n max,\r\n variant = 'default',\r\n size = 'md',\r\n pill = false,\r\n dot = false,\r\n href,\r\n onClick,\r\n ariaLabel,\r\n className = '',\r\n title,\r\n iconLeft,\r\n iconRight,\r\n}: BadgeProps) {\r\n /**\r\n * Compute display logic (overflow 99+)\r\n * SAFE: no \"!\" used\r\n */\r\n let displayValue: React.ReactNode = children;\r\n\r\n if (isNumberLike(count)) {\r\n if (\r\n isNumberLike(max) &&\r\n typeof max === 'number' &&\r\n typeof count === 'number' &&\r\n count > max\r\n ) {\r\n displayValue = `${max}+`;\r\n } else {\r\n displayValue = count;\r\n }\r\n }\r\n\r\n /**\r\n * Compute aria-label\r\n */\r\n let computedAria: string | undefined = ariaLabel;\r\n\r\n if (!computedAria && isNumberLike(count)) {\r\n computedAria =\r\n typeof count === 'number' ? `${count} notifications` : undefined;\r\n }\r\n\r\n const classes = [\r\n 'ui-badge',\r\n `ui-badge--${variant}`,\r\n `ui-badge--${size}`,\r\n pill && 'ui-badge--pill',\r\n dot && 'ui-badge--dot',\r\n (href || onClick) && 'ui-badge--interactive',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n /**\r\n * Dot badge (no content)\r\n */\r\n if (dot) {\r\n return (\r\n <span\r\n className={classes}\r\n aria-label={computedAria}\r\n aria-hidden={computedAria ? undefined : true}\r\n title={title}\r\n />\r\n );\r\n }\r\n\r\n const content = (\r\n <span\r\n className=\"ui-badge-content\"\r\n aria-hidden={computedAria ? true : undefined}\r\n >\r\n {iconLeft && <span className=\"ui-badge__icon\">{iconLeft}</span>}\r\n {displayValue}\r\n {iconRight && <span className=\"ui-badge__icon\">{iconRight}</span>}\r\n </span>\r\n );\r\n\r\n /**\r\n * Anchor support\r\n */\r\n if (href) {\r\n return (\r\n <a\r\n href={href}\r\n className={classes}\r\n aria-label={computedAria}\r\n title={title}\r\n >\r\n {content}\r\n </a>\r\n );\r\n }\r\n\r\n /**\r\n * Button support\r\n */\r\n if (onClick) {\r\n return (\r\n <button\r\n type=\"button\"\r\n onClick={onClick}\r\n className={classes}\r\n aria-label={computedAria}\r\n title={title}\r\n >\r\n {content}\r\n </button>\r\n );\r\n }\r\n\r\n /**\r\n * Default <span>\r\n */\r\n return (\r\n <span className={classes} aria-label={computedAria} title={title}>\r\n {content}\r\n </span>\r\n );\r\n}\r\n"],"names":["isNumberLike","val","Badge","children","count","max","variant","size","pill","dot","href","onClick","ariaLabel","className","title","iconLeft","iconRight","displayValue","computedAria","classes","jsx","content","jsxs"],"mappings":"gJAsDA,SAASA,EAAaC,EAAsC,CAE1D,OADI,OAAOA,GAAQ,UAEjB,OAAOA,GAAQ,UACfA,EAAI,KAAA,IAAW,IACf,CAAC,OAAO,MAAM,OAAOA,CAAG,CAAC,CAK7B,CAEO,SAASC,EAAM,CACpB,SAAAC,EACA,MAAAC,EACA,IAAAC,EACA,QAAAC,EAAU,UACV,KAAAC,EAAO,KACP,KAAAC,EAAO,GACP,IAAAC,EAAM,GACN,KAAAC,EACA,QAAAC,EACA,UAAAC,EACA,UAAAC,EAAY,GACZ,MAAAC,EACA,SAAAC,EACA,UAAAC,CACF,EAAe,CAKb,IAAIC,EAAgCd,EAEhCH,EAAaI,CAAK,IAElBJ,EAAaK,CAAG,GAChB,OAAOA,GAAQ,UACf,OAAOD,GAAU,UACjBA,EAAQC,EAERY,EAAe,GAAGZ,CAAG,IAErBY,EAAeb,GAOnB,IAAIc,EAAmCN,EAEnC,CAACM,GAAgBlB,EAAaI,CAAK,IACrCc,EACE,OAAOd,GAAU,SAAW,GAAGA,CAAK,iBAAmB,QAG3D,MAAMe,EAAU,CACd,WACA,aAAab,CAAO,GACpB,aAAaC,CAAI,GACjBC,GAAQ,iBACRC,GAAO,iBACNC,GAAQC,IAAY,wBACrBE,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAKX,GAAIJ,EACF,OACEW,EAAAA,IAAC,OAAA,CACC,UAAWD,EACX,aAAYD,EACZ,cAAaA,EAAe,OAAY,GACxC,MAAAJ,CAAA,CAAA,EAKN,MAAMO,EACJC,EAAAA,KAAC,OAAA,CACC,UAAU,mBACV,cAAaJ,EAAe,GAAO,OAElC,SAAA,CAAAH,GAAYK,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAkB,SAAAL,EAAS,EACvDE,EACAD,GAAaI,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAkB,SAAAJ,CAAA,CAAU,CAAA,CAAA,CAAA,EAO9D,OAAIN,EAEAU,EAAAA,IAAC,IAAA,CACC,KAAAV,EACA,UAAWS,EACX,aAAYD,EACZ,MAAAJ,EAEC,SAAAO,CAAA,CAAA,EAQHV,EAEAS,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAAT,EACA,UAAWQ,EACX,aAAYD,EACZ,MAAAJ,EAEC,SAAAO,CAAA,CAAA,QASJ,OAAA,CAAK,UAAWF,EAAS,aAAYD,EAAc,MAAAJ,EACjD,SAAAO,EACH,CAEJ"}
1
+ {"version":3,"file":"Badge.cjs","sources":["../../../src/components/badge/Badge.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils';\nimport './Badge.css';\n\nexport type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'outline';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n children?: React.ReactNode;\n /** Displays a numerical count inside the badge */\n count?: number;\n /** The maximum number to display before showing a '+' (e.g., 99+) */\n max?: number;\n variant?: BadgeVariant;\n size?: BadgeSize;\n /** Rounds the edges to create a pill shape */\n pill?: boolean;\n /** Renders a small, empty circular indicator instead of text */\n dot?: boolean;\n \n /** If provided, renders the badge as an <a> tag */\n href?: string;\n /** If provided, renders the badge as a <button> tag */\n onClick?: React.MouseEventHandler<HTMLElement>;\n \n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n}\n\n/**\n * Badge Component\n * * A small status descriptor for UI elements.\n * Architecture Note: Dynamically renders as a <span>, <a>, or <button> based on\n * the presence of `href` or `onClick` props to ensure strict semantic HTML.\n */\nexport function Badge({\n children,\n count,\n max = 99,\n variant = 'default',\n size = 'md',\n pill = false,\n dot = false,\n href,\n onClick,\n className,\n iconLeft,\n iconRight,\n ...props\n}: BadgeProps) {\n \n // 1. Calculate Display Content\n let content = children;\n \n if (count !== undefined) {\n if (dot) {\n content = null; \n } else {\n content = count > max ? `${max}+` : count;\n }\n }\n\n // 2. Compute Classes\n const classes = cn(\n 'nui-badge',\n `nui-badge--${variant}`,\n `nui-badge--${size}`,\n pill && 'nui-badge--pill',\n dot && 'nui-badge--dot',\n (href || onClick) && 'nui-badge--interactive',\n className\n );\n\n // 3. Render Inner Content\n const inner = (\n <>\n {iconLeft && <span className=\"nui-badge__icon\">{iconLeft}</span>}\n {!dot && content}\n {iconRight && <span className=\"nui-badge__icon\">{iconRight}</span>}\n </>\n );\n\n // 4. Render as Link (Semantic Anchor)\n if (href) {\n return (\n <a \n href={href} \n className={classes} \n {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {inner}\n </a>\n );\n }\n\n // 5. Render as Button (Semantic Interactive Element)\n if (onClick) {\n return (\n <button \n type=\"button\" \n onClick={onClick as React.MouseEventHandler<HTMLButtonElement>} \n className={classes} \n {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {inner}\n </button>\n );\n }\n\n // 6. Default Span (Static Indicator)\n return (\n <span className={classes} {...props}>\n {inner}\n </span>\n );\n}"],"names":["Badge","children","count","max","variant","size","pill","dot","href","onClick","className","iconLeft","iconRight","props","content","classes","cn","inner","jsxs","Fragment","jsx"],"mappings":"yLAmCO,SAASA,EAAM,CACpB,SAAAC,EACA,MAAAC,EACA,IAAAC,EAAM,GACN,QAAAC,EAAU,UACV,KAAAC,EAAO,KACP,KAAAC,EAAO,GACP,IAAAC,EAAM,GACN,KAAAC,EACA,QAAAC,EACA,UAAAC,EACA,SAAAC,EACA,UAAAC,EACA,GAAGC,CACL,EAAe,CAGb,IAAIC,EAAUb,EAEVC,IAAU,SACRK,EACFO,EAAU,KAEVA,EAAUZ,EAAQC,EAAM,GAAGA,CAAG,IAAMD,GAKxC,MAAMa,EAAUC,EAAAA,GACd,YACA,cAAcZ,CAAO,GACrB,cAAcC,CAAI,GAClBC,GAAQ,kBACRC,GAAO,kBACNC,GAAQC,IAAY,yBACrBC,CAAA,EAIIO,EACJC,EAAAA,KAAAC,EAAAA,SAAA,CACG,SAAA,CAAAR,GAAYS,EAAAA,IAAC,OAAA,CAAK,UAAU,kBAAmB,SAAAT,EAAS,EACxD,CAACJ,GAAOO,EACRF,GAAaQ,EAAAA,IAAC,OAAA,CAAK,UAAU,kBAAmB,SAAAR,CAAA,CAAU,CAAA,EAC7D,EAIF,OAAIJ,EAEAY,EAAAA,IAAC,IAAA,CACC,KAAAZ,EACA,UAAWO,EACV,GAAIF,EAEJ,SAAAI,CAAA,CAAA,EAMHR,EAEAW,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAAX,EACA,UAAWM,EACV,GAAIF,EAEJ,SAAAI,CAAA,CAAA,QAOJ,OAAA,CAAK,UAAWF,EAAU,GAAGF,EAC3B,SAAAI,EACH,CAEJ"}
@@ -1,81 +1,56 @@
1
- import { jsx as r, jsxs as _ } from "react/jsx-runtime";
1
+ import { jsx as e, jsxs as N, Fragment as _ } from "react/jsx-runtime";
2
2
  /* empty css */
3
- function f(i) {
4
- return typeof i == "number" || typeof i == "string" && i.trim() !== "" && !Number.isNaN(Number(i));
5
- }
6
- function B({
7
- children: i,
8
- count: a,
9
- max: s,
10
- variant: c = "default",
11
- size: N = "md",
12
- pill: g = !1,
13
- dot: o = !1,
14
- href: u,
15
- onClick: d,
16
- ariaLabel: y,
17
- className: h = "",
18
- title: n,
19
- iconLeft: m,
20
- iconRight: p
3
+ import { cn as h } from "../../utils/cn/cn.js";
4
+ function x({
5
+ children: b,
6
+ count: n,
7
+ max: c = 99,
8
+ variant: g = "default",
9
+ size: f = "md",
10
+ pill: o = !1,
11
+ dot: a = !1,
12
+ href: i,
13
+ onClick: s,
14
+ className: p,
15
+ iconLeft: u,
16
+ iconRight: m,
17
+ ...l
21
18
  }) {
22
- let l = i;
23
- f(a) && (f(s) && typeof s == "number" && typeof a == "number" && a > s ? l = `${s}+` : l = a);
24
- let e = y;
25
- !e && f(a) && (e = typeof a == "number" ? `${a} notifications` : void 0);
26
- const t = [
27
- "ui-badge",
28
- `ui-badge--${c}`,
29
- `ui-badge--${N}`,
30
- g && "ui-badge--pill",
31
- o && "ui-badge--dot",
32
- (u || d) && "ui-badge--interactive",
33
- h
34
- ].filter(Boolean).join(" ");
35
- if (o)
36
- return /* @__PURE__ */ r(
37
- "span",
38
- {
39
- className: t,
40
- "aria-label": e,
41
- "aria-hidden": e ? void 0 : !0,
42
- title: n
43
- }
44
- );
45
- const b = /* @__PURE__ */ _(
46
- "span",
47
- {
48
- className: "ui-badge-content",
49
- "aria-hidden": e ? !0 : void 0,
50
- children: [
51
- m && /* @__PURE__ */ r("span", { className: "ui-badge__icon", children: m }),
52
- l,
53
- p && /* @__PURE__ */ r("span", { className: "ui-badge__icon", children: p })
54
- ]
55
- }
56
- );
57
- return u ? /* @__PURE__ */ r(
19
+ let d = b;
20
+ n !== void 0 && (a ? d = null : d = n > c ? `${c}+` : n);
21
+ const r = h(
22
+ "nui-badge",
23
+ `nui-badge--${g}`,
24
+ `nui-badge--${f}`,
25
+ o && "nui-badge--pill",
26
+ a && "nui-badge--dot",
27
+ (i || s) && "nui-badge--interactive",
28
+ p
29
+ ), t = /* @__PURE__ */ N(_, { children: [
30
+ u && /* @__PURE__ */ e("span", { className: "nui-badge__icon", children: u }),
31
+ !a && d,
32
+ m && /* @__PURE__ */ e("span", { className: "nui-badge__icon", children: m })
33
+ ] });
34
+ return i ? /* @__PURE__ */ e(
58
35
  "a",
59
36
  {
60
- href: u,
61
- className: t,
62
- "aria-label": e,
63
- title: n,
64
- children: b
37
+ href: i,
38
+ className: r,
39
+ ...l,
40
+ children: t
65
41
  }
66
- ) : d ? /* @__PURE__ */ r(
42
+ ) : s ? /* @__PURE__ */ e(
67
43
  "button",
68
44
  {
69
45
  type: "button",
70
- onClick: d,
71
- className: t,
72
- "aria-label": e,
73
- title: n,
74
- children: b
46
+ onClick: s,
47
+ className: r,
48
+ ...l,
49
+ children: t
75
50
  }
76
- ) : /* @__PURE__ */ r("span", { className: t, "aria-label": e, title: n, children: b });
51
+ ) : /* @__PURE__ */ e("span", { className: r, ...l, children: t });
77
52
  }
78
53
  export {
79
- B as Badge
54
+ x as Badge
80
55
  };
81
56
  //# sourceMappingURL=Badge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.js","sources":["../../../src/components/badge/Badge.tsx"],"sourcesContent":["/**\r\n * Badge.tsx\r\n * ---------\r\n * Simple accessible badge component.\r\n *\r\n * Renders:\r\n * - <span> (default non-interactive)\r\n * - <a href=\"...\"> when `href` provided\r\n * - <button> when `onClick` provided\r\n *\r\n * Accessibility:\r\n * - If numeric content is provided, the component will add an accessible label\r\n * (e.g. \"5 new notifications\") if `ariaLabel` prop is omitted — this helps\r\n * screen reader users understand the meaning of the number.\r\n *\r\n * Usage:\r\n * <Badge>Beta</Badge>\r\n * <Badge variant=\"primary\" size=\"sm\">New</Badge>\r\n * <Badge onClick={() => {}} pill>5</Badge>\r\n */\r\n\r\nimport React from 'react';\r\nimport './Badge.css';\r\n\r\ntype Variant = 'default' | 'primary' | 'success' | 'warning' | 'danger';\r\ntype Size = 'sm' | 'md' | 'lg';\r\n\r\ninterface BadgeProps {\r\n children?: React.ReactNode;\r\n\r\n // count overflow\r\n count?: number;\r\n max?: number;\r\n\r\n variant?: Variant;\r\n size?: Size;\r\n pill?: boolean;\r\n dot?: boolean;\r\n\r\n href?: string;\r\n onClick?: () => void;\r\n\r\n ariaLabel?: string;\r\n className?: string;\r\n title?: string;\r\n\r\n iconLeft?: React.ReactNode;\r\n iconRight?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Helper: detect if something is number-like\r\n * (string numeric or number)\r\n */\r\nfunction isNumberLike(val: unknown): val is number | string {\r\n if (typeof val === 'number') return true;\r\n if (\r\n typeof val === 'string' &&\r\n val.trim() !== '' &&\r\n !Number.isNaN(Number(val))\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function Badge({\r\n children,\r\n count,\r\n max,\r\n variant = 'default',\r\n size = 'md',\r\n pill = false,\r\n dot = false,\r\n href,\r\n onClick,\r\n ariaLabel,\r\n className = '',\r\n title,\r\n iconLeft,\r\n iconRight,\r\n}: BadgeProps) {\r\n /**\r\n * Compute display logic (overflow 99+)\r\n * SAFE: no \"!\" used\r\n */\r\n let displayValue: React.ReactNode = children;\r\n\r\n if (isNumberLike(count)) {\r\n if (\r\n isNumberLike(max) &&\r\n typeof max === 'number' &&\r\n typeof count === 'number' &&\r\n count > max\r\n ) {\r\n displayValue = `${max}+`;\r\n } else {\r\n displayValue = count;\r\n }\r\n }\r\n\r\n /**\r\n * Compute aria-label\r\n */\r\n let computedAria: string | undefined = ariaLabel;\r\n\r\n if (!computedAria && isNumberLike(count)) {\r\n computedAria =\r\n typeof count === 'number' ? `${count} notifications` : undefined;\r\n }\r\n\r\n const classes = [\r\n 'ui-badge',\r\n `ui-badge--${variant}`,\r\n `ui-badge--${size}`,\r\n pill && 'ui-badge--pill',\r\n dot && 'ui-badge--dot',\r\n (href || onClick) && 'ui-badge--interactive',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n /**\r\n * Dot badge (no content)\r\n */\r\n if (dot) {\r\n return (\r\n <span\r\n className={classes}\r\n aria-label={computedAria}\r\n aria-hidden={computedAria ? undefined : true}\r\n title={title}\r\n />\r\n );\r\n }\r\n\r\n const content = (\r\n <span\r\n className=\"ui-badge-content\"\r\n aria-hidden={computedAria ? true : undefined}\r\n >\r\n {iconLeft && <span className=\"ui-badge__icon\">{iconLeft}</span>}\r\n {displayValue}\r\n {iconRight && <span className=\"ui-badge__icon\">{iconRight}</span>}\r\n </span>\r\n );\r\n\r\n /**\r\n * Anchor support\r\n */\r\n if (href) {\r\n return (\r\n <a\r\n href={href}\r\n className={classes}\r\n aria-label={computedAria}\r\n title={title}\r\n >\r\n {content}\r\n </a>\r\n );\r\n }\r\n\r\n /**\r\n * Button support\r\n */\r\n if (onClick) {\r\n return (\r\n <button\r\n type=\"button\"\r\n onClick={onClick}\r\n className={classes}\r\n aria-label={computedAria}\r\n title={title}\r\n >\r\n {content}\r\n </button>\r\n );\r\n }\r\n\r\n /**\r\n * Default <span>\r\n */\r\n return (\r\n <span className={classes} aria-label={computedAria} title={title}>\r\n {content}\r\n </span>\r\n );\r\n}\r\n"],"names":["isNumberLike","val","Badge","children","count","max","variant","size","pill","dot","href","onClick","ariaLabel","className","title","iconLeft","iconRight","displayValue","computedAria","classes","jsx","content","jsxs"],"mappings":";;AAsDA,SAASA,EAAaC,GAAsC;AAE1D,SADI,OAAOA,KAAQ,YAEjB,OAAOA,KAAQ,YACfA,EAAI,KAAA,MAAW,MACf,CAAC,OAAO,MAAM,OAAOA,CAAG,CAAC;AAK7B;AAEO,SAASC,EAAM;AAAA,EACpB,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,KAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,KAAAC,IAAM;AAAA,EACN,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AACF,GAAe;AAKb,MAAIC,IAAgCd;AAEpC,EAAIH,EAAaI,CAAK,MAElBJ,EAAaK,CAAG,KAChB,OAAOA,KAAQ,YACf,OAAOD,KAAU,YACjBA,IAAQC,IAERY,IAAe,GAAGZ,CAAG,MAErBY,IAAeb;AAOnB,MAAIc,IAAmCN;AAEvC,EAAI,CAACM,KAAgBlB,EAAaI,CAAK,MACrCc,IACE,OAAOd,KAAU,WAAW,GAAGA,CAAK,mBAAmB;AAG3D,QAAMe,IAAU;AAAA,IACd;AAAA,IACA,aAAab,CAAO;AAAA,IACpB,aAAaC,CAAI;AAAA,IACjBC,KAAQ;AAAA,IACRC,KAAO;AAAA,KACNC,KAAQC,MAAY;AAAA,IACrBE;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAKX,MAAIJ;AACF,WACE,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWD;AAAA,QACX,cAAYD;AAAA,QACZ,eAAaA,IAAe,SAAY;AAAA,QACxC,OAAAJ;AAAA,MAAA;AAAA,IAAA;AAKN,QAAMO,IACJ,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,eAAaJ,IAAe,KAAO;AAAA,MAElC,UAAA;AAAA,QAAAH,KAAY,gBAAAK,EAAC,QAAA,EAAK,WAAU,kBAAkB,UAAAL,GAAS;AAAA,QACvDE;AAAA,QACAD,KAAa,gBAAAI,EAAC,QAAA,EAAK,WAAU,kBAAkB,UAAAJ,EAAA,CAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAO9D,SAAIN,IAEA,gBAAAU;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAAV;AAAA,MACA,WAAWS;AAAA,MACX,cAAYD;AAAA,MACZ,OAAAJ;AAAA,MAEC,UAAAO;AAAA,IAAA;AAAA,EAAA,IAQHV,IAEA,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAAT;AAAA,MACA,WAAWQ;AAAA,MACX,cAAYD;AAAA,MACZ,OAAAJ;AAAA,MAEC,UAAAO;AAAA,IAAA;AAAA,EAAA,sBASJ,QAAA,EAAK,WAAWF,GAAS,cAAYD,GAAc,OAAAJ,GACjD,UAAAO,GACH;AAEJ;"}
1
+ {"version":3,"file":"Badge.js","sources":["../../../src/components/badge/Badge.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils';\nimport './Badge.css';\n\nexport type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'outline';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n children?: React.ReactNode;\n /** Displays a numerical count inside the badge */\n count?: number;\n /** The maximum number to display before showing a '+' (e.g., 99+) */\n max?: number;\n variant?: BadgeVariant;\n size?: BadgeSize;\n /** Rounds the edges to create a pill shape */\n pill?: boolean;\n /** Renders a small, empty circular indicator instead of text */\n dot?: boolean;\n \n /** If provided, renders the badge as an <a> tag */\n href?: string;\n /** If provided, renders the badge as a <button> tag */\n onClick?: React.MouseEventHandler<HTMLElement>;\n \n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n}\n\n/**\n * Badge Component\n * * A small status descriptor for UI elements.\n * Architecture Note: Dynamically renders as a <span>, <a>, or <button> based on\n * the presence of `href` or `onClick` props to ensure strict semantic HTML.\n */\nexport function Badge({\n children,\n count,\n max = 99,\n variant = 'default',\n size = 'md',\n pill = false,\n dot = false,\n href,\n onClick,\n className,\n iconLeft,\n iconRight,\n ...props\n}: BadgeProps) {\n \n // 1. Calculate Display Content\n let content = children;\n \n if (count !== undefined) {\n if (dot) {\n content = null; \n } else {\n content = count > max ? `${max}+` : count;\n }\n }\n\n // 2. Compute Classes\n const classes = cn(\n 'nui-badge',\n `nui-badge--${variant}`,\n `nui-badge--${size}`,\n pill && 'nui-badge--pill',\n dot && 'nui-badge--dot',\n (href || onClick) && 'nui-badge--interactive',\n className\n );\n\n // 3. Render Inner Content\n const inner = (\n <>\n {iconLeft && <span className=\"nui-badge__icon\">{iconLeft}</span>}\n {!dot && content}\n {iconRight && <span className=\"nui-badge__icon\">{iconRight}</span>}\n </>\n );\n\n // 4. Render as Link (Semantic Anchor)\n if (href) {\n return (\n <a \n href={href} \n className={classes} \n {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {inner}\n </a>\n );\n }\n\n // 5. Render as Button (Semantic Interactive Element)\n if (onClick) {\n return (\n <button \n type=\"button\" \n onClick={onClick as React.MouseEventHandler<HTMLButtonElement>} \n className={classes} \n {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {inner}\n </button>\n );\n }\n\n // 6. Default Span (Static Indicator)\n return (\n <span className={classes} {...props}>\n {inner}\n </span>\n );\n}"],"names":["Badge","children","count","max","variant","size","pill","dot","href","onClick","className","iconLeft","iconRight","props","content","classes","cn","inner","jsxs","Fragment","jsx"],"mappings":";;;AAmCO,SAASA,EAAM;AAAA,EACpB,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,KAAAC,IAAM;AAAA,EACN,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,GAAe;AAGb,MAAIC,IAAUb;AAEd,EAAIC,MAAU,WACRK,IACFO,IAAU,OAEVA,IAAUZ,IAAQC,IAAM,GAAGA,CAAG,MAAMD;AAKxC,QAAMa,IAAUC;AAAA,IACd;AAAA,IACA,cAAcZ,CAAO;AAAA,IACrB,cAAcC,CAAI;AAAA,IAClBC,KAAQ;AAAA,IACRC,KAAO;AAAA,KACNC,KAAQC,MAAY;AAAA,IACrBC;AAAA,EAAA,GAIIO,IACJ,gBAAAC,EAAAC,GAAA,EACG,UAAA;AAAA,IAAAR,KAAY,gBAAAS,EAAC,QAAA,EAAK,WAAU,mBAAmB,UAAAT,GAAS;AAAA,IACxD,CAACJ,KAAOO;AAAA,IACRF,KAAa,gBAAAQ,EAAC,QAAA,EAAK,WAAU,mBAAmB,UAAAR,EAAA,CAAU;AAAA,EAAA,GAC7D;AAIF,SAAIJ,IAEA,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAAZ;AAAA,MACA,WAAWO;AAAA,MACV,GAAIF;AAAA,MAEJ,UAAAI;AAAA,IAAA;AAAA,EAAA,IAMHR,IAEA,gBAAAW;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAAX;AAAA,MACA,WAAWM;AAAA,MACV,GAAIF;AAAA,MAEJ,UAAAI;AAAA,IAAA;AAAA,EAAA,sBAOJ,QAAA,EAAK,WAAWF,GAAU,GAAGF,GAC3B,UAAAI,GACH;AAEJ;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),l=require("./Badge.cjs");function o({items:r,max:i=3,className:t=""}){const s=r.slice(0,i),n=r.length-i;return e.jsxs("div",{className:["ui-badge-group",t].join(" "),children:[s.map((a,u)=>e.jsx("span",{children:a},u)),n>0&&e.jsx(l.Badge,{pill:!0,variant:"default",children:`+${n}`})]})}exports.BadgeGroup=o;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),d=require("react"),l=require("./Badge.cjs");;/* empty css */const g=require("../../utils/cn/cn.cjs");function m({children:n,max:r=3,className:t,...a}){const s=d.Children.toArray(n),c=s.slice(0,r),i=s.length-r;return e.jsxs("div",{className:g.cn("nui-badge-group",t),...a,children:[c.map((u,o)=>e.jsx("span",{className:"nui-badge-group__item",children:u},o)),i>0&&e.jsxs(l.Badge,{variant:"default",size:"sm",className:"nui-badge--more",children:["+",i]})]})}exports.BadgeGroup=m;
2
2
  //# sourceMappingURL=BadgeGroup.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"BadgeGroup.cjs","sources":["../../../src/components/badge/BadgeGroup.tsx"],"sourcesContent":["/**\r\n * BadgeGroup.tsx\r\n * Stacks badges horizontally with overflow (e.g. +3).\r\n */\r\n\r\nimport React from 'react';\r\nimport { Badge } from './Badge';\r\n\r\ninterface BadgeGroupProps {\r\n items: React.ReactNode[];\r\n max?: number; // visible badges\r\n className?: string;\r\n}\r\n\r\nexport function BadgeGroup({\r\n items,\r\n max = 3,\r\n className = '',\r\n}: BadgeGroupProps) {\r\n const visible = items.slice(0, max);\r\n const extra = items.length - max;\r\n\r\n return (\r\n <div className={['ui-badge-group', className].join(' ')}>\r\n {visible.map((item, i) => (\r\n <span key={i}>{item}</span>\r\n ))}\r\n\r\n {extra > 0 && <Badge pill variant=\"default\">{`+${extra}`}</Badge>}\r\n </div>\r\n );\r\n}\r\n"],"names":["BadgeGroup","items","max","className","visible","extra","jsxs","item","i","jsx","Badge"],"mappings":"8IAcO,SAASA,EAAW,CACzB,MAAAC,EACA,IAAAC,EAAM,EACN,UAAAC,EAAY,EACd,EAAoB,CAClB,MAAMC,EAAUH,EAAM,MAAM,EAAGC,CAAG,EAC5BG,EAAQJ,EAAM,OAASC,EAE7B,OACEI,OAAC,OAAI,UAAW,CAAC,iBAAkBH,CAAS,EAAE,KAAK,GAAG,EACnD,SAAA,CAAAC,EAAQ,IAAI,CAACG,EAAMC,UACjB,OAAA,CAAc,SAAAD,CAAA,EAAJC,CAAS,CACrB,EAEAH,EAAQ,GAAKI,EAAAA,IAACC,EAAAA,MAAA,CAAM,KAAI,GAAC,QAAQ,UAAW,SAAA,IAAIL,CAAK,EAAA,CAAG,CAAA,EAC3D,CAEJ"}
1
+ {"version":3,"file":"BadgeGroup.cjs","sources":["../../../src/components/badge/BadgeGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils';\nimport { Badge } from './Badge';\nimport './Badge.css';\n\ninterface BadgeGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n // Marked as optional to allow empty dynamic arrays without TS errors\n children?: React.ReactNode; \n max?: number;\n}\n\n/**\n * BadgeGroup Component\n * * Visually groups multiple Badges together, handling overflow truncation.\n */\nexport function BadgeGroup({\n children,\n max = 3,\n className,\n ...props\n}: BadgeGroupProps) {\n const items = React.Children.toArray(children);\n const visible = items.slice(0, max);\n const extra = items.length - max;\n\n return (\n <div className={cn(\"nui-badge-group\", className)} {...props}>\n {visible.map((item, i) => (\n // Wrapper span ensures spacing/layout integrity regardless of badge element type\n <span key={i} className=\"nui-badge-group__item\">{item}</span>\n ))}\n\n {extra > 0 && (\n <Badge variant=\"default\" size=\"sm\" className=\"nui-badge--more\">\n +{extra}\n </Badge>\n )}\n </div>\n );\n}"],"names":["BadgeGroup","children","max","className","props","items","React","visible","extra","jsxs","cn","item","i","jsx","Badge"],"mappings":"qOAeO,SAASA,EAAW,CACzB,SAAAC,EACA,IAAAC,EAAM,EACN,UAAAC,EACA,GAAGC,CACL,EAAoB,CAClB,MAAMC,EAAQC,EAAM,SAAS,QAAQL,CAAQ,EACvCM,EAAUF,EAAM,MAAM,EAAGH,CAAG,EAC5BM,EAAQH,EAAM,OAASH,EAE7B,OACEO,EAAAA,KAAC,OAAI,UAAWC,EAAAA,GAAG,kBAAmBP,CAAS,EAAI,GAAGC,EACnD,SAAA,CAAAG,EAAQ,IAAI,CAACI,EAAMC,IAElBC,EAAAA,IAAC,OAAA,CAAa,UAAU,wBAAyB,YAAtCD,CAA2C,CACvD,EAEAJ,EAAQ,GACPC,OAACK,EAAAA,MAAA,CAAM,QAAQ,UAAU,KAAK,KAAK,UAAU,kBAAkB,SAAA,CAAA,IAC3DN,CAAA,CAAA,CACJ,CAAA,EAEJ,CAEJ"}
@@ -1,17 +1,27 @@
1
- import { jsxs as s, jsx as n } from "react/jsx-runtime";
2
- import { Badge as c } from "./Badge.js";
3
- function u({
4
- items: r,
1
+ import { jsxs as o, jsx as d } from "react/jsx-runtime";
2
+ import l from "react";
3
+ import { Badge as p } from "./Badge.js";
4
+ /* empty css */
5
+ import { cn as u } from "../../utils/cn/cn.js";
6
+ function x({
7
+ children: t,
5
8
  max: e = 3,
6
- className: o = ""
9
+ className: a,
10
+ ...s
7
11
  }) {
8
- const t = r.slice(0, e), i = r.length - e;
9
- return /* @__PURE__ */ s("div", { className: ["ui-badge-group", o].join(" "), children: [
10
- t.map((a, l) => /* @__PURE__ */ n("span", { children: a }, l)),
11
- i > 0 && /* @__PURE__ */ n(c, { pill: !0, variant: "default", children: `+${i}` })
12
+ const r = l.Children.toArray(t), n = r.slice(0, e), i = r.length - e;
13
+ return /* @__PURE__ */ o("div", { className: u("nui-badge-group", a), ...s, children: [
14
+ n.map((m, c) => (
15
+ // Wrapper span ensures spacing/layout integrity regardless of badge element type
16
+ /* @__PURE__ */ d("span", { className: "nui-badge-group__item", children: m }, c)
17
+ )),
18
+ i > 0 && /* @__PURE__ */ o(p, { variant: "default", size: "sm", className: "nui-badge--more", children: [
19
+ "+",
20
+ i
21
+ ] })
12
22
  ] });
13
23
  }
14
24
  export {
15
- u as BadgeGroup
25
+ x as BadgeGroup
16
26
  };
17
27
  //# sourceMappingURL=BadgeGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BadgeGroup.js","sources":["../../../src/components/badge/BadgeGroup.tsx"],"sourcesContent":["/**\r\n * BadgeGroup.tsx\r\n * Stacks badges horizontally with overflow (e.g. +3).\r\n */\r\n\r\nimport React from 'react';\r\nimport { Badge } from './Badge';\r\n\r\ninterface BadgeGroupProps {\r\n items: React.ReactNode[];\r\n max?: number; // visible badges\r\n className?: string;\r\n}\r\n\r\nexport function BadgeGroup({\r\n items,\r\n max = 3,\r\n className = '',\r\n}: BadgeGroupProps) {\r\n const visible = items.slice(0, max);\r\n const extra = items.length - max;\r\n\r\n return (\r\n <div className={['ui-badge-group', className].join(' ')}>\r\n {visible.map((item, i) => (\r\n <span key={i}>{item}</span>\r\n ))}\r\n\r\n {extra > 0 && <Badge pill variant=\"default\">{`+${extra}`}</Badge>}\r\n </div>\r\n );\r\n}\r\n"],"names":["BadgeGroup","items","max","className","visible","extra","jsxs","item","i","jsx","Badge"],"mappings":";;AAcO,SAASA,EAAW;AAAA,EACzB,OAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,WAAAC,IAAY;AACd,GAAoB;AAClB,QAAMC,IAAUH,EAAM,MAAM,GAAGC,CAAG,GAC5BG,IAAQJ,EAAM,SAASC;AAE7B,SACE,gBAAAI,EAAC,SAAI,WAAW,CAAC,kBAAkBH,CAAS,EAAE,KAAK,GAAG,GACnD,UAAA;AAAA,IAAAC,EAAQ,IAAI,CAACG,GAAMC,wBACjB,QAAA,EAAc,UAAAD,EAAA,GAAJC,CAAS,CACrB;AAAA,IAEAH,IAAQ,KAAK,gBAAAI,EAACC,GAAA,EAAM,MAAI,IAAC,SAAQ,WAAW,UAAA,IAAIL,CAAK,GAAA,CAAG;AAAA,EAAA,GAC3D;AAEJ;"}
1
+ {"version":3,"file":"BadgeGroup.js","sources":["../../../src/components/badge/BadgeGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils';\nimport { Badge } from './Badge';\nimport './Badge.css';\n\ninterface BadgeGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n // Marked as optional to allow empty dynamic arrays without TS errors\n children?: React.ReactNode; \n max?: number;\n}\n\n/**\n * BadgeGroup Component\n * * Visually groups multiple Badges together, handling overflow truncation.\n */\nexport function BadgeGroup({\n children,\n max = 3,\n className,\n ...props\n}: BadgeGroupProps) {\n const items = React.Children.toArray(children);\n const visible = items.slice(0, max);\n const extra = items.length - max;\n\n return (\n <div className={cn(\"nui-badge-group\", className)} {...props}>\n {visible.map((item, i) => (\n // Wrapper span ensures spacing/layout integrity regardless of badge element type\n <span key={i} className=\"nui-badge-group__item\">{item}</span>\n ))}\n\n {extra > 0 && (\n <Badge variant=\"default\" size=\"sm\" className=\"nui-badge--more\">\n +{extra}\n </Badge>\n )}\n </div>\n );\n}"],"names":["BadgeGroup","children","max","className","props","items","React","visible","extra","jsxs","cn","item","i","jsx","Badge"],"mappings":";;;;;AAeO,SAASA,EAAW;AAAA,EACzB,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,WAAAC;AAAA,EACA,GAAGC;AACL,GAAoB;AAClB,QAAMC,IAAQC,EAAM,SAAS,QAAQL,CAAQ,GACvCM,IAAUF,EAAM,MAAM,GAAGH,CAAG,GAC5BM,IAAQH,EAAM,SAASH;AAE7B,SACE,gBAAAO,EAAC,SAAI,WAAWC,EAAG,mBAAmBP,CAAS,GAAI,GAAGC,GACnD,UAAA;AAAA,IAAAG,EAAQ,IAAI,CAACI,GAAMC;AAAA;AAAA,MAElB,gBAAAC,EAAC,QAAA,EAAa,WAAU,yBAAyB,eAAtCD,CAA2C;AAAA,KACvD;AAAA,IAEAJ,IAAQ,KACP,gBAAAC,EAACK,GAAA,EAAM,SAAQ,WAAU,MAAK,MAAK,WAAU,mBAAkB,UAAA;AAAA,MAAA;AAAA,MAC3DN;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime");;/* empty css */function m({items:e,maxItems:t=6,separator:b="›",className:d=""}){if(!e.length)return null;let c=[...e];if(e.length>t){const s=e.slice(0,2),a=e.slice(-2);c=[...s,"...",...a]}return r.jsx("nav",{className:`ui-breadcrumbs ${d}`,"aria-label":"Breadcrumb",children:r.jsx("ol",{className:"ui-breadcrumbs-list",children:c.map((s,a)=>{const l=a===c.length-1;if(s==="...")return r.jsx("li",{className:"ui-breadcrumb-ellipsis",children:"…"},`ellipsis-${a}`);const{label:i,href:n,onClick:u}=s;return r.jsxs("li",{className:"ui-breadcrumb-item",children:[n||u?r.jsx("a",{href:n,onClick:u,className:"ui-breadcrumb-link","aria-current":l?"page":void 0,children:i}):r.jsx("span",{className:`ui-breadcrumb-link ${l?"active":""}`,"aria-current":l?"page":void 0,children:i}),!l&&r.jsx("span",{className:"ui-breadcrumb-separator",children:b})]},`crumb-${a}`)})})})}exports.Breadcrumbs=m;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");;/* empty css */const b=require("../../utils/cn/cn.cjs");function j({items:r,maxItems:m=5,separator:c="›",className:o,..._}){if(!r.length)return null;let i=r;if(r.length>m){const s=r.slice(0,1),n=r.slice(-2);i=[...s,"ellipsis",...n]}return e.jsx("nav",{"aria-label":"Breadcrumb",className:b.cn("nui-breadcrumbs",o),..._,children:e.jsx("ol",{className:"nui-breadcrumbs__list",children:i.map((s,n)=>{const a=n===i.length-1,l=`crumb-${n}`;if(s==="ellipsis")return e.jsxs("li",{className:"nui-breadcrumbs__item",children:[e.jsx("span",{className:"nui-breadcrumbs__ellipsis","aria-hidden":"true",children:"…"}),e.jsx("span",{className:"nui-breadcrumbs__separator","aria-hidden":"true",children:c})]},l);const{label:u,href:t,onClick:d}=s,h=!!(t||d)&&!a;return e.jsxs("li",{className:"nui-breadcrumbs__item",children:[h?e.jsx("a",{href:t,onClick:d,className:"nui-breadcrumbs__link",children:u}):e.jsx("span",{className:b.cn("nui-breadcrumbs__link",a&&"nui-breadcrumbs__link--current"),"aria-current":a?"page":void 0,children:u}),!a&&e.jsx("span",{className:"nui-breadcrumbs__separator","aria-hidden":"true",children:c})]},l)})})})}exports.Breadcrumbs=j;
2
2
  //# sourceMappingURL=Breadcrumbs.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumbs.cjs","sources":["../../../src/components/breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["/**\r\n * Breadcrumbs.tsx FINAL VERSION\r\n * --------------------------------\r\n * 100% matching your UI component architecture.\r\n *\r\n * Features:\r\n * - WAI-ARIA navigation\r\n * - Auto-collapse when too many items (optional)\r\n * - Custom separator support\r\n * - Keyboard accessible\r\n * - Ellipsis is non-interactive\r\n */\r\n\r\nimport React from 'react';\r\nimport './Breadcrumbs.css';\r\n\r\nexport interface Crumb {\r\n label: React.ReactNode;\r\n href?: string;\r\n onClick?: () => void;\r\n}\r\n\r\nexport interface BreadcrumbsProps {\r\n items: Crumb[];\r\n maxItems?: number; // collapse long breadcrumbs\r\n separator?: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Breadcrumbs({\r\n items,\r\n maxItems = 6, // default collapse threshold\r\n separator = '›',\r\n className = '',\r\n}: BreadcrumbsProps) {\r\n if (!items.length) return null;\r\n\r\n let finalItems: (Crumb | '...')[] = [...items];\r\n\r\n /* -------------------------------------------------------\r\n * Collapse logic\r\n * ------------------------------------------------------*/\r\n if (items.length > maxItems) {\r\n const start = items.slice(0, 2);\r\n const end = items.slice(-2);\r\n finalItems = [...start, '...', ...end];\r\n }\r\n\r\n return (\r\n <nav className={`ui-breadcrumbs ${className}`} aria-label=\"Breadcrumb\">\r\n <ol className=\"ui-breadcrumbs-list\">\r\n {finalItems.map((item, index) => {\r\n const isLast = index === finalItems.length - 1;\r\n\r\n // ellipsis\r\n if (item === '...') {\r\n return (\r\n <li key={`ellipsis-${index}`} className=\"ui-breadcrumb-ellipsis\">\r\n …\r\n </li>\r\n );\r\n }\r\n\r\n const { label, href, onClick } = item;\r\n\r\n return (\r\n <li key={`crumb-${index}`} className=\"ui-breadcrumb-item\">\r\n {href || onClick ? (\r\n <a\r\n href={href}\r\n onClick={onClick}\r\n className=\"ui-breadcrumb-link\"\r\n aria-current={isLast ? 'page' : undefined}\r\n >\r\n {label}\r\n </a>\r\n ) : (\r\n <span\r\n className={`ui-breadcrumb-link ${isLast ? 'active' : ''}`}\r\n aria-current={isLast ? 'page' : undefined}\r\n >\r\n {label}\r\n </span>\r\n )}\r\n\r\n {!isLast && (\r\n <span className=\"ui-breadcrumb-separator\">{separator}</span>\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ol>\r\n </nav>\r\n );\r\n}\r\n"],"names":["Breadcrumbs","items","maxItems","separator","className","finalItems","start","end","jsx","item","index","isLast","label","href","onClick","jsxs"],"mappings":"sJA6BO,SAASA,EAAY,CAC1B,MAAAC,EACA,SAAAC,EAAW,EACX,UAAAC,EAAY,IACZ,UAAAC,EAAY,EACd,EAAqB,CACnB,GAAI,CAACH,EAAM,OAAQ,OAAO,KAE1B,IAAII,EAAgC,CAAC,GAAGJ,CAAK,EAK7C,GAAIA,EAAM,OAASC,EAAU,CAC3B,MAAMI,EAAQL,EAAM,MAAM,EAAG,CAAC,EACxBM,EAAMN,EAAM,MAAM,EAAE,EAC1BI,EAAa,CAAC,GAAGC,EAAO,MAAO,GAAGC,CAAG,CACvC,CAEA,aACG,MAAA,CAAI,UAAW,kBAAkBH,CAAS,GAAI,aAAW,aACxD,SAAAI,EAAAA,IAAC,KAAA,CAAG,UAAU,sBACX,SAAAH,EAAW,IAAI,CAACI,EAAMC,IAAU,CAC/B,MAAMC,EAASD,IAAUL,EAAW,OAAS,EAG7C,GAAII,IAAS,MACX,aACG,KAAA,CAA6B,UAAU,yBAAyB,SAAA,KAAxD,YAAYC,CAAK,EAE1B,EAIJ,KAAM,CAAE,MAAAE,EAAO,KAAAC,EAAM,QAAAC,CAAA,EAAYL,EAEjC,OACEM,EAAAA,KAAC,KAAA,CAA0B,UAAU,qBAClC,SAAA,CAAAF,GAAQC,EACPN,EAAAA,IAAC,IAAA,CACC,KAAAK,EACA,QAAAC,EACA,UAAU,qBACV,eAAcH,EAAS,OAAS,OAE/B,SAAAC,CAAA,CAAA,EAGHJ,EAAAA,IAAC,OAAA,CACC,UAAW,sBAAsBG,EAAS,SAAW,EAAE,GACvD,eAAcA,EAAS,OAAS,OAE/B,SAAAC,CAAA,CAAA,EAIJ,CAACD,GACAH,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA2B,SAAAL,CAAA,CAAU,CAAA,CAAA,EApBhD,SAASO,CAAK,EAsBvB,CAEJ,CAAC,EACH,EACF,CAEJ"}
1
+ {"version":3,"file":"Breadcrumbs.cjs","sources":["../../../src/components/breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils';\nimport './Breadcrumbs.css';\n\nexport interface BreadcrumbItem {\n label: React.ReactNode;\n /** If provided, renders the item as an <a> tag */\n href?: string;\n /** Triggered when the breadcrumb is clicked */\n onClick?: (e: React.MouseEvent) => void;\n}\n\nexport interface BreadcrumbsProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n /** The maximum number of items to display before truncating the middle path. Default: 5 */\n maxItems?: number;\n /** The visual separator between items. Default: '›' */\n separator?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Breadcrumbs Component\n * * A navigation aid that helps users understand their current location within a website.\n * Implements strict WAI-ARIA navigation patterns.\n */\nexport function Breadcrumbs({\n items,\n maxItems = 5,\n separator = '›',\n className,\n ...props\n}: BreadcrumbsProps) {\n if (!items.length) return null;\n\n // * Truncation Engine\n // If the path length exceeds maxItems, we truncate the middle.\n // We strictly preserve the root (index 0) and the immediate parent + current page (last 2).\n let renderItems: (BreadcrumbItem | 'ellipsis')[] = items;\n\n if (items.length > maxItems) {\n const start = items.slice(0, 1); \n const end = items.slice(-2); \n renderItems = [...start, 'ellipsis', ...end];\n }\n\n return (\n <nav \n aria-label=\"Breadcrumb\"\n className={cn(\"nui-breadcrumbs\", className)} \n {...props}\n >\n <ol className=\"nui-breadcrumbs__list\">\n {renderItems.map((item, index) => {\n const isLast = index === renderItems.length - 1;\n const key = `crumb-${index}`;\n\n // --- 1. Render Ellipsis ---\n if (item === 'ellipsis') {\n return (\n <li key={key} className=\"nui-breadcrumbs__item\">\n <span className=\"nui-breadcrumbs__ellipsis\" aria-hidden=\"true\">\n …\n </span>\n <span className=\"nui-breadcrumbs__separator\" aria-hidden=\"true\">\n {separator}\n </span>\n </li>\n );\n }\n\n // --- 2. Render Item ---\n const { label, href, onClick } = item;\n // An item is only interactive if it has a destination/action AND is not the current page\n const isInteractive = Boolean(href || onClick) && !isLast;\n \n return (\n <li key={key} className=\"nui-breadcrumbs__item\">\n {isInteractive ? (\n // Interactive Link\n <a\n href={href}\n onClick={onClick}\n className=\"nui-breadcrumbs__link\"\n >\n {label}\n </a>\n ) : (\n // Static Text (Current Page or non-linked breadcrumb)\n <span \n className={cn(\n \"nui-breadcrumbs__link\", \n isLast && \"nui-breadcrumbs__link--current\"\n )}\n aria-current={isLast ? 'page' : undefined}\n >\n {label}\n </span>\n )}\n\n {/* Separator (except for last item) */}\n {!isLast && (\n <span className=\"nui-breadcrumbs__separator\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}"],"names":["Breadcrumbs","items","maxItems","separator","className","props","renderItems","start","end","jsx","cn","item","index","isLast","key","jsxs","label","href","onClick","isInteractive"],"mappings":"+LA0BO,SAASA,EAAY,CAC1B,MAAAC,EACA,SAAAC,EAAW,EACX,UAAAC,EAAY,IACZ,UAAAC,EACA,GAAGC,CACL,EAAqB,CACnB,GAAI,CAACJ,EAAM,OAAQ,OAAO,KAK1B,IAAIK,EAA+CL,EAEnD,GAAIA,EAAM,OAASC,EAAU,CAC3B,MAAMK,EAAQN,EAAM,MAAM,EAAG,CAAC,EACxBO,EAAMP,EAAM,MAAM,EAAE,EAC1BK,EAAc,CAAC,GAAGC,EAAO,WAAY,GAAGC,CAAG,CAC7C,CAEA,OACEC,EAAAA,IAAC,MAAA,CACC,aAAW,aACX,UAAWC,EAAAA,GAAG,kBAAmBN,CAAS,EACzC,GAAGC,EAEJ,SAAAI,EAAAA,IAAC,MAAG,UAAU,wBACX,WAAY,IAAI,CAACE,EAAMC,IAAU,CAChC,MAAMC,EAASD,IAAUN,EAAY,OAAS,EACxCQ,EAAM,SAASF,CAAK,GAG1B,GAAID,IAAS,WACX,OACEI,EAAAA,KAAC,KAAA,CAAa,UAAU,wBACtB,SAAA,CAAAN,MAAC,OAAA,CAAK,UAAU,4BAA4B,cAAY,OAAO,SAAA,IAE/D,QACC,OAAA,CAAK,UAAU,6BAA6B,cAAY,OACtD,SAAAN,CAAA,CACH,CAAA,CAAA,EANOW,CAOT,EAKJ,KAAM,CAAE,MAAAE,EAAO,KAAAC,EAAM,QAAAC,CAAA,EAAYP,EAE3BQ,EAAgB,GAAQF,GAAQC,IAAY,CAACL,EAEnD,OACEE,EAAAA,KAAC,KAAA,CAAa,UAAU,wBACrB,SAAA,CAAAI,EAECV,EAAAA,IAAC,IAAA,CACC,KAAAQ,EACA,QAAAC,EACA,UAAU,wBAET,SAAAF,CAAA,CAAA,EAIHP,EAAAA,IAAC,OAAA,CACC,UAAWC,EAAAA,GACT,wBACAG,GAAU,gCAAA,EAEZ,eAAcA,EAAS,OAAS,OAE/B,SAAAG,CAAA,CAAA,EAKJ,CAACH,GACAJ,MAAC,OAAA,CAAK,UAAU,6BAA6B,cAAY,OACtD,SAAAN,CAAA,CACH,CAAA,CAAA,EA3BKW,CA6BT,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CAGN"}