@bigbinary/neeto-atoms 1.0.9 → 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 (576) 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/DatePicker-COxwHPIZ.js +2960 -0
  18. package/dist/DatePicker-COxwHPIZ.js.map +1 -0
  19. package/dist/Dialog-BURSzxaP.js +61 -0
  20. package/dist/Dialog-BURSzxaP.js.map +1 -0
  21. package/dist/Empty-B2JwFmru.js +26 -0
  22. package/dist/Empty-B2JwFmru.js.map +1 -0
  23. package/dist/Input-C1gcv9o2.js +147 -0
  24. package/dist/Input-C1gcv9o2.js.map +1 -0
  25. package/dist/Kbd-EqbC0bua.js +36 -0
  26. package/dist/Kbd-EqbC0bua.js.map +1 -0
  27. package/dist/Label-BVy4hy9Z.js +58 -0
  28. package/dist/Label-BVy4hy9Z.js.map +1 -0
  29. package/dist/MultiEmailInput-SCTYovtX.js +139 -0
  30. package/dist/MultiEmailInput-SCTYovtX.js.map +1 -0
  31. package/dist/Pagination-DSc9yXPy.js +61 -0
  32. package/dist/Pagination-DSc9yXPy.js.map +1 -0
  33. package/dist/Popover-BFMrtVPq.js +95 -0
  34. package/dist/Popover-BFMrtVPq.js.map +1 -0
  35. package/dist/Progress-B9NlUm6e.js +13 -0
  36. package/dist/Progress-B9NlUm6e.js.map +1 -0
  37. package/dist/RadioGroup-BNeYQAoT.js +34 -0
  38. package/dist/RadioGroup-BNeYQAoT.js.map +1 -0
  39. package/dist/Select-BGODpJGc.js +561 -0
  40. package/dist/Select-BGODpJGc.js.map +1 -0
  41. package/dist/{components/SelectFieldWrapper.js → SelectFieldWrapper-BJzq9aCY.js} +3 -11
  42. package/dist/SelectFieldWrapper-BJzq9aCY.js.map +1 -0
  43. package/dist/Sheet-QFC_mHyj.js +63 -0
  44. package/dist/Sheet-QFC_mHyj.js.map +1 -0
  45. package/dist/Slider-BCQXhs0Q.js +25 -0
  46. package/dist/Slider-BCQXhs0Q.js.map +1 -0
  47. package/dist/Spinner-C8HSac-2.js +17 -0
  48. package/dist/Spinner-C8HSac-2.js.map +1 -0
  49. package/dist/Stepper-BoGkmkY0.js +29 -0
  50. package/dist/Stepper-BoGkmkY0.js.map +1 -0
  51. package/dist/Switch-B83TGxJ_.js +20 -0
  52. package/dist/Switch-B83TGxJ_.js.map +1 -0
  53. package/dist/Tabs-DWfKnl3S.js +38 -0
  54. package/dist/Tabs-DWfKnl3S.js.map +1 -0
  55. package/dist/Textarea-C0z50h0N.js +73 -0
  56. package/dist/Textarea-C0z50h0N.js.map +1 -0
  57. package/dist/TimePicker-C4x62jI1.js +142 -0
  58. package/dist/TimePicker-C4x62jI1.js.map +1 -0
  59. package/dist/TimePickerPanel-CiF0RExY.js +126 -0
  60. package/dist/TimePickerPanel-CiF0RExY.js.map +1 -0
  61. package/dist/Toastr-DYqpSaMd.js +115 -0
  62. package/dist/Toastr-DYqpSaMd.js.map +1 -0
  63. package/dist/Tooltip-DhwIZnOU.js +80 -0
  64. package/dist/Tooltip-DhwIZnOU.js.map +1 -0
  65. package/dist/Tree-Dkr11OPy.js +7977 -0
  66. package/dist/Tree-Dkr11OPy.js.map +1 -0
  67. package/dist/TreeSelect-Cmc90YWJ.js +168 -0
  68. package/dist/TreeSelect-Cmc90YWJ.js.map +1 -0
  69. package/dist/Typography-D5TjXEfu.js +82 -0
  70. package/dist/Typography-D5TjXEfu.js.map +1 -0
  71. package/dist/cjs/Accordion-BX5I9ypV.js +28 -0
  72. package/dist/cjs/Accordion-BX5I9ypV.js.map +1 -0
  73. package/dist/cjs/Alert-BVvLyM_d.js +67 -0
  74. package/dist/cjs/Alert-BVvLyM_d.js.map +1 -0
  75. package/dist/cjs/Avatar-CNao5gvP.js +52 -0
  76. package/dist/cjs/Avatar-CNao5gvP.js.map +1 -0
  77. package/dist/cjs/Badge-STBHzYLs.js +61 -0
  78. package/dist/cjs/Badge-STBHzYLs.js.map +1 -0
  79. package/dist/cjs/Button-Bt_AElge.js +94 -0
  80. package/dist/cjs/Button-Bt_AElge.js.map +1 -0
  81. package/dist/cjs/Calendar-Nk76Y9yP.js +8066 -0
  82. package/dist/cjs/Calendar-Nk76Y9yP.js.map +1 -0
  83. package/dist/cjs/Callout-CS2U6pM7.js +67 -0
  84. package/dist/cjs/Callout-CS2U6pM7.js.map +1 -0
  85. package/dist/cjs/Checkbox-DOlS2oCD.js +26 -0
  86. package/dist/cjs/Checkbox-DOlS2oCD.js.map +1 -0
  87. package/dist/cjs/DatePicker-DpijPndg.js +2962 -0
  88. package/dist/cjs/DatePicker-DpijPndg.js.map +1 -0
  89. package/dist/cjs/Dialog-CtI_yWsJ.js +63 -0
  90. package/dist/cjs/Dialog-CtI_yWsJ.js.map +1 -0
  91. package/dist/cjs/Empty-qzle6YvT.js +28 -0
  92. package/dist/cjs/Empty-qzle6YvT.js.map +1 -0
  93. package/dist/cjs/Input-pkugjUb0.js +149 -0
  94. package/dist/cjs/Input-pkugjUb0.js.map +1 -0
  95. package/dist/cjs/Kbd-DHirsI--.js +38 -0
  96. package/dist/cjs/Kbd-DHirsI--.js.map +1 -0
  97. package/dist/cjs/Label-DpyfZsiT.js +60 -0
  98. package/dist/cjs/Label-DpyfZsiT.js.map +1 -0
  99. package/dist/cjs/MultiEmailInput-l0_YVjbp.js +141 -0
  100. package/dist/cjs/MultiEmailInput-l0_YVjbp.js.map +1 -0
  101. package/dist/cjs/Pagination-Byzt9Kmj.js +63 -0
  102. package/dist/cjs/Pagination-Byzt9Kmj.js.map +1 -0
  103. package/dist/cjs/Popover-LIxANoTc.js +101 -0
  104. package/dist/cjs/Popover-LIxANoTc.js.map +1 -0
  105. package/dist/cjs/Progress-DoCxZ_ZH.js +15 -0
  106. package/dist/cjs/Progress-DoCxZ_ZH.js.map +1 -0
  107. package/dist/cjs/RadioGroup-1RAoe38m.js +36 -0
  108. package/dist/cjs/RadioGroup-1RAoe38m.js.map +1 -0
  109. package/dist/cjs/Select-DOPZHlqc.js +567 -0
  110. package/dist/cjs/Select-DOPZHlqc.js.map +1 -0
  111. package/dist/cjs/{components/SelectFieldWrapper.js → SelectFieldWrapper-DEA--2wj.js} +2 -10
  112. package/dist/cjs/SelectFieldWrapper-DEA--2wj.js.map +1 -0
  113. package/dist/cjs/Sheet-CIhtNCBV.js +65 -0
  114. package/dist/cjs/Sheet-CIhtNCBV.js.map +1 -0
  115. package/dist/cjs/Slider-jNUS9vt8.js +27 -0
  116. package/dist/cjs/Slider-jNUS9vt8.js.map +1 -0
  117. package/dist/cjs/Spinner-DQutDMQq.js +19 -0
  118. package/dist/cjs/Spinner-DQutDMQq.js.map +1 -0
  119. package/dist/cjs/Stepper-DCoLl2ZS.js +35 -0
  120. package/dist/cjs/Stepper-DCoLl2ZS.js.map +1 -0
  121. package/dist/cjs/Switch-CFf8DtB_.js +22 -0
  122. package/dist/cjs/Switch-CFf8DtB_.js.map +1 -0
  123. package/dist/cjs/Tabs-D2247rd7.js +40 -0
  124. package/dist/cjs/Tabs-D2247rd7.js.map +1 -0
  125. package/dist/cjs/Textarea-BfdlAJ59.js +75 -0
  126. package/dist/cjs/Textarea-BfdlAJ59.js.map +1 -0
  127. package/dist/cjs/TimePicker-Ba2FdT1O.js +144 -0
  128. package/dist/cjs/TimePicker-Ba2FdT1O.js.map +1 -0
  129. package/dist/cjs/TimePickerPanel-DGNr97cj.js +132 -0
  130. package/dist/cjs/TimePickerPanel-DGNr97cj.js.map +1 -0
  131. package/dist/cjs/Toastr-BGp7-kmf.js +117 -0
  132. package/dist/cjs/Toastr-BGp7-kmf.js.map +1 -0
  133. package/dist/cjs/Tooltip-CtxI7QBY.js +86 -0
  134. package/dist/cjs/Tooltip-CtxI7QBY.js.map +1 -0
  135. package/dist/cjs/Tree-qpOcsGL9.js +7985 -0
  136. package/dist/cjs/Tree-qpOcsGL9.js.map +1 -0
  137. package/dist/cjs/TreeSelect-DiIEdiAU.js +170 -0
  138. package/dist/cjs/TreeSelect-DiIEdiAU.js.map +1 -0
  139. package/dist/cjs/Typography-C3rGpmAY.js +104 -0
  140. package/dist/cjs/Typography-C3rGpmAY.js.map +1 -0
  141. package/dist/cjs/components/Accordion.js +6 -28
  142. package/dist/cjs/components/Accordion.js.map +1 -1
  143. package/dist/cjs/components/Alert.js +9 -70
  144. package/dist/cjs/components/Alert.js.map +1 -1
  145. package/dist/cjs/components/Avatar.js +8 -51
  146. package/dist/cjs/components/Avatar.js.map +1 -1
  147. package/dist/cjs/components/Badge.js +10 -64
  148. package/dist/cjs/components/Badge.js.map +1 -1
  149. package/dist/cjs/components/Button.js +10 -94
  150. package/dist/cjs/components/Button.js.map +1 -1
  151. package/dist/cjs/components/Callout.js +9 -66
  152. package/dist/cjs/components/Callout.js.map +1 -1
  153. package/dist/cjs/components/Checkbox.js +8 -24
  154. package/dist/cjs/components/Checkbox.js.map +1 -1
  155. package/dist/cjs/components/DataTable.js +1 -1
  156. package/dist/cjs/components/DatePicker.js +45 -0
  157. package/dist/cjs/components/DatePicker.js.map +1 -0
  158. package/dist/cjs/components/Dialog.js +7 -63
  159. package/dist/cjs/components/Dialog.js.map +1 -1
  160. package/dist/cjs/components/Empty.js +10 -29
  161. package/dist/cjs/components/Empty.js.map +1 -1
  162. package/dist/cjs/components/Input.js +8 -151
  163. package/dist/cjs/components/Input.js.map +1 -1
  164. package/dist/cjs/components/Kbd.js +8 -41
  165. package/dist/cjs/components/Kbd.js.map +1 -1
  166. package/dist/cjs/components/Label.js +11 -59
  167. package/dist/cjs/components/Label.js.map +1 -1
  168. package/dist/cjs/components/MultiEmailInput.js +20 -0
  169. package/dist/cjs/components/MultiEmailInput.js.map +1 -0
  170. package/dist/cjs/components/Pagination.js +21 -0
  171. package/dist/cjs/components/Pagination.js.map +1 -0
  172. package/dist/cjs/components/Popover.js +7 -103
  173. package/dist/cjs/components/Popover.js.map +1 -1
  174. package/dist/cjs/components/Progress.js +7 -13
  175. package/dist/cjs/components/Progress.js.map +1 -1
  176. package/dist/cjs/components/RadioGroup.js +9 -40
  177. package/dist/cjs/components/RadioGroup.js.map +1 -1
  178. package/dist/cjs/components/Select.js +33 -0
  179. package/dist/cjs/components/Select.js.map +1 -1
  180. package/dist/cjs/components/Sheet.js +7 -65
  181. package/dist/cjs/components/Sheet.js.map +1 -1
  182. package/dist/cjs/components/Slider.js +8 -25
  183. package/dist/cjs/components/Slider.js.map +1 -1
  184. package/dist/cjs/components/Spinner.js +7 -19
  185. package/dist/cjs/components/Spinner.js.map +1 -1
  186. package/dist/cjs/components/Stepper.js +6 -32
  187. package/dist/cjs/components/Stepper.js.map +1 -1
  188. package/dist/cjs/components/Switch.js +8 -20
  189. package/dist/cjs/components/Switch.js.map +1 -1
  190. package/dist/cjs/components/Tabs.js +8 -55
  191. package/dist/cjs/components/Tabs.js.map +1 -1
  192. package/dist/cjs/components/Textarea.js +8 -77
  193. package/dist/cjs/components/Textarea.js.map +1 -1
  194. package/dist/cjs/components/TimePicker.js +42 -0
  195. package/dist/cjs/components/TimePicker.js.map +1 -0
  196. package/dist/cjs/components/Toastr.js +4 -126
  197. package/dist/cjs/components/Toastr.js.map +1 -1
  198. package/dist/cjs/components/Tooltip.js +5 -85
  199. package/dist/cjs/components/Tooltip.js.map +1 -1
  200. package/dist/cjs/components/Tree.js +62 -0
  201. package/dist/cjs/components/Tree.js.map +1 -0
  202. package/dist/cjs/components/TreeSelect.js +45 -0
  203. package/dist/cjs/components/TreeSelect.js.map +1 -0
  204. package/dist/cjs/components/Typography.js +8 -98
  205. package/dist/cjs/components/Typography.js.map +1 -1
  206. package/dist/cjs/formik/Button.js +45 -0
  207. package/dist/cjs/formik/Button.js.map +1 -0
  208. package/dist/cjs/formik/Checkbox.js +38 -0
  209. package/dist/cjs/formik/Checkbox.js.map +1 -0
  210. package/dist/cjs/formik/Form.js +116 -0
  211. package/dist/cjs/formik/Form.js.map +1 -0
  212. package/dist/cjs/formik/Input.js +38 -0
  213. package/dist/cjs/formik/Input.js.map +1 -0
  214. package/dist/cjs/formik/MultiEmailInput.js +31 -0
  215. package/dist/cjs/formik/MultiEmailInput.js.map +1 -0
  216. package/dist/cjs/formik/RadioGroup.js +44 -0
  217. package/dist/cjs/formik/RadioGroup.js.map +1 -0
  218. package/dist/cjs/formik/Select.js +61 -0
  219. package/dist/cjs/formik/Select.js.map +1 -0
  220. package/dist/cjs/formik/Slider.js +39 -0
  221. package/dist/cjs/formik/Slider.js.map +1 -0
  222. package/dist/cjs/formik/Switch.js +33 -0
  223. package/dist/cjs/formik/Switch.js.map +1 -0
  224. package/dist/cjs/formik/Textarea.js +34 -0
  225. package/dist/cjs/formik/Textarea.js.map +1 -0
  226. package/dist/cjs/formik/TreeSelect.js +56 -0
  227. package/dist/cjs/formik/TreeSelect.js.map +1 -0
  228. package/dist/cjs/formik/index.js +101 -0
  229. package/dist/cjs/formik/index.js.map +1 -0
  230. package/dist/cjs/index.js +317 -427
  231. package/dist/cjs/index.js.map +1 -1
  232. package/dist/cjs/primitives/Calendar.js +10 -8020
  233. package/dist/cjs/primitives/Calendar.js.map +1 -1
  234. package/dist/cjs/primitives/Chart.js +410 -207
  235. package/dist/cjs/primitives/Chart.js.map +1 -1
  236. package/dist/cjs/primitives/Combobox.js +783 -1096
  237. package/dist/cjs/primitives/Combobox.js.map +1 -1
  238. package/dist/cjs/primitives/Pagination.js +1 -1
  239. package/dist/cjs/primitives/Resizable.js +799 -778
  240. package/dist/cjs/primitives/Resizable.js.map +1 -1
  241. package/dist/cjs/primitives/ScrollArea.js +10 -10
  242. package/dist/cjs/primitives/Select.js +77 -77
  243. package/dist/cjs/primitives/index.js +3 -2
  244. package/dist/cjs/primitives/index.js.map +1 -1
  245. package/dist/cjs/redux-DEF7lAd1.js +240 -0
  246. package/dist/cjs/redux-DEF7lAd1.js.map +1 -0
  247. package/dist/cjs/with-selector-DeKHbQY7.js +121 -0
  248. package/dist/cjs/with-selector-DeKHbQY7.js.map +1 -0
  249. package/dist/components/Accordion/index.d.ts +2 -0
  250. package/dist/components/Accordion.js +5 -27
  251. package/dist/components/Accordion.js.map +1 -1
  252. package/dist/components/{Alert.d.ts → Alert/Alert.d.ts} +2 -2
  253. package/dist/components/Alert/constants.d.ts +3 -0
  254. package/dist/components/Alert/index.d.ts +2 -0
  255. package/dist/components/Alert.js +10 -75
  256. package/dist/components/Alert.js.map +1 -1
  257. package/dist/components/{Avatar.d.ts → Avatar/Avatar.d.ts} +2 -2
  258. package/dist/components/Avatar/constants.d.ts +3 -0
  259. package/dist/components/Avatar/index.d.ts +2 -0
  260. package/dist/components/Avatar/utils.d.ts +1 -0
  261. package/dist/components/Avatar.js +9 -56
  262. package/dist/components/Avatar.js.map +1 -1
  263. package/dist/components/{Badge.d.ts → Badge/Badge.d.ts} +1 -1
  264. package/dist/components/Badge/constants.d.ts +25 -0
  265. package/dist/components/Badge/index.d.ts +2 -0
  266. package/dist/components/Badge.js +8 -66
  267. package/dist/components/Badge.js.map +1 -1
  268. package/dist/components/Button/constants.d.ts +5 -0
  269. package/dist/components/Button/index.d.ts +2 -0
  270. package/dist/components/Button.js +11 -99
  271. package/dist/components/Button.js.map +1 -1
  272. package/dist/components/{Callout.d.ts → Callout/Callout.d.ts} +1 -1
  273. package/dist/components/Callout/constants.d.ts +8 -0
  274. package/dist/components/Callout/index.d.ts +2 -0
  275. package/dist/components/Callout.js +8 -69
  276. package/dist/components/Callout.js.map +1 -1
  277. package/dist/components/Checkbox/index.d.ts +2 -0
  278. package/dist/components/Checkbox.js +6 -26
  279. package/dist/components/Checkbox.js.map +1 -1
  280. package/dist/components/ColorPicker.js +2 -2
  281. package/dist/components/DataTable.js +4 -4
  282. package/dist/components/DatePicker/DatePicker.d.ts +4 -0
  283. package/dist/components/DatePicker/DatePickerFooter.d.ts +12 -0
  284. package/dist/components/DatePicker/TimezoneSelect.d.ts +8 -0
  285. package/dist/components/DatePicker/constants.d.ts +17 -0
  286. package/dist/components/DatePicker/index.d.ts +2 -0
  287. package/dist/components/DatePicker/types.d.ts +56 -0
  288. package/dist/components/DatePicker/utils.d.ts +6 -0
  289. package/dist/components/DatePicker.js +39 -0
  290. package/dist/components/DatePicker.js.map +1 -0
  291. package/dist/components/{Dialog.d.ts → Dialog/Dialog.d.ts} +1 -1
  292. package/dist/components/Dialog/constants.d.ts +2 -0
  293. package/dist/components/Dialog/index.d.ts +2 -0
  294. package/dist/components/Dialog.js +5 -65
  295. package/dist/components/Dialog.js.map +1 -1
  296. package/dist/components/DropdownMenu.js +3 -3
  297. package/dist/components/Empty/index.d.ts +2 -0
  298. package/dist/components/Empty.js +11 -34
  299. package/dist/components/Empty.js.map +1 -1
  300. package/dist/components/Input/constants.d.ts +17 -0
  301. package/dist/components/Input/index.d.ts +2 -0
  302. package/dist/components/Input/utils.d.ts +7 -0
  303. package/dist/components/Input.js +6 -153
  304. package/dist/components/Input.js.map +1 -1
  305. package/dist/components/{Kbd.d.ts → Kbd/Kbd.d.ts} +1 -1
  306. package/dist/components/Kbd/constants.d.ts +1 -0
  307. package/dist/components/Kbd/index.d.ts +2 -0
  308. package/dist/components/Kbd.js +9 -46
  309. package/dist/components/Kbd.js.map +1 -1
  310. package/dist/components/Label/constants.d.ts +1 -0
  311. package/dist/components/Label/index.d.ts +2 -0
  312. package/dist/components/Label.js +13 -65
  313. package/dist/components/Label.js.map +1 -1
  314. package/dist/components/MultiEmailInput/MultiEmailInput.d.ts +3 -0
  315. package/dist/components/MultiEmailInput/constants.d.ts +3 -0
  316. package/dist/components/MultiEmailInput/index.d.ts +2 -0
  317. package/dist/components/MultiEmailInput/types.d.ts +53 -0
  318. package/dist/components/MultiEmailInput/useMultiEmailState.d.ts +18 -0
  319. package/dist/components/MultiEmailInput/utils.d.ts +9 -0
  320. package/dist/components/MultiEmailInput.js +14 -0
  321. package/dist/components/MultiEmailInput.js.map +1 -0
  322. package/dist/components/Pagination/Pagination.d.ts +18 -0
  323. package/dist/components/Pagination/constants.d.ts +1 -0
  324. package/dist/components/Pagination/hooks/usePaginationRange.d.ts +7 -0
  325. package/dist/components/Pagination/index.d.ts +2 -0
  326. package/dist/components/Pagination/utils.d.ts +1 -0
  327. package/dist/components/Pagination.js +15 -0
  328. package/dist/components/Pagination.js.map +1 -0
  329. package/dist/components/Popover/constants.d.ts +2 -0
  330. package/dist/components/Popover/index.d.ts +2 -0
  331. package/dist/components/Popover.js +8 -104
  332. package/dist/components/Popover.js.map +1 -1
  333. package/dist/components/Progress/index.d.ts +2 -0
  334. package/dist/components/Progress.js +5 -15
  335. package/dist/components/Progress.js.map +1 -1
  336. package/dist/components/RadioGroup/index.d.ts +2 -0
  337. package/dist/components/RadioGroup.js +7 -42
  338. package/dist/components/RadioGroup.js.map +1 -1
  339. package/dist/components/Select/MultiSelectCombobox.d.ts +2 -0
  340. package/dist/components/{MultiSelectCombobox.types.d.ts → Select/MultiSelectCombobox.types.d.ts} +3 -13
  341. package/dist/components/{OptionItem.d.ts → Select/OptionItem.d.ts} +1 -1
  342. package/dist/components/Select/Select.d.ts +5 -0
  343. package/dist/components/Select/SelectCombobox.d.ts +2 -0
  344. package/dist/components/Select/SelectCombobox.types.d.ts +73 -0
  345. package/dist/components/Select/dropdown.types.d.ts +12 -0
  346. package/dist/components/Select/index.d.ts +2 -0
  347. package/dist/components/Select/types.d.ts +148 -0
  348. package/dist/components/{MultiSelect.utils.d.ts → Select/utils.d.ts} +1 -1
  349. package/dist/components/Select.js +29 -1
  350. package/dist/components/Select.js.map +1 -1
  351. package/dist/components/Sheet/constants.d.ts +3 -0
  352. package/dist/components/Sheet/index.d.ts +2 -0
  353. package/dist/components/Sheet.js +5 -67
  354. package/dist/components/Sheet.js.map +1 -1
  355. package/dist/components/Slider/index.d.ts +2 -0
  356. package/dist/components/Slider.js +6 -27
  357. package/dist/components/Slider.js.map +1 -1
  358. package/dist/components/Spinner/constants.d.ts +1 -0
  359. package/dist/components/Spinner/index.d.ts +2 -0
  360. package/dist/components/Spinner.js +5 -21
  361. package/dist/components/Spinner.js.map +1 -1
  362. package/dist/components/Stepper/index.d.ts +2 -0
  363. package/dist/components/Stepper.js +5 -31
  364. package/dist/components/Stepper.js.map +1 -1
  365. package/dist/components/Switch/index.d.ts +2 -0
  366. package/dist/components/Switch.js +6 -22
  367. package/dist/components/Switch.js.map +1 -1
  368. package/dist/components/Tabs/constants.d.ts +5 -0
  369. package/dist/components/Tabs/index.d.ts +2 -0
  370. package/dist/components/Tabs.js +6 -57
  371. package/dist/components/Tabs.js.map +1 -1
  372. package/dist/components/{Textarea.d.ts → Textarea/Textarea.d.ts} +1 -1
  373. package/dist/components/Textarea/constants.d.ts +5 -0
  374. package/dist/components/Textarea/index.d.ts +2 -0
  375. package/dist/components/Textarea/utils.d.ts +2 -0
  376. package/dist/components/Textarea.js +6 -79
  377. package/dist/components/Textarea.js.map +1 -1
  378. package/dist/components/TimePicker/TimeColumn.d.ts +11 -0
  379. package/dist/components/TimePicker/TimePicker.d.ts +4 -0
  380. package/dist/components/TimePicker/TimePickerPanel.d.ts +4 -0
  381. package/dist/components/TimePicker/constants.d.ts +3 -0
  382. package/dist/components/TimePicker/index.d.ts +3 -0
  383. package/dist/components/TimePicker/types.d.ts +61 -0
  384. package/dist/components/TimePicker/utils.d.ts +11 -0
  385. package/dist/components/TimePicker.js +35 -0
  386. package/dist/components/TimePicker.js.map +1 -0
  387. package/dist/components/{Toastr.d.ts → Toastr/Toastr.d.ts} +2 -2
  388. package/dist/components/Toastr/index.d.ts +2 -0
  389. package/dist/components/Toastr/utils.d.ts +10 -0
  390. package/dist/components/Toastr.js +2 -128
  391. package/dist/components/Toastr.js.map +1 -1
  392. package/dist/components/Tooltip/constants.d.ts +2 -0
  393. package/dist/components/Tooltip/index.d.ts +2 -0
  394. package/dist/components/Tooltip.js +7 -87
  395. package/dist/components/Tooltip.js.map +1 -1
  396. package/dist/components/Tree/Tree.d.ts +2 -0
  397. package/dist/components/Tree/TreeContext.d.ts +26 -0
  398. package/dist/components/Tree/components/SwitcherIcon.d.ts +6 -0
  399. package/dist/components/Tree/components/TreeCheckbox.d.ts +8 -0
  400. package/dist/components/Tree/components/TreeNode.d.ts +3 -0
  401. package/dist/components/Tree/constants.d.ts +3 -0
  402. package/dist/components/Tree/hooks/useTreeCheck.d.ts +18 -0
  403. package/dist/components/Tree/hooks/useTreeExpansion.d.ts +18 -0
  404. package/dist/components/Tree/hooks/useTreeSelection.d.ts +16 -0
  405. package/dist/components/Tree/index.d.ts +3 -0
  406. package/dist/components/Tree/types.d.ts +110 -0
  407. package/dist/components/Tree/utils/adapter.d.ts +10 -0
  408. package/dist/components/Tree/utils/checkCascade.d.ts +5 -0
  409. package/dist/components/Tree/utils/search.d.ts +10 -0
  410. package/dist/components/Tree.js +57 -0
  411. package/dist/components/Tree.js.map +1 -0
  412. package/dist/components/TreeSelect/TreeSelect.d.ts +3 -0
  413. package/dist/components/TreeSelect/TreeSelectTrigger.d.ts +14 -0
  414. package/dist/components/{Select.constants.d.ts → TreeSelect/constants.d.ts} +2 -2
  415. package/dist/components/TreeSelect/hooks/useTreeSelectState.d.ts +30 -0
  416. package/dist/components/TreeSelect/hooks/useTreeSelectValue.d.ts +19 -0
  417. package/dist/components/TreeSelect/index.d.ts +2 -0
  418. package/dist/components/TreeSelect/types.d.ts +49 -0
  419. package/dist/components/TreeSelect/utils/pruneTree.d.ts +2 -0
  420. package/dist/components/TreeSelect/utils/resolveFieldNames.d.ts +5 -0
  421. package/dist/components/TreeSelect.js +39 -0
  422. package/dist/components/TreeSelect.js.map +1 -0
  423. package/dist/components/{Typography.d.ts → Typography/Typography.d.ts} +1 -1
  424. package/dist/components/Typography/index.d.ts +1 -0
  425. package/dist/components/Typography.js +6 -81
  426. package/dist/components/Typography.js.map +1 -1
  427. package/dist/{floating-ui.react-dom-CcGbtPEK.js → floating-ui.react-dom-D8_f_WWh.js} +2 -2
  428. package/dist/{floating-ui.react-dom-CcGbtPEK.js.map → floating-ui.react-dom-D8_f_WWh.js.map} +1 -1
  429. package/dist/formik/Button.d.ts +7 -0
  430. package/dist/formik/Button.js +43 -0
  431. package/dist/formik/Button.js.map +1 -0
  432. package/dist/formik/Checkbox.d.ts +8 -0
  433. package/dist/formik/Checkbox.js +36 -0
  434. package/dist/formik/Checkbox.js.map +1 -0
  435. package/dist/formik/Form/FormWrapper.d.ts +9 -0
  436. package/dist/formik/Form/ScrollToErrorField/index.d.ts +5 -0
  437. package/dist/formik/Form/ScrollToErrorField/utils.d.ts +2 -0
  438. package/dist/formik/Form/index.d.ts +16 -0
  439. package/dist/formik/Form.js +114 -0
  440. package/dist/formik/Form.js.map +1 -0
  441. package/dist/formik/Input.d.ts +8 -0
  442. package/dist/formik/Input.js +36 -0
  443. package/dist/formik/Input.js.map +1 -0
  444. package/dist/formik/MultiEmailInput.d.ts +7 -0
  445. package/dist/formik/MultiEmailInput.js +29 -0
  446. package/dist/formik/MultiEmailInput.js.map +1 -0
  447. package/dist/formik/RadioGroup.js +42 -0
  448. package/dist/formik/RadioGroup.js.map +1 -0
  449. package/dist/formik/Select.d.ts +7 -0
  450. package/dist/formik/Select.js +59 -0
  451. package/dist/formik/Select.js.map +1 -0
  452. package/dist/formik/Slider.d.ts +8 -0
  453. package/dist/formik/Slider.js +37 -0
  454. package/dist/formik/Slider.js.map +1 -0
  455. package/dist/formik/Switch.d.ts +10 -0
  456. package/dist/formik/Switch.js +31 -0
  457. package/dist/formik/Switch.js.map +1 -0
  458. package/dist/formik/Textarea.d.ts +8 -0
  459. package/dist/formik/Textarea.js +32 -0
  460. package/dist/formik/Textarea.js.map +1 -0
  461. package/dist/formik/TreeSelect.d.ts +7 -0
  462. package/dist/formik/TreeSelect.js +54 -0
  463. package/dist/formik/TreeSelect.js.map +1 -0
  464. package/dist/formik/index.d.ts +22 -0
  465. package/dist/formik/index.js +85 -0
  466. package/dist/formik/index.js.map +1 -0
  467. package/dist/hooks/useAsyncOptions.d.ts +4 -4
  468. package/dist/hooks/useComboboxAnchor.d.ts +6 -0
  469. package/dist/hooks/useCreatableItems.d.ts +1 -1
  470. package/dist/hooks/useMultiSelectOptions.d.ts +22 -4
  471. package/dist/hooks/useMultiSelectState.d.ts +7 -4
  472. package/dist/hooks/useSelectState.d.ts +39 -14
  473. package/dist/{index-ByEpUy7w.js → index-C3hByjk3.js} +2 -2
  474. package/dist/{index-ByEpUy7w.js.map → index-C3hByjk3.js.map} +1 -1
  475. package/dist/{index-KzJfsx-e.js → index-DLPtgEJ_.js} +2 -2
  476. package/dist/{index-KzJfsx-e.js.map → index-DLPtgEJ_.js.map} +1 -1
  477. package/dist/index.css +2 -1
  478. package/dist/index.d.ts +13 -2
  479. package/dist/index.js +281 -402
  480. package/dist/index.js.map +1 -1
  481. package/dist/primitives/Calendar.js +8 -8003
  482. package/dist/primitives/Calendar.js.map +1 -1
  483. package/dist/primitives/Chart.js +253 -50
  484. package/dist/primitives/Chart.js.map +1 -1
  485. package/dist/primitives/Combobox.d.ts +3 -3
  486. package/dist/primitives/Combobox.js +787 -1100
  487. package/dist/primitives/Combobox.js.map +1 -1
  488. package/dist/primitives/ContextMenu.js +3 -3
  489. package/dist/primitives/DropdownMenu.js +3 -3
  490. package/dist/primitives/HoverCard.js +2 -2
  491. package/dist/primitives/Menubar.js +3 -3
  492. package/dist/primitives/Pagination.js +1 -1
  493. package/dist/primitives/Popover.js +2 -2
  494. package/dist/primitives/Resizable.js +799 -778
  495. package/dist/primitives/Resizable.js.map +1 -1
  496. package/dist/primitives/Select.js +4 -4
  497. package/dist/primitives/Sidebar.js +3 -3
  498. package/dist/primitives/Tooltip.js +3 -3
  499. package/dist/primitives/index.js +7 -6
  500. package/dist/primitives/index.js.map +1 -1
  501. package/dist/redux-BKH6DnBB.js +235 -0
  502. package/dist/redux-BKH6DnBB.js.map +1 -0
  503. package/dist/shadcn/components/combobox.d.ts +1 -1
  504. package/dist/shadcn/components/typography.d.ts +2 -2
  505. package/dist/{tooltip-DzjIJacP.js → tooltip-XkHLgxlU.js} +2 -2
  506. package/dist/{tooltip-DzjIJacP.js.map → tooltip-XkHLgxlU.js.map} +1 -1
  507. package/dist/utils/dayjs/index.d.ts +4 -0
  508. package/dist/utils/dayjs/timezonePlugin.d.ts +3 -0
  509. package/dist/with-selector-Dv0G_V_o.js +115 -0
  510. package/dist/with-selector-Dv0G_V_o.js.map +1 -0
  511. package/package.json +17 -3
  512. package/dist/cjs/components/MultiSelect.js +0 -13
  513. package/dist/cjs/components/MultiSelect.js.map +0 -1
  514. package/dist/cjs/components/MultiSelectCombobox.js +0 -3
  515. package/dist/cjs/components/MultiSelectCombobox.js.map +0 -1
  516. package/dist/cjs/components/MultiSelectDropdown.js +0 -38
  517. package/dist/cjs/components/MultiSelectDropdown.js.map +0 -1
  518. package/dist/cjs/components/OptionItem.js +0 -34
  519. package/dist/cjs/components/OptionItem.js.map +0 -1
  520. package/dist/cjs/components/SelectFieldWrapper.js.map +0 -1
  521. package/dist/cjs/components/SelectOptions.js +0 -43
  522. package/dist/cjs/components/SelectOptions.js.map +0 -1
  523. package/dist/cjs/components/SelectTriggerContent.js +0 -47
  524. package/dist/cjs/components/SelectTriggerContent.js.map +0 -1
  525. package/dist/cjs/components/shared.js +0 -8
  526. package/dist/cjs/components/shared.js.map +0 -1
  527. package/dist/cjs/useCreatableItems-BTHtd7uo.js +0 -100
  528. package/dist/cjs/useCreatableItems-BTHtd7uo.js.map +0 -1
  529. package/dist/cjs/with-selector-u4xTSzCv.js +0 -457
  530. package/dist/cjs/with-selector-u4xTSzCv.js.map +0 -1
  531. package/dist/components/MultiSelect.d.ts +0 -4
  532. package/dist/components/MultiSelect.js +0 -4
  533. package/dist/components/MultiSelect.js.map +0 -1
  534. package/dist/components/MultiSelect.types.d.ts +0 -121
  535. package/dist/components/MultiSelectCombobox.d.ts +0 -3
  536. package/dist/components/MultiSelectCombobox.js +0 -2
  537. package/dist/components/MultiSelectCombobox.js.map +0 -1
  538. package/dist/components/MultiSelectDropdown.js +0 -36
  539. package/dist/components/MultiSelectDropdown.js.map +0 -1
  540. package/dist/components/OptionItem.js +0 -32
  541. package/dist/components/OptionItem.js.map +0 -1
  542. package/dist/components/Select.d.ts +0 -4
  543. package/dist/components/Select.types.d.ts +0 -58
  544. package/dist/components/SelectFieldWrapper.js.map +0 -1
  545. package/dist/components/SelectOptions.d.ts +0 -2
  546. package/dist/components/SelectOptions.js +0 -41
  547. package/dist/components/SelectOptions.js.map +0 -1
  548. package/dist/components/SelectTriggerContent.d.ts +0 -18
  549. package/dist/components/SelectTriggerContent.js +0 -45
  550. package/dist/components/SelectTriggerContent.js.map +0 -1
  551. package/dist/components/shared.js +0 -6
  552. package/dist/components/shared.js.map +0 -1
  553. package/dist/components/shared.types.d.ts +0 -16
  554. package/dist/useCreatableItems-B0seQA1_.js +0 -89
  555. package/dist/useCreatableItems-B0seQA1_.js.map +0 -1
  556. package/dist/with-selector--fY1NrB9.js +0 -448
  557. package/dist/with-selector--fY1NrB9.js.map +0 -1
  558. /package/dist/components/{Accordion.d.ts → Accordion/Accordion.d.ts} +0 -0
  559. /package/dist/components/{Button.d.ts → Button/Button.d.ts} +0 -0
  560. /package/dist/components/{Checkbox.d.ts → Checkbox/Checkbox.d.ts} +0 -0
  561. /package/dist/components/{Empty.d.ts → Empty/Empty.d.ts} +0 -0
  562. /package/dist/components/{Input.d.ts → Input/Input.d.ts} +0 -0
  563. /package/dist/components/{Label.d.ts → Label/Label.d.ts} +0 -0
  564. /package/dist/components/{Popover.d.ts → Popover/Popover.d.ts} +0 -0
  565. /package/dist/components/{Progress.d.ts → Progress/Progress.d.ts} +0 -0
  566. /package/dist/components/{RadioGroup.d.ts → RadioGroup/RadioGroup.d.ts} +0 -0
  567. /package/dist/components/{MultiSelectDropdown.d.ts → Select/MultiSelectDropdown.d.ts} +0 -0
  568. /package/dist/components/{SelectFieldWrapper.d.ts → Select/SelectFieldWrapper.d.ts} +0 -0
  569. /package/dist/components/{MultiSelect.constants.d.ts → Select/constants.d.ts} +0 -0
  570. /package/dist/components/{Sheet.d.ts → Sheet/Sheet.d.ts} +0 -0
  571. /package/dist/components/{Slider.d.ts → Slider/Slider.d.ts} +0 -0
  572. /package/dist/components/{Spinner.d.ts → Spinner/Spinner.d.ts} +0 -0
  573. /package/dist/components/{Stepper.d.ts → Stepper/Stepper.d.ts} +0 -0
  574. /package/dist/components/{Switch.d.ts → Switch/Switch.d.ts} +0 -0
  575. /package/dist/components/{Tabs.d.ts → Tabs/Tabs.d.ts} +0 -0
  576. /package/dist/components/{Tooltip.d.ts → Tooltip/Tooltip.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea-C0z50h0N.js","sources":["../src/components/Textarea/constants.ts","../src/components/Textarea/utils.ts","../src/components/Textarea/Textarea.tsx"],"sourcesContent":["type TextareaSize = \"small\" | \"medium\" | \"large\";\n\nconst SIZE_ROWS: Record<TextareaSize, number> = {\n small: 1,\n medium: 3,\n large: 4,\n};\n\nconst SIZE_MIN_HEIGHT: Record<TextareaSize, string> = {\n small: \"min-h-8\",\n medium: \"min-h-20\",\n large: \"min-h-28\",\n};\n\nexport { SIZE_ROWS, SIZE_MIN_HEIGHT };\nexport type { TextareaSize };\n","function getTrimmedValue(\n value: string | number,\n disableTrimOnBlur: boolean\n): string | number {\n if (disableTrimOnBlur || typeof value !== \"string\") return value;\n return value.trim();\n}\n\nexport { getTrimmedValue };\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 { Textarea as PrimitiveTextarea } from \"src/primitives/Textarea\";\n\nimport { SIZE_ROWS, SIZE_MIN_HEIGHT } from \"./constants\";\nimport { getTrimmedValue } from \"./utils\";\n\nimport type { TextareaSize } from \"./constants\";\n\ntype TextareaResize = \"vertical\" | \"none\";\n\ntype PrimitiveTextareaProps = React.ComponentProps<typeof PrimitiveTextarea>;\n\nexport interface TextareaProps extends Omit<\n PrimitiveTextareaProps,\n \"size\" | \"children\"\n> {\n /** Size of the textarea. Controls default rows: small=1, medium=3, large=4. */\n size?: TextareaSize;\n /** Resize behavior. */\n resize?: TextareaResize;\n /** Label displayed above the textarea. */\n label?: string;\n /** Error message displayed below the textarea. */\n error?: string;\n /** Help text displayed below the textarea. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Maximum character limit. Counter visible at 85% capacity. */\n maxLength?: number;\n /** Allow typing past maxLength, show error styling on count. */\n unlimitedChars?: boolean;\n /** Prevent trimming whitespace on blur. */\n disableTrimOnBlur?: boolean;\n /** Content to display before the textarea. */\n prefix?: React.ReactNode;\n /** Content to display after the textarea. */\n suffix?: React.ReactNode;\n /** Render the textarea without borders. */\n nakedTextarea?: boolean;\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 Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n size = \"medium\",\n resize = \"vertical\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n disabled = false,\n required = false,\n maxLength,\n unlimitedChars = false,\n disableTrimOnBlur = false,\n prefix,\n suffix,\n nakedTextarea = false,\n labelProps,\n className = \"\",\n rows: rowsProp,\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 = isControlled ? controlledValue : 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 const rows = rowsProp ?? SIZE_ROWS[size];\n\n // --- Handlers ---\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (!isControlled) {\n setValueInternal(e.target.value);\n }\n onChange?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n const trimmedValue = getTrimmedValue(value ?? \"\", disableTrimOnBlur);\n\n if (trimmedValue !== value) {\n e.target.value = trimmedValue.toString();\n handleChange(e as unknown as React.ChangeEvent<HTMLTextAreaElement>);\n }\n\n onBlur?.(e);\n };\n\n // --- aria-describedby ---\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n // --- Textarea element ---\n\n const hasField = !!(label || error || helpText);\n\n const textareaElement = (\n <PrimitiveTextarea\n ref={ref}\n id={id}\n rows={rows}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(\n // Override shadcn's field-sizing-content and min-h-16 so rows works\n \"!field-sizing-normal\",\n SIZE_MIN_HEIGHT[size],\n resize === \"none\" && \"resize-none\",\n resize === \"vertical\" && \"resize-y\",\n nakedTextarea &&\n \"border-transparent shadow-none px-0 py-0 focus-visible:border-transparent focus-visible:ring-0\",\n !!error && \"border-destructive ring-destructive/20 ring-3\"\n )}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n );\n\n const hasPrefixSuffix = !!(prefix || suffix);\n\n const textareaWithAffixes = hasPrefixSuffix ? (\n <div\n className={cn(\n \"flex items-start gap-2 rounded-lg border border-input px-2.5 py-2 focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50\",\n !!error && \"border-destructive ring-destructive/20 ring-3\",\n nakedTextarea && \"border-transparent shadow-none\"\n )}\n >\n {prefix && (\n <div className=\"shrink-0 pt-0.5 text-muted-foreground\">{prefix}</div>\n )}\n <PrimitiveTextarea\n ref={ref}\n id={id}\n rows={rows}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(\n \"!field-sizing-normal border-0 p-0 shadow-none focus-visible:border-0 focus-visible:ring-0\",\n SIZE_MIN_HEIGHT[size],\n resize === \"none\" && \"resize-none\",\n resize === \"vertical\" && \"resize-y\"\n )}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n {suffix && (\n <div className=\"shrink-0 pt-0.5 text-muted-foreground\">{suffix}</div>\n )}\n </div>\n ) : (\n textareaElement\n );\n\n if (!hasField) {\n return <div className={cn(className)}>{textareaWithAffixes}</div>;\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 {textareaWithAffixes}\n {!!error && <FieldError id={errorId}>{error}</FieldError>}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"],"names":["_jsx","PrimitiveTextarea","_jsxs"],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { forwardRef, useId, useRef, useState, useCallback, useEffect } from 'react';
