@docyrus/shadcn 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (767) hide show
  1. package/README.md +12 -3
  2. package/dist/base-lyra/accordion.js.map +1 -1
  3. package/dist/base-lyra/alert-dialog.js.map +1 -1
  4. package/dist/base-lyra/alert.js.map +1 -1
  5. package/dist/base-lyra/aspect-ratio.js.map +1 -1
  6. package/dist/base-lyra/avatar.js.map +1 -1
  7. package/dist/base-lyra/badge.js.map +1 -1
  8. package/dist/base-lyra/breadcrumb.js.map +1 -1
  9. package/dist/base-lyra/button-group.js.map +1 -1
  10. package/dist/base-lyra/button.js.map +1 -1
  11. package/dist/base-lyra/calendar.js.map +1 -1
  12. package/dist/base-lyra/card.js.map +1 -1
  13. package/dist/base-lyra/carousel.js.map +1 -1
  14. package/dist/base-lyra/chart.js.map +1 -1
  15. package/dist/base-lyra/checkbox.js.map +1 -1
  16. package/dist/base-lyra/combobox.js.map +1 -1
  17. package/dist/base-lyra/command.js.map +1 -1
  18. package/dist/base-lyra/context-menu.js.map +1 -1
  19. package/dist/base-lyra/dialog.js.map +1 -1
  20. package/dist/base-lyra/drawer.js.map +1 -1
  21. package/dist/base-lyra/dropdown-menu.js.map +1 -1
  22. package/dist/base-lyra/empty.js.map +1 -1
  23. package/dist/base-lyra/field.js.map +1 -1
  24. package/dist/base-lyra/hover-card.js.map +1 -1
  25. package/dist/base-lyra/index.js +8 -6
  26. package/dist/base-lyra/index.js.map +1 -1
  27. package/dist/base-lyra/input-group.js.map +1 -1
  28. package/dist/base-lyra/input-otp.js.map +1 -1
  29. package/dist/base-lyra/input.js.map +1 -1
  30. package/dist/base-lyra/item.js.map +1 -1
  31. package/dist/base-lyra/kbd.js.map +1 -1
  32. package/dist/base-lyra/label.js.map +1 -1
  33. package/dist/base-lyra/menubar.js.map +1 -1
  34. package/dist/base-lyra/native-select.js.map +1 -1
  35. package/dist/base-lyra/navigation-menu.js.map +1 -1
  36. package/dist/base-lyra/pagination.js.map +1 -1
  37. package/dist/base-lyra/popover.js.map +1 -1
  38. package/dist/base-lyra/progress.js.map +1 -1
  39. package/dist/base-lyra/radio-group.js.map +1 -1
  40. package/dist/base-lyra/resizable.js.map +1 -1
  41. package/dist/base-lyra/scroll-area.js.map +1 -1
  42. package/dist/base-lyra/select.js.map +1 -1
  43. package/dist/base-lyra/separator.js.map +1 -1
  44. package/dist/base-lyra/sheet.js.map +1 -1
  45. package/dist/base-lyra/sidebar.js +8 -6
  46. package/dist/base-lyra/sidebar.js.map +1 -1
  47. package/dist/base-lyra/skeleton.js.map +1 -1
  48. package/dist/base-lyra/slider.js.map +1 -1
  49. package/dist/base-lyra/spinner.js.map +1 -1
  50. package/dist/base-lyra/switch.js.map +1 -1
  51. package/dist/base-lyra/table.js.map +1 -1
  52. package/dist/base-lyra/tabs.js.map +1 -1
  53. package/dist/base-lyra/textarea.js.map +1 -1
  54. package/dist/base-lyra/toggle-group.js.map +1 -1
  55. package/dist/base-lyra/toggle.js.map +1 -1
  56. package/dist/base-lyra/tooltip.js.map +1 -1
  57. package/dist/base-maia/accordion.js.map +1 -1
  58. package/dist/base-maia/alert-dialog.js.map +1 -1
  59. package/dist/base-maia/alert.js.map +1 -1
  60. package/dist/base-maia/aspect-ratio.js.map +1 -1
  61. package/dist/base-maia/avatar.js.map +1 -1
  62. package/dist/base-maia/badge.js.map +1 -1
  63. package/dist/base-maia/breadcrumb.js.map +1 -1
  64. package/dist/base-maia/button-group.js.map +1 -1
  65. package/dist/base-maia/button.js.map +1 -1
  66. package/dist/base-maia/calendar.js.map +1 -1
  67. package/dist/base-maia/card.js.map +1 -1
  68. package/dist/base-maia/carousel.js.map +1 -1
  69. package/dist/base-maia/chart.js.map +1 -1
  70. package/dist/base-maia/checkbox.js.map +1 -1
  71. package/dist/base-maia/combobox.js.map +1 -1
  72. package/dist/base-maia/command.js.map +1 -1
  73. package/dist/base-maia/context-menu.js.map +1 -1
  74. package/dist/base-maia/dialog.js.map +1 -1
  75. package/dist/base-maia/drawer.js.map +1 -1
  76. package/dist/base-maia/dropdown-menu.js.map +1 -1
  77. package/dist/base-maia/empty.js.map +1 -1
  78. package/dist/base-maia/field.js.map +1 -1
  79. package/dist/base-maia/hover-card.js.map +1 -1
  80. package/dist/base-maia/index.js +8 -6
  81. package/dist/base-maia/index.js.map +1 -1
  82. package/dist/base-maia/input-group.js.map +1 -1
  83. package/dist/base-maia/input-otp.js.map +1 -1
  84. package/dist/base-maia/input.js.map +1 -1
  85. package/dist/base-maia/item.js.map +1 -1
  86. package/dist/base-maia/kbd.js.map +1 -1
  87. package/dist/base-maia/label.js.map +1 -1
  88. package/dist/base-maia/menubar.js.map +1 -1
  89. package/dist/base-maia/native-select.js.map +1 -1
  90. package/dist/base-maia/navigation-menu.js.map +1 -1
  91. package/dist/base-maia/pagination.js.map +1 -1
  92. package/dist/base-maia/popover.js.map +1 -1
  93. package/dist/base-maia/progress.js.map +1 -1
  94. package/dist/base-maia/radio-group.js.map +1 -1
  95. package/dist/base-maia/resizable.js.map +1 -1
  96. package/dist/base-maia/scroll-area.js.map +1 -1
  97. package/dist/base-maia/select.js.map +1 -1
  98. package/dist/base-maia/separator.js.map +1 -1
  99. package/dist/base-maia/sheet.js.map +1 -1
  100. package/dist/base-maia/sidebar.js +8 -6
  101. package/dist/base-maia/sidebar.js.map +1 -1
  102. package/dist/base-maia/skeleton.js.map +1 -1
  103. package/dist/base-maia/slider.js.map +1 -1
  104. package/dist/base-maia/spinner.js.map +1 -1
  105. package/dist/base-maia/switch.js.map +1 -1
  106. package/dist/base-maia/table.js.map +1 -1
  107. package/dist/base-maia/tabs.js.map +1 -1
  108. package/dist/base-maia/textarea.js.map +1 -1
  109. package/dist/base-maia/toggle-group.js.map +1 -1
  110. package/dist/base-maia/toggle.js.map +1 -1
  111. package/dist/base-maia/tooltip.js.map +1 -1
  112. package/dist/base-mira/accordion.js.map +1 -1
  113. package/dist/base-mira/alert-dialog.js.map +1 -1
  114. package/dist/base-mira/alert.js.map +1 -1
  115. package/dist/base-mira/aspect-ratio.js.map +1 -1
  116. package/dist/base-mira/avatar.js.map +1 -1
  117. package/dist/base-mira/badge.js.map +1 -1
  118. package/dist/base-mira/breadcrumb.js.map +1 -1
  119. package/dist/base-mira/button-group.js.map +1 -1
  120. package/dist/base-mira/button.js.map +1 -1
  121. package/dist/base-mira/calendar.js.map +1 -1
  122. package/dist/base-mira/card.js.map +1 -1
  123. package/dist/base-mira/carousel.js.map +1 -1
  124. package/dist/base-mira/chart.js.map +1 -1
  125. package/dist/base-mira/checkbox.js.map +1 -1
  126. package/dist/base-mira/combobox.js.map +1 -1
  127. package/dist/base-mira/command.js.map +1 -1
  128. package/dist/base-mira/context-menu.js.map +1 -1
  129. package/dist/base-mira/dialog.js.map +1 -1
  130. package/dist/base-mira/drawer.js.map +1 -1
  131. package/dist/base-mira/dropdown-menu.js.map +1 -1
  132. package/dist/base-mira/empty.js.map +1 -1
  133. package/dist/base-mira/field.js.map +1 -1
  134. package/dist/base-mira/hover-card.js.map +1 -1
  135. package/dist/base-mira/index.js +8 -6
  136. package/dist/base-mira/index.js.map +1 -1
  137. package/dist/base-mira/input-group.js.map +1 -1
  138. package/dist/base-mira/input-otp.js.map +1 -1
  139. package/dist/base-mira/input.js.map +1 -1
  140. package/dist/base-mira/item.js.map +1 -1
  141. package/dist/base-mira/kbd.js.map +1 -1
  142. package/dist/base-mira/label.js.map +1 -1
  143. package/dist/base-mira/menubar.js.map +1 -1
  144. package/dist/base-mira/native-select.js.map +1 -1
  145. package/dist/base-mira/navigation-menu.js.map +1 -1
  146. package/dist/base-mira/pagination.js.map +1 -1
  147. package/dist/base-mira/popover.js.map +1 -1
  148. package/dist/base-mira/progress.js.map +1 -1
  149. package/dist/base-mira/radio-group.js.map +1 -1
  150. package/dist/base-mira/resizable.js.map +1 -1
  151. package/dist/base-mira/scroll-area.js.map +1 -1
  152. package/dist/base-mira/select.js.map +1 -1
  153. package/dist/base-mira/separator.js.map +1 -1
  154. package/dist/base-mira/sheet.js.map +1 -1
  155. package/dist/base-mira/sidebar.js +8 -6
  156. package/dist/base-mira/sidebar.js.map +1 -1
  157. package/dist/base-mira/skeleton.js.map +1 -1
  158. package/dist/base-mira/slider.js.map +1 -1
  159. package/dist/base-mira/spinner.js.map +1 -1
  160. package/dist/base-mira/switch.js.map +1 -1
  161. package/dist/base-mira/table.js.map +1 -1
  162. package/dist/base-mira/tabs.js.map +1 -1
  163. package/dist/base-mira/textarea.js.map +1 -1
  164. package/dist/base-mira/toggle-group.js.map +1 -1
  165. package/dist/base-mira/toggle.js.map +1 -1
  166. package/dist/base-mira/tooltip.js.map +1 -1
  167. package/dist/base-nova/accordion.js.map +1 -1
  168. package/dist/base-nova/alert-dialog.js.map +1 -1
  169. package/dist/base-nova/alert.js.map +1 -1
  170. package/dist/base-nova/aspect-ratio.js.map +1 -1
  171. package/dist/base-nova/avatar.js.map +1 -1
  172. package/dist/base-nova/badge.js.map +1 -1
  173. package/dist/base-nova/breadcrumb.js.map +1 -1
  174. package/dist/base-nova/button-group.js.map +1 -1
  175. package/dist/base-nova/button.js.map +1 -1
  176. package/dist/base-nova/calendar.js.map +1 -1
  177. package/dist/base-nova/card.js.map +1 -1
  178. package/dist/base-nova/carousel.js.map +1 -1
  179. package/dist/base-nova/chart.js.map +1 -1
  180. package/dist/base-nova/checkbox.js.map +1 -1
  181. package/dist/base-nova/combobox.js.map +1 -1
  182. package/dist/base-nova/command.js.map +1 -1
  183. package/dist/base-nova/context-menu.js.map +1 -1
  184. package/dist/base-nova/dialog.js.map +1 -1
  185. package/dist/base-nova/drawer.js.map +1 -1
  186. package/dist/base-nova/dropdown-menu.js.map +1 -1
  187. package/dist/base-nova/empty.js.map +1 -1
  188. package/dist/base-nova/field.js.map +1 -1
  189. package/dist/base-nova/hover-card.js.map +1 -1
  190. package/dist/base-nova/index.js +8 -6
  191. package/dist/base-nova/index.js.map +1 -1
  192. package/dist/base-nova/input-group.js.map +1 -1
  193. package/dist/base-nova/input-otp.js.map +1 -1
  194. package/dist/base-nova/input.js.map +1 -1
  195. package/dist/base-nova/item.js.map +1 -1
  196. package/dist/base-nova/kbd.js.map +1 -1
  197. package/dist/base-nova/label.js.map +1 -1
  198. package/dist/base-nova/menubar.js.map +1 -1
  199. package/dist/base-nova/native-select.js.map +1 -1
  200. package/dist/base-nova/navigation-menu.js.map +1 -1
  201. package/dist/base-nova/pagination.js.map +1 -1
  202. package/dist/base-nova/popover.js.map +1 -1
  203. package/dist/base-nova/progress.js.map +1 -1
  204. package/dist/base-nova/radio-group.js.map +1 -1
  205. package/dist/base-nova/resizable.js.map +1 -1
  206. package/dist/base-nova/scroll-area.js.map +1 -1
  207. package/dist/base-nova/select.js.map +1 -1
  208. package/dist/base-nova/separator.js.map +1 -1
  209. package/dist/base-nova/sheet.js.map +1 -1
  210. package/dist/base-nova/sidebar.js +8 -6
  211. package/dist/base-nova/sidebar.js.map +1 -1
  212. package/dist/base-nova/skeleton.js.map +1 -1
  213. package/dist/base-nova/slider.js.map +1 -1
  214. package/dist/base-nova/spinner.js.map +1 -1
  215. package/dist/base-nova/switch.js.map +1 -1
  216. package/dist/base-nova/table.js.map +1 -1
  217. package/dist/base-nova/tabs.js.map +1 -1
  218. package/dist/base-nova/textarea.js.map +1 -1
  219. package/dist/base-nova/toggle-group.js.map +1 -1
  220. package/dist/base-nova/toggle.js.map +1 -1
  221. package/dist/base-nova/tooltip.js.map +1 -1
  222. package/dist/base-vega/accordion.js.map +1 -1
  223. package/dist/base-vega/alert-dialog.js.map +1 -1
  224. package/dist/base-vega/alert.js.map +1 -1
  225. package/dist/base-vega/aspect-ratio.js.map +1 -1
  226. package/dist/base-vega/avatar.js.map +1 -1
  227. package/dist/base-vega/badge.js.map +1 -1
  228. package/dist/base-vega/breadcrumb.js.map +1 -1
  229. package/dist/base-vega/button-group.js.map +1 -1
  230. package/dist/base-vega/button.js.map +1 -1
  231. package/dist/base-vega/calendar.js.map +1 -1
  232. package/dist/base-vega/card.js.map +1 -1
  233. package/dist/base-vega/carousel.js.map +1 -1
  234. package/dist/base-vega/chart.js.map +1 -1
  235. package/dist/base-vega/checkbox.js.map +1 -1
  236. package/dist/base-vega/combobox.js.map +1 -1
  237. package/dist/base-vega/command.js.map +1 -1
  238. package/dist/base-vega/context-menu.js.map +1 -1
  239. package/dist/base-vega/dialog.js.map +1 -1
  240. package/dist/base-vega/drawer.js.map +1 -1
  241. package/dist/base-vega/dropdown-menu.js.map +1 -1
  242. package/dist/base-vega/empty.js.map +1 -1
  243. package/dist/base-vega/field.js.map +1 -1
  244. package/dist/base-vega/hover-card.js.map +1 -1
  245. package/dist/base-vega/index.js +8 -6
  246. package/dist/base-vega/index.js.map +1 -1
  247. package/dist/base-vega/input-group.js.map +1 -1
  248. package/dist/base-vega/input-otp.js.map +1 -1
  249. package/dist/base-vega/input.js.map +1 -1
  250. package/dist/base-vega/item.js.map +1 -1
  251. package/dist/base-vega/kbd.js.map +1 -1
  252. package/dist/base-vega/label.js.map +1 -1
  253. package/dist/base-vega/menubar.js.map +1 -1
  254. package/dist/base-vega/native-select.js.map +1 -1
  255. package/dist/base-vega/navigation-menu.js.map +1 -1
  256. package/dist/base-vega/pagination.js.map +1 -1
  257. package/dist/base-vega/popover.js.map +1 -1
  258. package/dist/base-vega/progress.js.map +1 -1
  259. package/dist/base-vega/radio-group.js.map +1 -1
  260. package/dist/base-vega/resizable.js.map +1 -1
  261. package/dist/base-vega/scroll-area.js.map +1 -1
  262. package/dist/base-vega/select.js.map +1 -1
  263. package/dist/base-vega/separator.js.map +1 -1
  264. package/dist/base-vega/sheet.js.map +1 -1
  265. package/dist/base-vega/sidebar.js +8 -6
  266. package/dist/base-vega/sidebar.js.map +1 -1
  267. package/dist/base-vega/skeleton.js.map +1 -1
  268. package/dist/base-vega/slider.js.map +1 -1
  269. package/dist/base-vega/spinner.js.map +1 -1
  270. package/dist/base-vega/switch.js.map +1 -1
  271. package/dist/base-vega/table.js.map +1 -1
  272. package/dist/base-vega/tabs.js.map +1 -1
  273. package/dist/base-vega/textarea.js.map +1 -1
  274. package/dist/base-vega/toggle-group.js.map +1 -1
  275. package/dist/base-vega/toggle.js.map +1 -1
  276. package/dist/base-vega/tooltip.js.map +1 -1
  277. package/dist/hooks/index.d.ts +7 -0
  278. package/dist/hooks/index.js +181 -10
  279. package/dist/hooks/index.js.map +1 -1
  280. package/dist/hooks/use-as-ref.d.ts +5 -0
  281. package/dist/hooks/use-as-ref.js +17 -0
  282. package/dist/hooks/use-as-ref.js.map +1 -0
  283. package/dist/hooks/use-badge-overflow.d.ts +24 -0
  284. package/dist/hooks/use-badge-overflow.js +130 -0
  285. package/dist/hooks/use-badge-overflow.js.map +1 -0
  286. package/dist/hooks/use-callback-ref.d.ts +10 -0
  287. package/dist/hooks/use-callback-ref.js +17 -0
  288. package/dist/hooks/use-callback-ref.js.map +1 -0
  289. package/dist/hooks/use-debounced-callback.d.ts +3 -0
  290. package/dist/hooks/use-debounced-callback.js +38 -0
  291. package/dist/hooks/use-debounced-callback.js.map +1 -0
  292. package/dist/hooks/use-file-upload.d.ts +48 -0
  293. package/dist/hooks/use-file-upload.js +279 -0
  294. package/dist/hooks/use-file-upload.js.map +1 -0
  295. package/dist/hooks/use-isomorphic-layout-effect.d.ts +5 -0
  296. package/dist/hooks/use-isomorphic-layout-effect.js +8 -0
  297. package/dist/hooks/use-isomorphic-layout-effect.js.map +1 -0
  298. package/dist/hooks/use-lazy-ref.d.ts +5 -0
  299. package/dist/hooks/use-lazy-ref.js +14 -0
  300. package/dist/hooks/use-lazy-ref.js.map +1 -0
  301. package/dist/hooks/use-mobile.d.ts +1 -1
  302. package/dist/hooks/use-mobile.js +8 -6
  303. package/dist/hooks/use-mobile.js.map +1 -1
  304. package/dist/index.d.ts +1622 -106
  305. package/dist/index.js +23260 -2932
  306. package/dist/index.js.map +1 -1
  307. package/dist/lib/compose-refs.d.ts +15 -0
  308. package/dist/lib/compose-refs.js +42 -0
  309. package/dist/lib/compose-refs.js.map +1 -0
  310. package/dist/lib/format.d.ts +3 -0
  311. package/dist/lib/format.js +18 -0
  312. package/dist/lib/format.js.map +1 -0
  313. package/dist/lib/index.d.ts +3 -0
  314. package/dist/lib/index.js +53 -2
  315. package/dist/lib/index.js.map +1 -1
  316. package/dist/lib/utils.d.ts +6 -0
  317. package/dist/lib/utils.js.map +1 -1
  318. package/dist/new-york/accordion.js.map +1 -1
  319. package/dist/new-york/alert-dialog.js.map +1 -1
  320. package/dist/new-york/alert.js.map +1 -1
  321. package/dist/new-york/avatar.js.map +1 -1
  322. package/dist/new-york/badge.js.map +1 -1
  323. package/dist/new-york/breadcrumb.js.map +1 -1
  324. package/dist/new-york/button-group.js.map +1 -1
  325. package/dist/new-york/button.js.map +1 -1
  326. package/dist/new-york/calendar.js.map +1 -1
  327. package/dist/new-york/card.js.map +1 -1
  328. package/dist/new-york/carousel.js.map +1 -1
  329. package/dist/new-york/chart.js.map +1 -1
  330. package/dist/new-york/checkbox.js.map +1 -1
  331. package/dist/new-york/combobox.js.map +1 -1
  332. package/dist/new-york/command.js.map +1 -1
  333. package/dist/new-york/context-menu.js.map +1 -1
  334. package/dist/new-york/dialog.js.map +1 -1
  335. package/dist/new-york/drawer.js.map +1 -1
  336. package/dist/new-york/dropdown-menu.js.map +1 -1
  337. package/dist/new-york/empty.js.map +1 -1
  338. package/dist/new-york/field.js.map +1 -1
  339. package/dist/new-york/form.js.map +1 -1
  340. package/dist/new-york/hover-card.js.map +1 -1
  341. package/dist/new-york/index.js +8 -6
  342. package/dist/new-york/index.js.map +1 -1
  343. package/dist/new-york/input-group.js.map +1 -1
  344. package/dist/new-york/input-otp.js.map +1 -1
  345. package/dist/new-york/input.js.map +1 -1
  346. package/dist/new-york/item.js.map +1 -1
  347. package/dist/new-york/kbd.js.map +1 -1
  348. package/dist/new-york/label.js.map +1 -1
  349. package/dist/new-york/menubar.js.map +1 -1
  350. package/dist/new-york/native-select.js.map +1 -1
  351. package/dist/new-york/navigation-menu.js.map +1 -1
  352. package/dist/new-york/pagination.js.map +1 -1
  353. package/dist/new-york/popover.js.map +1 -1
  354. package/dist/new-york/progress.js.map +1 -1
  355. package/dist/new-york/radio-group.js.map +1 -1
  356. package/dist/new-york/resizable.js.map +1 -1
  357. package/dist/new-york/scroll-area.js.map +1 -1
  358. package/dist/new-york/select.js.map +1 -1
  359. package/dist/new-york/separator.js.map +1 -1
  360. package/dist/new-york/sheet.js.map +1 -1
  361. package/dist/new-york/sidebar.js +8 -6
  362. package/dist/new-york/sidebar.js.map +1 -1
  363. package/dist/new-york/skeleton.js.map +1 -1
  364. package/dist/new-york/slider.js.map +1 -1
  365. package/dist/new-york/spinner.js.map +1 -1
  366. package/dist/new-york/switch.js.map +1 -1
  367. package/dist/new-york/table.js.map +1 -1
  368. package/dist/new-york/tabs.js.map +1 -1
  369. package/dist/new-york/textarea.js.map +1 -1
  370. package/dist/new-york/toggle-group.js.map +1 -1
  371. package/dist/new-york/toggle.js.map +1 -1
  372. package/dist/new-york/tooltip.js.map +1 -1
  373. package/dist/radix-lyra/accordion.js.map +1 -1
  374. package/dist/radix-lyra/alert-dialog.js.map +1 -1
  375. package/dist/radix-lyra/alert.js.map +1 -1
  376. package/dist/radix-lyra/avatar.js.map +1 -1
  377. package/dist/radix-lyra/badge.js.map +1 -1
  378. package/dist/radix-lyra/breadcrumb.js.map +1 -1
  379. package/dist/radix-lyra/button-group.js.map +1 -1
  380. package/dist/radix-lyra/button.js.map +1 -1
  381. package/dist/radix-lyra/calendar.js.map +1 -1
  382. package/dist/radix-lyra/card.js.map +1 -1
  383. package/dist/radix-lyra/carousel.js.map +1 -1
  384. package/dist/radix-lyra/chart.js.map +1 -1
  385. package/dist/radix-lyra/checkbox.js.map +1 -1
  386. package/dist/radix-lyra/combobox.js.map +1 -1
  387. package/dist/radix-lyra/command.js.map +1 -1
  388. package/dist/radix-lyra/context-menu.js.map +1 -1
  389. package/dist/radix-lyra/dialog.js.map +1 -1
  390. package/dist/radix-lyra/drawer.js.map +1 -1
  391. package/dist/radix-lyra/dropdown-menu.js.map +1 -1
  392. package/dist/radix-lyra/empty.js.map +1 -1
  393. package/dist/radix-lyra/field.js.map +1 -1
  394. package/dist/radix-lyra/hover-card.js.map +1 -1
  395. package/dist/radix-lyra/index.js +8 -6
  396. package/dist/radix-lyra/index.js.map +1 -1
  397. package/dist/radix-lyra/input-group.js.map +1 -1
  398. package/dist/radix-lyra/input-otp.js.map +1 -1
  399. package/dist/radix-lyra/input.js.map +1 -1
  400. package/dist/radix-lyra/item.js.map +1 -1
  401. package/dist/radix-lyra/kbd.js.map +1 -1
  402. package/dist/radix-lyra/label.js.map +1 -1
  403. package/dist/radix-lyra/menubar.js.map +1 -1
  404. package/dist/radix-lyra/native-select.js.map +1 -1
  405. package/dist/radix-lyra/navigation-menu.js.map +1 -1
  406. package/dist/radix-lyra/pagination.js.map +1 -1
  407. package/dist/radix-lyra/popover.js.map +1 -1
  408. package/dist/radix-lyra/progress.js.map +1 -1
  409. package/dist/radix-lyra/radio-group.js.map +1 -1
  410. package/dist/radix-lyra/resizable.js.map +1 -1
  411. package/dist/radix-lyra/scroll-area.js.map +1 -1
  412. package/dist/radix-lyra/select.js.map +1 -1
  413. package/dist/radix-lyra/separator.js.map +1 -1
  414. package/dist/radix-lyra/sheet.js.map +1 -1
  415. package/dist/radix-lyra/sidebar.js +8 -6
  416. package/dist/radix-lyra/sidebar.js.map +1 -1
  417. package/dist/radix-lyra/skeleton.js.map +1 -1
  418. package/dist/radix-lyra/slider.js.map +1 -1
  419. package/dist/radix-lyra/spinner.js.map +1 -1
  420. package/dist/radix-lyra/switch.js.map +1 -1
  421. package/dist/radix-lyra/table.js.map +1 -1
  422. package/dist/radix-lyra/tabs.js.map +1 -1
  423. package/dist/radix-lyra/textarea.js.map +1 -1
  424. package/dist/radix-lyra/toggle-group.js.map +1 -1
  425. package/dist/radix-lyra/toggle.js.map +1 -1
  426. package/dist/radix-lyra/tooltip.js.map +1 -1
  427. package/dist/radix-maia/accordion.js.map +1 -1
  428. package/dist/radix-maia/alert-dialog.js.map +1 -1
  429. package/dist/radix-maia/alert.js.map +1 -1
  430. package/dist/radix-maia/avatar.js.map +1 -1
  431. package/dist/radix-maia/badge.js.map +1 -1
  432. package/dist/radix-maia/breadcrumb.js.map +1 -1
  433. package/dist/radix-maia/button-group.js.map +1 -1
  434. package/dist/radix-maia/button.js.map +1 -1
  435. package/dist/radix-maia/calendar.js.map +1 -1
  436. package/dist/radix-maia/card.js.map +1 -1
  437. package/dist/radix-maia/carousel.js.map +1 -1
  438. package/dist/radix-maia/chart.js.map +1 -1
  439. package/dist/radix-maia/checkbox.js.map +1 -1
  440. package/dist/radix-maia/combobox.js.map +1 -1
  441. package/dist/radix-maia/command.js.map +1 -1
  442. package/dist/radix-maia/context-menu.js.map +1 -1
  443. package/dist/radix-maia/dialog.js.map +1 -1
  444. package/dist/radix-maia/drawer.js.map +1 -1
  445. package/dist/radix-maia/dropdown-menu.js.map +1 -1
  446. package/dist/radix-maia/empty.js.map +1 -1
  447. package/dist/radix-maia/field.js.map +1 -1
  448. package/dist/radix-maia/hover-card.js.map +1 -1
  449. package/dist/radix-maia/index.js +8 -6
  450. package/dist/radix-maia/index.js.map +1 -1
  451. package/dist/radix-maia/input-group.js.map +1 -1
  452. package/dist/radix-maia/input-otp.js.map +1 -1
  453. package/dist/radix-maia/input.js.map +1 -1
  454. package/dist/radix-maia/item.js.map +1 -1
  455. package/dist/radix-maia/kbd.js.map +1 -1
  456. package/dist/radix-maia/label.js.map +1 -1
  457. package/dist/radix-maia/menubar.js.map +1 -1
  458. package/dist/radix-maia/native-select.js.map +1 -1
  459. package/dist/radix-maia/navigation-menu.js.map +1 -1
  460. package/dist/radix-maia/pagination.js.map +1 -1
  461. package/dist/radix-maia/popover.js.map +1 -1
  462. package/dist/radix-maia/progress.js.map +1 -1
  463. package/dist/radix-maia/radio-group.js.map +1 -1
  464. package/dist/radix-maia/resizable.js.map +1 -1
  465. package/dist/radix-maia/scroll-area.js.map +1 -1
  466. package/dist/radix-maia/select.js.map +1 -1
  467. package/dist/radix-maia/separator.js.map +1 -1
  468. package/dist/radix-maia/sheet.js.map +1 -1
  469. package/dist/radix-maia/sidebar.js +8 -6
  470. package/dist/radix-maia/sidebar.js.map +1 -1
  471. package/dist/radix-maia/skeleton.js.map +1 -1
  472. package/dist/radix-maia/slider.js.map +1 -1
  473. package/dist/radix-maia/spinner.js.map +1 -1
  474. package/dist/radix-maia/switch.js.map +1 -1
  475. package/dist/radix-maia/table.js.map +1 -1
  476. package/dist/radix-maia/tabs.js.map +1 -1
  477. package/dist/radix-maia/textarea.js.map +1 -1
  478. package/dist/radix-maia/toggle-group.js.map +1 -1
  479. package/dist/radix-maia/toggle.js.map +1 -1
  480. package/dist/radix-maia/tooltip.js.map +1 -1
  481. package/dist/radix-mira/accordion.js.map +1 -1
  482. package/dist/radix-mira/alert-dialog.js.map +1 -1
  483. package/dist/radix-mira/alert.js.map +1 -1
  484. package/dist/radix-mira/avatar.js.map +1 -1
  485. package/dist/radix-mira/badge.js.map +1 -1
  486. package/dist/radix-mira/breadcrumb.js.map +1 -1
  487. package/dist/radix-mira/button-group.js.map +1 -1
  488. package/dist/radix-mira/button.js.map +1 -1
  489. package/dist/radix-mira/calendar.js.map +1 -1
  490. package/dist/radix-mira/card.js.map +1 -1
  491. package/dist/radix-mira/carousel.js.map +1 -1
  492. package/dist/radix-mira/chart.js.map +1 -1
  493. package/dist/radix-mira/checkbox.js.map +1 -1
  494. package/dist/radix-mira/combobox.js.map +1 -1
  495. package/dist/radix-mira/command.js.map +1 -1
  496. package/dist/radix-mira/context-menu.js.map +1 -1
  497. package/dist/radix-mira/dialog.js.map +1 -1
  498. package/dist/radix-mira/drawer.js.map +1 -1
  499. package/dist/radix-mira/dropdown-menu.js.map +1 -1
  500. package/dist/radix-mira/empty.js.map +1 -1
  501. package/dist/radix-mira/field.js.map +1 -1
  502. package/dist/radix-mira/hover-card.js.map +1 -1
  503. package/dist/radix-mira/index.js +8 -6
  504. package/dist/radix-mira/index.js.map +1 -1
  505. package/dist/radix-mira/input-group.js.map +1 -1
  506. package/dist/radix-mira/input-otp.js.map +1 -1
  507. package/dist/radix-mira/input.js.map +1 -1
  508. package/dist/radix-mira/item.js.map +1 -1
  509. package/dist/radix-mira/kbd.js.map +1 -1
  510. package/dist/radix-mira/label.js.map +1 -1
  511. package/dist/radix-mira/menubar.js.map +1 -1
  512. package/dist/radix-mira/native-select.js.map +1 -1
  513. package/dist/radix-mira/navigation-menu.js.map +1 -1
  514. package/dist/radix-mira/pagination.js.map +1 -1
  515. package/dist/radix-mira/popover.js.map +1 -1
  516. package/dist/radix-mira/progress.js.map +1 -1
  517. package/dist/radix-mira/radio-group.js.map +1 -1
  518. package/dist/radix-mira/resizable.js.map +1 -1
  519. package/dist/radix-mira/scroll-area.js.map +1 -1
  520. package/dist/radix-mira/select.js.map +1 -1
  521. package/dist/radix-mira/separator.js.map +1 -1
  522. package/dist/radix-mira/sheet.js.map +1 -1
  523. package/dist/radix-mira/sidebar.js +8 -6
  524. package/dist/radix-mira/sidebar.js.map +1 -1
  525. package/dist/radix-mira/skeleton.js.map +1 -1
  526. package/dist/radix-mira/slider.js.map +1 -1
  527. package/dist/radix-mira/spinner.js.map +1 -1
  528. package/dist/radix-mira/switch.js.map +1 -1
  529. package/dist/radix-mira/table.js.map +1 -1
  530. package/dist/radix-mira/tabs.js.map +1 -1
  531. package/dist/radix-mira/textarea.js.map +1 -1
  532. package/dist/radix-mira/toggle-group.js.map +1 -1
  533. package/dist/radix-mira/toggle.js.map +1 -1
  534. package/dist/radix-mira/tooltip.js.map +1 -1
  535. package/dist/radix-nova/accordion.js.map +1 -1
  536. package/dist/radix-nova/alert-dialog.js.map +1 -1
  537. package/dist/radix-nova/alert.js.map +1 -1
  538. package/dist/radix-nova/avatar.js.map +1 -1
  539. package/dist/radix-nova/badge.js.map +1 -1
  540. package/dist/radix-nova/breadcrumb.js.map +1 -1
  541. package/dist/radix-nova/button-group.js.map +1 -1
  542. package/dist/radix-nova/button.js.map +1 -1
  543. package/dist/radix-nova/calendar.js.map +1 -1
  544. package/dist/radix-nova/card.js.map +1 -1
  545. package/dist/radix-nova/carousel.js.map +1 -1
  546. package/dist/radix-nova/chart.js.map +1 -1
  547. package/dist/radix-nova/checkbox.js.map +1 -1
  548. package/dist/radix-nova/combobox.js.map +1 -1
  549. package/dist/radix-nova/command.js.map +1 -1
  550. package/dist/radix-nova/context-menu.js.map +1 -1
  551. package/dist/radix-nova/dialog.js.map +1 -1
  552. package/dist/radix-nova/drawer.js.map +1 -1
  553. package/dist/radix-nova/dropdown-menu.js.map +1 -1
  554. package/dist/radix-nova/empty.js.map +1 -1
  555. package/dist/radix-nova/field.js.map +1 -1
  556. package/dist/radix-nova/hover-card.js.map +1 -1
  557. package/dist/radix-nova/index.js +8 -6
  558. package/dist/radix-nova/index.js.map +1 -1
  559. package/dist/radix-nova/input-group.js.map +1 -1
  560. package/dist/radix-nova/input-otp.js.map +1 -1
  561. package/dist/radix-nova/input.js.map +1 -1
  562. package/dist/radix-nova/item.js.map +1 -1
  563. package/dist/radix-nova/kbd.js.map +1 -1
  564. package/dist/radix-nova/label.js.map +1 -1
  565. package/dist/radix-nova/menubar.js.map +1 -1
  566. package/dist/radix-nova/native-select.js.map +1 -1
  567. package/dist/radix-nova/navigation-menu.js.map +1 -1
  568. package/dist/radix-nova/pagination.js.map +1 -1
  569. package/dist/radix-nova/popover.js.map +1 -1
  570. package/dist/radix-nova/progress.js.map +1 -1
  571. package/dist/radix-nova/radio-group.js.map +1 -1
  572. package/dist/radix-nova/resizable.js.map +1 -1
  573. package/dist/radix-nova/scroll-area.js.map +1 -1
  574. package/dist/radix-nova/select.js.map +1 -1
  575. package/dist/radix-nova/separator.js.map +1 -1
  576. package/dist/radix-nova/sheet.js.map +1 -1
  577. package/dist/radix-nova/sidebar.js +8 -6
  578. package/dist/radix-nova/sidebar.js.map +1 -1
  579. package/dist/radix-nova/skeleton.js.map +1 -1
  580. package/dist/radix-nova/slider.js.map +1 -1
  581. package/dist/radix-nova/spinner.js.map +1 -1
  582. package/dist/radix-nova/switch.js.map +1 -1
  583. package/dist/radix-nova/table.js.map +1 -1
  584. package/dist/radix-nova/tabs.js.map +1 -1
  585. package/dist/radix-nova/textarea.js.map +1 -1
  586. package/dist/radix-nova/toggle-group.js.map +1 -1
  587. package/dist/radix-nova/toggle.js.map +1 -1
  588. package/dist/radix-nova/tooltip.js.map +1 -1
  589. package/dist/radix-vega/accordion.js.map +1 -1
  590. package/dist/radix-vega/action-bar.d.ts +41 -0
  591. package/dist/radix-vega/action-bar.js +589 -0
  592. package/dist/radix-vega/action-bar.js.map +1 -0
  593. package/dist/radix-vega/alert-dialog.js.map +1 -1
  594. package/dist/radix-vega/alert.js.map +1 -1
  595. package/dist/radix-vega/avatar-group.d.ts +19 -0
  596. package/dist/radix-vega/avatar-group.js +193 -0
  597. package/dist/radix-vega/avatar-group.js.map +1 -0
  598. package/dist/radix-vega/avatar.d.ts +1 -3
  599. package/dist/radix-vega/avatar.js +1 -27
  600. package/dist/radix-vega/avatar.js.map +1 -1
  601. package/dist/radix-vega/badge-overflow.d.ts +21 -0
  602. package/dist/radix-vega/badge-overflow.js +223 -0
  603. package/dist/radix-vega/badge-overflow.js.map +1 -0
  604. package/dist/radix-vega/badge.d.ts +1 -1
  605. package/dist/radix-vega/badge.js.map +1 -1
  606. package/dist/radix-vega/breadcrumb.js.map +1 -1
  607. package/dist/radix-vega/button-group.js.map +1 -1
  608. package/dist/radix-vega/button.d.ts +2 -2
  609. package/dist/radix-vega/button.js.map +1 -1
  610. package/dist/radix-vega/calendar.js.map +1 -1
  611. package/dist/radix-vega/card.js.map +1 -1
  612. package/dist/radix-vega/carousel.js.map +1 -1
  613. package/dist/radix-vega/chart.js.map +1 -1
  614. package/dist/radix-vega/checkbox-group.d.ts +12 -0
  615. package/dist/radix-vega/checkbox-group.js +119 -0
  616. package/dist/radix-vega/checkbox-group.js.map +1 -0
  617. package/dist/radix-vega/checkbox.js.map +1 -1
  618. package/dist/radix-vega/circular-progress.d.ts +27 -0
  619. package/dist/radix-vega/circular-progress.js +252 -0
  620. package/dist/radix-vega/circular-progress.js.map +1 -0
  621. package/dist/radix-vega/color-picker.d.ts +85 -0
  622. package/dist/radix-vega/color-picker.js +1683 -0
  623. package/dist/radix-vega/color-picker.js.map +1 -0
  624. package/dist/radix-vega/color-swatch.d.ts +17 -0
  625. package/dist/radix-vega/color-swatch.js +95 -0
  626. package/dist/radix-vega/color-swatch.js.map +1 -0
  627. package/dist/radix-vega/combobox.d.ts +18 -22
  628. package/dist/radix-vega/combobox.js +118 -276
  629. package/dist/radix-vega/combobox.js.map +1 -1
  630. package/dist/radix-vega/command.js.map +1 -1
  631. package/dist/radix-vega/compare-slider.d.ts +32 -0
  632. package/dist/radix-vega/compare-slider.js +393 -0
  633. package/dist/radix-vega/compare-slider.js.map +1 -0
  634. package/dist/radix-vega/context-menu.js.map +1 -1
  635. package/dist/radix-vega/cropper.d.ts +89 -0
  636. package/dist/radix-vega/cropper.js +1396 -0
  637. package/dist/radix-vega/cropper.js.map +1 -0
  638. package/dist/radix-vega/dialog.js.map +1 -1
  639. package/dist/radix-vega/drawer.js.map +1 -1
  640. package/dist/radix-vega/dropdown-menu.js.map +1 -1
  641. package/dist/radix-vega/editable.d.ts +100 -0
  642. package/dist/radix-vega/editable.js +684 -0
  643. package/dist/radix-vega/editable.js.map +1 -0
  644. package/dist/radix-vega/empty.js.map +1 -1
  645. package/dist/radix-vega/field.js.map +1 -1
  646. package/dist/radix-vega/file-upload.d.ts +89 -0
  647. package/dist/radix-vega/file-upload.js +1089 -0
  648. package/dist/radix-vega/file-upload.js.map +1 -0
  649. package/dist/radix-vega/gauge.d.ts +27 -0
  650. package/dist/radix-vega/gauge.js +359 -0
  651. package/dist/radix-vega/gauge.js.map +1 -0
  652. package/dist/radix-vega/hover-card.js.map +1 -1
  653. package/dist/radix-vega/index.d.ts +50 -3
  654. package/dist/radix-vega/index.js +23001 -2667
  655. package/dist/radix-vega/index.js.map +1 -1
  656. package/dist/radix-vega/input-group.d.ts +1 -1
  657. package/dist/radix-vega/input-group.js.map +1 -1
  658. package/dist/radix-vega/input-otp.js.map +1 -1
  659. package/dist/radix-vega/input.js.map +1 -1
  660. package/dist/radix-vega/item.d.ts +2 -2
  661. package/dist/radix-vega/item.js.map +1 -1
  662. package/dist/radix-vega/kanban.d.ts +62 -0
  663. package/dist/radix-vega/kanban.js +831 -0
  664. package/dist/radix-vega/kanban.js.map +1 -0
  665. package/dist/radix-vega/kbd.js.map +1 -1
  666. package/dist/radix-vega/key-value.d.ts +82 -0
  667. package/dist/radix-vega/key-value.js +765 -0
  668. package/dist/radix-vega/key-value.js.map +1 -0
  669. package/dist/radix-vega/label.js.map +1 -1
  670. package/dist/radix-vega/listbox.d.ts +11 -0
  671. package/dist/radix-vega/listbox.js +90 -0
  672. package/dist/radix-vega/listbox.js.map +1 -0
  673. package/dist/radix-vega/mask-input.d.ts +64 -0
  674. package/dist/radix-vega/mask-input.js +1186 -0
  675. package/dist/radix-vega/mask-input.js.map +1 -0
  676. package/dist/radix-vega/media-player.d.ts +127 -0
  677. package/dist/radix-vega/media-player.js +2696 -0
  678. package/dist/radix-vega/media-player.js.map +1 -0
  679. package/dist/radix-vega/mention.d.ts +11 -0
  680. package/dist/radix-vega/mention.js +94 -0
  681. package/dist/radix-vega/mention.js.map +1 -0
  682. package/dist/radix-vega/menubar.js.map +1 -1
  683. package/dist/radix-vega/native-select.js.map +1 -1
  684. package/dist/radix-vega/navigation-menu.js.map +1 -1
  685. package/dist/radix-vega/pagination.js.map +1 -1
  686. package/dist/radix-vega/phone-input.d.ts +48 -0
  687. package/dist/radix-vega/phone-input.js +957 -0
  688. package/dist/radix-vega/phone-input.js.map +1 -0
  689. package/dist/radix-vega/popover.js.map +1 -1
  690. package/dist/radix-vega/progress.js.map +1 -1
  691. package/dist/radix-vega/qr-code.d.ts +53 -0
  692. package/dist/radix-vega/qr-code.js +396 -0
  693. package/dist/radix-vega/qr-code.js.map +1 -0
  694. package/dist/radix-vega/radio-group.js.map +1 -1
  695. package/dist/radix-vega/rating.d.ts +47 -0
  696. package/dist/radix-vega/rating.js +749 -0
  697. package/dist/radix-vega/rating.js.map +1 -0
  698. package/dist/radix-vega/relative-time-card.d.ts +22 -0
  699. package/dist/radix-vega/relative-time-card.js +236 -0
  700. package/dist/radix-vega/relative-time-card.js.map +1 -0
  701. package/dist/radix-vega/resizable.js.map +1 -1
  702. package/dist/radix-vega/responsive-dialog.d.ts +20 -0
  703. package/dist/radix-vega/responsive-dialog.js +483 -0
  704. package/dist/radix-vega/responsive-dialog.js.map +1 -0
  705. package/dist/radix-vega/scroll-area.js.map +1 -1
  706. package/dist/radix-vega/scroll-spy.d.ts +39 -0
  707. package/dist/radix-vega/scroll-spy.js +372 -0
  708. package/dist/radix-vega/scroll-spy.js.map +1 -0
  709. package/dist/radix-vega/scroller.d.ts +20 -0
  710. package/dist/radix-vega/scroller.js +352 -0
  711. package/dist/radix-vega/scroller.js.map +1 -0
  712. package/dist/radix-vega/segmented-input.d.ts +29 -0
  713. package/dist/radix-vega/segmented-input.js +178 -0
  714. package/dist/radix-vega/segmented-input.js.map +1 -0
  715. package/dist/radix-vega/select.js.map +1 -1
  716. package/dist/radix-vega/separator.js.map +1 -1
  717. package/dist/radix-vega/sheet.js.map +1 -1
  718. package/dist/radix-vega/sidebar.js +8 -6
  719. package/dist/radix-vega/sidebar.js.map +1 -1
  720. package/dist/radix-vega/skeleton.js.map +1 -1
  721. package/dist/radix-vega/slider.js.map +1 -1
  722. package/dist/radix-vega/sortable.d.ts +51 -0
  723. package/dist/radix-vega/sortable.js +444 -0
  724. package/dist/radix-vega/sortable.js.map +1 -0
  725. package/dist/radix-vega/speed-dial.d.ts +46 -0
  726. package/dist/radix-vega/speed-dial.js +898 -0
  727. package/dist/radix-vega/speed-dial.js.map +1 -0
  728. package/dist/radix-vega/spinner.js.map +1 -1
  729. package/dist/radix-vega/stack.d.ts +21 -0
  730. package/dist/radix-vega/stack.js +268 -0
  731. package/dist/radix-vega/stack.js.map +1 -0
  732. package/dist/radix-vega/stat.d.ts +24 -0
  733. package/dist/radix-vega/stat.js +147 -0
  734. package/dist/radix-vega/stat.js.map +1 -0
  735. package/dist/radix-vega/status.d.ts +18 -0
  736. package/dist/radix-vega/status.js +71 -0
  737. package/dist/radix-vega/status.js.map +1 -0
  738. package/dist/radix-vega/stepper.d.ts +73 -0
  739. package/dist/radix-vega/stepper.js +973 -0
  740. package/dist/radix-vega/stepper.js.map +1 -0
  741. package/dist/radix-vega/swap.d.ts +29 -0
  742. package/dist/radix-vega/swap.js +214 -0
  743. package/dist/radix-vega/swap.js.map +1 -0
  744. package/dist/radix-vega/switch.js.map +1 -1
  745. package/dist/radix-vega/table.js.map +1 -1
  746. package/dist/radix-vega/tabs.d.ts +1 -1
  747. package/dist/radix-vega/tabs.js.map +1 -1
  748. package/dist/radix-vega/tags-input.d.ts +12 -0
  749. package/dist/radix-vega/tags-input.js +98 -0
  750. package/dist/radix-vega/tags-input.js.map +1 -0
  751. package/dist/radix-vega/textarea.js.map +1 -1
  752. package/dist/radix-vega/time-picker.d.ts +88 -0
  753. package/dist/radix-vega/time-picker.js +1750 -0
  754. package/dist/radix-vega/time-picker.js.map +1 -0
  755. package/dist/radix-vega/timeline.d.ts +32 -0
  756. package/dist/radix-vega/timeline.js +611 -0
  757. package/dist/radix-vega/timeline.js.map +1 -0
  758. package/dist/radix-vega/toggle-group.js.map +1 -1
  759. package/dist/radix-vega/toggle.js.map +1 -1
  760. package/dist/radix-vega/tooltip.js.map +1 -1
  761. package/dist/radix-vega/tour.d.ts +109 -0
  762. package/dist/radix-vega/tour.js +1314 -0
  763. package/dist/radix-vega/tour.js.map +1 -0
  764. package/dist/radix-vega/visually-hidden-input.d.ts +8 -0
  765. package/dist/radix-vega/visually-hidden-input.js +33 -0
  766. package/dist/radix-vega/visually-hidden-input.js.map +1 -0
  767. package/package.json +53 -14
