@bigbinary/neeto-atoms 1.0.8 → 1.0.10

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 (660) hide show
  1. package/dist/Accordion-BzfsJePA.js +22 -0
  2. package/dist/Accordion-BzfsJePA.js.map +1 -0
  3. package/dist/Alert-D_FV8xxo.js +65 -0
  4. package/dist/Alert-D_FV8xxo.js.map +1 -0
  5. package/dist/Avatar-D5YGlXVF.js +50 -0
  6. package/dist/Avatar-D5YGlXVF.js.map +1 -0
  7. package/dist/Badge-8FkscqDt.js +59 -0
  8. package/dist/Badge-8FkscqDt.js.map +1 -0
  9. package/dist/Button-Q7MPG6ph.js +92 -0
  10. package/dist/Button-Q7MPG6ph.js.map +1 -0
  11. package/dist/Calendar-pDD7nRF-.js +8025 -0
  12. package/dist/Calendar-pDD7nRF-.js.map +1 -0
  13. package/dist/Callout-B0w4GQtx.js +65 -0
  14. package/dist/Callout-B0w4GQtx.js.map +1 -0
  15. package/dist/Checkbox-zCxgcZiC.js +24 -0
  16. package/dist/Checkbox-zCxgcZiC.js.map +1 -0
  17. package/dist/ColorPicker-D-7QGnf9.js +277 -0
  18. package/dist/ColorPicker-D-7QGnf9.js.map +1 -0
  19. package/dist/{DataTable-BKe9K5XP.js → DataTable-DWR9gX9d.js} +11 -3
  20. package/dist/{DataTable-BKe9K5XP.js.map → DataTable-DWR9gX9d.js.map} +1 -1
  21. package/dist/DatePicker-COxwHPIZ.js +2960 -0
  22. package/dist/DatePicker-COxwHPIZ.js.map +1 -0
  23. package/dist/Dialog-BURSzxaP.js +61 -0
  24. package/dist/Dialog-BURSzxaP.js.map +1 -0
  25. package/dist/Empty-B2JwFmru.js +26 -0
  26. package/dist/Empty-B2JwFmru.js.map +1 -0
  27. package/dist/Input-C1gcv9o2.js +147 -0
  28. package/dist/Input-C1gcv9o2.js.map +1 -0
  29. package/dist/Kbd-EqbC0bua.js +36 -0
  30. package/dist/Kbd-EqbC0bua.js.map +1 -0
  31. package/dist/Label-BVy4hy9Z.js +58 -0
  32. package/dist/Label-BVy4hy9Z.js.map +1 -0
  33. package/dist/MultiEmailInput-SCTYovtX.js +139 -0
  34. package/dist/MultiEmailInput-SCTYovtX.js.map +1 -0
  35. package/dist/Pagination-DSc9yXPy.js +61 -0
  36. package/dist/Pagination-DSc9yXPy.js.map +1 -0
  37. package/dist/Popover-BFMrtVPq.js +95 -0
  38. package/dist/Popover-BFMrtVPq.js.map +1 -0
  39. package/dist/Progress-B9NlUm6e.js +13 -0
  40. package/dist/Progress-B9NlUm6e.js.map +1 -0
  41. package/dist/RadioGroup-BNeYQAoT.js +34 -0
  42. package/dist/RadioGroup-BNeYQAoT.js.map +1 -0
  43. package/dist/Select-BGODpJGc.js +561 -0
  44. package/dist/Select-BGODpJGc.js.map +1 -0
  45. package/dist/{components/SelectFieldWrapper.js → SelectFieldWrapper-BJzq9aCY.js} +3 -11
  46. package/dist/SelectFieldWrapper-BJzq9aCY.js.map +1 -0
  47. package/dist/Sheet-QFC_mHyj.js +63 -0
  48. package/dist/Sheet-QFC_mHyj.js.map +1 -0
  49. package/dist/Slider-BCQXhs0Q.js +25 -0
  50. package/dist/Slider-BCQXhs0Q.js.map +1 -0
  51. package/dist/Spinner-C8HSac-2.js +17 -0
  52. package/dist/Spinner-C8HSac-2.js.map +1 -0
  53. package/dist/Stepper-BoGkmkY0.js +29 -0
  54. package/dist/Stepper-BoGkmkY0.js.map +1 -0
  55. package/dist/Switch-B83TGxJ_.js +20 -0
  56. package/dist/Switch-B83TGxJ_.js.map +1 -0
  57. package/dist/Tabs-DWfKnl3S.js +38 -0
  58. package/dist/Tabs-DWfKnl3S.js.map +1 -0
  59. package/dist/Textarea-C0z50h0N.js +73 -0
  60. package/dist/Textarea-C0z50h0N.js.map +1 -0
  61. package/dist/TimePicker-C4x62jI1.js +142 -0
  62. package/dist/TimePicker-C4x62jI1.js.map +1 -0
  63. package/dist/TimePickerPanel-CiF0RExY.js +126 -0
  64. package/dist/TimePickerPanel-CiF0RExY.js.map +1 -0
  65. package/dist/Toastr-DYqpSaMd.js +115 -0
  66. package/dist/Toastr-DYqpSaMd.js.map +1 -0
  67. package/dist/Tooltip-DhwIZnOU.js +80 -0
  68. package/dist/Tooltip-DhwIZnOU.js.map +1 -0
  69. package/dist/TranslationProvider-Ba9rn47H.js +96 -0
  70. package/dist/TranslationProvider-Ba9rn47H.js.map +1 -0
  71. package/dist/Tree-Dkr11OPy.js +7977 -0
  72. package/dist/Tree-Dkr11OPy.js.map +1 -0
  73. package/dist/TreeSelect-Cmc90YWJ.js +168 -0
  74. package/dist/TreeSelect-Cmc90YWJ.js.map +1 -0
  75. package/dist/Typography-D5TjXEfu.js +82 -0
  76. package/dist/Typography-D5TjXEfu.js.map +1 -0
  77. package/dist/cjs/Accordion-BX5I9ypV.js +28 -0
  78. package/dist/cjs/Accordion-BX5I9ypV.js.map +1 -0
  79. package/dist/cjs/Alert-BVvLyM_d.js +67 -0
  80. package/dist/cjs/Alert-BVvLyM_d.js.map +1 -0
  81. package/dist/cjs/Avatar-CNao5gvP.js +52 -0
  82. package/dist/cjs/Avatar-CNao5gvP.js.map +1 -0
  83. package/dist/cjs/Badge-STBHzYLs.js +61 -0
  84. package/dist/cjs/Badge-STBHzYLs.js.map +1 -0
  85. package/dist/cjs/Button-Bt_AElge.js +94 -0
  86. package/dist/cjs/Button-Bt_AElge.js.map +1 -0
  87. package/dist/cjs/Calendar-Nk76Y9yP.js +8066 -0
  88. package/dist/cjs/Calendar-Nk76Y9yP.js.map +1 -0
  89. package/dist/cjs/Callout-CS2U6pM7.js +67 -0
  90. package/dist/cjs/Callout-CS2U6pM7.js.map +1 -0
  91. package/dist/cjs/Checkbox-DOlS2oCD.js +26 -0
  92. package/dist/cjs/Checkbox-DOlS2oCD.js.map +1 -0
  93. package/dist/cjs/{ColorPicker-DN8aynGh.js → ColorPicker-DEELmqH8.js} +7 -10
  94. package/dist/cjs/ColorPicker-DEELmqH8.js.map +1 -0
  95. package/dist/cjs/{DataTable-BQt_mXDX.js → DataTable-CWs96k8n.js} +11 -3
  96. package/dist/cjs/{DataTable-BQt_mXDX.js.map → DataTable-CWs96k8n.js.map} +1 -1
  97. package/dist/cjs/DatePicker-DpijPndg.js +2962 -0
  98. package/dist/cjs/DatePicker-DpijPndg.js.map +1 -0
  99. package/dist/cjs/Dialog-CtI_yWsJ.js +63 -0
  100. package/dist/cjs/Dialog-CtI_yWsJ.js.map +1 -0
  101. package/dist/cjs/Empty-qzle6YvT.js +28 -0
  102. package/dist/cjs/Empty-qzle6YvT.js.map +1 -0
  103. package/dist/cjs/Input-pkugjUb0.js +149 -0
  104. package/dist/cjs/Input-pkugjUb0.js.map +1 -0
  105. package/dist/cjs/Kbd-DHirsI--.js +38 -0
  106. package/dist/cjs/Kbd-DHirsI--.js.map +1 -0
  107. package/dist/cjs/Label-DpyfZsiT.js +60 -0
  108. package/dist/cjs/Label-DpyfZsiT.js.map +1 -0
  109. package/dist/cjs/MultiEmailInput-l0_YVjbp.js +141 -0
  110. package/dist/cjs/MultiEmailInput-l0_YVjbp.js.map +1 -0
  111. package/dist/cjs/Pagination-Byzt9Kmj.js +63 -0
  112. package/dist/cjs/Pagination-Byzt9Kmj.js.map +1 -0
  113. package/dist/cjs/Popover-LIxANoTc.js +101 -0
  114. package/dist/cjs/Popover-LIxANoTc.js.map +1 -0
  115. package/dist/cjs/Progress-DoCxZ_ZH.js +15 -0
  116. package/dist/cjs/Progress-DoCxZ_ZH.js.map +1 -0
  117. package/dist/cjs/RadioGroup-1RAoe38m.js +36 -0
  118. package/dist/cjs/RadioGroup-1RAoe38m.js.map +1 -0
  119. package/dist/cjs/Select-DOPZHlqc.js +567 -0
  120. package/dist/cjs/Select-DOPZHlqc.js.map +1 -0
  121. package/dist/cjs/{components/SelectFieldWrapper.js → SelectFieldWrapper-DEA--2wj.js} +2 -10
  122. package/dist/cjs/SelectFieldWrapper-DEA--2wj.js.map +1 -0
  123. package/dist/cjs/Sheet-CIhtNCBV.js +65 -0
  124. package/dist/cjs/Sheet-CIhtNCBV.js.map +1 -0
  125. package/dist/cjs/Slider-jNUS9vt8.js +27 -0
  126. package/dist/cjs/Slider-jNUS9vt8.js.map +1 -0
  127. package/dist/cjs/Spinner-DQutDMQq.js +19 -0
  128. package/dist/cjs/Spinner-DQutDMQq.js.map +1 -0
  129. package/dist/cjs/Stepper-DCoLl2ZS.js +35 -0
  130. package/dist/cjs/Stepper-DCoLl2ZS.js.map +1 -0
  131. package/dist/cjs/Switch-CFf8DtB_.js +22 -0
  132. package/dist/cjs/Switch-CFf8DtB_.js.map +1 -0
  133. package/dist/cjs/Tabs-D2247rd7.js +40 -0
  134. package/dist/cjs/Tabs-D2247rd7.js.map +1 -0
  135. package/dist/cjs/Textarea-BfdlAJ59.js +75 -0
  136. package/dist/cjs/Textarea-BfdlAJ59.js.map +1 -0
  137. package/dist/cjs/TimePicker-Ba2FdT1O.js +144 -0
  138. package/dist/cjs/TimePicker-Ba2FdT1O.js.map +1 -0
  139. package/dist/cjs/TimePickerPanel-DGNr97cj.js +132 -0
  140. package/dist/cjs/TimePickerPanel-DGNr97cj.js.map +1 -0
  141. package/dist/cjs/Toastr-BGp7-kmf.js +117 -0
  142. package/dist/cjs/Toastr-BGp7-kmf.js.map +1 -0
  143. package/dist/cjs/Tooltip-CtxI7QBY.js +86 -0
  144. package/dist/cjs/Tooltip-CtxI7QBY.js.map +1 -0
  145. package/dist/cjs/TranslationProvider-DBZHXmzX.js +103 -0
  146. package/dist/cjs/TranslationProvider-DBZHXmzX.js.map +1 -0
  147. package/dist/cjs/Tree-qpOcsGL9.js +7985 -0
  148. package/dist/cjs/Tree-qpOcsGL9.js.map +1 -0
  149. package/dist/cjs/TreeSelect-DiIEdiAU.js +170 -0
  150. package/dist/cjs/TreeSelect-DiIEdiAU.js.map +1 -0
  151. package/dist/cjs/Typography-C3rGpmAY.js +104 -0
  152. package/dist/cjs/Typography-C3rGpmAY.js.map +1 -0
  153. package/dist/cjs/components/Accordion.js +6 -28
  154. package/dist/cjs/components/Accordion.js.map +1 -1
  155. package/dist/cjs/components/Alert.js +10 -67
  156. package/dist/cjs/components/Alert.js.map +1 -1
  157. package/dist/cjs/components/Avatar.js +32 -0
  158. package/dist/cjs/components/Avatar.js.map +1 -0
  159. package/dist/cjs/components/Badge.js +10 -62
  160. package/dist/cjs/components/Badge.js.map +1 -1
  161. package/dist/cjs/components/Button.js +11 -94
  162. package/dist/cjs/components/Button.js.map +1 -1
  163. package/dist/cjs/components/Callout.js +16 -0
  164. package/dist/cjs/components/Callout.js.map +1 -0
  165. package/dist/cjs/components/Checkbox.js +8 -24
  166. package/dist/cjs/components/Checkbox.js.map +1 -1
  167. package/dist/cjs/components/ColorPicker.js +3 -1
  168. package/dist/cjs/components/ColorPicker.js.map +1 -1
  169. package/dist/cjs/components/DataTable.js +3 -2
  170. package/dist/cjs/components/DataTable.js.map +1 -1
  171. package/dist/cjs/components/DatePicker.js +45 -0
  172. package/dist/cjs/components/DatePicker.js.map +1 -0
  173. package/dist/cjs/components/Dialog.js +9 -64
  174. package/dist/cjs/components/Dialog.js.map +1 -1
  175. package/dist/cjs/components/DropdownMenu.js +3 -1
  176. package/dist/cjs/components/DropdownMenu.js.map +1 -1
  177. package/dist/cjs/components/Empty.js +40 -0
  178. package/dist/cjs/components/Empty.js.map +1 -0
  179. package/dist/cjs/components/Input.js +8 -151
  180. package/dist/cjs/components/Input.js.map +1 -1
  181. package/dist/cjs/components/Kbd.js +30 -0
  182. package/dist/cjs/components/Kbd.js.map +1 -0
  183. package/dist/cjs/components/Label.js +43 -0
  184. package/dist/cjs/components/Label.js.map +1 -0
  185. package/dist/cjs/components/MultiEmailInput.js +20 -0
  186. package/dist/cjs/components/MultiEmailInput.js.map +1 -0
  187. package/dist/cjs/components/Pagination.js +21 -0
  188. package/dist/cjs/components/Pagination.js.map +1 -0
  189. package/dist/cjs/components/Popover.js +7 -103
  190. package/dist/cjs/components/Popover.js.map +1 -1
  191. package/dist/cjs/components/Progress.js +16 -0
  192. package/dist/cjs/components/Progress.js.map +1 -0
  193. package/dist/cjs/components/RadioGroup.js +9 -40
  194. package/dist/cjs/components/RadioGroup.js.map +1 -1
  195. package/dist/cjs/components/Select.js +33 -0
  196. package/dist/cjs/components/Select.js.map +1 -1
  197. package/dist/cjs/components/Sheet.js +9 -66
  198. package/dist/cjs/components/Sheet.js.map +1 -1
  199. package/dist/cjs/components/Slider.js +28 -0
  200. package/dist/cjs/components/Slider.js.map +1 -0
  201. package/dist/cjs/components/Spinner.js +15 -0
  202. package/dist/cjs/components/Spinner.js.map +1 -0
  203. package/dist/cjs/components/Stepper.js +13 -0
  204. package/dist/cjs/components/Stepper.js.map +1 -0
  205. package/dist/cjs/components/Switch.js +8 -20
  206. package/dist/cjs/components/Switch.js.map +1 -1
  207. package/dist/cjs/components/Tabs.js +8 -55
  208. package/dist/cjs/components/Tabs.js.map +1 -1
  209. package/dist/cjs/components/Textarea.js +8 -77
  210. package/dist/cjs/components/Textarea.js.map +1 -1
  211. package/dist/cjs/components/TimePicker.js +42 -0
  212. package/dist/cjs/components/TimePicker.js.map +1 -0
  213. package/dist/cjs/components/Toastr.js +4 -126
  214. package/dist/cjs/components/Toastr.js.map +1 -1
  215. package/dist/cjs/components/Tooltip.js +5 -85
  216. package/dist/cjs/components/Tooltip.js.map +1 -1
  217. package/dist/cjs/components/TranslationProvider.js +12 -0
  218. package/dist/cjs/components/TranslationProvider.js.map +1 -0
  219. package/dist/cjs/components/Tree.js +62 -0
  220. package/dist/cjs/components/Tree.js.map +1 -0
  221. package/dist/cjs/components/TreeSelect.js +45 -0
  222. package/dist/cjs/components/TreeSelect.js.map +1 -0
  223. package/dist/cjs/components/Typography.js +8 -98
  224. package/dist/cjs/components/Typography.js.map +1 -1
  225. package/dist/cjs/{dialog-CF2GBHOG.js → dialog-Bvyrshz3.js} +4 -2
  226. package/dist/cjs/dialog-Bvyrshz3.js.map +1 -0
  227. package/dist/cjs/formik/Button.js +45 -0
  228. package/dist/cjs/formik/Button.js.map +1 -0
  229. package/dist/cjs/formik/Checkbox.js +38 -0
  230. package/dist/cjs/formik/Checkbox.js.map +1 -0
  231. package/dist/cjs/formik/Form.js +116 -0
  232. package/dist/cjs/formik/Form.js.map +1 -0
  233. package/dist/cjs/formik/Input.js +38 -0
  234. package/dist/cjs/formik/Input.js.map +1 -0
  235. package/dist/cjs/formik/MultiEmailInput.js +31 -0
  236. package/dist/cjs/formik/MultiEmailInput.js.map +1 -0
  237. package/dist/cjs/formik/RadioGroup.js +44 -0
  238. package/dist/cjs/formik/RadioGroup.js.map +1 -0
  239. package/dist/cjs/formik/Select.js +61 -0
  240. package/dist/cjs/formik/Select.js.map +1 -0
  241. package/dist/cjs/formik/Slider.js +39 -0
  242. package/dist/cjs/formik/Slider.js.map +1 -0
  243. package/dist/cjs/formik/Switch.js +33 -0
  244. package/dist/cjs/formik/Switch.js.map +1 -0
  245. package/dist/cjs/formik/Textarea.js +34 -0
  246. package/dist/cjs/formik/Textarea.js.map +1 -0
  247. package/dist/cjs/formik/TreeSelect.js +56 -0
  248. package/dist/cjs/formik/TreeSelect.js.map +1 -0
  249. package/dist/cjs/formik/index.js +101 -0
  250. package/dist/cjs/formik/index.js.map +1 -0
  251. package/dist/cjs/index.js +332 -408
  252. package/dist/cjs/index.js.map +1 -1
  253. package/dist/cjs/primitives/Breadcrumb.js +5 -2
  254. package/dist/cjs/primitives/Breadcrumb.js.map +1 -1
  255. package/dist/cjs/primitives/Calendar.js +10 -8020
  256. package/dist/cjs/primitives/Calendar.js.map +1 -1
  257. package/dist/cjs/primitives/Carousel.js +5 -2
  258. package/dist/cjs/primitives/Carousel.js.map +1 -1
  259. package/dist/cjs/primitives/Chart.js +410 -207
  260. package/dist/cjs/primitives/Chart.js.map +1 -1
  261. package/dist/cjs/primitives/Combobox.js +783 -1096
  262. package/dist/cjs/primitives/Combobox.js.map +1 -1
  263. package/dist/cjs/primitives/Command.js +6 -2
  264. package/dist/cjs/primitives/Command.js.map +1 -1
  265. package/dist/cjs/primitives/Dialog.js +2 -1
  266. package/dist/cjs/primitives/Dialog.js.map +1 -1
  267. package/dist/cjs/primitives/Pagination.js +12 -6
  268. package/dist/cjs/primitives/Pagination.js.map +1 -1
  269. package/dist/cjs/primitives/Resizable.js +799 -778
  270. package/dist/cjs/primitives/Resizable.js.map +1 -1
  271. package/dist/cjs/primitives/ScrollArea.js +10 -10
  272. package/dist/cjs/primitives/Select.js +77 -77
  273. package/dist/cjs/primitives/Sheet.js +2 -1
  274. package/dist/cjs/primitives/Sheet.js.map +1 -1
  275. package/dist/cjs/primitives/Sidebar.js +8 -4
  276. package/dist/cjs/primitives/Sidebar.js.map +1 -1
  277. package/dist/cjs/primitives/Sonner.js +7 -42
  278. package/dist/cjs/primitives/Sonner.js.map +1 -1
  279. package/dist/cjs/primitives/Spinner.js +3 -1
  280. package/dist/cjs/primitives/Spinner.js.map +1 -1
  281. package/dist/cjs/primitives/index.js +7 -4
  282. package/dist/cjs/primitives/index.js.map +1 -1
  283. package/dist/cjs/redux-DEF7lAd1.js +240 -0
  284. package/dist/cjs/redux-DEF7lAd1.js.map +1 -0
  285. package/dist/cjs/{sheet-CkCrHmVA.js → sheet-BZHMKVH1.js} +4 -2
  286. package/dist/cjs/sheet-BZHMKVH1.js.map +1 -0
  287. package/dist/cjs/triangle-alert-ZUMRpmzW.js +43 -0
  288. package/dist/cjs/triangle-alert-ZUMRpmzW.js.map +1 -0
  289. package/dist/cjs/with-selector-DeKHbQY7.js +121 -0
  290. package/dist/cjs/with-selector-DeKHbQY7.js.map +1 -0
  291. package/dist/components/Accordion/index.d.ts +2 -0
  292. package/dist/components/Accordion.js +5 -27
  293. package/dist/components/Accordion.js.map +1 -1
  294. package/dist/components/{Alert.d.ts → Alert/Alert.d.ts} +2 -2
  295. package/dist/components/Alert/constants.d.ts +3 -0
  296. package/dist/components/Alert/index.d.ts +2 -0
  297. package/dist/components/Alert.js +11 -72
  298. package/dist/components/Alert.js.map +1 -1
  299. package/dist/components/Avatar/Avatar.d.ts +31 -0
  300. package/dist/components/Avatar/constants.d.ts +3 -0
  301. package/dist/components/Avatar/index.d.ts +2 -0
  302. package/dist/components/Avatar/utils.d.ts +1 -0
  303. package/dist/components/Avatar.js +26 -0
  304. package/dist/components/Avatar.js.map +1 -0
  305. package/dist/components/{Badge.d.ts → Badge/Badge.d.ts} +1 -1
  306. package/dist/components/Badge/constants.d.ts +25 -0
  307. package/dist/components/Badge/index.d.ts +2 -0
  308. package/dist/components/Badge.js +8 -64
  309. package/dist/components/Badge.js.map +1 -1
  310. package/dist/components/Button/constants.d.ts +5 -0
  311. package/dist/components/Button/index.d.ts +2 -0
  312. package/dist/components/Button.js +12 -99
  313. package/dist/components/Button.js.map +1 -1
  314. package/dist/components/Callout/Callout.d.ts +17 -0
  315. package/dist/components/Callout/constants.d.ts +8 -0
  316. package/dist/components/Callout/index.d.ts +2 -0
  317. package/dist/components/Callout.js +10 -0
  318. package/dist/components/Callout.js.map +1 -0
  319. package/dist/components/Checkbox/index.d.ts +2 -0
  320. package/dist/components/Checkbox.js +6 -26
  321. package/dist/components/Checkbox.js.map +1 -1
  322. package/dist/components/ColorPicker.js +5 -3
  323. package/dist/components/ColorPicker.js.map +1 -1
  324. package/dist/components/DataTable/components/EmptyState.d.ts +1 -1
  325. package/dist/components/DataTable.js +6 -5
  326. package/dist/components/DataTable.js.map +1 -1
  327. package/dist/components/DatePicker/DatePicker.d.ts +4 -0
  328. package/dist/components/DatePicker/DatePickerFooter.d.ts +12 -0
  329. package/dist/components/DatePicker/TimezoneSelect.d.ts +8 -0
  330. package/dist/components/DatePicker/constants.d.ts +17 -0
  331. package/dist/components/DatePicker/index.d.ts +2 -0
  332. package/dist/components/DatePicker/types.d.ts +56 -0
  333. package/dist/components/DatePicker/utils.d.ts +6 -0
  334. package/dist/components/DatePicker.js +39 -0
  335. package/dist/components/DatePicker.js.map +1 -0
  336. package/dist/components/{Dialog.d.ts → Dialog/Dialog.d.ts} +1 -1
  337. package/dist/components/Dialog/constants.d.ts +2 -0
  338. package/dist/components/Dialog/index.d.ts +2 -0
  339. package/dist/components/Dialog.js +7 -66
  340. package/dist/components/Dialog.js.map +1 -1
  341. package/dist/components/DropdownMenu.js +6 -4
  342. package/dist/components/DropdownMenu.js.map +1 -1
  343. package/dist/components/Empty/Empty.d.ts +27 -0
  344. package/dist/components/Empty/index.d.ts +2 -0
  345. package/dist/components/Empty.js +34 -0
  346. package/dist/components/Empty.js.map +1 -0
  347. package/dist/components/Input/constants.d.ts +17 -0
  348. package/dist/components/Input/index.d.ts +2 -0
  349. package/dist/components/Input/utils.d.ts +7 -0
  350. package/dist/components/Input.js +6 -153
  351. package/dist/components/Input.js.map +1 -1
  352. package/dist/components/Kbd/Kbd.d.ts +15 -0
  353. package/dist/components/Kbd/constants.d.ts +1 -0
  354. package/dist/components/Kbd/index.d.ts +2 -0
  355. package/dist/components/Kbd.js +24 -0
  356. package/dist/components/Kbd.js.map +1 -0
  357. package/dist/components/Label/Label.d.ts +40 -0
  358. package/dist/components/Label/constants.d.ts +1 -0
  359. package/dist/components/Label/index.d.ts +2 -0
  360. package/dist/components/Label.js +37 -0
  361. package/dist/components/Label.js.map +1 -0
  362. package/dist/components/MultiEmailInput/MultiEmailInput.d.ts +3 -0
  363. package/dist/components/MultiEmailInput/constants.d.ts +3 -0
  364. package/dist/components/MultiEmailInput/index.d.ts +2 -0
  365. package/dist/components/MultiEmailInput/types.d.ts +53 -0
  366. package/dist/components/MultiEmailInput/useMultiEmailState.d.ts +18 -0
  367. package/dist/components/MultiEmailInput/utils.d.ts +9 -0
  368. package/dist/components/MultiEmailInput.js +14 -0
  369. package/dist/components/MultiEmailInput.js.map +1 -0
  370. package/dist/components/Pagination/Pagination.d.ts +18 -0
  371. package/dist/components/Pagination/constants.d.ts +1 -0
  372. package/dist/components/Pagination/hooks/usePaginationRange.d.ts +7 -0
  373. package/dist/components/Pagination/index.d.ts +2 -0
  374. package/dist/components/Pagination/utils.d.ts +1 -0
  375. package/dist/components/Pagination.js +15 -0
  376. package/dist/components/Pagination.js.map +1 -0
  377. package/dist/components/Popover/constants.d.ts +2 -0
  378. package/dist/components/Popover/index.d.ts +2 -0
  379. package/dist/components/Popover.js +8 -104
  380. package/dist/components/Popover.js.map +1 -1
  381. package/dist/components/Progress/Progress.d.ts +12 -0
  382. package/dist/components/Progress/index.d.ts +2 -0
  383. package/dist/components/Progress.js +10 -0
  384. package/dist/components/Progress.js.map +1 -0
  385. package/dist/components/RadioGroup/index.d.ts +2 -0
  386. package/dist/components/RadioGroup.js +7 -42
  387. package/dist/components/RadioGroup.js.map +1 -1
  388. package/dist/components/Select/MultiSelectCombobox.d.ts +2 -0
  389. package/dist/components/{MultiSelectCombobox.types.d.ts → Select/MultiSelectCombobox.types.d.ts} +3 -13
  390. package/dist/components/{OptionItem.d.ts → Select/OptionItem.d.ts} +1 -1
  391. package/dist/components/Select/Select.d.ts +5 -0
  392. package/dist/components/Select/SelectCombobox.d.ts +2 -0
  393. package/dist/components/Select/SelectCombobox.types.d.ts +73 -0
  394. package/dist/components/Select/dropdown.types.d.ts +12 -0
  395. package/dist/components/Select/index.d.ts +2 -0
  396. package/dist/components/Select/types.d.ts +148 -0
  397. package/dist/components/{MultiSelect.utils.d.ts → Select/utils.d.ts} +1 -1
  398. package/dist/components/Select.js +29 -1
  399. package/dist/components/Select.js.map +1 -1
  400. package/dist/components/Sheet/constants.d.ts +3 -0
  401. package/dist/components/Sheet/index.d.ts +2 -0
  402. package/dist/components/Sheet.js +7 -68
  403. package/dist/components/Sheet.js.map +1 -1
  404. package/dist/components/Slider/Slider.d.ts +19 -0
  405. package/dist/components/Slider/index.d.ts +2 -0
  406. package/dist/components/Slider.js +22 -0
  407. package/dist/components/Slider.js.map +1 -0
  408. package/dist/components/Spinner/Spinner.d.ts +10 -0
  409. package/dist/components/Spinner/constants.d.ts +1 -0
  410. package/dist/components/Spinner/index.d.ts +2 -0
  411. package/dist/components/Spinner.js +9 -0
  412. package/dist/components/Spinner.js.map +1 -0
  413. package/dist/components/Stepper/Stepper.d.ts +18 -0
  414. package/dist/components/Stepper/index.d.ts +2 -0
  415. package/dist/components/Stepper.js +7 -0
  416. package/dist/components/Stepper.js.map +1 -0
  417. package/dist/components/Switch/index.d.ts +2 -0
  418. package/dist/components/Switch.js +6 -22
  419. package/dist/components/Switch.js.map +1 -1
  420. package/dist/components/Tabs/constants.d.ts +5 -0
  421. package/dist/components/Tabs/index.d.ts +2 -0
  422. package/dist/components/Tabs.js +6 -57
  423. package/dist/components/Tabs.js.map +1 -1
  424. package/dist/components/{Textarea.d.ts → Textarea/Textarea.d.ts} +1 -1
  425. package/dist/components/Textarea/constants.d.ts +5 -0
  426. package/dist/components/Textarea/index.d.ts +2 -0
  427. package/dist/components/Textarea/utils.d.ts +2 -0
  428. package/dist/components/Textarea.js +6 -79
  429. package/dist/components/Textarea.js.map +1 -1
  430. package/dist/components/TimePicker/TimeColumn.d.ts +11 -0
  431. package/dist/components/TimePicker/TimePicker.d.ts +4 -0
  432. package/dist/components/TimePicker/TimePickerPanel.d.ts +4 -0
  433. package/dist/components/TimePicker/constants.d.ts +3 -0
  434. package/dist/components/TimePicker/index.d.ts +3 -0
  435. package/dist/components/TimePicker/types.d.ts +61 -0
  436. package/dist/components/TimePicker/utils.d.ts +11 -0
  437. package/dist/components/TimePicker.js +35 -0
  438. package/dist/components/TimePicker.js.map +1 -0
  439. package/dist/components/{Toastr.d.ts → Toastr/Toastr.d.ts} +2 -2
  440. package/dist/components/Toastr/index.d.ts +2 -0
  441. package/dist/components/Toastr/utils.d.ts +10 -0
  442. package/dist/components/Toastr.js +2 -128
  443. package/dist/components/Toastr.js.map +1 -1
  444. package/dist/components/Tooltip/constants.d.ts +2 -0
  445. package/dist/components/Tooltip/index.d.ts +2 -0
  446. package/dist/components/Tooltip.js +7 -87
  447. package/dist/components/Tooltip.js.map +1 -1
  448. package/dist/components/TranslationProvider/TranslationProvider.d.ts +6 -0
  449. package/dist/components/TranslationProvider/i18n.d.ts +1 -0
  450. package/dist/components/TranslationProvider/index.d.ts +2 -0
  451. package/dist/components/TranslationProvider/types.d.ts +7 -0
  452. package/dist/components/TranslationProvider.js +6 -0
  453. package/dist/components/TranslationProvider.js.map +1 -0
  454. package/dist/components/Tree/Tree.d.ts +2 -0
  455. package/dist/components/Tree/TreeContext.d.ts +26 -0
  456. package/dist/components/Tree/components/SwitcherIcon.d.ts +6 -0
  457. package/dist/components/Tree/components/TreeCheckbox.d.ts +8 -0
  458. package/dist/components/Tree/components/TreeNode.d.ts +3 -0
  459. package/dist/components/Tree/constants.d.ts +3 -0
  460. package/dist/components/Tree/hooks/useTreeCheck.d.ts +18 -0
  461. package/dist/components/Tree/hooks/useTreeExpansion.d.ts +18 -0
  462. package/dist/components/Tree/hooks/useTreeSelection.d.ts +16 -0
  463. package/dist/components/Tree/index.d.ts +3 -0
  464. package/dist/components/Tree/types.d.ts +110 -0
  465. package/dist/components/Tree/utils/adapter.d.ts +10 -0
  466. package/dist/components/Tree/utils/checkCascade.d.ts +5 -0
  467. package/dist/components/Tree/utils/search.d.ts +10 -0
  468. package/dist/components/Tree.js +57 -0
  469. package/dist/components/Tree.js.map +1 -0
  470. package/dist/components/TreeSelect/TreeSelect.d.ts +3 -0
  471. package/dist/components/TreeSelect/TreeSelectTrigger.d.ts +14 -0
  472. package/dist/components/{Select.constants.d.ts → TreeSelect/constants.d.ts} +2 -2
  473. package/dist/components/TreeSelect/hooks/useTreeSelectState.d.ts +30 -0
  474. package/dist/components/TreeSelect/hooks/useTreeSelectValue.d.ts +19 -0
  475. package/dist/components/TreeSelect/index.d.ts +2 -0
  476. package/dist/components/TreeSelect/types.d.ts +49 -0
  477. package/dist/components/TreeSelect/utils/pruneTree.d.ts +2 -0
  478. package/dist/components/TreeSelect/utils/resolveFieldNames.d.ts +5 -0
  479. package/dist/components/TreeSelect.js +39 -0
  480. package/dist/components/TreeSelect.js.map +1 -0
  481. package/dist/components/{Typography.d.ts → Typography/Typography.d.ts} +2 -2
  482. package/dist/components/Typography/index.d.ts +1 -0
  483. package/dist/components/Typography.js +6 -81
  484. package/dist/components/Typography.js.map +1 -1
  485. package/dist/{dialog-Civ9r6wD.js → dialog-CrB6N_2a.js} +4 -2
  486. package/dist/dialog-CrB6N_2a.js.map +1 -0
  487. package/dist/{floating-ui.react-dom-CcGbtPEK.js → floating-ui.react-dom-D8_f_WWh.js} +2 -2
  488. package/dist/{floating-ui.react-dom-CcGbtPEK.js.map → floating-ui.react-dom-D8_f_WWh.js.map} +1 -1
  489. package/dist/formik/Button.d.ts +7 -0
  490. package/dist/formik/Button.js +43 -0
  491. package/dist/formik/Button.js.map +1 -0
  492. package/dist/formik/Checkbox.d.ts +8 -0
  493. package/dist/formik/Checkbox.js +36 -0
  494. package/dist/formik/Checkbox.js.map +1 -0
  495. package/dist/formik/Form/FormWrapper.d.ts +9 -0
  496. package/dist/formik/Form/ScrollToErrorField/index.d.ts +5 -0
  497. package/dist/formik/Form/ScrollToErrorField/utils.d.ts +2 -0
  498. package/dist/formik/Form/index.d.ts +16 -0
  499. package/dist/formik/Form.js +114 -0
  500. package/dist/formik/Form.js.map +1 -0
  501. package/dist/formik/Input.d.ts +8 -0
  502. package/dist/formik/Input.js +36 -0
  503. package/dist/formik/Input.js.map +1 -0
  504. package/dist/formik/MultiEmailInput.d.ts +7 -0
  505. package/dist/formik/MultiEmailInput.js +29 -0
  506. package/dist/formik/MultiEmailInput.js.map +1 -0
  507. package/dist/formik/RadioGroup.js +42 -0
  508. package/dist/formik/RadioGroup.js.map +1 -0
  509. package/dist/formik/Select.d.ts +7 -0
  510. package/dist/formik/Select.js +59 -0
  511. package/dist/formik/Select.js.map +1 -0
  512. package/dist/formik/Slider.d.ts +8 -0
  513. package/dist/formik/Slider.js +37 -0
  514. package/dist/formik/Slider.js.map +1 -0
  515. package/dist/formik/Switch.d.ts +10 -0
  516. package/dist/formik/Switch.js +31 -0
  517. package/dist/formik/Switch.js.map +1 -0
  518. package/dist/formik/Textarea.d.ts +8 -0
  519. package/dist/formik/Textarea.js +32 -0
  520. package/dist/formik/Textarea.js.map +1 -0
  521. package/dist/formik/TreeSelect.d.ts +7 -0
  522. package/dist/formik/TreeSelect.js +54 -0
  523. package/dist/formik/TreeSelect.js.map +1 -0
  524. package/dist/formik/index.d.ts +22 -0
  525. package/dist/formik/index.js +85 -0
  526. package/dist/formik/index.js.map +1 -0
  527. package/dist/hooks/useAsyncOptions.d.ts +4 -4
  528. package/dist/hooks/useComboboxAnchor.d.ts +6 -0
  529. package/dist/hooks/useCreatableItems.d.ts +1 -1
  530. package/dist/hooks/useMultiSelectOptions.d.ts +22 -4
  531. package/dist/hooks/useMultiSelectState.d.ts +7 -4
  532. package/dist/hooks/useSelectState.d.ts +39 -14
  533. package/dist/{index-ByEpUy7w.js → index-C3hByjk3.js} +2 -2
  534. package/dist/{index-ByEpUy7w.js.map → index-C3hByjk3.js.map} +1 -1
  535. package/dist/{index-KzJfsx-e.js → index-DLPtgEJ_.js} +2 -2
  536. package/dist/{index-KzJfsx-e.js.map → index-DLPtgEJ_.js.map} +1 -1
  537. package/dist/index.css +2 -1
  538. package/dist/index.d.ts +34 -2
  539. package/dist/index.js +294 -392
  540. package/dist/index.js.map +1 -1
  541. package/dist/primitives/Breadcrumb.js +5 -2
  542. package/dist/primitives/Breadcrumb.js.map +1 -1
  543. package/dist/primitives/Calendar.js +8 -8003
  544. package/dist/primitives/Calendar.js.map +1 -1
  545. package/dist/primitives/Carousel.js +5 -2
  546. package/dist/primitives/Carousel.js.map +1 -1
  547. package/dist/primitives/Chart.js +253 -50
  548. package/dist/primitives/Chart.js.map +1 -1
  549. package/dist/primitives/Combobox.d.ts +3 -3
  550. package/dist/primitives/Combobox.js +787 -1100
  551. package/dist/primitives/Combobox.js.map +1 -1
  552. package/dist/primitives/Command.js +6 -2
  553. package/dist/primitives/Command.js.map +1 -1
  554. package/dist/primitives/ContextMenu.js +3 -3
  555. package/dist/primitives/Dialog.js +2 -1
  556. package/dist/primitives/Dialog.js.map +1 -1
  557. package/dist/primitives/DropdownMenu.js +3 -3
  558. package/dist/primitives/HoverCard.js +2 -2
  559. package/dist/primitives/Menubar.js +3 -3
  560. package/dist/primitives/Pagination.js +12 -6
  561. package/dist/primitives/Pagination.js.map +1 -1
  562. package/dist/primitives/Popover.js +2 -2
  563. package/dist/primitives/Resizable.js +799 -778
  564. package/dist/primitives/Resizable.js.map +1 -1
  565. package/dist/primitives/Select.js +4 -4
  566. package/dist/primitives/Sheet.js +2 -1
  567. package/dist/primitives/Sheet.js.map +1 -1
  568. package/dist/primitives/Sidebar.js +11 -7
  569. package/dist/primitives/Sidebar.js.map +1 -1
  570. package/dist/primitives/Sonner.js +5 -40
  571. package/dist/primitives/Sonner.js.map +1 -1
  572. package/dist/primitives/Spinner.js +3 -1
  573. package/dist/primitives/Spinner.js.map +1 -1
  574. package/dist/primitives/Tooltip.js +3 -3
  575. package/dist/primitives/index.js +11 -8
  576. package/dist/primitives/index.js.map +1 -1
  577. package/dist/redux-BKH6DnBB.js +235 -0
  578. package/dist/redux-BKH6DnBB.js.map +1 -0
  579. package/dist/shadcn/components/combobox.d.ts +1 -1
  580. package/dist/shadcn/components/command.d.ts +1 -1
  581. package/dist/shadcn/components/pagination.d.ts +2 -2
  582. package/dist/shadcn/components/typography.d.ts +4 -4
  583. package/dist/{sheet-COcn22fC.js → sheet-C763FqIh.js} +4 -2
  584. package/dist/sheet-C763FqIh.js.map +1 -0
  585. package/dist/{tooltip-DzjIJacP.js → tooltip-XkHLgxlU.js} +2 -2
  586. package/dist/{tooltip-DzjIJacP.js.map → tooltip-XkHLgxlU.js.map} +1 -1
  587. package/dist/translations/index.d.ts +66 -0
  588. package/dist/triangle-alert-PXnNWQy_.js +40 -0
  589. package/dist/triangle-alert-PXnNWQy_.js.map +1 -0
  590. package/dist/utils/dayjs/index.d.ts +4 -0
  591. package/dist/utils/dayjs/timezonePlugin.d.ts +3 -0
  592. package/dist/with-selector-Dv0G_V_o.js +115 -0
  593. package/dist/with-selector-Dv0G_V_o.js.map +1 -0
  594. package/package.json +54 -36
  595. package/dist/ColorPicker-BPvxDGDM.js +0 -276
  596. package/dist/ColorPicker-BPvxDGDM.js.map +0 -1
  597. package/dist/cjs/ColorPicker-DN8aynGh.js.map +0 -1
  598. package/dist/cjs/components/MultiSelect.js +0 -13
  599. package/dist/cjs/components/MultiSelect.js.map +0 -1
  600. package/dist/cjs/components/MultiSelectCombobox.js +0 -3
  601. package/dist/cjs/components/MultiSelectCombobox.js.map +0 -1
  602. package/dist/cjs/components/MultiSelectDropdown.js +0 -37
  603. package/dist/cjs/components/MultiSelectDropdown.js.map +0 -1
  604. package/dist/cjs/components/OptionItem.js +0 -34
  605. package/dist/cjs/components/OptionItem.js.map +0 -1
  606. package/dist/cjs/components/SelectFieldWrapper.js.map +0 -1
  607. package/dist/cjs/components/SelectOptions.js +0 -43
  608. package/dist/cjs/components/SelectOptions.js.map +0 -1
  609. package/dist/cjs/components/SelectTriggerContent.js +0 -43
  610. package/dist/cjs/components/SelectTriggerContent.js.map +0 -1
  611. package/dist/cjs/components/shared.js +0 -8
  612. package/dist/cjs/components/shared.js.map +0 -1
  613. package/dist/cjs/dialog-CF2GBHOG.js.map +0 -1
  614. package/dist/cjs/sheet-CkCrHmVA.js.map +0 -1
  615. package/dist/cjs/useCreatableItems-BTHtd7uo.js +0 -100
  616. package/dist/cjs/useCreatableItems-BTHtd7uo.js.map +0 -1
  617. package/dist/cjs/with-selector-u4xTSzCv.js +0 -457
  618. package/dist/cjs/with-selector-u4xTSzCv.js.map +0 -1
  619. package/dist/components/MultiSelect.d.ts +0 -4
  620. package/dist/components/MultiSelect.js +0 -4
  621. package/dist/components/MultiSelect.js.map +0 -1
  622. package/dist/components/MultiSelect.types.d.ts +0 -121
  623. package/dist/components/MultiSelectCombobox.d.ts +0 -3
  624. package/dist/components/MultiSelectCombobox.js +0 -2
  625. package/dist/components/MultiSelectCombobox.js.map +0 -1
  626. package/dist/components/MultiSelectDropdown.js +0 -35
  627. package/dist/components/MultiSelectDropdown.js.map +0 -1
  628. package/dist/components/OptionItem.js +0 -32
  629. package/dist/components/OptionItem.js.map +0 -1
  630. package/dist/components/Select.d.ts +0 -4
  631. package/dist/components/Select.types.d.ts +0 -58
  632. package/dist/components/SelectFieldWrapper.js.map +0 -1
  633. package/dist/components/SelectOptions.d.ts +0 -2
  634. package/dist/components/SelectOptions.js +0 -41
  635. package/dist/components/SelectOptions.js.map +0 -1
  636. package/dist/components/SelectTriggerContent.d.ts +0 -18
  637. package/dist/components/SelectTriggerContent.js +0 -41
  638. package/dist/components/SelectTriggerContent.js.map +0 -1
  639. package/dist/components/shared.js +0 -6
  640. package/dist/components/shared.js.map +0 -1
  641. package/dist/components/shared.types.d.ts +0 -16
  642. package/dist/dialog-Civ9r6wD.js.map +0 -1
  643. package/dist/sheet-COcn22fC.js.map +0 -1
  644. package/dist/useCreatableItems-B0seQA1_.js +0 -89
  645. package/dist/useCreatableItems-B0seQA1_.js.map +0 -1
  646. package/dist/with-selector--fY1NrB9.js +0 -448
  647. package/dist/with-selector--fY1NrB9.js.map +0 -1
  648. /package/dist/components/{Accordion.d.ts → Accordion/Accordion.d.ts} +0 -0
  649. /package/dist/components/{Button.d.ts → Button/Button.d.ts} +0 -0
  650. /package/dist/components/{Checkbox.d.ts → Checkbox/Checkbox.d.ts} +0 -0
  651. /package/dist/components/{Input.d.ts → Input/Input.d.ts} +0 -0
  652. /package/dist/components/{Popover.d.ts → Popover/Popover.d.ts} +0 -0
  653. /package/dist/components/{RadioGroup.d.ts → RadioGroup/RadioGroup.d.ts} +0 -0
  654. /package/dist/components/{MultiSelectDropdown.d.ts → Select/MultiSelectDropdown.d.ts} +0 -0
  655. /package/dist/components/{SelectFieldWrapper.d.ts → Select/SelectFieldWrapper.d.ts} +0 -0
  656. /package/dist/components/{MultiSelect.constants.d.ts → Select/constants.d.ts} +0 -0
  657. /package/dist/components/{Sheet.d.ts → Sheet/Sheet.d.ts} +0 -0
  658. /package/dist/components/{Switch.d.ts → Switch/Switch.d.ts} +0 -0
  659. /package/dist/components/{Tabs.d.ts → Tabs/Tabs.d.ts} +0 -0
  660. /package/dist/components/{Tooltip.d.ts → Tooltip/Tooltip.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Empty-B2JwFmru.js","sources":["../src/components/Empty/Empty.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Empty as PrimitiveEmpty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n} from \"src/primitives/Empty\";\nimport { Button } from \"src/components/Button\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\nimport { renderIcon, type IconProp } from \"src/lib/renderIcon\";\n\nexport interface EmptyProps extends React.ComponentProps<\"div\"> {\n /** Image URL or JSX for the media area. */\n image?: string | React.ReactNode;\n /** Icon for the media area (rendered inside EmptyMedia with variant=\"icon\"). */\n icon?: IconProp;\n /** Empty state title. */\n title?: string;\n /** Description text or JSX. */\n description?: React.ReactNode;\n /** Additional help text below the description. */\n helpText?: React.ReactNode;\n /** Props forwarded to the primary action Button. */\n primaryButtonProps?: React.ComponentProps<typeof Button>;\n /** Props forwarded to the secondary action Button. */\n secondaryButtonProps?: React.ComponentProps<typeof Button>;\n /** Text displayed between the primary and secondary buttons (e.g., \"or\"). */\n buttonSeparatorText?: string;\n /** Show tooltip on disabled buttons using their label as content. */\n showTooltipWhenButtonDisabled?: boolean;\n /** Additional CSS class names. */\n className?: string;\n}\n\nfunction MaybeTooltipButton({\n buttonProps,\n showTooltipWhenDisabled,\n defaultVariant,\n}: {\n buttonProps: React.ComponentProps<typeof Button>;\n showTooltipWhenDisabled: boolean;\n defaultVariant: \"default\" | \"outline\";\n}) {\n const button = <Button variant={defaultVariant} {...buttonProps} />;\n\n if (showTooltipWhenDisabled && buttonProps.disabled && buttonProps.label) {\n return (\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex\">{button}</span>\n </TooltipTrigger>\n <TooltipContent>{buttonProps.label}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return button;\n}\n\nconst Empty = forwardRef<HTMLDivElement, EmptyProps>(\n (\n {\n image,\n icon,\n title,\n description,\n helpText,\n primaryButtonProps,\n secondaryButtonProps,\n buttonSeparatorText,\n showTooltipWhenButtonDisabled = false,\n className,\n ...otherProps\n },\n ref\n ) => {\n const hasMedia = image || icon;\n const hasButtons = primaryButtonProps || secondaryButtonProps;\n\n return (\n <PrimitiveEmpty ref={ref} className={cn(className)} {...otherProps}>\n <EmptyHeader>\n {hasMedia && (\n <>\n {image && (\n <EmptyMedia>\n {typeof image === \"string\" ? (\n <img src={image} alt={title ?? \"\"} />\n ) : (\n image\n )}\n </EmptyMedia>\n )}\n {!image && icon && (\n <EmptyMedia variant=\"icon\">{renderIcon(icon)}</EmptyMedia>\n )}\n </>\n )}\n {title && <EmptyTitle>{title}</EmptyTitle>}\n {description && <EmptyDescription>{description}</EmptyDescription>}\n {helpText && (\n <p className=\"text-sm text-muted-foreground\">{helpText}</p>\n )}\n </EmptyHeader>\n\n {hasButtons && (\n <EmptyContent>\n <div className=\"flex flex-wrap items-center justify-center gap-2\">\n {primaryButtonProps && (\n <MaybeTooltipButton\n buttonProps={primaryButtonProps}\n showTooltipWhenDisabled={showTooltipWhenButtonDisabled}\n defaultVariant=\"default\"\n />\n )}\n {buttonSeparatorText &&\n primaryButtonProps &&\n secondaryButtonProps && (\n <span className=\"text-sm text-muted-foreground\">\n {buttonSeparatorText}\n </span>\n )}\n {secondaryButtonProps && (\n <MaybeTooltipButton\n buttonProps={secondaryButtonProps}\n showTooltipWhenDisabled={showTooltipWhenButtonDisabled}\n defaultVariant=\"outline\"\n />\n )}\n </div>\n </EmptyContent>\n )}\n </PrimitiveEmpty>\n );\n }\n);\n\nEmpty.displayName = \"Empty\";\n\nexport { Empty };\n"],"names":["_jsx","_jsxs","PrimitiveEmpty","_Fragment"],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { forwardRef, useId, useState } from 'react';