3
+ import { Popover, PopoverAnchor, PopoverContent } from './primitives/Popover.js';
4
+ import { Field, FieldLabel, FieldContent, FieldError, FieldDescription } from './primitives/Field.js';
5
+ import { c as cn } from './utils-DdHUxIdC.js';
6
+ import { d as dateToTimeValue, t as to12Hour, p as padNumber, T as TimePickerPanel, a as parseTimeString } from './TimePickerPanel-CiF0RExY.js';
7
+ import { c as createLucideIcon } from './createLucideIcon-C8ycilSN.js';
8
+ import { X } from './x-_o2T3n6D.js';
9
+
10
+ /**
11
+ * @license lucide-react v0.577.0 - ISC
12
+ *
13
+ * This source code is licensed under the ISC license.
14
+ * See the LICENSE file in the root directory of this source tree.
15
+ */
16
+
17
+
18
+ const __iconNode = [
19
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
20
+ ["path", { d: "M12 6v6l4 2", key: "mmk7yg" }]
21
+ ];
22
+ const Clock = createLucideIcon("clock", __iconNode);
23
+
24
+ const SIZE_CONFIG = {
25
+ small: { trigger: "h-7 text-xs", icon: "size-3.5" },
26
+ medium: { trigger: "h-8 text-sm", icon: "size-4" },
27
+ large: { trigger: "h-10 text-sm", icon: "size-4" },
28
+ };
29
+ const TimePicker = forwardRef(({ value, onChange, format = "24", showSeconds = false, minuteStep = 1, secondStep = 1, disabled = false, placeholder, label, error, helpText, size = "medium", required = false, timezone, labelProps, className, }, ref) => {
30
+ const generatedId = useId();
31
+ const errorId = `error_${generatedId}`;
32
+ const helpTextId = `helpText_${generatedId}`;
33
+ const containerRef = useRef(null);
34
+ const popoverContentId = useRef(`timepicker-popover-${generatedId}`).current;
35
+ const [open, setOpen] = useState(false);
36
+ const getInitialTime = useCallback(() => {
37
+ if (!value)
38
+ return null;
39
+ if (value instanceof Date)
40
+ return dateToTimeValue(value);
41
+ return {
42
+ hours: value.hours,
43
+ minutes: value.minutes,
44
+ seconds: value.seconds ?? 0,
45
+ };
46
+ }, [value]);
47
+ const [internalTime, setInternalTime] = useState(getInitialTime);
48
+ const [inputText, setInputText] = useState("");
49
+ const formatTimeDisplay = useCallback((time) => {
50
+ if (!time)
51
+ return "";
52
+ if (format === "12") {
53
+ const { hour12, period } = to12Hour(time.hours);
54
+ const parts = [padNumber(hour12), padNumber(time.minutes)];
55
+ if (showSeconds)
56
+ parts.push(padNumber(time.seconds ?? 0));
57
+ return `${parts.join(":")} ${period}`;
58
+ }
59
+ const parts = [padNumber(time.hours), padNumber(time.minutes)];
60
+ if (showSeconds)
61
+ parts.push(padNumber(time.seconds ?? 0));
62
+ return parts.join(":");
63
+ }, [format, showSeconds]);
64
+ useEffect(() => {
65
+ const newTime = getInitialTime();
66
+ setInternalTime(newTime);
67
+ setInputText(formatTimeDisplay(newTime));
68
+ }, [getInitialTime, formatTimeDisplay]);
69
+ // Close on outside click
70
+ useEffect(() => {
71
+ if (!open)
72
+ return;
73
+ const handlePointerDown = (e) => {
74
+ const target = e.target;
75
+ if (containerRef.current?.contains(target))
76
+ return;
77
+ const popoverEl = document.getElementById(popoverContentId);
78
+ if (popoverEl?.contains(target))
79
+ return;
80
+ setOpen(false);
81
+ setInputText(formatTimeDisplay(internalTime));
82
+ };
83
+ document.addEventListener("pointerdown", handlePointerDown);
84
+ return () => document.removeEventListener("pointerdown", handlePointerDown);
85
+ }, [open, internalTime, formatTimeDisplay]);
86
+ const defaultPlaceholder = showSeconds
87
+ ? format === "12"
88
+ ? "hh:mm:ss AA"
89
+ : "HH:mm:ss"
90
+ : format === "12"
91
+ ? "hh:mm AA"
92
+ : "HH:mm";
93
+ const handlePanelChange = (time) => {
94
+ setInternalTime(time);
95
+ setInputText(formatTimeDisplay(time));
96
+ onChange?.(time);
97
+ };
98
+ const handleInputChange = (e) => {
99
+ const text = e.target.value;
100
+ setInputText(text);
101
+ const parsed = parseTimeString(text, format);
102
+ if (parsed) {
103
+ setInternalTime(parsed);
104
+ onChange?.(parsed);
105
+ }
106
+ };
107
+ const handleInputKeyDown = (e) => {
108
+ if (e.key === "Enter") {
109
+ setInputText(formatTimeDisplay(internalTime));
110
+ setOpen(false);
111
+ }
112
+ else if (e.key === "Escape") {
113
+ setInputText(formatTimeDisplay(internalTime));
114
+ setOpen(false);
115
+ }
116
+ };
117
+ const handleInputFocus = () => {
118
+ if (!open)
119
+ setOpen(true);
120
+ };
121
+ const handleClear = (e) => {
122
+ e.stopPropagation();
123
+ e.preventDefault();
124
+ setInternalTime(null);
125
+ setInputText("");
126
+ onChange?.({ hours: 0, minutes: 0, seconds: 0 });
127
+ };
128
+ const hasField = !!(label || error || helpText);
129
+ const sizeConfig = SIZE_CONFIG[size];
130
+ const ariaDescribedBy = [error ? errorId : null, helpText ? helpTextId : null]
131
+ .filter(Boolean)
132
+ .join(" ") || undefined;
133
+ const triggerContent = (jsxs(Popover, { open: open, children: [jsx(PopoverAnchor, { asChild: true, children: jsxs("div", { ref: containerRef, className: cn("relative flex w-full items-center gap-2 rounded-md border border-input bg-background pe-8 ps-3", "focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2", disabled && "cursor-not-allowed opacity-50", !!error && "border-destructive ring-destructive/20 ring-3", sizeConfig.trigger, !hasField && className), children: [timezone ? (jsx("span", { className: "shrink-0 rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground", children: timezone.toUpperCase() })) : (jsx(Clock, { className: cn("shrink-0 text-muted-foreground", sizeConfig.icon) })), jsx("input", { type: "text", disabled: disabled, "aria-label": label || "Pick a time", "aria-describedby": ariaDescribedBy, "aria-invalid": !!error || undefined, placeholder: placeholder ?? defaultPlaceholder, value: inputText, onChange: handleInputChange, onKeyDown: handleInputKeyDown, onFocus: handleInputFocus, className: cn("min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground", "disabled:cursor-not-allowed", sizeConfig.trigger.split(" ").find(c => c.startsWith("text-"))) }), jsx("button", { type: "button", onPointerDown: e => e.preventDefault(), onClick: handleClear, className: cn("absolute inset-y-0 end-2 flex items-center text-muted-foreground hover:text-foreground focus:outline-none", !(inputText && !disabled) && "invisible"), "aria-label": "Clear time", tabIndex: -1, children: jsx(X, { className: sizeConfig.icon }) })] }) }), open && (jsx(PopoverContent, { id: popoverContentId, className: "w-auto p-0", align: "start", onOpenAutoFocus: e => e.preventDefault(), onCloseAutoFocus: e => e.preventDefault(), onPointerDownOutside: e => e.preventDefault(), onInteractOutside: e => e.preventDefault(), children: jsx(TimePickerPanel, { value: internalTime ?? undefined, onChange: handlePanelChange, format: format, showSeconds: showSeconds, minuteStep: minuteStep, secondStep: secondStep, disabled: disabled }) }))] }));
134
+ if (!hasField) {
135
+ return (jsx("div", { ref: ref, className: className, children: triggerContent }));
136
+ }
137
+ return (jsxs(Field, { ref: ref, "data-disabled": disabled || undefined, "data-invalid": !!error || undefined, className: className, children: [label && (jsxs(FieldLabel, { ...labelProps, children: [label, required && (jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" }))] })), jsxs(FieldContent, { children: [triggerContent, !!error && jsx(FieldError, { id: errorId, children: error }), helpText && (jsx(FieldDescription, { id: helpTextId, children: helpText }))] })] }));
138
+ });
139
+ TimePicker.displayName = "TimePicker";
140
+
141
+ export { TimePicker as T };
142
+ //# sourceMappingURL=TimePicker-C4x62jI1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimePicker-C4x62jI1.js","sources":["../node_modules/lucide-react/dist/esm/icons/clock.js","../src/components/TimePicker/TimePicker.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: \"M12 6v6l4 2\", key: \"mmk7yg\" }]\n];\nconst Clock = createLucideIcon(\"clock\", __iconNode);\n\nexport { __iconNode, Clock as default };\n//# sourceMappingURL=clock.js.map\n","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\n\nimport { Clock, X } from \"lucide-react\";\nimport { Popover, PopoverAnchor, PopoverContent } from \"src/primitives/Popover\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { TimePickerPanel } from \"./TimePickerPanel\";\nimport type { TimePickerProps, TimeValue } from \"./types\";\nimport { dateToTimeValue, padNumber, parseTimeString, to12Hour } from \"./utils\";\n\nconst SIZE_CONFIG = {\n small: { trigger: \"h-7 text-xs\", icon: \"size-3.5\" },\n medium: { trigger: \"h-8 text-sm\", icon: \"size-4\" },\n large: { trigger: \"h-10 text-sm\", icon: \"size-4\" },\n} as const;\n\nconst TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(\n (\n {\n value,\n onChange,\n format = \"24\",\n showSeconds = false,\n minuteStep = 1,\n secondStep = 1,\n disabled = false,\n placeholder,\n label,\n error,\n helpText,\n size = \"medium\",\n required = false,\n timezone,\n labelProps,\n className,\n },\n ref\n ) => {\n const generatedId = useId();\n const errorId = `error_${generatedId}`;\n const helpTextId = `helpText_${generatedId}`;\n const containerRef = useRef<HTMLDivElement>(null);\n const popoverContentId = useRef(\n `timepicker-popover-${generatedId}`\n ).current;\n\n const [open, setOpen] = useState(false);\n\n const getInitialTime = useCallback((): TimeValue | null => {\n if (!value) return null;\n if (value instanceof Date) return dateToTimeValue(value);\n\n return {\n hours: value.hours,\n minutes: value.minutes,\n seconds: value.seconds ?? 0,\n };\n }, [value]);\n\n const [internalTime, setInternalTime] = useState<TimeValue | null>(\n getInitialTime\n );\n const [inputText, setInputText] = useState(\"\");\n\n const formatTimeDisplay = useCallback(\n (time: TimeValue | null): string => {\n if (!time) return \"\";\n\n if (format === \"12\") {\n const { hour12, period } = to12Hour(time.hours);\n const parts = [padNumber(hour12), padNumber(time.minutes)];\n if (showSeconds) parts.push(padNumber(time.seconds ?? 0));\n\n return `${parts.join(\":\")} ${period}`;\n }\n\n const parts = [padNumber(time.hours), padNumber(time.minutes)];\n if (showSeconds) parts.push(padNumber(time.seconds ?? 0));\n\n return parts.join(\":\");\n },\n [format, showSeconds]\n );\n\n useEffect(() => {\n const newTime = getInitialTime();\n setInternalTime(newTime);\n setInputText(formatTimeDisplay(newTime));\n }, [getInitialTime, formatTimeDisplay]);\n\n // Close on outside click\n useEffect(() => {\n if (!open) return;\n\n const handlePointerDown = (e: PointerEvent) => {\n const target = e.target as HTMLElement;\n if (containerRef.current?.contains(target)) return;\n\n const popoverEl = document.getElementById(popoverContentId);\n if (popoverEl?.contains(target)) return;\n\n setOpen(false);\n setInputText(formatTimeDisplay(internalTime));\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n\n return () =>\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n }, [open, internalTime, formatTimeDisplay]);\n\n const defaultPlaceholder = showSeconds\n ? format === \"12\"\n ? \"hh:mm:ss AA\"\n : \"HH:mm:ss\"\n : format === \"12\"\n ? \"hh:mm AA\"\n : \"HH:mm\";\n\n const handlePanelChange = (time: TimeValue) => {\n setInternalTime(time);\n setInputText(formatTimeDisplay(time));\n onChange?.(time);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const text = e.target.value;\n setInputText(text);\n\n const parsed = parseTimeString(text, format);\n if (parsed) {\n setInternalTime(parsed);\n onChange?.(parsed);\n }\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n setInputText(formatTimeDisplay(internalTime));\n setOpen(false);\n } else if (e.key === \"Escape\") {\n setInputText(formatTimeDisplay(internalTime));\n setOpen(false);\n }\n };\n\n const handleInputFocus = () => {\n if (!open) setOpen(true);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n setInternalTime(null);\n setInputText(\"\");\n onChange?.({ hours: 0, minutes: 0, seconds: 0 });\n };\n\n const hasField = !!(label || error || helpText);\n const sizeConfig = SIZE_CONFIG[size];\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const triggerContent = (\n <Popover open={open}>\n <PopoverAnchor asChild>\n <div\n ref={containerRef}\n className={cn(\n \"relative flex w-full items-center gap-2 rounded-md border border-input bg-background pe-8 ps-3\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"cursor-not-allowed opacity-50\",\n !!error && \"border-destructive ring-destructive/20 ring-3\",\n sizeConfig.trigger,\n !hasField && className\n )}\n >\n {timezone ? (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground\">\n {timezone.toUpperCase()}\n </span>\n ) : (\n <Clock\n className={cn(\n \"shrink-0 text-muted-foreground\",\n sizeConfig.icon\n )}\n />\n )}\n <input\n type=\"text\"\n disabled={disabled}\n aria-label={label || \"Pick a time\"}\n aria-describedby={ariaDescribedBy}\n aria-invalid={!!error || undefined}\n placeholder={placeholder ?? defaultPlaceholder}\n value={inputText}\n onChange={handleInputChange}\n onKeyDown={handleInputKeyDown}\n onFocus={handleInputFocus}\n className={cn(\n \"min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground\",\n \"disabled:cursor-not-allowed\",\n sizeConfig.trigger.split(\" \").find(c => c.startsWith(\"text-\"))\n )}\n />\n <button\n type=\"button\"\n onPointerDown={e => e.preventDefault()}\n onClick={handleClear}\n className={cn(\n \"absolute inset-y-0 end-2 flex items-center text-muted-foreground hover:text-foreground focus:outline-none\",\n !(inputText && !disabled) && \"invisible\"\n )}\n aria-label=\"Clear time\"\n tabIndex={-1}\n >\n <X className={sizeConfig.icon} />\n </button>\n </div>\n </PopoverAnchor>\n {open && (\n <PopoverContent\n id={popoverContentId}\n className=\"w-auto p-0\"\n align=\"start\"\n onOpenAutoFocus={e => e.preventDefault()}\n onCloseAutoFocus={e => e.preventDefault()}\n onPointerDownOutside={e => e.preventDefault()}\n onInteractOutside={e => e.preventDefault()}\n >\n <TimePickerPanel\n value={internalTime ?? undefined}\n onChange={handlePanelChange}\n format={format}\n showSeconds={showSeconds}\n minuteStep={minuteStep}\n secondStep={secondStep}\n disabled={disabled}\n />\n </PopoverContent>\n )}\n </Popover>\n );\n\n if (!hasField) {\n return (\n <div ref={ref} className={className}>\n {triggerContent}\n </div>\n );\n }\n\n return (\n <Field\n ref={ref}\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {label && (\n <FieldLabel\n {...(labelProps as React.ComponentProps<typeof FieldLabel>)}\n >\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n <FieldContent>\n {triggerContent}\n {!!error && <FieldError id={errorId}>{error}</FieldError>}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nTimePicker.displayName = \"TimePicker\";\n\nexport { TimePicker };\n"],"names":["_jsxs","_jsx"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,126 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { useRef, useEffect, forwardRef, useCallback, useState } from 'react';
3
+ import { c as cn } from './utils-DdHUxIdC.js';
4
+ import { Button } from './primitives/Button.js';
5
+ import { ScrollArea } from './primitives/ScrollArea.js';
6
+
7
+ const COLUMN_HEIGHT = 224;
8
+ const ITEM_HEIGHT = 32;
9
+ const PERIODS = ["AM", "PM"];
10
+
11
+ const generateRange = (start, end, step = 1) => {
12
+ const result = [];
13
+ for (let i = start; i <= end; i += step) {
14
+ result.push(i);
15
+ }
16
+ return result;
17
+ };
18
+ const to12Hour = (hour24) => {
19
+ const period = hour24 >= 12 ? "PM" : "AM";
20
+ const hour12 = hour24 % 12 || 12;
21
+ return { hour12, period };
22
+ };
23
+ const to24Hour = (hour12, period) => {
24
+ if (period === "AM") {
25
+ return hour12 === 12 ? 0 : hour12;
26
+ }
27
+ return hour12 === 12 ? 12 : hour12 + 12;
28
+ };
29
+ const dateToTimeValue = (date) => ({
30
+ hours: date.getHours(),
31
+ minutes: date.getMinutes(),
32
+ seconds: date.getSeconds(),
33
+ });
34
+ const padNumber = (num, length = 2) => String(num).padStart(length, "0");
35
+ const parseTimeString = (input, format) => {
36
+ const trimmed = input.trim();
37
+ if (!trimmed)
38
+ return null;
39
+ if (format === "12") {
40
+ // Accept: "2:30 PM", "02:30 PM", "2:3 PM", "2:30:15 PM"
41
+ const match = trimmed.match(/^(\d{1,2}):(\d{1,2})(?::(\d{1,2}))?\s*(AM|PM)$/i);
42
+ if (!match)
43
+ return null;
44
+ const hour12 = parseInt(match[1], 10);
45
+ const minutes = parseInt(match[2], 10);
46
+ const seconds = match[3] ? parseInt(match[3], 10) : 0;
47
+ const period = match[4].toUpperCase();
48
+ if (hour12 < 1 || hour12 > 12 || minutes > 59 || seconds > 59)
49
+ return null;
50
+ return { hours: to24Hour(hour12, period), minutes, seconds };
51
+ }
52
+ // Accept: "14:3", "14:30", "2:5", "14:30:05"
53
+ const match = trimmed.match(/^(\d{1,2}):(\d{1,2})(?::(\d{1,2}))?$/);
54
+ if (!match)
55
+ return null;
56
+ const hours = parseInt(match[1], 10);
57
+ const minutes = parseInt(match[2], 10);
58
+ const seconds = match[3] ? parseInt(match[3], 10) : 0;
59
+ if (hours > 23 || minutes > 59 || seconds > 59)
60
+ return null;
61
+ return { hours, minutes, seconds };
62
+ };
63
+
64
+ const TimeColumn = ({ items, selected, onSelect, disabled = false, className, padStart = 2, }) => {
65
+ const selectedRef = useRef(null);
66
+ useEffect(() => {
67
+ if (selectedRef.current) {
68
+ selectedRef.current.scrollIntoView({
69
+ block: "center",
70
+ behavior: "smooth",
71
+ });
72
+ }
73
+ }, [selected]);
74
+ return (jsx(ScrollArea, { className: cn("w-16", className), style: { height: COLUMN_HEIGHT }, children: jsx("div", { className: "flex flex-col items-center py-2", role: "listbox", "aria-label": "Time selection", children: items.map(item => {
75
+ const isSelected = item === selected;
76
+ const displayValue = typeof item === "number" ? padNumber(item, padStart) : item;
77
+ return (jsx(Button, { ref: isSelected ? selectedRef : undefined, variant: isSelected ? "default" : "ghost", size: "sm", role: "option", "aria-selected": isSelected, disabled: disabled, className: cn("w-12 justify-center font-mono text-sm", !isSelected && "text-muted-foreground"), style: { height: ITEM_HEIGHT }, onClick: () => onSelect(item), children: displayValue }, item));
78
+ }) }) }));
79
+ };
80
+ TimeColumn.displayName = "TimeColumn";
81
+
82
+ const TimePickerPanel = forwardRef(({ value, onChange, format = "24", showSeconds = false, minuteStep = 1, secondStep = 1, disabled = false, className, }, ref) => {
83
+ const getInitialTime = useCallback(() => ({
84
+ hours: value?.hours ?? 0,
85
+ minutes: value?.minutes ?? 0,
86
+ seconds: value?.seconds ?? 0,
87
+ }), [value]);
88
+ const [internalTime, setInternalTime] = useState(getInitialTime);
89
+ useEffect(() => {
90
+ setInternalTime(getInitialTime());
91
+ }, [getInitialTime]);
92
+ const hours = format === "12" ? generateRange(1, 12) : generateRange(0, 23);
93
+ const minutes = generateRange(0, 59, minuteStep);
94
+ const seconds = generateRange(0, 59, secondStep);
95
+ const { hour12, period } = format === "12"
96
+ ? to12Hour(internalTime.hours)
97
+ : { hour12: internalTime.hours, period: "AM" };
98
+ const handleHourSelect = (hourValue) => {
99
+ const hour = Number(hourValue);
100
+ const newHours = format === "12" ? to24Hour(hour, period) : hour;
101
+ const newTime = { ...internalTime, hours: newHours };
102
+ setInternalTime(newTime);
103
+ onChange?.(newTime);
104
+ };
105
+ const handleMinuteSelect = (minuteValue) => {
106
+ const newTime = { ...internalTime, minutes: Number(minuteValue) };
107
+ setInternalTime(newTime);
108
+ onChange?.(newTime);
109
+ };
110
+ const handleSecondSelect = (secondValue) => {
111
+ const newTime = { ...internalTime, seconds: Number(secondValue) };
112
+ setInternalTime(newTime);
113
+ onChange?.(newTime);
114
+ };
115
+ const handlePeriodSelect = (newPeriod) => {
116
+ const newHours = to24Hour(hour12, newPeriod);
117
+ const newTime = { ...internalTime, hours: newHours };
118
+ setInternalTime(newTime);
119
+ onChange?.(newTime);
120
+ };
121
+ return (jsxs("div", { ref: ref, className: cn("flex", className), role: "group", "aria-label": "Time picker", children: [jsx(TimeColumn, { items: hours, selected: format === "12" ? hour12 : internalTime.hours, onSelect: handleHourSelect, disabled: disabled }), jsx("div", { className: "border-inline-end border-border" }), jsx(TimeColumn, { items: minutes, selected: internalTime.minutes, onSelect: handleMinuteSelect, disabled: disabled }), showSeconds && (jsxs(Fragment, { children: [jsx("div", { className: "border-inline-end border-border" }), jsx(TimeColumn, { items: seconds, selected: internalTime.seconds ?? 0, onSelect: handleSecondSelect, disabled: disabled })] })), format === "12" && (jsxs(Fragment, { children: [jsx("div", { className: "border-inline-end border-border" }), jsx(TimeColumn, { items: [...PERIODS], selected: period, onSelect: handlePeriodSelect, disabled: disabled, padStart: 0 })] }))] }));
122
+ });
123
+ TimePickerPanel.displayName = "TimePickerPanel";
124
+
125
+ export { TimePickerPanel as T, parseTimeString as a, dateToTimeValue as d, padNumber as p, to12Hour as t };
126
+ //# sourceMappingURL=TimePickerPanel-CiF0RExY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimePickerPanel-CiF0RExY.js","sources":["../src/components/TimePicker/constants.ts","../src/components/TimePicker/utils.ts","../src/components/TimePicker/TimeColumn.tsx","../src/components/TimePicker/TimePickerPanel.tsx"],"sourcesContent":["export const COLUMN_HEIGHT = 224;\nexport const ITEM_HEIGHT = 32;\nexport const PERIODS = [\"AM\", \"PM\"] as const;\n","import type { TimeValue } from \"./types\";\n\nexport const generateRange = (\n start: number,\n end: number,\n step = 1\n): number[] => {\n const result: number[] = [];\n for (let i = start; i <= end; i += step) {\n result.push(i);\n }\n\n return result;\n};\n\nexport const to12Hour = (\n hour24: number\n): { hour12: number; period: \"AM\" | \"PM\" } => {\n const period = hour24 >= 12 ? \"PM\" : \"AM\";\n const hour12 = hour24 % 12 || 12;\n\n return { hour12, period };\n};\n\nexport const to24Hour = (hour12: number, period: \"AM\" | \"PM\"): number => {\n if (period === \"AM\") {\n return hour12 === 12 ? 0 : hour12;\n }\n\n return hour12 === 12 ? 12 : hour12 + 12;\n};\n\nexport const dateToTimeValue = (date: Date): TimeValue => ({\n hours: date.getHours(),\n minutes: date.getMinutes(),\n seconds: date.getSeconds(),\n});\n\nexport const timeValueToDate = (date: Date, time: TimeValue): Date => {\n const result = new Date(date);\n result.setHours(time.hours, time.minutes, time.seconds ?? 0, 0);\n\n return result;\n};\n\nexport const padNumber = (num: number, length = 2): string =>\n String(num).padStart(length, \"0\");\n\nexport const parseTimeString = (\n input: string,\n format: \"12\" | \"24\"\n): TimeValue | null => {\n const trimmed = input.trim();\n if (!trimmed) return null;\n\n if (format === \"12\") {\n // Accept: \"2:30 PM\", \"02:30 PM\", \"2:3 PM\", \"2:30:15 PM\"\n const match = trimmed.match(\n /^(\\d{1,2}):(\\d{1,2})(?::(\\d{1,2}))?\\s*(AM|PM)$/i\n );\n if (!match) return null;\n\n const hour12 = parseInt(match[1], 10);\n const minutes = parseInt(match[2], 10);\n const seconds = match[3] ? parseInt(match[3], 10) : 0;\n const period = match[4].toUpperCase() as \"AM\" | \"PM\";\n\n if (hour12 < 1 || hour12 > 12 || minutes > 59 || seconds > 59) return null;\n\n return { hours: to24Hour(hour12, period), minutes, seconds };\n }\n\n // Accept: \"14:3\", \"14:30\", \"2:5\", \"14:30:05\"\n const match = trimmed.match(/^(\\d{1,2}):(\\d{1,2})(?::(\\d{1,2}))?$/);\n if (!match) return null;\n\n const hours = parseInt(match[1], 10);\n const minutes = parseInt(match[2], 10);\n const seconds = match[3] ? parseInt(match[3], 10) : 0;\n\n if (hours > 23 || minutes > 59 || seconds > 59) return null;\n\n return { hours, minutes, seconds };\n};\n","import React, { useEffect, useRef } from \"react\";\n\nimport { Button } from \"src/primitives/Button\";\nimport { ScrollArea } from \"src/primitives/ScrollArea\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { COLUMN_HEIGHT, ITEM_HEIGHT } from \"./constants\";\nimport { padNumber } from \"./utils\";\n\ninterface TimeColumnProps {\n items: (number | string)[];\n selected: number | string;\n onSelect: (value: number | string) => void;\n disabled?: boolean;\n className?: string;\n padStart?: number;\n}\n\nconst TimeColumn: React.FC<TimeColumnProps> = ({\n items,\n selected,\n onSelect,\n disabled = false,\n className,\n padStart = 2,\n}) => {\n const selectedRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (selectedRef.current) {\n selectedRef.current.scrollIntoView({\n block: \"center\",\n behavior: \"smooth\",\n });\n }\n }, [selected]);\n\n return (\n <ScrollArea\n className={cn(\"w-16\", className)}\n style={{ height: COLUMN_HEIGHT }}\n >\n <div\n className=\"flex flex-col items-center py-2\"\n role=\"listbox\"\n aria-label=\"Time selection\"\n >\n {items.map(item => {\n const isSelected = item === selected;\n const displayValue =\n typeof item === \"number\" ? padNumber(item, padStart) : item;\n\n return (\n <Button\n key={item}\n ref={isSelected ? selectedRef : undefined}\n variant={isSelected ? \"default\" : \"ghost\"}\n size=\"sm\"\n role=\"option\"\n aria-selected={isSelected}\n disabled={disabled}\n className={cn(\n \"w-12 justify-center font-mono text-sm\",\n !isSelected && \"text-muted-foreground\"\n )}\n style={{ height: ITEM_HEIGHT }}\n onClick={() => onSelect(item)}\n >\n {displayValue}\n </Button>\n );\n })}\n </div>\n </ScrollArea>\n );\n};\n\nTimeColumn.displayName = \"TimeColumn\";\n\nexport { TimeColumn };\n","import React, { forwardRef, useCallback, useEffect, useState } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { PERIODS } from \"./constants\";\nimport { TimeColumn } from \"./TimeColumn\";\nimport type { TimePickerPanelProps, TimeValue } from \"./types\";\nimport { generateRange, to12Hour, to24Hour } from \"./utils\";\n\nconst TimePickerPanel = forwardRef<HTMLDivElement, TimePickerPanelProps>(\n (\n {\n value,\n onChange,\n format = \"24\",\n showSeconds = false,\n minuteStep = 1,\n secondStep = 1,\n disabled = false,\n className,\n },\n ref\n ) => {\n const getInitialTime = useCallback(\n (): TimeValue => ({\n hours: value?.hours ?? 0,\n minutes: value?.minutes ?? 0,\n seconds: value?.seconds ?? 0,\n }),\n [value]\n );\n\n const [internalTime, setInternalTime] = useState<TimeValue>(getInitialTime);\n\n useEffect(() => {\n setInternalTime(getInitialTime());\n }, [getInitialTime]);\n\n const hours = format === \"12\" ? generateRange(1, 12) : generateRange(0, 23);\n const minutes = generateRange(0, 59, minuteStep);\n const seconds = generateRange(0, 59, secondStep);\n\n const { hour12, period } =\n format === \"12\"\n ? to12Hour(internalTime.hours)\n : { hour12: internalTime.hours, period: \"AM\" as const };\n\n const handleHourSelect = (hourValue: number | string) => {\n const hour = Number(hourValue);\n const newHours = format === \"12\" ? to24Hour(hour, period) : hour;\n const newTime = { ...internalTime, hours: newHours };\n setInternalTime(newTime);\n onChange?.(newTime);\n };\n\n const handleMinuteSelect = (minuteValue: number | string) => {\n const newTime = { ...internalTime, minutes: Number(minuteValue) };\n setInternalTime(newTime);\n onChange?.(newTime);\n };\n\n const handleSecondSelect = (secondValue: number | string) => {\n const newTime = { ...internalTime, seconds: Number(secondValue) };\n setInternalTime(newTime);\n onChange?.(newTime);\n };\n\n const handlePeriodSelect = (newPeriod: number | string) => {\n const newHours = to24Hour(hour12, newPeriod as \"AM\" | \"PM\");\n const newTime = { ...internalTime, hours: newHours };\n setInternalTime(newTime);\n onChange?.(newTime);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"flex\", className)}\n role=\"group\"\n aria-label=\"Time picker\"\n >\n <TimeColumn\n items={hours}\n selected={format === \"12\" ? hour12 : internalTime.hours}\n onSelect={handleHourSelect}\n disabled={disabled}\n />\n <div className=\"border-inline-end border-border\" />\n <TimeColumn\n items={minutes}\n selected={internalTime.minutes}\n onSelect={handleMinuteSelect}\n disabled={disabled}\n />\n {showSeconds && (\n <>\n <div className=\"border-inline-end border-border\" />\n <TimeColumn\n items={seconds}\n selected={internalTime.seconds ?? 0}\n onSelect={handleSecondSelect}\n disabled={disabled}\n />\n </>\n )}\n {format === \"12\" && (\n <>\n <div className=\"border-inline-end border-border\" />\n <TimeColumn\n items={[...PERIODS]}\n selected={period}\n onSelect={handlePeriodSelect}\n disabled={disabled}\n padStart={0}\n />\n </>\n )}\n </div>\n );\n }\n);\n\nTimePickerPanel.displayName = \"TimePickerPanel\";\n\nexport { TimePickerPanel };\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import { t as toast } from './index-D_roZz8G.js';
2
+
3
+ const activeToasts = new Set();
4
+ function toastKey(type, message, buttonLabel) {
5
+ return `${type}::${message}::${buttonLabel ?? ""}`;
6
+ }
7
+ function getContentDir() {
8
+ if (typeof document === "undefined")
9
+ return "ltr";
10
+ return (document.documentElement.getAttribute("dir") ??
11
+ document.body.getAttribute("dir") ??
12
+ "ltr");
13
+ }
14
+ function resolveMessage(message) {
15
+ if (typeof message === "string")
16
+ return message;
17
+ if (message && typeof message === "object") {
18
+ if (message.customMessage)
19
+ return message.customMessage;
20
+ if (message.notice)
21
+ return message.notice;
22
+ if (message.noticeCode)
23
+ return message.noticeCode;
24
+ }
25
+ return String(message);
26
+ }
27
+ function resolveErrorMessage(errorObject) {
28
+ if (typeof errorObject === "string")
29
+ return errorObject;
30
+ if (errorObject && typeof errorObject === "object") {
31
+ // Axios-style error
32
+ const axiosLike = errorObject;
33
+ if (axiosLike.response?.data) {
34
+ const data = axiosLike.response.data;
35
+ if (data.customMessage)
36
+ return String(data.customMessage);
37
+ if (data.error)
38
+ return String(data.error);
39
+ if (Array.isArray(data.errors))
40
+ return data.errors.join("\n");
41
+ if (data.noticeCode)
42
+ return String(data.noticeCode);
43
+ }
44
+ if (axiosLike.isAxiosError && axiosLike.message)
45
+ return axiosLike.message;
46
+ // Native Error
47
+ if (errorObject instanceof Error)
48
+ return errorObject.message;
49
+ // ToastrMessage object
50
+ return resolveMessage(errorObject);
51
+ }
52
+ return "Something went wrong.";
53
+ }
54
+ function showToast(type, message, config) {
55
+ const { buttonLabel, onClick, showIcon, ...restConfig } = config ?? {};
56
+ const key = toastKey(type, message, buttonLabel);
57
+ if (activeToasts.has(key))
58
+ return undefined;
59
+ activeToasts.add(key);
60
+ const options = {
61
+ onDismiss: () => activeToasts.delete(key),
62
+ onAutoClose: () => activeToasts.delete(key),
63
+ position: getContentDir() === "rtl" ? "bottom-right" : "bottom-left",
64
+ ...restConfig,
65
+ };
66
+ if (buttonLabel) {
67
+ options.action = {
68
+ label: buttonLabel,
69
+ onClick: onClick ?? (() => { }),
70
+ };
71
+ }
72
+ // When showIcon is explicitly false, hide the type icon
73
+ if (showIcon === false) {
74
+ options.icon = null;
75
+ }
76
+ return toast[type](message, options);
77
+ }
78
+ function parseConfig(args) {
79
+ if (args.length === 0)
80
+ return {};
81
+ const first = args[0];
82
+ if (typeof first === "object" && first !== null && !Array.isArray(first)) {
83
+ return first;
84
+ }
85
+ // Legacy positional args: buttonLabel, onClick, customConfig, showIcon
86
+ const [buttonLabel, onClick, customConfig, showIcon] = args;
87
+ return {
88
+ ...(buttonLabel ? { buttonLabel } : {}),
89
+ ...(onClick ? { onClick } : {}),
90
+ ...(showIcon !== undefined ? { showIcon } : {}),
91
+ ...(customConfig ?? {}),
92
+ };
93
+ }
94
+
95
+ const Toastr = {
96
+ success(message, ...args) {
97
+ return showToast("success", resolveMessage(message), parseConfig(args));
98
+ },
99
+ info(message, ...args) {
100
+ return showToast("info", resolveMessage(message), parseConfig(args));
101
+ },
102
+ show(message, ...args) {
103
+ return showToast("info", resolveMessage(message), parseConfig(args));
104
+ },
105
+ warning(message, ...args) {
106
+ return showToast("warning", resolveMessage(message), parseConfig(args));
107
+ },
108
+ error(errorObject, ...args) {
109
+ const msg = resolveErrorMessage(errorObject);
110
+ return showToast("error", msg, parseConfig(args));
111
+ },
112
+ };
113
+
114
+ export { Toastr as T };
115
+ //# sourceMappingURL=Toastr-DYqpSaMd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toastr-DYqpSaMd.js","sources":["../src/components/Toastr/utils.ts","../src/components/Toastr/Toastr.tsx"],"sourcesContent":["import { toast } from \"sonner\";\n\nimport type { ToastrConfig, ToastrErrorInput, ToastrMessage } from \"./Toastr\";\n\ntype SonnerType = \"success\" | \"info\" | \"warning\" | \"error\";\n\nconst activeToasts = new Set<string>();\n\nfunction toastKey(type: string, message: string, buttonLabel?: string): string {\n return `${type}::${message}::${buttonLabel ?? \"\"}`;\n}\n\nfunction getContentDir(): \"ltr\" | \"rtl\" {\n if (typeof document === \"undefined\") return \"ltr\";\n return (\n (document.documentElement.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n (document.body.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n \"ltr\"\n );\n}\n\nfunction resolveMessage(message: ToastrMessage): string {\n if (typeof message === \"string\") return message;\n if (message && typeof message === \"object\") {\n if (message.customMessage) return message.customMessage;\n if (message.notice) return message.notice;\n if (message.noticeCode) return message.noticeCode;\n }\n return String(message);\n}\n\nfunction resolveErrorMessage(errorObject: ToastrErrorInput): string {\n if (typeof errorObject === \"string\") return errorObject;\n\n if (errorObject && typeof errorObject === \"object\") {\n // Axios-style error\n const axiosLike = errorObject as {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n };\n\n if (axiosLike.response?.data) {\n const data = axiosLike.response.data;\n if (data.customMessage) return String(data.customMessage);\n if (data.error) return String(data.error);\n if (Array.isArray(data.errors)) return data.errors.join(\"\\n\");\n if (data.noticeCode) return String(data.noticeCode);\n }\n\n if (axiosLike.isAxiosError && axiosLike.message) return axiosLike.message;\n\n // Native Error\n if (errorObject instanceof Error) return errorObject.message;\n\n // ToastrMessage object\n return resolveMessage(errorObject as ToastrMessage);\n }\n\n return \"Something went wrong.\";\n}\n\nfunction showToast(\n type: SonnerType,\n message: string,\n config?: ToastrConfig\n): string | number | undefined {\n const { buttonLabel, onClick, showIcon, ...restConfig } = config ?? {};\n\n const key = toastKey(type, message, buttonLabel);\n\n if (activeToasts.has(key)) return undefined;\n activeToasts.add(key);\n\n const options: Record<string, unknown> = {\n onDismiss: () => activeToasts.delete(key),\n onAutoClose: () => activeToasts.delete(key),\n position: getContentDir() === \"rtl\" ? \"bottom-right\" : \"bottom-left\",\n ...restConfig,\n };\n\n if (buttonLabel) {\n options.action = {\n label: buttonLabel,\n onClick: onClick ?? (() => {}),\n };\n }\n\n // When showIcon is explicitly false, hide the type icon\n if (showIcon === false) {\n options.icon = null;\n }\n\n return toast[type](message, options);\n}\n\nfunction parseConfig(args: unknown[]): ToastrConfig {\n if (args.length === 0) return {};\n\n const first = args[0];\n if (typeof first === \"object\" && first !== null && !Array.isArray(first)) {\n return first as ToastrConfig;\n }\n\n // Legacy positional args: buttonLabel, onClick, customConfig, showIcon\n const [buttonLabel, onClick, customConfig, showIcon] = args as [\n string?,\n (() => void)?,\n Record<string, unknown>?,\n boolean?,\n ];\n\n return {\n ...(buttonLabel ? { buttonLabel } : {}),\n ...(onClick ? { onClick } : {}),\n ...(showIcon !== undefined ? { showIcon } : {}),\n ...(customConfig ?? {}),\n };\n}\n\nexport {\n activeToasts,\n getContentDir,\n parseConfig,\n resolveErrorMessage,\n resolveMessage,\n showToast,\n toastKey,\n};\n","import {\n parseConfig,\n resolveErrorMessage,\n resolveMessage,\n showToast,\n} from \"./utils\";\n\nexport interface ToastrConfig {\n /** Label for an action button inside the toast. */\n buttonLabel?: string;\n /** Callback when the action button is clicked. */\n onClick?: () => void;\n /** Whether to show the type icon in the toast. */\n showIcon?: boolean;\n /** Additional sonner toast options (duration, position, dismissible, etc.). */\n [key: string]: unknown;\n}\n\nexport type ToastrMessage =\n | string\n | { noticeCode?: string; customMessage?: string; notice?: string };\n\nexport type ToastrErrorInput =\n | string\n | Error\n | {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n }\n | ToastrMessage;\n\nconst Toastr = {\n success(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"success\", resolveMessage(message), parseConfig(args));\n },\n\n info(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n show(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n warning(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"warning\", resolveMessage(message), parseConfig(args));\n },\n\n error(errorObject: ToastrErrorInput, ...args: unknown[]) {\n const msg = resolveErrorMessage(errorObject);\n return showToast(\"error\", msg, parseConfig(args));\n },\n};\n\nexport { Toastr };\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
+ import React__default, { forwardRef, useState, useRef, useCallback, useEffect } from 'react';
3
+ import { TooltipProvider, Tooltip as Tooltip$1, TooltipTrigger, TooltipContent } from './primitives/Tooltip.js';
4
+
5
+ const SIDE_MAP = {
6
+ top: "top",
7
+ bottom: "bottom",
8
+ left: "left",
9
+ right: "right",
10
+ "top-start": "top",
11
+ "top-end": "top",
12
+ "bottom-start": "bottom",
13
+ "bottom-end": "bottom",
14
+ "left-start": "left",
15
+ "left-end": "left",
16
+ "right-start": "right",
17
+ "right-end": "right",
18
+ auto: "top",
19
+ };
20
+ const ALIGN_MAP = {
21
+ top: "center",
22
+ bottom: "center",
23
+ left: "center",
24
+ right: "center",
25
+ "top-start": "start",
26
+ "top-end": "end",
27
+ "bottom-start": "start",
28
+ "bottom-end": "end",
29
+ "left-start": "start",
30
+ "left-end": "end",
31
+ "right-start": "start",
32
+ "right-end": "end",
33
+ auto: "center",
34
+ };
35
+
36
+ const Tooltip = forwardRef(({ content, children, disabled = false, position = "auto", interactive = false, hideAfter = -1, hideOnTargetExit = false, className, delayDuration = 0, defaultOpen,
37
+ // Radix TooltipContent props forwarded
38
+ ...contentProps }, ref) => {
39
+ const [open, setOpen] = useState(false);
40
+ const triggerRef = useRef(null);
41
+ // Merge external ref with internal trigger ref
42
+ const setTriggerRef = useCallback((node) => {
43
+ triggerRef.current = node;
44
+ if (typeof ref === "function")
45
+ ref(node);
46
+ else if (ref)
47
+ ref.current =
48
+ node;
49
+ }, [ref]);
50
+ // Auto-hide after hideAfter ms
51
+ useEffect(() => {
52
+ if (!open || hideAfter <= 0)
53
+ return;
54
+ const timer = setTimeout(() => setOpen(false), hideAfter);
55
+ return () => clearTimeout(timer);
56
+ }, [open, hideAfter]);
57
+ // Hide tooltip when trigger exits viewport
58
+ useEffect(() => {
59
+ if (!hideOnTargetExit || !open || !triggerRef.current)
60
+ return;
61
+ const observer = new IntersectionObserver(([entry]) => {
62
+ if (!entry.isIntersecting)
63
+ setOpen(false);
64
+ });
65
+ observer.observe(triggerRef.current);
66
+ return () => observer.disconnect();
67
+ }, [hideOnTargetExit, open]);
68
+ if (disabled || !content) {
69
+ return jsx(Fragment, { children: children });
70
+ }
71
+ const side = SIDE_MAP[position] ?? "top";
72
+ const align = ALIGN_MAP[position] ?? "center";
73
+ // Wrap non-element children in a span so TooltipTrigger can attach
74
+ const trigger = React__default.isValidElement(children) ? (children) : (jsx("span", { children: children }));
75
+ return (jsx(TooltipProvider, { delayDuration: delayDuration, children: jsxs(Tooltip$1, { open: open, onOpenChange: setOpen, defaultOpen: defaultOpen, disableHoverableContent: !interactive, children: [jsx(TooltipTrigger, { ref: setTriggerRef, asChild: true, children: trigger }), jsx(TooltipContent, { side: side, align: align, className: className, onPointerDownOutside: interactive ? e => e.preventDefault() : undefined, ...contentProps, children: content })] }) }));
76
+ });
77
+ Tooltip.displayName = "Tooltip";
78
+
79
+ export { Tooltip as T };
80
+ //# sourceMappingURL=Tooltip-DhwIZnOU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip-DhwIZnOU.js","sources":["../src/components/Tooltip/constants.ts","../src/components/Tooltip/Tooltip.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\nexport const ALIGN_MAP: Record<string, \"start\" | \"center\" | \"end\"> = {\n top: \"center\",\n bottom: \"center\",\n left: \"center\",\n right: \"center\",\n \"top-start\": \"start\",\n \"top-end\": \"end\",\n \"bottom-start\": \"start\",\n \"bottom-end\": \"end\",\n \"left-start\": \"start\",\n \"left-end\": \"end\",\n \"right-start\": \"start\",\n \"right-end\": \"end\",\n auto: \"center\",\n};\n","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\n\nimport {\n Tooltip as PrimitiveTooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\n\ntype TooltipPosition =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-start\"\n | \"top-end\"\n | \"bottom-start\"\n | \"bottom-end\"\n | \"left-start\"\n | \"left-end\"\n | \"right-start\"\n | \"right-end\"\n | \"auto\";\n\n/** Radix Tooltip.Content props we forward via ...otherProps. */\ntype TooltipContentProps = React.ComponentProps<typeof TooltipContent>;\n\nexport interface TooltipProps extends Omit<\n TooltipContentProps,\n \"children\" | \"className\" | \"side\" | \"align\" | \"content\"\n> {\n /** Content rendered inside the tooltip popup. */\n content?: ReactNode;\n /** The trigger element. */\n children?: ReactNode;\n /** Disable the tooltip. */\n disabled?: boolean;\n /** Placement of the tooltip relative to the trigger. */\n position?: TooltipPosition;\n /** Whether the tooltip stays open when hovered over. */\n interactive?: boolean;\n /** Auto-hide after N milliseconds. Use -1 to disable. */\n hideAfter?: number;\n /** Auto-hide the tooltip when the trigger scrolls out of the viewport. */\n hideOnTargetExit?: boolean;\n /** Additional CSS class names for the tooltip content. */\n className?: string;\n /** Delay in ms before the tooltip opens (forwarded to TooltipProvider). */\n delayDuration?: number;\n /** Radix Tooltip `defaultOpen` prop. */\n defaultOpen?: boolean;\n}\n\nimport { SIDE_MAP, ALIGN_MAP } from \"./constants\";\n\nconst Tooltip = forwardRef<HTMLButtonElement, TooltipProps>(\n (\n {\n content,\n children,\n disabled = false,\n position = \"auto\",\n interactive = false,\n hideAfter = -1,\n hideOnTargetExit = false,\n className,\n delayDuration = 0,\n defaultOpen,\n // Radix TooltipContent props forwarded\n ...contentProps\n },\n ref\n ) => {\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLElement | null>(null);\n\n // Merge external ref with internal trigger ref\n const setTriggerRef = useCallback(\n (node: HTMLButtonElement | null) => {\n triggerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref)\n (ref as React.MutableRefObject<HTMLButtonElement | null>).current =\n node;\n },\n [ref]\n );\n\n // Auto-hide after hideAfter ms\n useEffect(() => {\n if (!open || hideAfter <= 0) return;\n const timer = setTimeout(() => setOpen(false), hideAfter);\n return () => clearTimeout(timer);\n }, [open, hideAfter]);\n\n // Hide tooltip when trigger exits viewport\n useEffect(() => {\n if (!hideOnTargetExit || !open || !triggerRef.current) return;\n const observer = new IntersectionObserver(([entry]) => {\n if (!entry.isIntersecting) setOpen(false);\n });\n observer.observe(triggerRef.current);\n return () => observer.disconnect();\n }, [hideOnTargetExit, open]);\n\n if (disabled || !content) {\n return <>{children}</>;\n }\n\n const side = SIDE_MAP[position] ?? \"top\";\n const align = ALIGN_MAP[position] ?? \"center\";\n\n // Wrap non-element children in a span so TooltipTrigger can attach\n const trigger = React.isValidElement(children) ? (\n children\n ) : (\n <span>{children}</span>\n );\n\n return (\n <TooltipProvider delayDuration={delayDuration}>\n <PrimitiveTooltip\n open={open}\n onOpenChange={setOpen}\n defaultOpen={defaultOpen}\n disableHoverableContent={!interactive}\n >\n <TooltipTrigger ref={setTriggerRef} asChild>\n {trigger}\n </TooltipTrigger>\n <TooltipContent\n side={side}\n align={align}\n className={className}\n onPointerDownOutside={\n interactive ? e => e.preventDefault() : undefined\n }\n {...contentProps}\n >\n {content}\n </TooltipContent>\n </PrimitiveTooltip>\n </TooltipProvider>\n );\n }\n);\n\nTooltip.displayName = \"Tooltip\";\n\nexport { Tooltip };\n"],"names":["_jsx","_Fragment","React","_jsxs","PrimitiveTooltip"],"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;AAEM,MAAM,SAAS,GAA+C;AACnE,IAAA,GAAG,EAAE,QAAQ;AACb,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,YAAY,EAAE,OAAO;AACrB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,aAAa,EAAE,OAAO;AACtB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,IAAI,EAAE,QAAQ;CACf;;ACgCD,MAAM,OAAO,GAAG,UAAU,CACxB,CACE,EACE,OAAO,EACP,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,MAAM,EACjB,WAAW,GAAG,KAAK,EACnB,SAAS,GAAG,EAAE,EACd,gBAAgB,GAAG,KAAK,EACxB,SAAS,EACT,aAAa,GAAG,CAAC,EACjB,WAAW;AACX;AACA,GAAG,YAAY,EAChB,EACD,GAAG,KACD;IACF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACvC,IAAA,MAAM,UAAU,GAAG,MAAM,CAAqB,IAAI,CAAC;;AAGnD,IAAA,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,IAA8B,KAAI;AACjC,QAAA,UAAU,CAAC,OAAO,GAAG,IAAI;QACzB,IAAI,OAAO,GAAG,KAAK,UAAU;YAAE,GAAG,CAAC,IAAI,CAAC;AACnC,aAAA,IAAI,GAAG;AACT,YAAA,GAAwD,CAAC,OAAO;AAC/D,gBAAA,IAAI;AACV,IAAA,CAAC,EACD,CAAC,GAAG,CAAC,CACN;;IAGD,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC;YAAE;AAC7B,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;AACzD,QAAA,OAAO,MAAM,YAAY,CAAC,KAAK,CAAC;AAClC,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;;IAGrB,SAAS,CAAC,MAAK;QACb,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO;YAAE;QACvD,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAI;YACpD,IAAI,CAAC,KAAK,CAAC,cAAc;gBAAE,OAAO,CAAC,KAAK,CAAC;AAC3C,QAAA,CAAC,CAAC;AACF,QAAA,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;AACpC,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;AACpC,IAAA,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAE5B,IAAA,IAAI,QAAQ,IAAI,CAAC,OAAO,EAAE;QACxB,OAAOA,GAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAI;IACxB;IAEA,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK;IACxC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ;;IAG7C,MAAM,OAAO,GAAGC,cAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,IAC5C,QAAQ,KAERF,GAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAO,QAAQ,EAAA,CAAQ,CACxB;AAED,IAAA,QACEA,GAAA,CAAC,eAAe,EAAA,EAAC,aAAa,EAAE,aAAa,EAAA,QAAA,EAC3CG,IAAA,CAACC,SAAgB,IACf,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,OAAO,EACrB,WAAW,EAAE,WAAW,EACxB,uBAAuB,EAAE,CAAC,WAAW,EAAA,QAAA,EAAA,CAErCJ,GAAA,CAAC,cAAc,EAAA,EAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAA,IAAA,EAAA,QAAA,EACxC,OAAO,EAAA,CACO,EACjBA,GAAA,CAAC,cAAc,IACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAClB,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,GAAG,SAAS,EAAA,GAE/C,YAAY,EAAA,QAAA,EAEf,OAAO,GACO,CAAA,EAAA,CACA,EAAA,CACH;AAEtB,CAAC;AAGH,OAAO,CAAC,WAAW,GAAG,SAAS;;;;"}