@@ -0,0 +1,1186 @@
1
+ import { Slot } from '@radix-ui/react-slot';
2
+ import * as React2 from 'react';
3
+ import { clsx } from 'clsx';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ function setRef(ref, value) {
8
+ if (typeof ref === "function") {
9
+ return ref(value);
10
+ }
11
+ if (ref !== null && ref !== void 0) {
12
+ ref.current = value;
13
+ }
14
+ }
15
+ function composeRefs(...refs) {
16
+ return (node) => {
17
+ let hasCleanup = false;
18
+ const cleanups = refs.map((ref) => {
19
+ const cleanup = setRef(ref, node);
20
+ if (!hasCleanup && typeof cleanup === "function") {
21
+ hasCleanup = true;
22
+ }
23
+ return cleanup;
24
+ });
25
+ if (hasCleanup) {
26
+ return () => {
27
+ for (let i = 0; i < cleanups.length; i++) {
28
+ const cleanup = cleanups[i];
29
+ if (typeof cleanup === "function") {
30
+ cleanup();
31
+ } else {
32
+ setRef(refs[i], null);
33
+ }
34
+ }
35
+ };
36
+ }
37
+ };
38
+ }
39
+ function useComposedRefs(...refs) {
40
+ return React2.useCallback(composeRefs(...refs), refs);
41
+ }
42
+ function cn(...inputs) {
43
+ return twMerge(clsx(inputs));
44
+ }
45
+ var PAST_YEARS_LIMIT = 120;
46
+ var FUTURE_YEARS_LIMIT = 10;
47
+ var DEFAULT_CURRENCY = "USD";
48
+ var DEFAULT_LOCALE = "en-US";
49
+ var NUMERIC_MASK_PATTERNS = /^(phone|zipCode|zipCodeExtended|ssn|ein|time|date|creditCard|creditCardExpiry)$/;
50
+ var CURRENCY_PERCENTAGE_SYMBOLS = /[€$%]/;
51
+ var formattersCache = /* @__PURE__ */ new Map();
52
+ var currencyAtEndCache = /* @__PURE__ */ new Map();
53
+ var currencySymbolsCache = /* @__PURE__ */ new Map();
54
+ var daysInMonthCache = [
55
+ 31,
56
+ 28,
57
+ 31,
58
+ 30,
59
+ 31,
60
+ 30,
61
+ 31,
62
+ 31,
63
+ 30,
64
+ 31,
65
+ 30,
66
+ 31
67
+ ];
68
+ var REGEX_CACHE = {
69
+ digitsOnly: /^\d+$/,
70
+ nonDigits: /\D/g,
71
+ nonAlphaNumeric: /[^A-Z0-9]/gi,
72
+ nonNumericDot: /[^0-9.]/g,
73
+ nonCurrencyChars: /[^\d.,]/g,
74
+ hashPattern: /#/g,
75
+ currencyAtEnd: /\d\s*[^\d\s]+$/,
76
+ percentageChars: /[^\d.]/g,
77
+ phone: /^\d{10}$/,
78
+ ssn: /^\d{9}$/,
79
+ zipCode: /^\d{5}$/,
80
+ zipCodeExtended: /^\d{9}$/,
81
+ isbn: /^\d{13}$/,
82
+ ein: /^\d{9}$/,
83
+ time: /^\d{4}$/,
84
+ creditCard: /^\d{13,19}$/,
85
+ creditCardExpiry: /^\d{4}$/,
86
+ licensePlate: /^[A-Z0-9]{6}$/,
87
+ macAddress: /^[A-F0-9]{12}$/,
88
+ currencyValidation: /^\d+(\.\d{1,2})?$/,
89
+ ipv4Segment: /^\d{1,3}$/
90
+ };
91
+ function getCachedFormatter(locale, opts) {
92
+ const {
93
+ currency,
94
+ minimumFractionDigits = 0,
95
+ maximumFractionDigits = 2
96
+ } = opts;
97
+ const key = `${locale}|${currency}|${minimumFractionDigits}|${maximumFractionDigits}`;
98
+ if (!formattersCache.has(key)) {
99
+ try {
100
+ formattersCache.set(
101
+ key,
102
+ new Intl.NumberFormat(locale, {
103
+ style: "currency",
104
+ currency,
105
+ ...opts
106
+ })
107
+ );
108
+ } catch {
109
+ formattersCache.set(
110
+ key,
111
+ new Intl.NumberFormat(DEFAULT_LOCALE, {
112
+ style: "currency",
113
+ currency: DEFAULT_CURRENCY,
114
+ ...opts
115
+ })
116
+ );
117
+ }
118
+ }
119
+ const formatter = formattersCache.get(key);
120
+ if (!formatter) {
121
+ throw new Error(`Failed to create formatter for ${key}`);
122
+ }
123
+ return formatter;
124
+ }
125
+ function getCachedCurrencySymbols(opts) {
126
+ const { locale, currency } = opts;
127
+ const key = `${locale}|${currency}`;
128
+ const cached = currencySymbolsCache.get(key);
129
+ if (cached) {
130
+ return cached;
131
+ }
132
+ let currencySymbol = "$";
133
+ let decimalSeparator = ".";
134
+ let groupSeparator = ",";
135
+ try {
136
+ const formatter = getCachedFormatter(locale, {
137
+ currency,
138
+ minimumFractionDigits: 0,
139
+ maximumFractionDigits: 2
140
+ });
141
+ const parts = formatter.formatToParts(1234.5);
142
+ const currencyPart = parts.find((part) => part.type === "currency");
143
+ const decimalPart = parts.find((part) => part.type === "decimal");
144
+ const groupPart = parts.find((part) => part.type === "group");
145
+ if (currencyPart) currencySymbol = currencyPart.value;
146
+ if (decimalPart) decimalSeparator = decimalPart.value;
147
+ if (groupPart) groupSeparator = groupPart.value;
148
+ } catch {
149
+ }
150
+ const symbols = {
151
+ currency: currencySymbol,
152
+ decimal: decimalSeparator,
153
+ group: groupSeparator
154
+ };
155
+ currencySymbolsCache.set(key, symbols);
156
+ return symbols;
157
+ }
158
+ function isCurrencyAtEnd(opts) {
159
+ const { locale, currency } = opts;
160
+ const key = `${locale}|${currency}`;
161
+ const cached = currencyAtEndCache.get(key);
162
+ if (cached !== void 0) {
163
+ return cached;
164
+ }
165
+ try {
166
+ const formatter = getCachedFormatter(locale, {
167
+ currency,
168
+ minimumFractionDigits: 0,
169
+ maximumFractionDigits: 0
170
+ });
171
+ const sample = formatter.format(123);
172
+ const result = REGEX_CACHE.currencyAtEnd.test(sample);
173
+ currencyAtEndCache.set(key, result);
174
+ return result;
175
+ } catch {
176
+ currencyAtEndCache.set(key, false);
177
+ return false;
178
+ }
179
+ }
180
+ function isCurrencyMask(opts) {
181
+ const { mask, pattern } = opts;
182
+ return mask === "currency" || Boolean(pattern && (pattern.includes("$") || pattern.includes("\u20AC")));
183
+ }
184
+ var MASK_PATTERNS = {
185
+ phone: {
186
+ pattern: "(###) ###-####",
187
+ transform: (value) => value.replace(REGEX_CACHE.nonDigits, ""),
188
+ validate: (value) => REGEX_CACHE.phone.test(value.replace(REGEX_CACHE.nonDigits, ""))
189
+ },
190
+ ssn: {
191
+ pattern: "###-##-####",
192
+ transform: (value) => value.replace(REGEX_CACHE.nonDigits, ""),
193
+ validate: (value) => REGEX_CACHE.ssn.test(value.replace(REGEX_CACHE.nonDigits, ""))
194
+ },
195
+ date: {
196
+ pattern: "##/##/####",
197
+ transform: (value) => value.replace(REGEX_CACHE.nonDigits, ""),
198
+ validate: (value) => {
199
+ const cleaned = value.replace(REGEX_CACHE.nonDigits, "");
200
+ if (cleaned.length !== 8) return false;
201
+ const month = parseInt(cleaned.substring(0, 2), 10);
202
+ const day = parseInt(cleaned.substring(2, 4), 10);
203
+ const year = parseInt(cleaned.substring(4, 8), 10);
204
+ const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
205
+ const minYear = currentYear - PAST_YEARS_LIMIT;
206
+ const maxYear = currentYear + FUTURE_YEARS_LIMIT;
207
+ if (month < 1 || month > 12 || day < 1 || year < minYear || year > maxYear)
208
+ return false;
209
+ const maxDays = month === 2 && (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) ? 29 : daysInMonthCache[month - 1] ?? 31;
210
+ return day <= maxDays;
211
+ }
212
+ },
213
+ time: {
214
+ pattern: "##:##",
215
+ transform: (value) => value.replace(REGEX_CACHE.nonDigits, ""),
216
+ validate: (value) => {
217
+ const cleaned = value.replace(REGEX_CACHE.nonDigits, "");
218
+ if (!REGEX_CACHE.time.test(cleaned)) return false;
219
+ const hours = parseInt(cleaned.substring(0, 2), 10);
220
+ const minutes = parseInt(cleaned.substring(2, 4), 10);
221
+ return hours <= 23 && minutes <= 59;
222
+ }
223
+ },
224
+ creditCard: {
225
+ pattern: "#### #### #### ####",
226
+ transform: (value) => value.replace(REGEX_CACHE.nonDigits, ""),
227
+ validate: (value) => {
228
+ const cleaned = value.replace(REGEX_CACHE.nonDigits, "");
229
+ if (!REGEX_CACHE.creditCard.test(cleaned)) return false;
230
+ let sum = 0;
231
+ let isEven = false;
232
+ for (let i = cleaned.length - 1; i >= 0; i--) {
233
+ const digitChar = cleaned[i];
234
+ if (!digitChar) continue;
235
+ let digit = parseInt(digitChar, 10);
236
+ if (isEven) {
237
+ digit *= 2;
238
+ if (digit > 9) {
239
+ digit -= 9;
240
+ }
241
+ }
242
+ sum += digit;
243
+ isEven = !isEven;
244
+ }
245
+ return sum % 10 === 0;
246
+ }
247
+ },
248
+ creditCardExpiry: {
249
+ pattern: "##/##",
250
+ transform: (value) => value.replace(REGEX_CACHE.nonDigits, ""),
251
+ validate: (value) => {
252
+ const cleaned = value.replace(REGEX_CACHE.nonDigits, "");
253
+ if (!REGEX_CACHE.creditCardExpiry.test(cleaned)) return false;
254
+ const month = parseInt(cleaned.substring(0, 2), 10);
255
+ const year = parseInt(cleaned.substring(2, 4), 10);
256
+ if (month < 1 || month > 12) return false;
257
+ const now = /* @__PURE__ */ new Date();
258
+ const currentYear = now.getFullYear();
259
+ const currentMonth = now.getMonth() + 1;
260
+ const fullYear = year <= 75 ? 2e3 + year : 1900 + year;
261
+ if (fullYear < currentYear || fullYear === currentYear && month < currentMonth) {
262
+ return false;
263
+ }
264
+ const maxYear = currentYear + 50;
265
+ if (fullYear > maxYear) {
266
+ return false;
267
+ }
268
+ return true;
269
+ }
270
+ },
271
+ zipCode: {
272
+ pattern: "#####",
273
+ transform: (value) => value.replace(REGEX_CACHE.nonDigits, ""),
274
+ validate: (value) => REGEX_CACHE.zipCode.test(value.replace(REGEX_CACHE.nonDigits, ""))
275
+ },
276
+ zipCodeExtended: {
277
+ pattern: "#####-####",
278
+ transform: (value) => value.replace(REGEX_CACHE.nonDigits, ""),
279
+ validate: (value) => REGEX_CACHE.zipCodeExtended.test(
280
+ value.replace(REGEX_CACHE.nonDigits, "")
281
+ )
282
+ },
283
+ currency: {
284
+ pattern: "$###,###.##",
285
+ transform: (value, { currency = DEFAULT_CURRENCY, locale = DEFAULT_LOCALE } = {}) => {
286
+ let localeDecimalSeparator = ".";
287
+ try {
288
+ const formatter = getCachedFormatter(locale, {
289
+ currency,
290
+ minimumFractionDigits: 0,
291
+ maximumFractionDigits: 2
292
+ });
293
+ const parts = formatter.formatToParts(1234.5);
294
+ const decimalPart = parts.find((part) => part.type === "decimal");
295
+ if (decimalPart) localeDecimalSeparator = decimalPart.value;
296
+ } catch {
297
+ }
298
+ const cleaned = value.replace(REGEX_CACHE.nonCurrencyChars, "");
299
+ const dotIndex = cleaned.indexOf(".");
300
+ const commaIndex = cleaned.indexOf(",");
301
+ let hasDecimalSeparator = false;
302
+ let decimalIndex = -1;
303
+ if (localeDecimalSeparator === ",") {
304
+ const lastCommaIndex = cleaned.lastIndexOf(",");
305
+ if (lastCommaIndex !== -1) {
306
+ const afterComma = cleaned.substring(lastCommaIndex + 1);
307
+ if (afterComma.length <= 2 && /^\d*$/.test(afterComma)) {
308
+ hasDecimalSeparator = true;
309
+ decimalIndex = lastCommaIndex;
310
+ }
311
+ }
312
+ if (!hasDecimalSeparator && dotIndex !== -1) {
313
+ const afterDot = cleaned.substring(dotIndex + 1);
314
+ if (afterDot.length <= 2 && /^\d*$/.test(afterDot)) {
315
+ hasDecimalSeparator = true;
316
+ decimalIndex = dotIndex;
317
+ }
318
+ }
319
+ if (!hasDecimalSeparator && cleaned.length >= 4) {
320
+ const match = cleaned.match(/^(\d+)\.(\d{3})(\d{1,2})$/);
321
+ if (match) {
322
+ const [, beforeDot, thousandsPart, decimalPart] = match;
323
+ const integerPart = (beforeDot ?? "") + (thousandsPart ?? "");
324
+ const result = `${integerPart}.${decimalPart}`;
325
+ return result;
326
+ }
327
+ }
328
+ } else {
329
+ const lastDotIndex = cleaned.lastIndexOf(".");
330
+ if (lastDotIndex !== -1) {
331
+ const afterDot = cleaned.substring(lastDotIndex + 1);
332
+ if (afterDot.length <= 2 && /^\d*$/.test(afterDot)) {
333
+ hasDecimalSeparator = true;
334
+ decimalIndex = lastDotIndex;
335
+ }
336
+ }
337
+ if (!hasDecimalSeparator && commaIndex !== -1) {
338
+ const afterComma = cleaned.substring(commaIndex + 1);
339
+ const looksLikeThousands = commaIndex <= 3 && afterComma.length >= 3;
340
+ if (!looksLikeThousands && afterComma.length <= 2 && /^\d*$/.test(afterComma)) {
341
+ hasDecimalSeparator = true;
342
+ decimalIndex = commaIndex;
343
+ }
344
+ }
345
+ }
346
+ if (hasDecimalSeparator && decimalIndex !== -1) {
347
+ const beforeDecimal = cleaned.substring(0, decimalIndex).replace(/[.,]/g, "");
348
+ const afterDecimal = cleaned.substring(decimalIndex + 1).replace(/[.,]/g, "");
349
+ if (afterDecimal === "") {
350
+ const result2 = `${beforeDecimal}.`;
351
+ return result2;
352
+ }
353
+ const result = `${beforeDecimal}.${afterDecimal.substring(0, 2)}`;
354
+ return result;
355
+ }
356
+ const digitsOnly = cleaned.replace(/[.,]/g, "");
357
+ return digitsOnly;
358
+ },
359
+ validate: (value) => {
360
+ if (!REGEX_CACHE.currencyValidation.test(value)) return false;
361
+ const num = parseFloat(value);
362
+ return !Number.isNaN(num) && num >= 0;
363
+ }
364
+ },
365
+ percentage: {
366
+ pattern: "##.##%",
367
+ transform: (value) => {
368
+ const cleaned = value.replace(REGEX_CACHE.percentageChars, "");
369
+ const parts = cleaned.split(".");
370
+ if (parts.length > 2) {
371
+ return `${parts[0]}.${parts.slice(1).join("")}`;
372
+ }
373
+ if (parts[1] && parts[1].length > 2) {
374
+ return `${parts[0]}.${parts[1].substring(0, 2)}`;
375
+ }
376
+ return cleaned;
377
+ },
378
+ validate: (value, opts = {}) => {
379
+ const num = parseFloat(value);
380
+ const min = opts.min ?? 0;
381
+ const max = opts.max ?? 100;
382
+ return !Number.isNaN(num) && num >= min && num <= max;
383
+ }
384
+ },
385
+ licensePlate: {
386
+ pattern: "###-###",
387
+ transform: (value) => value.replace(REGEX_CACHE.nonAlphaNumeric, "").toUpperCase(),
388
+ validate: (value) => REGEX_CACHE.licensePlate.test(value)
389
+ },
390
+ ipv4: {
391
+ pattern: "###.###.###.###",
392
+ transform: (value) => value.replace(REGEX_CACHE.nonNumericDot, ""),
393
+ validate: (value) => {
394
+ if (value.includes(".")) {
395
+ const segments = value.split(".");
396
+ if (segments.length > 4) return false;
397
+ return segments.every((segment) => {
398
+ if (segment === "") return true;
399
+ if (!REGEX_CACHE.ipv4Segment.test(segment)) return false;
400
+ const num = parseInt(segment, 10);
401
+ return num <= 255;
402
+ });
403
+ } else {
404
+ if (!REGEX_CACHE.digitsOnly.test(value)) return false;
405
+ if (value.length > 12) return false;
406
+ const chunks = [];
407
+ for (let i = 0; i < value.length; i += 3) {
408
+ chunks.push(value.substring(i, i + 3));
409
+ }
410
+ if (chunks.length > 4) return false;
411
+ return chunks.every((chunk) => {
412
+ const num = parseInt(chunk, 10);
413
+ return num >= 0 && num <= 255;
414
+ });
415
+ }
416
+ }
417
+ },
418
+ macAddress: {
419
+ pattern: "##:##:##:##:##:##",
420
+ transform: (value) => value.replace(REGEX_CACHE.nonAlphaNumeric, "").toUpperCase(),
421
+ validate: (value) => REGEX_CACHE.macAddress.test(value)
422
+ },
423
+ isbn: {
424
+ pattern: "###-#-###-#####-#",
425
+ transform: (value) => value.replace(REGEX_CACHE.nonDigits, ""),
426
+ validate: (value) => REGEX_CACHE.isbn.test(value.replace(REGEX_CACHE.nonDigits, ""))
427
+ },
428
+ ein: {
429
+ pattern: "##-#######",
430
+ transform: (value) => value.replace(REGEX_CACHE.nonDigits, ""),
431
+ validate: (value) => REGEX_CACHE.ein.test(value.replace(REGEX_CACHE.nonDigits, ""))
432
+ }
433
+ };
434
+ function applyMask(opts) {
435
+ const { value, pattern, currency, locale, mask } = opts;
436
+ const cleanValue = value;
437
+ if (pattern.includes("$") || pattern.includes("\u20AC") || mask === "currency") {
438
+ return applyCurrencyMask({
439
+ value: cleanValue,
440
+ currency: currency ?? DEFAULT_CURRENCY,
441
+ locale: locale ?? DEFAULT_LOCALE
442
+ });
443
+ }
444
+ if (pattern.includes("%")) {
445
+ return applyPercentageMask(cleanValue);
446
+ }
447
+ if (mask === "ipv4") {
448
+ return cleanValue;
449
+ }
450
+ const maskedChars = [];
451
+ let valueIndex = 0;
452
+ for (let i = 0; i < pattern.length && valueIndex < cleanValue.length; i++) {
453
+ const patternChar = pattern[i];
454
+ const valueChar = cleanValue[valueIndex];
455
+ if (patternChar === "#" && valueChar) {
456
+ maskedChars.push(valueChar);
457
+ valueIndex++;
458
+ } else if (patternChar) {
459
+ maskedChars.push(patternChar);
460
+ }
461
+ }
462
+ return maskedChars.join("");
463
+ }
464
+ function applyCurrencyMask(opts) {
465
+ const { value, currency = DEFAULT_CURRENCY, locale = DEFAULT_LOCALE } = opts;
466
+ if (!value) return "";
467
+ const {
468
+ currency: currencySymbol,
469
+ decimal: decimalSeparator,
470
+ group: groupSeparator
471
+ } = getCachedCurrencySymbols({ locale, currency });
472
+ const normalizedValue = value.replace(
473
+ new RegExp(
474
+ `\\${groupSeparator.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`,
475
+ "g"
476
+ ),
477
+ ""
478
+ ).replace(decimalSeparator, ".");
479
+ const parts = normalizedValue.split(".");
480
+ const integerPart = parts[0] ?? "";
481
+ const fractionalPart = parts[1] ?? "";
482
+ if (!integerPart && !fractionalPart) return "";
483
+ const intValue = integerPart ?? "0";
484
+ const fracValue = fractionalPart.slice(0, 2);
485
+ const num = Number(`${intValue}.${fracValue ?? ""}`);
486
+ if (Number.isNaN(num)) {
487
+ const cleanedDigits = value.replace(/[^\d]/g, "");
488
+ if (!cleanedDigits) return "";
489
+ return `${currencySymbol}${cleanedDigits}`;
490
+ }
491
+ const hasExplicitDecimal = value.includes(".") || value.includes(decimalSeparator);
492
+ try {
493
+ const formatter = getCachedFormatter(locale, {
494
+ currency,
495
+ minimumFractionDigits: fracValue ? fracValue.length : 0,
496
+ maximumFractionDigits: 2
497
+ });
498
+ const result = formatter.format(num);
499
+ if (hasExplicitDecimal && !fracValue) {
500
+ if (result.match(/^[^\d\s]+/)) {
501
+ const finalResult = result.replace(/(\d)$/, `$1${decimalSeparator}`);
502
+ return finalResult;
503
+ } else {
504
+ const finalResult = result.replace(
505
+ /(\d)(\s*)([^\d\s]+)$/,
506
+ `$1${decimalSeparator}$2$3`
507
+ );
508
+ return finalResult;
509
+ }
510
+ }
511
+ return result;
512
+ } catch {
513
+ const formattedInt = intValue.replace(
514
+ /\B(?=(\d{3})+(?!\d))/g,
515
+ groupSeparator
516
+ );
517
+ let result = `${currencySymbol}${formattedInt}`;
518
+ if (hasExplicitDecimal) {
519
+ result += `${decimalSeparator}${fracValue}`;
520
+ }
521
+ return result;
522
+ }
523
+ }
524
+ function applyPercentageMask(value) {
525
+ if (!value) return "";
526
+ const parts = value.split(".");
527
+ let result = parts[0] ?? "0";
528
+ if (value.includes(".")) {
529
+ result += `.${(parts[1] ?? "").substring(0, 2)}`;
530
+ }
531
+ return `${result}%`;
532
+ }
533
+ function getUnmaskedValue(opts) {
534
+ const { value, transform, currency, locale } = opts;
535
+ return transform ? transform(value, { currency, locale }) : value.replace(REGEX_CACHE.nonDigits, "");
536
+ }
537
+ function toUnmaskedIndex(opts) {
538
+ const { masked, pattern, caret } = opts;
539
+ let idx = 0;
540
+ for (let i = 0; i < caret && i < masked.length && i < pattern.length; i++) {
541
+ if (pattern[i] === "#") {
542
+ idx++;
543
+ }
544
+ }
545
+ return idx;
546
+ }
547
+ function fromUnmaskedIndex(opts) {
548
+ const { masked, pattern, unmaskedIndex } = opts;
549
+ let seen = 0;
550
+ for (let i = 0; i < masked.length && i < pattern.length; i++) {
551
+ if (pattern[i] === "#") {
552
+ seen++;
553
+ if (seen === unmaskedIndex) {
554
+ return i + 1;
555
+ }
556
+ }
557
+ }
558
+ return masked.length;
559
+ }
560
+ function getCurrencyCaretPosition(opts) {
561
+ const {
562
+ newValue,
563
+ mask,
564
+ transformOpts,
565
+ oldCursorPosition,
566
+ oldValue,
567
+ previousUnmasked
568
+ } = opts;
569
+ if (oldCursorPosition !== void 0 && oldValue && previousUnmasked !== void 0) {
570
+ if (oldCursorPosition < oldValue.length) {
571
+ const digitsBeforeCursor = oldValue.substring(0, oldCursorPosition).replace(/\D/g, "").length;
572
+ let digitCount = 0;
573
+ for (let i = 0; i < newValue.length; i++) {
574
+ if (/\d/.test(newValue[i] ?? "")) {
575
+ digitCount++;
576
+ if (digitCount === digitsBeforeCursor) {
577
+ return i + 1;
578
+ }
579
+ }
580
+ }
581
+ }
582
+ }
583
+ if (mask === "currency") {
584
+ const currencyAtEnd = isCurrencyAtEnd(transformOpts);
585
+ if (currencyAtEnd) {
586
+ const match = newValue.match(/(\d)\s*([^\d\s]+)$/);
587
+ if (match?.[1]) {
588
+ return newValue.lastIndexOf(match[1]) + 1;
589
+ } else {
590
+ return newValue.length;
591
+ }
592
+ } else {
593
+ return newValue.length;
594
+ }
595
+ } else {
596
+ return newValue.length;
597
+ }
598
+ }
599
+ function getPatternCaretPosition(opts) {
600
+ const {
601
+ newValue,
602
+ maskPattern,
603
+ currentUnmasked,
604
+ oldCursorPosition,
605
+ oldValue,
606
+ previousUnmasked
607
+ } = opts;
608
+ let position = 0;
609
+ let unmaskedCount = 0;
610
+ if (oldCursorPosition !== void 0 && oldValue && previousUnmasked !== void 0) {
611
+ const oldUnmaskedIndex = toUnmaskedIndex({
612
+ masked: oldValue,
613
+ pattern: maskPattern.pattern,
614
+ caret: oldCursorPosition
615
+ });
616
+ if (oldCursorPosition < oldValue.length) {
617
+ const targetUnmaskedIndex = Math.min(
618
+ oldUnmaskedIndex,
619
+ currentUnmasked.length
620
+ );
621
+ for (let i = 0; i < maskPattern.pattern.length && i < newValue.length; i++) {
622
+ if (maskPattern.pattern[i] === "#") {
623
+ unmaskedCount++;
624
+ if (unmaskedCount <= targetUnmaskedIndex) {
625
+ position = i + 1;
626
+ }
627
+ }
628
+ }
629
+ return position;
630
+ }
631
+ }
632
+ for (let i = 0; i < maskPattern.pattern.length && i < newValue.length; i++) {
633
+ if (maskPattern.pattern[i] === "#") {
634
+ unmaskedCount++;
635
+ if (unmaskedCount <= currentUnmasked.length) {
636
+ position = i + 1;
637
+ }
638
+ }
639
+ }
640
+ return position;
641
+ }
642
+ function MaskInput(props) {
643
+ const {
644
+ value: valueProp,
645
+ defaultValue,
646
+ onValueChange: onValueChangeProp,
647
+ onValidate,
648
+ onBlur: onBlurProp,
649
+ onFocus: onFocusProp,
650
+ onKeyDown: onKeyDownProp,
651
+ onPaste: onPasteProp,
652
+ onCompositionStart: onCompositionStartProp,
653
+ onCompositionEnd: onCompositionEndProp,
654
+ validationMode = "onChange",
655
+ mask,
656
+ maskPlaceholder,
657
+ currency = DEFAULT_CURRENCY,
658
+ locale = DEFAULT_LOCALE,
659
+ placeholder,
660
+ inputMode,
661
+ min,
662
+ max,
663
+ maxLength,
664
+ asChild = false,
665
+ disabled = false,
666
+ invalid = false,
667
+ readOnly = false,
668
+ required = false,
669
+ withoutMask = false,
670
+ className,
671
+ ref,
672
+ ...inputProps
673
+ } = props;
674
+ const [internalValue, setInternalValue] = React2.useState(defaultValue ?? "");
675
+ const [focused, setFocused] = React2.useState(false);
676
+ const [composing, setComposing] = React2.useState(false);
677
+ const [touched, setTouched] = React2.useState(false);
678
+ const inputRef = React2.useRef(null);
679
+ const composedRef = useComposedRefs(ref, inputRef);
680
+ const isControlled = valueProp !== void 0;
681
+ const value = isControlled ? valueProp : internalValue;
682
+ const maskPattern = React2.useMemo(() => {
683
+ if (typeof mask === "string") {
684
+ return MASK_PATTERNS[mask];
685
+ }
686
+ return mask;
687
+ }, [mask]);
688
+ const transformOpts = React2.useMemo(
689
+ () => ({
690
+ currency,
691
+ locale
692
+ }),
693
+ [currency, locale]
694
+ );
695
+ const placeholderValue = React2.useMemo(() => {
696
+ if (withoutMask) return placeholder;
697
+ if (placeholder && maskPlaceholder) {
698
+ return focused ? maskPlaceholder : placeholder;
699
+ }
700
+ if (maskPlaceholder) {
701
+ return focused ? maskPlaceholder : void 0;
702
+ }
703
+ return placeholder;
704
+ }, [placeholder, maskPlaceholder, focused, withoutMask]);
705
+ const displayValue = React2.useMemo(() => {
706
+ if (withoutMask || !maskPattern || !value) return value ?? "";
707
+ const unmasked = getUnmaskedValue({
708
+ value,
709
+ transform: maskPattern.transform,
710
+ ...transformOpts
711
+ });
712
+ return applyMask({
713
+ value: unmasked,
714
+ pattern: maskPattern.pattern,
715
+ ...transformOpts,
716
+ mask
717
+ });
718
+ }, [value, maskPattern, withoutMask, transformOpts, mask]);
719
+ const tokenCount = React2.useMemo(() => {
720
+ if (!maskPattern || CURRENCY_PERCENTAGE_SYMBOLS.test(maskPattern.pattern))
721
+ return void 0;
722
+ return maskPattern.pattern.match(REGEX_CACHE.hashPattern)?.length ?? 0;
723
+ }, [maskPattern]);
724
+ const calculatedMaxLength = tokenCount ? maskPattern?.pattern.length : maxLength;
725
+ const calculatedInputMode = React2.useMemo(() => {
726
+ if (inputMode) return inputMode;
727
+ if (!maskPattern) return void 0;
728
+ if (mask === "currency" || mask === "percentage" || mask === "ipv4") {
729
+ return "decimal";
730
+ }
731
+ if (typeof mask === "string" && NUMERIC_MASK_PATTERNS.test(mask)) {
732
+ return "numeric";
733
+ }
734
+ return void 0;
735
+ }, [maskPattern, mask, inputMode]);
736
+ const shouldValidate = React2.useCallback(
737
+ (trigger) => {
738
+ if (!onValidate || !maskPattern?.validate) return false;
739
+ switch (validationMode) {
740
+ case "onChange":
741
+ return trigger === "change";
742
+ case "onBlur":
743
+ return trigger === "blur";
744
+ case "onSubmit":
745
+ return false;
746
+ case "onTouched":
747
+ return touched ? trigger === "change" : trigger === "blur";
748
+ case "all":
749
+ return true;
750
+ default:
751
+ return trigger === "change";
752
+ }
753
+ },
754
+ [onValidate, maskPattern, validationMode, touched]
755
+ );
756
+ const validationOpts = React2.useMemo(
757
+ () => ({
758
+ min: typeof min === "string" ? parseFloat(min) : min,
759
+ max: typeof max === "string" ? parseFloat(max) : max
760
+ }),
761
+ [min, max]
762
+ );
763
+ const onInputValidate = React2.useCallback(
764
+ (unmaskedValue) => {
765
+ if (onValidate && maskPattern?.validate) {
766
+ const isValid = maskPattern.validate(unmaskedValue, validationOpts);
767
+ onValidate(isValid, unmaskedValue);
768
+ }
769
+ },
770
+ [onValidate, maskPattern?.validate, validationOpts]
771
+ );
772
+ const onValueChange = React2.useCallback(
773
+ (event) => {
774
+ const inputValue = event.target.value;
775
+ let newValue = inputValue;
776
+ let unmaskedValue = inputValue;
777
+ if (composing) {
778
+ if (!isControlled) setInternalValue(inputValue);
779
+ return;
780
+ }
781
+ if (withoutMask || !maskPattern) {
782
+ if (!isControlled) setInternalValue(inputValue);
783
+ if (shouldValidate("change")) onValidate?.(true, inputValue);
784
+ onValueChangeProp?.(inputValue, inputValue);
785
+ return;
786
+ }
787
+ if (maskPattern) {
788
+ unmaskedValue = getUnmaskedValue({
789
+ value: inputValue,
790
+ transform: maskPattern.transform,
791
+ ...transformOpts
792
+ });
793
+ newValue = applyMask({
794
+ value: unmaskedValue,
795
+ pattern: maskPattern.pattern,
796
+ ...transformOpts,
797
+ mask
798
+ });
799
+ if (inputRef.current && newValue !== inputValue) {
800
+ const inputElement = inputRef.current;
801
+ if (!(inputElement instanceof HTMLInputElement)) return;
802
+ const oldCursorPosition = inputElement.selectionStart ?? 0;
803
+ inputElement.value = newValue;
804
+ const currentUnmasked = getUnmaskedValue({
805
+ value: newValue,
806
+ transform: maskPattern.transform,
807
+ ...transformOpts
808
+ });
809
+ let newCursorPosition;
810
+ const previousUnmasked = getUnmaskedValue({
811
+ value,
812
+ transform: maskPattern.transform,
813
+ ...transformOpts
814
+ });
815
+ if (CURRENCY_PERCENTAGE_SYMBOLS.test(maskPattern.pattern)) {
816
+ newCursorPosition = getCurrencyCaretPosition({
817
+ newValue,
818
+ mask,
819
+ transformOpts,
820
+ oldCursorPosition,
821
+ oldValue: inputValue,
822
+ previousUnmasked
823
+ });
824
+ } else {
825
+ newCursorPosition = getPatternCaretPosition({
826
+ newValue,
827
+ maskPattern,
828
+ currentUnmasked,
829
+ oldCursorPosition,
830
+ oldValue: inputValue,
831
+ previousUnmasked
832
+ });
833
+ }
834
+ if (isCurrencyMask({ mask, pattern: maskPattern.pattern })) {
835
+ if (mask === "currency") {
836
+ const currencyAtEnd = isCurrencyAtEnd(transformOpts);
837
+ if (!currencyAtEnd) {
838
+ newCursorPosition = Math.max(1, newCursorPosition);
839
+ }
840
+ } else {
841
+ newCursorPosition = Math.max(1, newCursorPosition);
842
+ }
843
+ } else if (maskPattern.pattern.includes("%")) {
844
+ newCursorPosition = Math.min(
845
+ newValue.length - 1,
846
+ newCursorPosition
847
+ );
848
+ }
849
+ newCursorPosition = Math.min(newCursorPosition, newValue.length);
850
+ inputElement.setSelectionRange(newCursorPosition, newCursorPosition);
851
+ }
852
+ }
853
+ if (!isControlled) {
854
+ setInternalValue(newValue);
855
+ }
856
+ if (shouldValidate("change")) {
857
+ onInputValidate(unmaskedValue);
858
+ }
859
+ onValueChangeProp?.(newValue, unmaskedValue);
860
+ },
861
+ [
862
+ maskPattern,
863
+ isControlled,
864
+ onValueChangeProp,
865
+ onValidate,
866
+ onInputValidate,
867
+ composing,
868
+ shouldValidate,
869
+ withoutMask,
870
+ transformOpts,
871
+ mask,
872
+ value
873
+ ]
874
+ );
875
+ const onFocus = React2.useCallback(
876
+ (event) => {
877
+ onFocusProp?.(event);
878
+ if (event.defaultPrevented) return;
879
+ setFocused(true);
880
+ },
881
+ [onFocusProp]
882
+ );
883
+ const onBlur = React2.useCallback(
884
+ (event) => {
885
+ onBlurProp?.(event);
886
+ if (event.defaultPrevented) return;
887
+ setFocused(false);
888
+ if (!touched) {
889
+ setTouched(true);
890
+ }
891
+ if (shouldValidate("blur")) {
892
+ const currentValue = event.target.value;
893
+ const unmaskedValue = maskPattern ? getUnmaskedValue({
894
+ value: currentValue,
895
+ transform: maskPattern.transform,
896
+ ...transformOpts
897
+ }) : currentValue;
898
+ onInputValidate(unmaskedValue);
899
+ }
900
+ },
901
+ [
902
+ onBlurProp,
903
+ touched,
904
+ shouldValidate,
905
+ onInputValidate,
906
+ maskPattern,
907
+ transformOpts
908
+ ]
909
+ );
910
+ const onCompositionStart = React2.useCallback(
911
+ (event) => {
912
+ onCompositionStartProp?.(event);
913
+ if (event.defaultPrevented) return;
914
+ setComposing(true);
915
+ },
916
+ [onCompositionStartProp]
917
+ );
918
+ const onCompositionEnd = React2.useCallback(
919
+ (event) => {
920
+ onCompositionEndProp?.(event);
921
+ if (event.defaultPrevented) return;
922
+ setComposing(false);
923
+ const inputElement = inputRef.current;
924
+ if (!inputElement) return;
925
+ if (!(inputElement instanceof HTMLInputElement)) return;
926
+ const inputValue = inputElement.value;
927
+ if (!maskPattern || withoutMask) {
928
+ if (!isControlled) setInternalValue(inputValue);
929
+ if (shouldValidate("change")) onValidate?.(true, inputValue);
930
+ onValueChangeProp?.(inputValue, inputValue);
931
+ return;
932
+ }
933
+ const unmasked = getUnmaskedValue({
934
+ value: inputValue,
935
+ transform: maskPattern.transform,
936
+ ...transformOpts
937
+ });
938
+ const masked = applyMask({
939
+ value: unmasked,
940
+ pattern: maskPattern.pattern,
941
+ ...transformOpts,
942
+ mask
943
+ });
944
+ if (!isControlled) setInternalValue(masked);
945
+ if (shouldValidate("change")) onInputValidate(unmasked);
946
+ onValueChangeProp?.(masked, unmasked);
947
+ },
948
+ [
949
+ onCompositionEndProp,
950
+ maskPattern,
951
+ withoutMask,
952
+ isControlled,
953
+ shouldValidate,
954
+ onValidate,
955
+ onValueChangeProp,
956
+ transformOpts,
957
+ mask,
958
+ onInputValidate
959
+ ]
960
+ );
961
+ const onPaste = React2.useCallback(
962
+ (event) => {
963
+ onPasteProp?.(event);
964
+ if (event.defaultPrevented) return;
965
+ if (withoutMask || !maskPattern) return;
966
+ if (mask === "ipv4") return;
967
+ const target = event.target;
968
+ if (!(target instanceof HTMLInputElement)) return;
969
+ const pastedData = event.clipboardData.getData("text");
970
+ if (!pastedData) return;
971
+ event.preventDefault();
972
+ const currentValue = target.value;
973
+ const selectionStart = target.selectionStart ?? 0;
974
+ const selectionEnd = target.selectionEnd ?? 0;
975
+ const beforeSelection = currentValue.slice(0, selectionStart);
976
+ const afterSelection = currentValue.slice(selectionEnd);
977
+ const newInputValue = beforeSelection + pastedData + afterSelection;
978
+ const unmasked = getUnmaskedValue({
979
+ value: newInputValue,
980
+ transform: maskPattern.transform,
981
+ ...transformOpts
982
+ });
983
+ const newMaskedValue = applyMask({
984
+ value: unmasked,
985
+ pattern: maskPattern.pattern,
986
+ ...transformOpts,
987
+ mask
988
+ });
989
+ target.value = newMaskedValue;
990
+ if (isCurrencyMask({ mask, pattern: maskPattern.pattern })) {
991
+ const currencyAtEnd = isCurrencyAtEnd(transformOpts);
992
+ const caret = currencyAtEnd ? newMaskedValue.search(/\s*[^\d\s]+$/) : newMaskedValue.length;
993
+ target.setSelectionRange(caret, caret);
994
+ return;
995
+ }
996
+ if (maskPattern.pattern.includes("%")) {
997
+ target.setSelectionRange(
998
+ newMaskedValue.length - 1,
999
+ newMaskedValue.length - 1
1000
+ );
1001
+ return;
1002
+ }
1003
+ let newCursorPosition = newMaskedValue.length;
1004
+ try {
1005
+ const unmaskedCount = unmasked.length;
1006
+ let position = 0;
1007
+ let count = 0;
1008
+ for (let i = 0; i < maskPattern.pattern.length && i < newMaskedValue.length; i++) {
1009
+ if (maskPattern.pattern[i] === "#") {
1010
+ count++;
1011
+ if (count <= unmaskedCount) {
1012
+ position = i + 1;
1013
+ }
1014
+ }
1015
+ }
1016
+ newCursorPosition = position;
1017
+ } catch {
1018
+ }
1019
+ target.setSelectionRange(newCursorPosition, newCursorPosition);
1020
+ if (!isControlled) setInternalValue(newMaskedValue);
1021
+ if (shouldValidate("change")) onInputValidate(unmasked);
1022
+ onValueChangeProp?.(newMaskedValue, unmasked);
1023
+ },
1024
+ [
1025
+ onPasteProp,
1026
+ withoutMask,
1027
+ maskPattern,
1028
+ mask,
1029
+ transformOpts,
1030
+ isControlled,
1031
+ shouldValidate,
1032
+ onInputValidate,
1033
+ onValueChangeProp
1034
+ ]
1035
+ );
1036
+ const onKeyDown = React2.useCallback(
1037
+ (event) => {
1038
+ onKeyDownProp?.(event);
1039
+ if (event.defaultPrevented) return;
1040
+ if (withoutMask || !maskPattern) return;
1041
+ if (mask === "ipv4") return;
1042
+ if (event.key === "Backspace") {
1043
+ const target = event.target;
1044
+ if (!(target instanceof HTMLInputElement)) return;
1045
+ const cursorPosition = target.selectionStart ?? 0;
1046
+ const selectionEnd = target.selectionEnd ?? 0;
1047
+ const currentValue = target.value;
1048
+ if (mask === "currency" || mask === "percentage" || maskPattern.pattern.includes("$") || maskPattern.pattern.includes("\u20AC") || maskPattern.pattern.includes("%")) {
1049
+ return;
1050
+ }
1051
+ if (cursorPosition !== selectionEnd) {
1052
+ return;
1053
+ }
1054
+ if (cursorPosition > 0) {
1055
+ const charBeforeCursor = currentValue[cursorPosition - 1];
1056
+ if (charBeforeCursor) {
1057
+ event.preventDefault();
1058
+ const unmaskedIndex = toUnmaskedIndex({
1059
+ masked: currentValue,
1060
+ pattern: maskPattern.pattern,
1061
+ caret: cursorPosition
1062
+ });
1063
+ if (unmaskedIndex > 0) {
1064
+ const currentUnmasked = getUnmaskedValue({
1065
+ value: currentValue,
1066
+ transform: maskPattern.transform,
1067
+ ...transformOpts
1068
+ });
1069
+ const nextUnmasked = currentUnmasked.slice(0, unmaskedIndex - 1) + currentUnmasked.slice(unmaskedIndex);
1070
+ const nextMasked = applyMask({
1071
+ value: nextUnmasked,
1072
+ pattern: maskPattern.pattern,
1073
+ ...transformOpts,
1074
+ mask
1075
+ });
1076
+ target.value = nextMasked;
1077
+ const nextCaret = fromUnmaskedIndex({
1078
+ masked: nextMasked,
1079
+ pattern: maskPattern.pattern,
1080
+ unmaskedIndex: unmaskedIndex - 1
1081
+ });
1082
+ target.setSelectionRange(nextCaret, nextCaret);
1083
+ onValueChangeProp?.(nextMasked, nextUnmasked);
1084
+ }
1085
+ return;
1086
+ }
1087
+ }
1088
+ }
1089
+ if (event.key === "Delete") {
1090
+ const target = event.target;
1091
+ if (!(target instanceof HTMLInputElement)) return;
1092
+ const cursorPosition = target.selectionStart ?? 0;
1093
+ const selectionEnd = target.selectionEnd ?? 0;
1094
+ const currentValue = target.value;
1095
+ if (mask === "currency" || mask === "percentage" || maskPattern.pattern.includes("$") || maskPattern.pattern.includes("\u20AC") || maskPattern.pattern.includes("%")) {
1096
+ return;
1097
+ }
1098
+ if (cursorPosition !== selectionEnd) {
1099
+ return;
1100
+ }
1101
+ if (cursorPosition < currentValue.length) {
1102
+ const charAtCursor = currentValue[cursorPosition];
1103
+ if (charAtCursor) {
1104
+ event.preventDefault();
1105
+ const unmaskedIndex = toUnmaskedIndex({
1106
+ masked: currentValue,
1107
+ pattern: maskPattern.pattern,
1108
+ caret: cursorPosition
1109
+ });
1110
+ const currentUnmasked = getUnmaskedValue({
1111
+ value: currentValue,
1112
+ transform: maskPattern.transform,
1113
+ ...transformOpts
1114
+ });
1115
+ if (unmaskedIndex < currentUnmasked.length) {
1116
+ const nextUnmasked = currentUnmasked.slice(0, unmaskedIndex) + currentUnmasked.slice(unmaskedIndex + 1);
1117
+ const nextMasked = applyMask({
1118
+ value: nextUnmasked,
1119
+ pattern: maskPattern.pattern,
1120
+ ...transformOpts,
1121
+ mask
1122
+ });
1123
+ target.value = nextMasked;
1124
+ const nextCaret = fromUnmaskedIndex({
1125
+ masked: nextMasked,
1126
+ pattern: maskPattern.pattern,
1127
+ unmaskedIndex
1128
+ });
1129
+ target.setSelectionRange(nextCaret, nextCaret);
1130
+ onValueChangeProp?.(nextMasked, nextUnmasked);
1131
+ }
1132
+ return;
1133
+ }
1134
+ }
1135
+ }
1136
+ },
1137
+ [
1138
+ maskPattern,
1139
+ onKeyDownProp,
1140
+ onValueChangeProp,
1141
+ transformOpts,
1142
+ mask,
1143
+ withoutMask
1144
+ ]
1145
+ );
1146
+ const InputPrimitive = asChild ? Slot : "input";
1147
+ return /* @__PURE__ */ jsx(
1148
+ InputPrimitive,
1149
+ {
1150
+ "aria-invalid": invalid,
1151
+ "data-disabled": disabled ? "" : void 0,
1152
+ "data-invalid": invalid ? "" : void 0,
1153
+ "data-readonly": readOnly ? "" : void 0,
1154
+ "data-required": required ? "" : void 0,
1155
+ "data-slot": "mask-input",
1156
+ ...inputProps,
1157
+ className: cn(
1158
+ "flex h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs outline-none transition-[color,box-shadow] selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium file:text-foreground file:text-sm placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30",
1159
+ "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
1160
+ "aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
1161
+ className
1162
+ ),
1163
+ placeholder: placeholderValue,
1164
+ ref: composedRef,
1165
+ value: displayValue,
1166
+ disabled,
1167
+ maxLength: calculatedMaxLength,
1168
+ readOnly,
1169
+ required,
1170
+ inputMode: calculatedInputMode,
1171
+ min,
1172
+ max,
1173
+ onFocus,
1174
+ onBlur,
1175
+ onKeyDown,
1176
+ onPaste,
1177
+ onChange: onValueChange,
1178
+ onCompositionStart,
1179
+ onCompositionEnd
1180
+ }
1181
+ );
1182
+ }
1183
+
1184
+ export { MASK_PATTERNS, MaskInput, applyCurrencyMask, applyMask, applyPercentageMask, fromUnmaskedIndex, getUnmaskedValue, toUnmaskedIndex };
1185
+ //# sourceMappingURL=mask-input.js.map
1186
+ //# sourceMappingURL=mask-input.js.map