3
+ import { c as cn } from './utils-DdHUxIdC.js';
4
+ import { Field, FieldLabel, FieldContent, FieldError, FieldDescription } from './primitives/Field.js';
5
+ import { InputGroup, InputGroupAddon, InputGroupText, InputGroupInput } from './primitives/InputGroup.js';
6
+
7
+ const SIZE_CONFIG = {
8
+ small: { group: "h-7", input: "text-xs px-2", addon: "px-1.5" },
9
+ medium: { group: "h-8", input: "text-sm", addon: "px-2" },
10
+ large: { group: "h-10", input: "text-sm", addon: "px-2.5" },
11
+ };
12
+
13
+ function toFixed(numStr, prec) {
14
+ const num = Number(numStr);
15
+ if (Number.isNaN(num))
16
+ return numStr;
17
+ return num.toFixed(prec);
18
+ }
19
+ function formatWithPrecision(value, precision) {
20
+ if (precision < 0 || !value)
21
+ return value;
22
+ const str = value.toString();
23
+ const trimmed = str.trim();
24
+ if (trimmed !== "" && !Number.isNaN(Number(trimmed)))
25
+ return toFixed(str, precision);
26
+ return str;
27
+ }
28
+ function enforceDecimalPrecision(value, precision) {
29
+ if (precision < 0 || !value)
30
+ return value;
31
+ const valueStr = value.toString();
32
+ if (precision === 0)
33
+ return valueStr.split(".")[0];
34
+ const regex = new RegExp(`^\\d*\\.?\\d{0,${precision}}$`);
35
+ if (regex.test(valueStr))
36
+ return value;
37
+ const parts = valueStr.split(".");
38
+ if (parts.length === 1)
39
+ return parts[0];
40
+ return `${parts[0]}.${parts[1].substring(0, precision)}`;
41
+ }
42
+ function formatWithRejectCharsRegex(value, rejectCharsRegex) {
43
+ if (!rejectCharsRegex)
44
+ return value;
45
+ const globalRegex = new RegExp(rejectCharsRegex, "g");
46
+ return value.replace(globalRegex, "");
47
+ }
48
+ function getTrimmedValue(value, disableTrimOnBlur) {
49
+ if (disableTrimOnBlur || typeof value !== "string")
50
+ return value;
51
+ return value.trim();
52
+ }
53
+ function preserveCursor(e, updateValueFn) {
54
+ const input = e.target;
55
+ const prevCursor = input.selectionStart;
56
+ const prevValue = input.value;
57
+ const updatedEvent = updateValueFn();
58
+ const lengthDiff = input.value.length - prevValue.length;
59
+ const newCursor = Math.max(0, (prevCursor ?? 0) + lengthDiff);
60
+ requestAnimationFrame(() => {
61
+ if (document.activeElement !== input)
62
+ return;
63
+ if (input.type === "number")
64
+ return;
65
+ input.setSelectionRange(newCursor, newCursor);
66
+ });
67
+ return updatedEvent;
68
+ }
69
+
70
+ const Input = forwardRef(({ size = "medium", type = "text", label = "", error = "", helpText = "", prefix = null, suffix = null, disabled = false, nakedInput = false, contentSize, required = false, maxLength, unlimitedChars = false, rejectCharsRegex, disableTrimOnBlur = false, precision = -1, labelProps, className = "", onBlur, onChange, value: controlledValue, ...otherProps }, ref) => {
71
+ const generatedId = useId();
72
+ const id = otherProps.id ?? generatedId;
73
+ const errorId = `error_${id}`;
74
+ const helpTextId = `helpText_${id}`;
75
+ // Controlled / uncontrolled value tracking
76
+ const [valueInternal, setValueInternal] = useState(controlledValue);
77
+ const isControlled = controlledValue !== undefined;
78
+ const value = formatWithPrecision(controlledValue, precision) ?? valueInternal ?? "";
79
+ const valueLength = value?.toString().length || 0;
80
+ const isMaxLengthPresent = !!maxLength || maxLength === 0;
81
+ const isCharacterLimitVisible = isMaxLengthPresent && valueLength >= maxLength * 0.85;
82
+ const maxLengthError = unlimitedChars && valueLength > maxLength;
83
+ // --- Handlers ---
84
+ const onChangeInternal = (e) => {
85
+ if (!isControlled) {
86
+ setValueInternal(e.target.value);
87
+ }
88
+ onChange?.(e);
89
+ };
90
+ const handleChange = (e) => {
91
+ if (type === "file") {
92
+ onChangeInternal(e);
93
+ return;
94
+ }
95
+ let formattedValue = formatWithRejectCharsRegex(e.target.value, rejectCharsRegex);
96
+ formattedValue = enforceDecimalPrecision(formattedValue, precision);
97
+ if (formattedValue !== e.target.value) {
98
+ preserveCursor(e, () => {
99
+ const syntheticEvent = Object.create(e, {
100
+ target: { value: { ...e.target, value: formattedValue } },
101
+ });
102
+ e.target.value = formattedValue;
103
+ onChangeInternal(syntheticEvent);
104
+ return syntheticEvent;
105
+ });
106
+ }
107
+ else {
108
+ onChangeInternal(e);
109
+ }
110
+ };
111
+ const handleBlur = (e) => {
112
+ if (type === "file") {
113
+ onBlur?.(e);
114
+ return;
115
+ }
116
+ const trimmedValue = getTrimmedValue(value, disableTrimOnBlur);
117
+ const formattedValue = formatWithPrecision(trimmedValue, precision);
118
+ if (formattedValue !== undefined && formattedValue !== value) {
119
+ e.target.value = formattedValue.toString();
120
+ handleChange(e);
121
+ }
122
+ onBlur?.(e);
123
+ };
124
+ const handleWheel = (e) => {
125
+ if (type === "number")
126
+ e.target.blur();
127
+ };
128
+ // --- aria-describedby ---
129
+ const ariaDescribedBy = [error ? errorId : null, helpText ? helpTextId : null]
130
+ .filter(Boolean)
131
+ .join(" ") || undefined;
132
+ // --- Render ---
133
+ const hasField = !!(label || error || helpText);
134
+ const sizeConfig = SIZE_CONFIG[size];
135
+ const inputGroup = (jsxs(InputGroup, { className: cn(sizeConfig.group, nakedInput &&
136
+ "border-0 shadow-none has-[[data-slot=input-group-control]:focus-visible]:ring-0 has-[[data-slot=input-group-control]:focus-visible]:border-transparent", !!error &&
137
+ !nakedInput &&
138
+ "border-destructive ring-destructive/20 ring-3", !hasField && className), children: [prefix && (jsx(InputGroupAddon, { align: "inline-start", className: sizeConfig.addon, children: jsx(InputGroupText, { children: prefix }) })), jsx(InputGroupInput, { ref: ref, id: id, type: type, disabled: disabled, required: required, size: contentSize, "aria-invalid": !!error || undefined, "aria-describedby": ariaDescribedBy, className: cn(sizeConfig.input, nakedInput && "px-0"), value: value, onBlur: handleBlur, onChange: handleChange, onWheel: handleWheel, ...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {}), ...otherProps }), suffix && (jsx(InputGroupAddon, { align: "inline-end", className: sizeConfig.addon, children: jsx(InputGroupText, { children: suffix }) }))] }));
139
+ if (!hasField) {
140
+ return inputGroup;
141
+ }
142
+ return (jsxs(Field, { "data-disabled": disabled || undefined, "data-invalid": !!error || undefined, className: className, children: [(label || isCharacterLimitVisible) && (jsxs("div", { className: "flex items-center justify-between", children: [label && (jsxs(FieldLabel, { htmlFor: id, ...labelProps, children: [label, required && (jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" }))] })), isCharacterLimitVisible && (jsxs("span", { className: cn("text-xs tabular-nums", maxLengthError ? "text-destructive" : "text-muted-foreground"), children: [valueLength, "/", maxLength] }))] })), jsxs(FieldContent, { children: [inputGroup, !!error && jsx(FieldError, { id: errorId, children: error }), helpText && (jsx(FieldDescription, { id: helpTextId, children: helpText }))] })] }));
143
+ });
144
+ Input.displayName = "Input";
145
+
146
+ export { Input as I };
147
+ //# sourceMappingURL=Input-C1gcv9o2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input-C1gcv9o2.js","sources":["../src/components/Input/constants.ts","../src/components/Input/utils.ts","../src/components/Input/Input.tsx"],"sourcesContent":["export const SIZE_CONFIG = {\n small: { group: \"h-7\", input: \"text-xs px-2\", addon: \"px-1.5\" },\n medium: { group: \"h-8\", input: \"text-sm\", addon: \"px-2\" },\n large: { group: \"h-10\", input: \"text-sm\", addon: \"px-2.5\" },\n};\n","import React from \"react\";\n\nexport function toFixed(numStr: string, prec: number): string {\n const num = Number(numStr);\n if (Number.isNaN(num)) return numStr;\n\n return num.toFixed(prec);\n}\n\nexport function formatWithPrecision(\n value: string | number | undefined,\n precision: number\n): string | undefined {\n if (precision < 0 || !value) return value as string | undefined;\n\n const str = value.toString();\n const trimmed = str.trim();\n if (trimmed !== \"\" && !Number.isNaN(Number(trimmed)))\n return toFixed(str, precision);\n\n return str;\n}\n\nexport function enforceDecimalPrecision(\n value: string,\n precision: number\n): string {\n if (precision < 0 || !value) return value;\n\n const valueStr = value.toString();\n if (precision === 0) return valueStr.split(\".\")[0];\n\n const regex = new RegExp(`^\\\\d*\\\\.?\\\\d{0,${precision}}$`);\n if (regex.test(valueStr)) return value;\n\n const parts = valueStr.split(\".\");\n if (parts.length === 1) return parts[0];\n\n return `${parts[0]}.${parts[1].substring(0, precision)}`;\n}\n\nexport function formatWithRejectCharsRegex(\n value: string,\n rejectCharsRegex?: RegExp\n): string {\n if (!rejectCharsRegex) return value;\n\n const globalRegex = new RegExp(rejectCharsRegex, \"g\");\n\n return value.replace(globalRegex, \"\");\n}\n\nexport function getTrimmedValue(\n value: string | number,\n disableTrimOnBlur: boolean\n): string | number {\n if (disableTrimOnBlur || typeof value !== \"string\") return value;\n\n return value.trim();\n}\n\nexport function preserveCursor(\n e: React.ChangeEvent<HTMLInputElement>,\n updateValueFn: () => React.ChangeEvent<HTMLInputElement>\n) {\n const input = e.target;\n const prevCursor = input.selectionStart;\n const prevValue = input.value;\n\n const updatedEvent = updateValueFn();\n\n const lengthDiff = input.value.length - prevValue.length;\n const newCursor = Math.max(0, (prevCursor ?? 0) + lengthDiff);\n\n requestAnimationFrame(() => {\n if (document.activeElement !== input) return;\n if (input.type === \"number\") return;\n\n input.setSelectionRange(newCursor, newCursor);\n });\n\n return updatedEvent;\n}\n","import React, { forwardRef, useId, useState } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupText,\n InputGroupInput,\n} from \"src/primitives/InputGroup\";\n\nimport { SIZE_CONFIG } from \"./constants\";\nimport {\n formatWithPrecision,\n enforceDecimalPrecision,\n formatWithRejectCharsRegex,\n getTrimmedValue,\n preserveCursor,\n} from \"./utils\";\n\ntype InputSize = \"small\" | \"medium\" | \"large\";\n\nexport interface InputProps extends Omit<\n React.ComponentProps<\"input\">,\n \"size\" | \"prefix\"\n> {\n /** Size of the input. */\n size?: InputSize;\n /** Input type. */\n type?: string;\n /** Label displayed above the input. */\n label?: string;\n /** Error message displayed below the input. */\n error?: string;\n /** Help text displayed below the input. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Content rendered before the input. */\n prefix?: React.ReactNode;\n /** Content rendered after the input. */\n suffix?: React.ReactNode;\n /** Removes borders from the input. */\n nakedInput?: boolean;\n /** HTML size attribute for the input element. */\n contentSize?: number;\n /** Maximum character limit. Counter visible at 85%. */\n maxLength?: number;\n /** Allow typing past maxLength, show error styling on count. */\n unlimitedChars?: boolean;\n /** Regex to reject matching characters from input. */\n rejectCharsRegex?: RegExp;\n /** Prevent trimming whitespace on blur. */\n disableTrimOnBlur?: boolean;\n /** Decimal places for number formatting. -1 to disable. */\n precision?: number;\n /** Props forwarded to the Label element. */\n labelProps?: React.ComponentProps<typeof FieldLabel>;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n size = \"medium\",\n type = \"text\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n prefix = null,\n suffix = null,\n disabled = false,\n nakedInput = false,\n contentSize,\n required = false,\n maxLength,\n unlimitedChars = false,\n rejectCharsRegex,\n disableTrimOnBlur = false,\n precision = -1,\n labelProps,\n className = \"\",\n onBlur,\n onChange,\n value: controlledValue,\n ...otherProps\n },\n ref\n ) => {\n const generatedId = useId();\n const id = otherProps.id ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n // Controlled / uncontrolled value tracking\n const [valueInternal, setValueInternal] = useState(controlledValue);\n const isControlled = controlledValue !== undefined;\n\n const value =\n formatWithPrecision(controlledValue, precision) ?? valueInternal ?? \"\";\n const valueLength = value?.toString().length || 0;\n\n const isMaxLengthPresent = !!maxLength || maxLength === 0;\n const isCharacterLimitVisible =\n isMaxLengthPresent && valueLength >= maxLength! * 0.85;\n const maxLengthError = unlimitedChars && valueLength > maxLength!;\n\n // --- Handlers ---\n\n const onChangeInternal = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setValueInternal(e.target.value);\n }\n onChange?.(e);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (type === \"file\") {\n onChangeInternal(e);\n\n return;\n }\n\n let formattedValue = formatWithRejectCharsRegex(\n e.target.value,\n rejectCharsRegex\n );\n formattedValue = enforceDecimalPrecision(formattedValue, precision);\n\n if (formattedValue !== e.target.value) {\n preserveCursor(e, () => {\n const syntheticEvent = Object.create(e, {\n target: { value: { ...e.target, value: formattedValue } },\n });\n e.target.value = formattedValue;\n onChangeInternal(syntheticEvent);\n\n return syntheticEvent;\n });\n } else {\n onChangeInternal(e);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n if (type === \"file\") {\n onBlur?.(e);\n\n return;\n }\n\n const trimmedValue = getTrimmedValue(value, disableTrimOnBlur);\n const formattedValue = formatWithPrecision(trimmedValue, precision);\n\n if (formattedValue !== undefined && formattedValue !== value) {\n e.target.value = formattedValue.toString();\n handleChange(e as unknown as React.ChangeEvent<HTMLInputElement>);\n }\n\n onBlur?.(e);\n };\n\n const handleWheel = (e: React.WheelEvent<HTMLInputElement>) => {\n if (type === \"number\") (e.target as HTMLInputElement).blur();\n };\n\n // --- aria-describedby ---\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n // --- Render ---\n\n const hasField = !!(label || error || helpText);\n const sizeConfig = SIZE_CONFIG[size];\n\n const inputGroup = (\n <InputGroup\n className={cn(\n sizeConfig.group,\n nakedInput &&\n \"border-0 shadow-none has-[[data-slot=input-group-control]:focus-visible]:ring-0 has-[[data-slot=input-group-control]:focus-visible]:border-transparent\",\n !!error &&\n !nakedInput &&\n \"border-destructive ring-destructive/20 ring-3\",\n !hasField && className\n )}\n >\n {prefix && (\n <InputGroupAddon align=\"inline-start\" className={sizeConfig.addon}>\n <InputGroupText>{prefix}</InputGroupText>\n </InputGroupAddon>\n )}\n <InputGroupInput\n ref={ref}\n id={id}\n type={type}\n disabled={disabled}\n required={required}\n size={contentSize}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(sizeConfig.input, nakedInput && \"px-0\")}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n onWheel={handleWheel}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n {suffix && (\n <InputGroupAddon align=\"inline-end\" className={sizeConfig.addon}>\n <InputGroupText>{suffix}</InputGroupText>\n </InputGroupAddon>\n )}\n </InputGroup>\n );\n\n if (!hasField) {\n return inputGroup;\n }\n\n return (\n <Field\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {(label || isCharacterLimitVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel htmlFor={id} {...labelProps}>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n {isCharacterLimitVisible && (\n <span\n className={cn(\n \"text-xs tabular-nums\",\n maxLengthError ? \"text-destructive\" : \"text-muted-foreground\"\n )}\n >\n {valueLength}/{maxLength}\n </span>\n )}\n </div>\n )}\n <FieldContent>\n {inputGroup}\n {!!error && <FieldError id={errorId}>{error}</FieldError>}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport { Input };\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { forwardRef } from 'react';
3
+ import { c as cn } from './utils-DdHUxIdC.js';
4
+ import { Kbd as Kbd$1, KbdGroup as KbdGroup$1 } from './primitives/Kbd.js';
5
+ import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from './primitives/Tooltip.js';
6
+
7
+ const SIDE_MAP = {
8
+ top: "top",
9
+ bottom: "bottom",
10
+ left: "left",
11
+ right: "right",
12
+ "top-start": "top",
13
+ "top-end": "top",
14
+ "bottom-start": "bottom",
15
+ "bottom-end": "bottom",
16
+ "left-start": "left",
17
+ "left-end": "left",
18
+ "right-start": "right",
19
+ "right-end": "right",
20
+ auto: "top",
21
+ };
22
+
23
+ const Kbd = forwardRef(({ tooltipProps, className, ...otherProps }, ref) => {
24
+ const kbd = (jsx(Kbd$1, { ref: ref, className: cn(className), ...otherProps }));
25
+ if (!tooltipProps?.content) {
26
+ return kbd;
27
+ }
28
+ const side = SIDE_MAP[tooltipProps.position ?? "auto"] ?? "top";
29
+ return (jsx(TooltipProvider, { children: jsxs(Tooltip, { children: [jsx(TooltipTrigger, { asChild: true, children: kbd }), jsx(TooltipContent, { side: side, children: tooltipProps.content })] }) }));
30
+ });
31
+ Kbd.displayName = "Kbd";
32
+ const KbdGroup = KbdGroup$1;
33
+ const KbdNamespace = Object.assign(Kbd, { Group: KbdGroup });
34
+
35
+ export { KbdNamespace as K };
36
+ //# sourceMappingURL=Kbd-EqbC0bua.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Kbd-EqbC0bua.js","sources":["../src/components/Kbd/constants.ts","../src/components/Kbd/Kbd.tsx"],"sourcesContent":["export const SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n \"top-start\": \"top\",\n \"top-end\": \"top\",\n \"bottom-start\": \"bottom\",\n \"bottom-end\": \"bottom\",\n \"left-start\": \"left\",\n \"left-end\": \"left\",\n \"right-start\": \"right\",\n \"right-end\": \"right\",\n auto: \"top\",\n};\n","import React, { forwardRef } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Kbd as PrimitiveKbd,\n KbdGroup as PrimitiveKbdGroup,\n} from \"src/primitives/Kbd\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\n\nimport { SIDE_MAP } from \"./constants\";\n\nexport interface KbdProps extends React.ComponentProps<typeof PrimitiveKbd> {\n /** Optional tooltip to display on hover. */\n tooltipProps?: {\n content?: React.ReactNode;\n position?: string;\n };\n /** Additional CSS class names. */\n className?: string;\n}\n\nconst Kbd = forwardRef<HTMLElement, KbdProps>(\n ({ tooltipProps, className, ...otherProps }, ref) => {\n const kbd = (\n <PrimitiveKbd ref={ref} className={cn(className)} {...otherProps} />\n );\n\n if (!tooltipProps?.content) {\n return kbd;\n }\n\n const side = SIDE_MAP[tooltipProps.position ?? \"auto\"] ?? \"top\";\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{kbd}</TooltipTrigger>\n <TooltipContent side={side}>{tooltipProps.content}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n);\n\nKbd.displayName = \"Kbd\";\n\nconst KbdGroup = PrimitiveKbdGroup;\n\nconst KbdNamespace = Object.assign(Kbd, { Group: KbdGroup });\n\nexport { KbdNamespace as Kbd };\n"],"names":["_jsx","PrimitiveKbd","_jsxs","PrimitiveKbdGroup"],"mappings":";;;;;;AAAO,MAAM,QAAQ,GAAwD;AAC3E,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,cAAc,EAAE,QAAQ;AACxB,IAAA,YAAY,EAAE,QAAQ;AACtB,IAAA,YAAY,EAAE,MAAM;AACpB,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,aAAa,EAAE,OAAO;AACtB,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,IAAI,EAAE,KAAK;CACZ;;ACYD,MAAM,GAAG,GAAG,UAAU,CACpB,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,KAAI;IAClD,MAAM,GAAG,IACPA,GAAA,CAACC,KAAY,EAAA,EAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAM,UAAU,EAAA,CAAI,CACrE;AAED,IAAA,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;AAC1B,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK;AAE/D,IAAA,QACED,GAAA,CAAC,eAAe,EAAA,EAAA,QAAA,EACdE,IAAA,CAAC,OAAO,EAAA,EAAA,QAAA,EAAA,CACNF,GAAA,CAAC,cAAc,EAAA,EAAC,OAAO,EAAA,IAAA,EAAA,QAAA,EAAE,GAAG,EAAA,CAAkB,EAC9CA,GAAA,CAAC,cAAc,EAAA,EAAC,IAAI,EAAE,IAAI,EAAA,QAAA,EAAG,YAAY,CAAC,OAAO,EAAA,CAAkB,CAAA,EAAA,CAC3D,EAAA,CACM;AAEtB,CAAC,CACF;AAED,GAAG,CAAC,WAAW,GAAG,KAAK;AAEvB,MAAM,QAAQ,GAAGG,UAAiB;AAElC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;;;;"}
@@ -0,0 +1,58 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { forwardRef } from 'react';
3
+ import { c as cn } from './utils-DdHUxIdC.js';
4
+ import { r as renderIcon } from './renderIcon-tlvMyboj.js';
5
+ import { Label as Label$1 } from './primitives/Label.js';
6
+ import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from './primitives/Tooltip.js';
7
+ import { P as Popover } from './Popover-BFMrtVPq.js';
8
+ import { B as Button } from './Button-Q7MPG6ph.js';
9
+ import { c as createLucideIcon } from './createLucideIcon-C8ycilSN.js';
10
+
11
+ /**
12
+ * @license lucide-react v0.577.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */
17
+
18
+
19
+ const __iconNode = [
20
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
21
+ ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
22
+ ["path", { d: "M12 17h.01", key: "p32p05" }]
23
+ ];
24
+ const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode);
25
+
26
+ const SIDE_MAP = {
27
+ top: "top",
28
+ bottom: "bottom",
29
+ left: "left",
30
+ right: "right",
31
+ auto: "top",
32
+ };
33
+
34
+ const Label = forwardRef(({ required, helpIconProps, className, children, ...otherProps }, ref) => {
35
+ const helpIcon = helpIconProps?.icon ?? CircleQuestionMark;
36
+ const iconElement = (jsx("span", { className: cn("inline-flex cursor-help text-muted-foreground transition-colors hover:text-foreground", helpIconProps?.onClick && "cursor-pointer", helpIconProps?.className), onClick: helpIconProps?.onClick, children: renderIcon(helpIcon, "size-3.5") }));
37
+ const renderHelpIcon = () => {
38
+ if (!helpIconProps)
39
+ return null;
40
+ // Popover mode
41
+ if (helpIconProps.popoverProps) {
42
+ const { title, description, helpLinkProps } = helpIconProps.popoverProps;
43
+ return (jsxs(Popover, { trigger: iconElement, children: [title && jsx(Popover.Title, { children: title }), description && (jsx("p", { className: "text-sm text-muted-foreground", children: description })), helpLinkProps && (jsx(Button, { variant: "link", size: "sm", className: "mt-1 h-auto self-start p-0", ...helpLinkProps, href: helpLinkProps.href }))] }));
44
+ }
45
+ // Tooltip mode
46
+ if (helpIconProps.tooltipProps?.content) {
47
+ const side = SIDE_MAP[helpIconProps.tooltipProps.position ?? "auto"] ?? "top";
48
+ return (jsx(TooltipProvider, { children: jsxs(Tooltip, { children: [jsx(TooltipTrigger, { asChild: true, children: iconElement }), jsx(TooltipContent, { side: side, children: helpIconProps.tooltipProps.content })] }) }));
49
+ }
50
+ // Icon only (with optional onClick)
51
+ return iconElement;
52
+ };
53
+ return (jsxs(Label$1, { ref: ref, className: cn(className), ...otherProps, children: [children, required && (jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" })), renderHelpIcon()] }));
54
+ });
55
+ Label.displayName = "Label";
56
+
57
+ export { Label as L };
58
+ //# sourceMappingURL=Label-BVy4hy9Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Label-BVy4hy9Z.js","sources":["../node_modules/lucide-react/dist/esm/icons/circle-question-mark.js","../src/components/Label/constants.ts","../src/components/Label/Label.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.js.map\n","export const SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n auto: \"top\",\n};\n","import React, { forwardRef } from \"react\";\n\nimport { CircleHelpIcon } from \"lucide-react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon, type IconProp } from \"src/lib/renderIcon\";\nimport { Label as PrimitiveLabel } from \"src/primitives/Label\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\nimport { Popover } from \"src/components/Popover\";\nimport { Button, type ButtonProps } from \"src/components/Button\";\n\nimport { SIDE_MAP } from \"./constants\";\n\ninterface HelpIconTooltipProps {\n /** Tooltip content. */\n content?: React.ReactNode;\n /** Tooltip position. */\n position?: string;\n}\n\ninterface HelpIconPopoverProps {\n /** Popover title. */\n title?: React.ReactNode;\n /** Popover description. */\n description?: React.ReactNode;\n /** Props for an optional help link button inside the popover. */\n helpLinkProps?: ButtonProps;\n}\n\ninterface HelpIconProps {\n /** Click handler on the help icon. */\n onClick?: () => void;\n /** Custom icon. Defaults to CircleHelpIcon. */\n icon?: IconProp;\n /** Show a tooltip on hover. */\n tooltipProps?: HelpIconTooltipProps;\n /** Show a popover on hover with title, description, and optional link. */\n popoverProps?: HelpIconPopoverProps;\n /** Additional class name for the help icon. */\n className?: string;\n}\n\nexport interface LabelProps extends React.ComponentProps<\n typeof PrimitiveLabel\n> {\n /** Shows a red asterisk after the label text. */\n required?: boolean;\n /** Props for the help icon (tooltip or popover mode). */\n helpIconProps?: HelpIconProps;\n /** Additional CSS class names. */\n className?: string;\n}\n\nconst Label = forwardRef<HTMLLabelElement, LabelProps>(\n ({ required, helpIconProps, className, children, ...otherProps }, ref) => {\n const helpIcon = helpIconProps?.icon ?? CircleHelpIcon;\n\n const iconElement = (\n <span\n className={cn(\n \"inline-flex cursor-help text-muted-foreground transition-colors hover:text-foreground\",\n helpIconProps?.onClick && \"cursor-pointer\",\n helpIconProps?.className\n )}\n onClick={helpIconProps?.onClick}\n >\n {renderIcon(helpIcon, \"size-3.5\")}\n </span>\n );\n\n const renderHelpIcon = () => {\n if (!helpIconProps) return null;\n\n // Popover mode\n if (helpIconProps.popoverProps) {\n const { title, description, helpLinkProps } =\n helpIconProps.popoverProps;\n\n return (\n <Popover trigger={iconElement}>\n {title && <Popover.Title>{title}</Popover.Title>}\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n {helpLinkProps && (\n <Button\n variant=\"link\"\n size=\"sm\"\n className=\"mt-1 h-auto self-start p-0\"\n {...helpLinkProps}\n href={helpLinkProps.href}\n />\n )}\n </Popover>\n );\n }\n\n // Tooltip mode\n if (helpIconProps.tooltipProps?.content) {\n const side =\n SIDE_MAP[helpIconProps.tooltipProps.position ?? \"auto\"] ?? \"top\";\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{iconElement}</TooltipTrigger>\n <TooltipContent side={side}>\n {helpIconProps.tooltipProps.content}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n // Icon only (with optional onClick)\n return iconElement;\n };\n\n return (\n <PrimitiveLabel ref={ref} className={cn(className)} {...otherProps}>\n {children}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n {renderHelpIcon()}\n </PrimitiveLabel>\n );\n }\n);\n\nLabel.displayName = \"Label\";\n\nexport { Label };\n"],"names":["CircleHelpIcon","_jsx","_jsxs","PrimitiveLabel"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,139 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState, useCallback, useMemo, forwardRef, useId } from 'react';
3
+ import { c as cn } from './utils-DdHUxIdC.js';
4
+ import { Field, FieldLabel, FieldContent } from './primitives/Field.js';
5
+ import { X } from './x-_o2T3n6D.js';
6
+
7
+ const EMAIL_REGEX = /^[A-Z0-9._%+-]+@[A-Z0-9-]+(?:\.[A-Z0-9-]+)*\.[A-Z]{2,}$/i;
8
+ const UNSTRICT_EMAIL_REGEX = /(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/g;
9
+ const EMAIL_SEPARATION_REGEX = /[^\s,]+/g;
10
+
11
+ const formatEmailInputOption = (email) => ({
12
+ label: email,
13
+ value: email,
14
+ valid: EMAIL_REGEX.test(email),
15
+ });
16
+ const pruneDuplicates = (existing, newEmailStrings) => {
17
+ const seen = new Set(existing.map(e => e.value.toLowerCase()));
18
+ const duplicates = [];
19
+ const added = [];
20
+ for (const emailStr of newEmailStrings) {
21
+ const lower = emailStr.toLowerCase();
22
+ if (seen.has(lower)) {
23
+ duplicates.push(emailStr);
24
+ }
25
+ else {
26
+ seen.add(lower);
27
+ added.push(formatEmailInputOption(emailStr));
28
+ }
29
+ }
30
+ return { uniqueEmails: [...existing, ...added], duplicates };
31
+ };
32
+ const filterValidEmails = (emails) => emails.filter(email => email.valid);
33
+ const pluralizeEmail = (count) => count === 1 ? "email" : "emails";
34
+ const formatDuplicateWarning = (duplicates) => {
35
+ const count = duplicates.length;
36
+ return `Removed ${count} duplicate ${pluralizeEmail(count)} from the list: ${duplicates.join(", ")}`;
37
+ };
38
+
39
+ function useMultiEmailState(props) {
40
+ const { value = [], onChange, onBlur, visibleEmailsCount = 3, isAlwaysExpanded = false, counter, filterInvalidEmails, } = props;
41
+ const [inputValue, setInputValue] = useState("");
42
+ const [isFocused, setIsFocused] = useState(false);
43
+ const [duplicateEmails, setDuplicateEmails] = useState([]);
44
+ const addEmails = useCallback((input) => {
45
+ const trimmed = input.trim();
46
+ if (!trimmed)
47
+ return;
48
+ UNSTRICT_EMAIL_REGEX.lastIndex = 0;
49
+ EMAIL_SEPARATION_REGEX.lastIndex = 0;
50
+ const emailMatches = trimmed.match(UNSTRICT_EMAIL_REGEX) ||
51
+ trimmed.match(EMAIL_SEPARATION_REGEX) ||
52
+ [];
53
+ if (emailMatches.length === 0)
54
+ return;
55
+ const { uniqueEmails, duplicates } = pruneDuplicates(value, emailMatches);
56
+ onChange?.(uniqueEmails);
57
+ setDuplicateEmails(duplicates);
58
+ setInputValue("");
59
+ }, [value, onChange]);
60
+ const handleKeyDown = useCallback((event) => {
61
+ if (!inputValue && event.key === "Backspace" && value.length > 0) {
62
+ onChange?.(value.slice(0, -1));
63
+ return;
64
+ }
65
+ if (!inputValue)
66
+ return;
67
+ if (["Enter", "Tab", ",", " "].includes(event.key)) {
68
+ addEmails(inputValue);
69
+ event.preventDefault();
70
+ event.stopPropagation();
71
+ }
72
+ }, [inputValue, value, onChange, addEmails]);
73
+ const handlePaste = useCallback((event) => {
74
+ const text = event.clipboardData.getData("text");
75
+ if (!text)
76
+ return;
77
+ event.preventDefault();
78
+ addEmails(text);
79
+ }, [addEmails]);
80
+ const handleBlur = useCallback(() => {
81
+ if (inputValue) {
82
+ addEmails(inputValue);
83
+ }
84
+ else {
85
+ onBlur?.();
86
+ }
87
+ setIsFocused(false);
88
+ setDuplicateEmails([]);
89
+ }, [inputValue, addEmails, onBlur]);
90
+ const handleFocus = useCallback(() => setIsFocused(true), []);
91
+ const handleChipRemove = useCallback((emailValue) => onChange?.(value.filter(e => e.value !== emailValue)), [value, onChange]);
92
+ const handleFilterInvalidEmails = useCallback(() => onChange?.(filterValidEmails(value)), [value, onChange]);
93
+ const validCount = useMemo(() => value.filter(e => e.valid).length, [value]);
94
+ const isCounterVisible = !!counter &&
95
+ (typeof counter === "boolean" ||
96
+ !counter.startsFrom ||
97
+ validCount >= counter.startsFrom);
98
+ const shouldCollapse = !isAlwaysExpanded && !isFocused && value.length > visibleEmailsCount;
99
+ const visibleEmails = shouldCollapse
100
+ ? value.slice(0, visibleEmailsCount)
101
+ : value;
102
+ const hiddenCount = shouldCollapse ? value.length - visibleEmailsCount : 0;
103
+ const isFilterLinkVisible = !!filterInvalidEmails && value.length > validCount;
104
+ return {
105
+ inputValue,
106
+ setInputValue,
107
+ isFocused,
108
+ duplicateEmails,
109
+ handleKeyDown,
110
+ handlePaste,
111
+ handleBlur,
112
+ handleFocus,
113
+ handleChipRemove,
114
+ handleFilterInvalidEmails,
115
+ isCounterVisible,
116
+ validCount,
117
+ visibleEmails,
118
+ hiddenCount,
119
+ isFilterLinkVisible,
120
+ };
121
+ }
122
+
123
+ const CHIP_BASE = "flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground";
124
+ const CHIP_INVALID = "border border-destructive text-destructive bg-destructive/10";
125
+ const CHIPS_CONTAINER = "flex min-h-8 flex-wrap items-center gap-1 rounded-lg border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50";
126
+ const CHIPS_ERROR = "border-destructive ring-3 ring-destructive/20 dark:border-destructive/50 dark:ring-destructive/40";
127
+ const MultiEmailInput = forwardRef((props, ref) => {
128
+ const { label, placeholder = "", helpText, error, disabled = false, required = false, maxHeight = 200, counter, filterInvalidEmails, prefix, suffix, labelProps, className, } = props;
129
+ const id = useId();
130
+ const s = useMultiEmailState(props);
131
+ return (jsxs(Field, { className: cn("flex flex-col gap-1.5", className), children: [(label || s.isCounterVisible) && (jsxs("div", { className: "flex items-center justify-between", children: [label && (jsxs(FieldLabel, { htmlFor: id, ...labelProps, children: [label, required && (jsx("span", { "aria-hidden": "true", className: "text-destructive", children: " *" }))] })), s.isCounterVisible && (jsxs("span", { className: "text-xs text-muted-foreground", children: [s.validCount, " ", typeof counter === "object" && counter?.label
132
+ ? counter.label
133
+ : pluralizeEmail(s.validCount)] }))] })), jsxs("div", { className: cn(CHIPS_CONTAINER, !!error && CHIPS_ERROR, disabled && "pointer-events-none opacity-50"), style: { maxHeight: `${maxHeight}px`, overflowY: "auto" }, children: [prefix && jsx("div", { className: "shrink-0", children: prefix }), s.visibleEmails.map(email => (jsxs("span", { className: cn(CHIP_BASE, !email.valid && CHIP_INVALID), children: [email.label, !disabled && (jsx("button", { type: "button", tabIndex: -1, className: "-ms-0.5 rounded-xs opacity-50 hover:opacity-100", onMouseDown: e => e.preventDefault(), onClick: () => s.handleChipRemove(email.value), "aria-label": `Remove ${email.label}`, children: jsx(X, { className: "size-3 pointer-events-none" }) }))] }, email.value))), s.hiddenCount > 0 && (jsxs("span", { className: "flex h-[calc(--spacing(5.25))] items-center rounded-sm bg-secondary px-1.5 text-xs font-medium text-secondary-foreground", children: ["+", s.hiddenCount, " more"] })), jsx("input", { ref: ref, id: id, type: "text", value: s.inputValue, onChange: e => s.setInputValue(e.target.value), onKeyDown: s.handleKeyDown, onPaste: s.handlePaste, onFocus: s.handleFocus, onBlur: s.handleBlur, placeholder: props.value?.length ? "" : placeholder, disabled: disabled, className: "min-w-16 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground" }), suffix && jsx("div", { className: "shrink-0", children: suffix })] }), jsxs(FieldContent, { children: [!!error && (jsxs("p", { className: "text-[0.8rem] text-destructive", children: [error, s.isFilterLinkVisible && (jsx("button", { type: "button", className: "ml-1 cursor-pointer font-semibold underline", onClick: s.handleFilterInvalidEmails, children: filterInvalidEmails?.label ??
134
+ "Click here to remove invalid emails." }))] })), !!helpText && (jsx("p", { className: "text-[0.8rem] text-muted-foreground", children: helpText })), s.duplicateEmails.length > 0 && (jsx("p", { className: "text-[0.8rem] text-amber-600 dark:text-amber-400", children: formatDuplicateWarning(s.duplicateEmails) }))] })] }));
135
+ });
136
+ MultiEmailInput.displayName = "MultiEmailInput";
137
+
138
+ export { MultiEmailInput as M };
139
+ //# sourceMappingURL=MultiEmailInput-SCTYovtX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiEmailInput-SCTYovtX.js","sources":["../src/components/MultiEmailInput/constants.ts","../src/components/MultiEmailInput/utils.ts","../src/components/MultiEmailInput/useMultiEmailState.ts","../src/components/MultiEmailInput/MultiEmailInput.tsx"],"sourcesContent":["export const EMAIL_REGEX = /^[A-Z0-9._%+-]+@[A-Z0-9-]+(?:\\.[A-Z0-9-]+)*\\.[A-Z]{2,}$/i;\n\nexport const UNSTRICT_EMAIL_REGEX =\n /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/g;\n\nexport const EMAIL_SEPARATION_REGEX = /[^\\s,]+/g;\n","import { EMAIL_REGEX } from \"./constants\";\nimport type { EmailValue } from \"./types\";\n\nexport const formatEmailInputOption = (email: string): EmailValue => ({\n label: email,\n value: email,\n valid: EMAIL_REGEX.test(email),\n});\n\nexport const pruneDuplicates = (\n existing: EmailValue[],\n newEmailStrings: string[]\n): { uniqueEmails: EmailValue[]; duplicates: string[] } => {\n const seen = new Set(existing.map(e => e.value.toLowerCase()));\n const duplicates: string[] = [];\n const added: EmailValue[] = [];\n\n for (const emailStr of newEmailStrings) {\n const lower = emailStr.toLowerCase();\n if (seen.has(lower)) {\n duplicates.push(emailStr);\n } else {\n seen.add(lower);\n added.push(formatEmailInputOption(emailStr));\n }\n }\n\n return { uniqueEmails: [...existing, ...added], duplicates };\n};\n\nexport const filterValidEmails = (emails: EmailValue[]): EmailValue[] =>\n emails.filter(email => email.valid);\n\nexport const pluralizeEmail = (count: number): string =>\n count === 1 ? \"email\" : \"emails\";\n\nexport const formatDuplicateWarning = (duplicates: string[]): string => {\n const count = duplicates.length;\n\n return `Removed ${count} duplicate ${pluralizeEmail(count)} from the list: ${duplicates.join(\", \")}`;\n};\n","import { useState, useCallback, useMemo } from \"react\";\n\nimport { UNSTRICT_EMAIL_REGEX, EMAIL_SEPARATION_REGEX } from \"./constants\";\nimport { pruneDuplicates, filterValidEmails } from \"./utils\";\nimport type { MultiEmailInputProps } from \"./types\";\n\nexport function useMultiEmailState(props: MultiEmailInputProps) {\n const {\n value = [],\n onChange,\n onBlur,\n visibleEmailsCount = 3,\n isAlwaysExpanded = false,\n counter,\n filterInvalidEmails,\n } = props;\n\n const [inputValue, setInputValue] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const [duplicateEmails, setDuplicateEmails] = useState<string[]>([]);\n\n const addEmails = useCallback(\n (input: string) => {\n const trimmed = input.trim();\n if (!trimmed) return;\n UNSTRICT_EMAIL_REGEX.lastIndex = 0;\n EMAIL_SEPARATION_REGEX.lastIndex = 0;\n const emailMatches =\n trimmed.match(UNSTRICT_EMAIL_REGEX) ||\n trimmed.match(EMAIL_SEPARATION_REGEX) ||\n [];\n if (emailMatches.length === 0) return;\n const { uniqueEmails, duplicates } = pruneDuplicates(value, emailMatches);\n onChange?.(uniqueEmails);\n setDuplicateEmails(duplicates);\n setInputValue(\"\");\n },\n [value, onChange]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (!inputValue && event.key === \"Backspace\" && value.length > 0) {\n onChange?.(value.slice(0, -1));\n return;\n }\n if (!inputValue) return;\n if ([\"Enter\", \"Tab\", \",\", \" \"].includes(event.key)) {\n addEmails(inputValue);\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [inputValue, value, onChange, addEmails]\n );\n\n const handlePaste = useCallback(\n (event: React.ClipboardEvent<HTMLInputElement>) => {\n const text = event.clipboardData.getData(\"text\");\n if (!text) return;\n event.preventDefault();\n addEmails(text);\n },\n [addEmails]\n );\n\n const handleBlur = useCallback(() => {\n if (inputValue) {\n addEmails(inputValue);\n } else {\n onBlur?.();\n }\n setIsFocused(false);\n setDuplicateEmails([]);\n }, [inputValue, addEmails, onBlur]);\n\n const handleFocus = useCallback(() => setIsFocused(true), []);\n\n const handleChipRemove = useCallback(\n (emailValue: string) =>\n onChange?.(value.filter(e => e.value !== emailValue)),\n [value, onChange]\n );\n\n const handleFilterInvalidEmails = useCallback(\n () => onChange?.(filterValidEmails(value)),\n [value, onChange]\n );\n\n const validCount = useMemo(() => value.filter(e => e.valid).length, [value]);\n const isCounterVisible =\n !!counter &&\n (typeof counter === \"boolean\" ||\n !counter.startsFrom ||\n validCount >= counter.startsFrom);\n const shouldCollapse =\n !isAlwaysExpanded && !isFocused && value.length > visibleEmailsCount;\n const visibleEmails = shouldCollapse\n ? value.slice(0, visibleEmailsCount)\n : value;\n const hiddenCount = shouldCollapse ? value.length - visibleEmailsCount : 0;\n const isFilterLinkVisible =\n !!filterInvalidEmails && value.length > validCount;\n\n return {\n inputValue,\n setInputValue,\n isFocused,\n duplicateEmails,\n handleKeyDown,\n handlePaste,\n handleBlur,\n handleFocus,\n handleChipRemove,\n handleFilterInvalidEmails,\n isCounterVisible,\n validCount,\n visibleEmails,\n hiddenCount,\n isFilterLinkVisible,\n };\n}\n","import React, { forwardRef, useId } from \"react\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Field, FieldLabel, FieldContent } from \"src/primitives/Field\";\nimport { useMultiEmailState } from \"./useMultiEmailState\";\nimport { pluralizeEmail, formatDuplicateWarning } from \"./utils\";\nimport type { MultiEmailInputProps } from \"./types\";\n\nconst CHIP_BASE =\n \"flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground\";\nconst CHIP_INVALID =\n \"border border-destructive text-destructive bg-destructive/10\";\nconst CHIPS_CONTAINER =\n \"flex min-h-8 flex-wrap items-center gap-1 rounded-lg border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50\";\nconst CHIPS_ERROR =\n \"border-destructive ring-3 ring-destructive/20 dark:border-destructive/50 dark:ring-destructive/40\";\n\nexport const MultiEmailInput = forwardRef<\n HTMLInputElement,\n MultiEmailInputProps\n>((props, ref) => {\n const {\n label,\n placeholder = \"\",\n helpText,\n error,\n disabled = false,\n required = false,\n maxHeight = 200,\n counter,\n filterInvalidEmails,\n prefix,\n suffix,\n labelProps,\n className,\n } = props;\n const id = useId();\n const s = useMultiEmailState(props);\n\n return (\n <Field className={cn(\"flex flex-col gap-1.5\", className)}>\n {(label || s.isCounterVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel htmlFor={id} {...labelProps}>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n {\" *\"}\n </span>\n )}\n </FieldLabel>\n )}\n {s.isCounterVisible && (\n <span className=\"text-xs text-muted-foreground\">\n {s.validCount}{\" \"}\n {typeof counter === \"object\" && counter?.label\n ? counter.label\n : pluralizeEmail(s.validCount)}\n </span>\n )}\n </div>\n )}\n <div\n className={cn(\n CHIPS_CONTAINER,\n !!error && CHIPS_ERROR,\n disabled && \"pointer-events-none opacity-50\"\n )}\n style={{ maxHeight: `${maxHeight}px`, overflowY: \"auto\" }}\n >\n {prefix && <div className=\"shrink-0\">{prefix}</div>}\n {s.visibleEmails.map(email => (\n <span\n key={email.value}\n className={cn(CHIP_BASE, !email.valid && CHIP_INVALID)}\n >\n {email.label}\n {!disabled && (\n <button\n type=\"button\"\n tabIndex={-1}\n className=\"-ms-0.5 rounded-xs opacity-50 hover:opacity-100\"\n onMouseDown={e => e.preventDefault()}\n onClick={() => s.handleChipRemove(email.value)}\n aria-label={`Remove ${email.label}`}\n >\n <XIcon className=\"size-3 pointer-events-none\" />\n </button>\n )}\n </span>\n ))}\n {s.hiddenCount > 0 && (\n <span className=\"flex h-[calc(--spacing(5.25))] items-center rounded-sm bg-secondary px-1.5 text-xs font-medium text-secondary-foreground\">\n +{s.hiddenCount} more\n </span>\n )}\n <input\n ref={ref}\n id={id}\n type=\"text\"\n value={s.inputValue}\n onChange={e => s.setInputValue(e.target.value)}\n onKeyDown={s.handleKeyDown}\n onPaste={s.handlePaste}\n onFocus={s.handleFocus}\n onBlur={s.handleBlur}\n placeholder={props.value?.length ? \"\" : placeholder}\n disabled={disabled}\n className=\"min-w-16 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n />\n {suffix && <div className=\"shrink-0\">{suffix}</div>}\n </div>\n <FieldContent>\n {!!error && (\n <p className=\"text-[0.8rem] text-destructive\">\n {error}\n {s.isFilterLinkVisible && (\n <button\n type=\"button\"\n className=\"ml-1 cursor-pointer font-semibold underline\"\n onClick={s.handleFilterInvalidEmails}\n >\n {filterInvalidEmails?.label ??\n \"Click here to remove invalid emails.\"}\n </button>\n )}\n </p>\n )}\n {!!helpText && (\n <p className=\"text-[0.8rem] text-muted-foreground\">{helpText}</p>\n )}\n {s.duplicateEmails.length > 0 && (\n <p className=\"text-[0.8rem] text-amber-600 dark:text-amber-400\">\n {formatDuplicateWarning(s.duplicateEmails)}\n </p>\n )}\n </FieldContent>\n </Field>\n );\n});\nMultiEmailInput.displayName = \"MultiEmailInput\";\n"],"names":["_jsxs","_jsx","XIcon"],"mappings":";;;;;;AAAO,MAAM,WAAW,GAAG,0DAA0D;AAE9E,MAAM,oBAAoB,GAC/B,sJAAsJ;AAEjJ,MAAM,sBAAsB,GAAG,UAAU;;ACFzC,MAAM,sBAAsB,GAAG,CAAC,KAAa,MAAkB;AACpE,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,CAAA,CAAC;AAEK,MAAM,eAAe,GAAG,CAC7B,QAAsB,EACtB,eAAyB,KAC+B;IACxD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAa,EAAE;IAC/B,MAAM,KAAK,GAAiB,EAAE;AAE9B,IAAA,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE;AACtC,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE;AACpC,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACnB,YAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3B;aAAO;AACL,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC9C;IACF;AAEA,IAAA,OAAO,EAAE,YAAY,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,EAAE,UAAU,EAAE;AAC9D,CAAC;AAEM,MAAM,iBAAiB,GAAG,CAAC,MAAoB,KACpD,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;AAE9B,MAAM,cAAc,GAAG,CAAC,KAAa,KAC1C,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,QAAQ;AAE3B,MAAM,sBAAsB,GAAG,CAAC,UAAoB,KAAY;AACrE,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM;AAE/B,IAAA,OAAO,CAAA,QAAA,EAAW,KAAK,CAAA,WAAA,EAAc,cAAc,CAAC,KAAK,CAAC,CAAA,gBAAA,EAAmB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACtG,CAAC;;AClCK,SAAU,kBAAkB,CAAC,KAA2B,EAAA;IAC5D,MAAM,EACJ,KAAK,GAAG,EAAE,EACV,QAAQ,EACR,MAAM,EACN,kBAAkB,GAAG,CAAC,EACtB,gBAAgB,GAAG,KAAK,EACxB,OAAO,EACP,mBAAmB,GACpB,GAAG,KAAK;IAET,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAChD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC;AAEpE,IAAA,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,KAAa,KAAI;AAChB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,oBAAoB,CAAC,SAAS,GAAG,CAAC;AAClC,QAAA,sBAAsB,CAAC,SAAS,GAAG,CAAC;AACpC,QAAA,MAAM,YAAY,GAChB,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC;AACnC,YAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC;AACrC,YAAA,EAAE;AACJ,QAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE;AAC/B,QAAA,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC;AACzE,QAAA,QAAQ,GAAG,YAAY,CAAC;QACxB,kBAAkB,CAAC,UAAU,CAAC;QAC9B,aAAa,CAAC,EAAE,CAAC;AACnB,IAAA,CAAC,EACD,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB;AAED,IAAA,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,KAA4C,KAAI;AAC/C,QAAA,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAChE,YAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B;QACF;AACA,QAAA,IAAI,CAAC,UAAU;YAAE;AACjB,QAAA,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAClD,SAAS,CAAC,UAAU,CAAC;YACrB,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;QACzB;IACF,CAAC,EACD,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CACzC;AAED,IAAA,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,KAA6C,KAAI;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,KAAK,CAAC,cAAc,EAAE;QACtB,SAAS,CAAC,IAAI,CAAC;AACjB,IAAA,CAAC,EACD,CAAC,SAAS,CAAC,CACZ;AAED,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,MAAK;QAClC,IAAI,UAAU,EAAE;YACd,SAAS,CAAC,UAAU,CAAC;QACvB;aAAO;YACL,MAAM,IAAI;QACZ;QACA,YAAY,CAAC,KAAK,CAAC;QACnB,kBAAkB,CAAC,EAAE,CAAC;IACxB,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAEnC,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AAE7D,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,UAAkB,KACjB,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,EACvD,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB;IAED,MAAM,yBAAyB,GAAG,WAAW,CAC3C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAC1C,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;AAC5E,IAAA,MAAM,gBAAgB,GACpB,CAAC,CAAC,OAAO;SACR,OAAO,OAAO,KAAK,SAAS;YAC3B,CAAC,OAAO,CAAC,UAAU;AACnB,YAAA,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;AACrC,IAAA,MAAM,cAAc,GAClB,CAAC,gBAAgB,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,kBAAkB;IACtE,MAAM,aAAa,GAAG;UAClB,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB;UACjC,KAAK;AACT,IAAA,MAAM,WAAW,GAAG,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG,kBAAkB,GAAG,CAAC;IAC1E,MAAM,mBAAmB,GACvB,CAAC,CAAC,mBAAmB,IAAI,KAAK,CAAC,MAAM,GAAG,UAAU;IAEpD,OAAO;QACL,UAAU;QACV,aAAa;QACb,SAAS;QACT,eAAe;QACf,aAAa;QACb,WAAW;QACX,UAAU;QACV,WAAW;QACX,gBAAgB;QAChB,yBAAyB;QACzB,gBAAgB;QAChB,UAAU;QACV,aAAa;QACb,WAAW;QACX,mBAAmB;KACpB;AACH;;AChHA,MAAM,SAAS,GACb,yJAAyJ;AAC3J,MAAM,YAAY,GAChB,8DAA8D;AAChE,MAAM,eAAe,GACnB,sNAAsN;AACxN,MAAM,WAAW,GACf,mGAAmG;AAE9F,MAAM,eAAe,GAAG,UAAU,CAGvC,CAAC,KAAK,EAAE,GAAG,KAAI;AACf,IAAA,MAAM,EACJ,KAAK,EACL,WAAW,GAAG,EAAE,EAChB,QAAQ,EACR,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,KAAK,EAChB,SAAS,GAAG,GAAG,EACf,OAAO,EACP,mBAAmB,EACnB,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS,GACV,GAAG,KAAK;AACT,IAAA,MAAM,EAAE,GAAG,KAAK,EAAE;AAClB,IAAA,MAAM,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC;AAEnC,IAAA,QACEA,IAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,CACrD,CAAC,KAAK,IAAI,CAAC,CAAC,gBAAgB,MAC3BA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,aAC/C,KAAK,KACJA,IAAA,CAAC,UAAU,EAAA,EAAC,OAAO,EAAE,EAAE,EAAA,GAAM,UAAU,EAAA,QAAA,EAAA,CACpC,KAAK,EACL,QAAQ,KACPC,GAAA,CAAA,MAAA,EAAA,EAAA,aAAA,EAAkB,MAAM,EAAC,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAClD,IAAI,GACA,CACR,CAAA,EAAA,CACU,CACd,EACA,CAAC,CAAC,gBAAgB,KACjBD,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,+BAA+B,EAAA,QAAA,EAAA,CAC5C,CAAC,CAAC,UAAU,EAAE,GAAG,EACjB,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,EAAE;kCACrC,OAAO,CAAC;AACV,kCAAE,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA,EAAA,CAC3B,CACR,IACG,CACP,EACDA,IAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,eAAe,EACf,CAAC,CAAC,KAAK,IAAI,WAAW,EACtB,QAAQ,IAAI,gCAAgC,CAC7C,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,CAAA,EAAG,SAAS,CAAA,EAAA,CAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,CAExD,MAAM,IAAIC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,EAAA,QAAA,EAAE,MAAM,GAAO,EAClD,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,KACxBD,IAAA,CAAA,MAAA,EAAA,EAEE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,YAAY,CAAC,EAAA,QAAA,EAAA,CAErD,KAAK,CAAC,KAAK,EACX,CAAC,QAAQ,KACRC,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,EAAE,EACZ,SAAS,EAAC,iDAAiD,EAC3D,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EACpC,OAAO,EAAE,MAAM,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAA,YAAA,EAClC,CAAA,OAAA,EAAU,KAAK,CAAC,KAAK,CAAA,CAAE,EAAA,QAAA,EAEnCA,GAAA,CAACC,CAAK,EAAA,EAAC,SAAS,EAAC,4BAA4B,EAAA,CAAG,EAAA,CACzC,CACV,KAfI,KAAK,CAAC,KAAK,CAgBX,CACR,CAAC,EACD,CAAC,CAAC,WAAW,GAAG,CAAC,KAChBF,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,0HAA0H,kBACtI,CAAC,CAAC,WAAW,EAAA,OAAA,CAAA,EAAA,CACV,CACR,EACDC,GAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,EAAE,EACN,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,CAAC,CAAC,UAAU,EACnB,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC9C,SAAS,EAAE,CAAC,CAAC,aAAa,EAC1B,OAAO,EAAE,CAAC,CAAC,WAAW,EACtB,OAAO,EAAE,CAAC,CAAC,WAAW,EACtB,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,GAAG,WAAW,EACnD,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,uFAAuF,GACjG,EACD,MAAM,IAAIA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,EAAA,QAAA,EAAE,MAAM,GAAO,CAAA,EAAA,CAC/C,EACND,IAAA,CAAC,YAAY,EAAA,EAAA,QAAA,EAAA,CACV,CAAC,CAAC,KAAK,KACNA,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAAA,CAC1C,KAAK,EACL,CAAC,CAAC,mBAAmB,KACpBC,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6CAA6C,EACvD,OAAO,EAAE,CAAC,CAAC,yBAAyB,EAAA,QAAA,EAEnC,mBAAmB,EAAE,KAAK;oCACzB,sCAAsC,EAAA,CACjC,CACV,CAAA,EAAA,CACC,CACL,EACA,CAAC,CAAC,QAAQ,KACTA,WAAG,SAAS,EAAC,qCAAqC,EAAA,QAAA,EAAE,QAAQ,GAAK,CAClE,EACA,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,KAC3BA,WAAG,SAAS,EAAC,kDAAkD,EAAA,QAAA,EAC5D,sBAAsB,CAAC,CAAC,CAAC,eAAe,CAAC,EAAA,CACxC,CACL,CAAA,EAAA,CACY,CAAA,EAAA,CACT;AAEZ,CAAC;AACD,eAAe,CAAC,WAAW,GAAG,iBAAiB;;;;"}
@@ -0,0 +1,61 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useMemo, forwardRef } from 'react';
3
+ import { c as cn } from './utils-DdHUxIdC.js';
4
+ import { Pagination as Pagination$1, PaginationContent, PaginationItem, PaginationPrevious, PaginationEllipsis, PaginationLink, PaginationNext } from './primitives/Pagination.js';
5
+
6
+ const DOTS = "...";
7
+
8
+ function range(start, end) {
9
+ return Array.from({ length: end - start + 1 }, (_, i) => i + start);
10
+ }
11
+
12
+ function usePaginationRange({ count, pageSize, siblingCount = 1, pageNo, }) {
13
+ return useMemo(() => {
14
+ const totalPageCount = Math.ceil(count / pageSize);
15
+ const totalPageNumbers = siblingCount + 5;
16
+ if (totalPageNumbers >= totalPageCount) {
17
+ return range(1, totalPageCount);
18
+ }
19
+ const leftSiblingIndex = Math.max(pageNo - siblingCount, 1);
20
+ const rightSiblingIndex = Math.min(pageNo + siblingCount, totalPageCount);
21
+ const shouldShowLeftDots = leftSiblingIndex > 2;
22
+ const shouldShowRightDots = rightSiblingIndex < totalPageCount - 2;
23
+ if (!shouldShowLeftDots && shouldShowRightDots) {
24
+ const leftRange = range(1, 3 + 2 * siblingCount);
25
+ return [...leftRange, DOTS, totalPageCount];
26
+ }
27
+ if (shouldShowLeftDots && !shouldShowRightDots) {
28
+ const rightRange = range(totalPageCount - (3 + 2 * siblingCount) + 1, totalPageCount);
29
+ return [1, DOTS, ...rightRange];
30
+ }
31
+ if (shouldShowLeftDots && shouldShowRightDots) {
32
+ const middleRange = range(leftSiblingIndex, rightSiblingIndex);
33
+ return [1, DOTS, ...middleRange, DOTS, totalPageCount];
34
+ }
35
+ return range(1, totalPageCount);
36
+ }, [count, pageSize, siblingCount, pageNo]);
37
+ }
38
+
39
+ const Pagination = forwardRef(({ count, pageNo, pageSize, siblingCount = 1, navigate, className, ...otherProps }, ref) => {
40
+ const paginationRange = usePaginationRange({
41
+ count,
42
+ pageSize,
43
+ siblingCount,
44
+ pageNo,
45
+ });
46
+ const lastPage = paginationRange[paginationRange.length - 1];
47
+ const isFirstPage = pageNo === 1;
48
+ const isLastPage = pageNo === lastPage;
49
+ // Don't render if only 1 page or no pages
50
+ if (pageNo === 0 || paginationRange.length < 2) {
51
+ return null;
52
+ }
53
+ const handleNavigate = (page) => {
54
+ navigate?.(page);
55
+ };
56
+ return (jsx(Pagination$1, { ref: ref, className: cn(className), ...otherProps, children: jsxs(PaginationContent, { children: [jsx(PaginationItem, { children: jsx(PaginationPrevious, { onClick: () => !isFirstPage && handleNavigate(pageNo - 1), "aria-disabled": isFirstPage, className: cn(isFirstPage && "pointer-events-none opacity-50") }) }), paginationRange.map((page, index) => (jsx(PaginationItem, { children: page === DOTS ? (jsx(PaginationEllipsis, {})) : (jsx(PaginationLink, { isActive: page === pageNo, onClick: () => handleNavigate(page), children: page })) }, `${page}-${index}`))), jsx(PaginationItem, { children: jsx(PaginationNext, { onClick: () => !isLastPage && handleNavigate(pageNo + 1), "aria-disabled": isLastPage, className: cn(isLastPage && "pointer-events-none opacity-50") }) })] }) }));
57
+ });
58
+ Pagination.displayName = "Pagination";
59
+
60
+ export { Pagination as P };
61
+ //# sourceMappingURL=Pagination-DSc9yXPy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination-DSc9yXPy.js","sources":["../src/components/Pagination/constants.ts","../src/components/Pagination/utils.ts","../src/components/Pagination/hooks/usePaginationRange.ts","../src/components/Pagination/Pagination.tsx"],"sourcesContent":["export const DOTS = \"...\" as const;\n","export function range(start: number, end: number): number[] {\n return Array.from({ length: end - start + 1 }, (_, i) => i + start);\n}\n","import { useMemo } from \"react\";\n\nimport { DOTS } from \"../constants\";\nimport { range } from \"../utils\";\n\nexport function usePaginationRange({\n count,\n pageSize,\n siblingCount = 1,\n pageNo,\n}: {\n count: number;\n pageSize: number;\n siblingCount: number;\n pageNo: number;\n}): (number | typeof DOTS)[] {\n return useMemo(() => {\n const totalPageCount = Math.ceil(count / pageSize);\n const totalPageNumbers = siblingCount + 5;\n\n if (totalPageNumbers >= totalPageCount) {\n return range(1, totalPageCount);\n }\n\n const leftSiblingIndex = Math.max(pageNo - siblingCount, 1);\n const rightSiblingIndex = Math.min(pageNo + siblingCount, totalPageCount);\n\n const shouldShowLeftDots = leftSiblingIndex > 2;\n const shouldShowRightDots = rightSiblingIndex < totalPageCount - 2;\n\n if (!shouldShowLeftDots && shouldShowRightDots) {\n const leftRange = range(1, 3 + 2 * siblingCount);\n return [...leftRange, DOTS, totalPageCount];\n }\n\n if (shouldShowLeftDots && !shouldShowRightDots) {\n const rightRange = range(\n totalPageCount - (3 + 2 * siblingCount) + 1,\n totalPageCount\n );\n return [1, DOTS, ...rightRange];\n }\n\n if (shouldShowLeftDots && shouldShowRightDots) {\n const middleRange = range(leftSiblingIndex, rightSiblingIndex);\n return [1, DOTS, ...middleRange, DOTS, totalPageCount];\n }\n\n return range(1, totalPageCount);\n }, [count, pageSize, siblingCount, pageNo]);\n}\n","import React, { forwardRef } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Pagination as PrimitivePagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from \"src/primitives/Pagination\";\n\nimport { DOTS } from \"./constants\";\nimport { usePaginationRange } from \"./hooks/usePaginationRange\";\n\nexport interface PaginationProps extends Omit<\n React.ComponentProps<typeof PrimitivePagination>,\n \"children\"\n> {\n /** Total number of items. */\n count: number;\n /** Current page number (1-based). */\n pageNo: number;\n /** Number of items per page. */\n pageSize: number;\n /** Number of sibling pages to show around the current page. */\n siblingCount?: number;\n /** Callback when a page is selected. */\n navigate?: (page: number) => void;\n /** Additional CSS class names. */\n className?: string;\n}\n\nconst Pagination = forwardRef<HTMLElement, PaginationProps>(\n (\n {\n count,\n pageNo,\n pageSize,\n siblingCount = 1,\n navigate,\n className,\n ...otherProps\n },\n ref\n ) => {\n const paginationRange = usePaginationRange({\n count,\n pageSize,\n siblingCount,\n pageNo,\n });\n\n const lastPage = paginationRange[paginationRange.length - 1] as number;\n const isFirstPage = pageNo === 1;\n const isLastPage = pageNo === lastPage;\n\n // Don't render if only 1 page or no pages\n if (pageNo === 0 || paginationRange.length < 2) {\n return null;\n }\n\n const handleNavigate = (page: number) => {\n navigate?.(page);\n };\n\n return (\n <PrimitivePagination ref={ref} className={cn(className)} {...otherProps}>\n <PaginationContent>\n <PaginationItem>\n <PaginationPrevious\n onClick={() => !isFirstPage && handleNavigate(pageNo - 1)}\n aria-disabled={isFirstPage}\n className={cn(isFirstPage && \"pointer-events-none opacity-50\")}\n />\n </PaginationItem>\n\n {paginationRange.map((page, index) => (\n <PaginationItem key={`${page}-${index}`}>\n {page === DOTS ? (\n <PaginationEllipsis />\n ) : (\n <PaginationLink\n isActive={page === pageNo}\n onClick={() => handleNavigate(page as number)}\n >\n {page}\n </PaginationLink>\n )}\n </PaginationItem>\n ))}\n\n <PaginationItem>\n <PaginationNext\n onClick={() => !isLastPage && handleNavigate(pageNo + 1)}\n aria-disabled={isLastPage}\n className={cn(isLastPage && \"pointer-events-none opacity-50\")}\n />\n </PaginationItem>\n </PaginationContent>\n </PrimitivePagination>\n );\n }\n);\n\nPagination.displayName = \"Pagination\";\n\nexport { Pagination };\n"],"names":["_jsx","PrimitivePagination","_jsxs"],"mappings":"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"}