@omnifyjp/ui 0.5.2 → 1.0.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 (414) hide show
  1. package/README.md +3 -6
  2. package/dist/chunk-2C2HRGM7.js +51 -0
  3. package/dist/chunk-2C2HRGM7.js.map +1 -0
  4. package/dist/chunk-2TUWDXAC.js +196 -0
  5. package/dist/chunk-2TUWDXAC.js.map +1 -0
  6. package/dist/chunk-34ARZSNP.js +63 -0
  7. package/dist/chunk-34ARZSNP.js.map +1 -0
  8. package/dist/chunk-35DNN46W.js +13 -0
  9. package/dist/chunk-35DNN46W.js.map +1 -0
  10. package/dist/chunk-35U6QG4P.js +116 -0
  11. package/dist/chunk-35U6QG4P.js.map +1 -0
  12. package/dist/chunk-36YYHIJU.js +52 -0
  13. package/dist/chunk-36YYHIJU.js.map +1 -0
  14. package/dist/chunk-3EOHW4QN.js +35 -0
  15. package/dist/chunk-3EOHW4QN.js.map +1 -0
  16. package/dist/chunk-3VU56V66.js +41 -0
  17. package/dist/chunk-3VU56V66.js.map +1 -0
  18. package/dist/chunk-55E7D2HR.js +99 -0
  19. package/dist/chunk-55E7D2HR.js.map +1 -0
  20. package/dist/chunk-67YUL2ZS.js +53 -0
  21. package/dist/chunk-67YUL2ZS.js.map +1 -0
  22. package/dist/chunk-6DIDQ4TB.js +131 -0
  23. package/dist/chunk-6DIDQ4TB.js.map +1 -0
  24. package/dist/chunk-6GWVQB3Q.js +155 -0
  25. package/dist/chunk-6GWVQB3Q.js.map +1 -0
  26. package/dist/chunk-75WZR6HF.js +44 -0
  27. package/dist/chunk-75WZR6HF.js.map +1 -0
  28. package/dist/chunk-7IRLBU2I.js +114 -0
  29. package/dist/chunk-7IRLBU2I.js.map +1 -0
  30. package/dist/chunk-7RMTPT6O.js +99 -0
  31. package/dist/chunk-7RMTPT6O.js.map +1 -0
  32. package/dist/chunk-7XH3MGBR.js +128 -0
  33. package/dist/chunk-7XH3MGBR.js.map +1 -0
  34. package/dist/chunk-A3BB5ZOC.js +77 -0
  35. package/dist/chunk-A3BB5ZOC.js.map +1 -0
  36. package/dist/chunk-BAQWGQJG.js +106 -0
  37. package/dist/chunk-BAQWGQJG.js.map +1 -0
  38. package/dist/chunk-BRSM3SZP.js +46 -0
  39. package/dist/chunk-BRSM3SZP.js.map +1 -0
  40. package/dist/chunk-C34KSTWA.js +43 -0
  41. package/dist/chunk-C34KSTWA.js.map +1 -0
  42. package/dist/chunk-C5NZAOA7.js +54 -0
  43. package/dist/chunk-C5NZAOA7.js.map +1 -0
  44. package/dist/chunk-CUZR4JWM.js +23 -0
  45. package/dist/chunk-CUZR4JWM.js.map +1 -0
  46. package/dist/chunk-DGPY4WP3.js +11 -0
  47. package/dist/chunk-DGPY4WP3.js.map +1 -0
  48. package/dist/chunk-DNCZOUNY.js +239 -0
  49. package/dist/chunk-DNCZOUNY.js.map +1 -0
  50. package/dist/chunk-EWBCV7VA.js +65 -0
  51. package/dist/chunk-EWBCV7VA.js.map +1 -0
  52. package/dist/chunk-F2ZJLKDP.js +119 -0
  53. package/dist/chunk-F2ZJLKDP.js.map +1 -0
  54. package/dist/chunk-FLWMT4DB.js +66 -0
  55. package/dist/chunk-FLWMT4DB.js.map +1 -0
  56. package/dist/chunk-FRKG7JQY.js +48 -0
  57. package/dist/chunk-FRKG7JQY.js.map +1 -0
  58. package/dist/chunk-G7HTZBUR.js +187 -0
  59. package/dist/chunk-G7HTZBUR.js.map +1 -0
  60. package/dist/chunk-HWTW64R5.js +90 -0
  61. package/dist/chunk-HWTW64R5.js.map +1 -0
  62. package/dist/chunk-IAWKX5W4.js +219 -0
  63. package/dist/chunk-IAWKX5W4.js.map +1 -0
  64. package/dist/chunk-INLM7UJC.js +238 -0
  65. package/dist/chunk-INLM7UJC.js.map +1 -0
  66. package/dist/chunk-JAJMM32I.js +18 -0
  67. package/dist/chunk-JAJMM32I.js.map +1 -0
  68. package/dist/chunk-JJSVA3TH.js +61 -0
  69. package/dist/chunk-JJSVA3TH.js.map +1 -0
  70. package/dist/chunk-JLTBUACL.js +121 -0
  71. package/dist/chunk-JLTBUACL.js.map +1 -0
  72. package/dist/chunk-JRU2QX7T.js +38 -0
  73. package/dist/chunk-JRU2QX7T.js.map +1 -0
  74. package/dist/chunk-JXGRW2MR.js +17 -0
  75. package/dist/chunk-JXGRW2MR.js.map +1 -0
  76. package/dist/chunk-KTBOZ4NE.js +93 -0
  77. package/dist/chunk-KTBOZ4NE.js.map +1 -0
  78. package/dist/chunk-LMT327XH.js +56 -0
  79. package/dist/chunk-LMT327XH.js.map +1 -0
  80. package/dist/chunk-LTTNCAAA.js +138 -0
  81. package/dist/chunk-LTTNCAAA.js.map +1 -0
  82. package/dist/chunk-LVZNNIK4.js +111 -0
  83. package/dist/chunk-LVZNNIK4.js.map +1 -0
  84. package/dist/chunk-MJLFJPUG.js +143 -0
  85. package/dist/chunk-MJLFJPUG.js.map +1 -0
  86. package/dist/chunk-MZ2P566X.js +65 -0
  87. package/dist/chunk-MZ2P566X.js.map +1 -0
  88. package/dist/chunk-N47H4MHX.js +41 -0
  89. package/dist/chunk-N47H4MHX.js.map +1 -0
  90. package/dist/chunk-NNJTKHCE.js +160 -0
  91. package/dist/chunk-NNJTKHCE.js.map +1 -0
  92. package/dist/chunk-NPL2R5LD.js +171 -0
  93. package/dist/chunk-NPL2R5LD.js.map +1 -0
  94. package/dist/chunk-NU56GKGM.js +44 -0
  95. package/dist/chunk-NU56GKGM.js.map +1 -0
  96. package/dist/chunk-P3M5TZD2.js +24 -0
  97. package/dist/chunk-P3M5TZD2.js.map +1 -0
  98. package/dist/chunk-PGWNOZDX.js +28 -0
  99. package/dist/chunk-PGWNOZDX.js.map +1 -0
  100. package/dist/chunk-QB3UWRZH.js +92 -0
  101. package/dist/chunk-QB3UWRZH.js.map +1 -0
  102. package/dist/chunk-R2CDE5DO.js +33 -0
  103. package/dist/chunk-R2CDE5DO.js.map +1 -0
  104. package/dist/chunk-RQNZDWY3.js +65 -0
  105. package/dist/chunk-RQNZDWY3.js.map +1 -0
  106. package/dist/chunk-S6PDRGR5.js +109 -0
  107. package/dist/chunk-S6PDRGR5.js.map +1 -0
  108. package/dist/chunk-TGYQ3AKH.js +95 -0
  109. package/dist/chunk-TGYQ3AKH.js.map +1 -0
  110. package/dist/chunk-THQUH6WX.js +81 -0
  111. package/dist/chunk-THQUH6WX.js.map +1 -0
  112. package/dist/chunk-TJMK2KBE.js +112 -0
  113. package/dist/chunk-TJMK2KBE.js.map +1 -0
  114. package/dist/chunk-TTH7TWVX.js +30 -0
  115. package/dist/chunk-TTH7TWVX.js.map +1 -0
  116. package/dist/chunk-USIHM7FV.js +211 -0
  117. package/dist/chunk-USIHM7FV.js.map +1 -0
  118. package/dist/chunk-VVYSAGB3.js +104 -0
  119. package/dist/chunk-VVYSAGB3.js.map +1 -0
  120. package/dist/chunk-WD5KZE25.js +25 -0
  121. package/dist/chunk-WD5KZE25.js.map +1 -0
  122. package/dist/chunk-WL4ZO2H3.js +33 -0
  123. package/dist/chunk-WL4ZO2H3.js.map +1 -0
  124. package/dist/chunk-WRCHR4AK.js +23 -0
  125. package/dist/chunk-WRCHR4AK.js.map +1 -0
  126. package/dist/chunk-WS6E7HBT.js +39 -0
  127. package/dist/chunk-WS6E7HBT.js.map +1 -0
  128. package/dist/chunk-XOJJBNDX.js +33 -0
  129. package/dist/chunk-XOJJBNDX.js.map +1 -0
  130. package/dist/chunk-YBMEQZX7.js +164 -0
  131. package/dist/chunk-YBMEQZX7.js.map +1 -0
  132. package/dist/chunk-Z2QAABLM.js +86 -0
  133. package/dist/chunk-Z2QAABLM.js.map +1 -0
  134. package/dist/chunk-ZHEKDP5X.js +41 -0
  135. package/dist/chunk-ZHEKDP5X.js.map +1 -0
  136. package/dist/chunk-ZPMXRW2A.js +63 -0
  137. package/dist/chunk-ZPMXRW2A.js.map +1 -0
  138. package/dist/chunk-ZYEGBF7G.js +25 -0
  139. package/dist/chunk-ZYEGBF7G.js.map +1 -0
  140. package/dist/components/accordion.d.ts +37 -70
  141. package/dist/components/accordion.js +2 -1
  142. package/dist/components/accordion.js.map +1 -1
  143. package/dist/components/alert-dialog.d.ts +56 -1
  144. package/dist/components/alert-dialog.js +3 -1
  145. package/dist/components/alert-dialog.js.map +1 -1
  146. package/dist/components/alert.d.ts +68 -1
  147. package/dist/components/alert.js +2 -1
  148. package/dist/components/alert.js.map +1 -1
  149. package/dist/components/aspect-ratio.d.ts +23 -1
  150. package/dist/components/aspect-ratio.js +1 -1
  151. package/dist/components/aspect-ratio.js.map +1 -1
  152. package/dist/components/avatar.d.ts +48 -1
  153. package/dist/components/avatar.js +2 -1
  154. package/dist/components/avatar.js.map +1 -1
  155. package/dist/components/badge.d.ts +52 -1
  156. package/dist/components/badge.js +2 -1
  157. package/dist/components/badge.js.map +1 -1
  158. package/dist/components/breadcrumb.d.ts +50 -1
  159. package/dist/components/breadcrumb.js +2 -1
  160. package/dist/components/breadcrumb.js.map +1 -1
  161. package/dist/components/button.d.ts +81 -1
  162. package/dist/components/button.js +2 -1
  163. package/dist/components/button.js.map +1 -1
  164. package/dist/components/calendar-category-badge.d.ts +24 -1
  165. package/dist/components/calendar-category-badge.js +3 -1
  166. package/dist/components/calendar-category-badge.js.map +1 -1
  167. package/dist/components/calendar-event-chip.d.ts +41 -1
  168. package/dist/components/calendar-event-chip.js +2 -1
  169. package/dist/components/calendar-event-chip.js.map +1 -1
  170. package/dist/components/calendar-event-sheet.d.ts +68 -1
  171. package/dist/components/calendar-event-sheet.js +7 -1
  172. package/dist/components/calendar-event-sheet.js.map +1 -1
  173. package/dist/components/calendar-mini.d.ts +65 -1
  174. package/dist/components/calendar-mini.js +4 -1
  175. package/dist/components/calendar-mini.js.map +1 -1
  176. package/dist/components/calendar-toolbar.d.ts +58 -1
  177. package/dist/components/calendar-toolbar.js +5 -1
  178. package/dist/components/calendar-toolbar.js.map +1 -1
  179. package/dist/components/calendar.d.ts +19 -1
  180. package/dist/components/calendar.js +3 -1
  181. package/dist/components/calendar.js.map +1 -1
  182. package/dist/components/card.d.ts +43 -1
  183. package/dist/components/card.js +2 -1
  184. package/dist/components/card.js.map +1 -1
  185. package/dist/components/carousel.d.ts +53 -1
  186. package/dist/components/carousel.js +3 -1
  187. package/dist/components/carousel.js.map +1 -1
  188. package/dist/components/chart.d.ts +125 -1
  189. package/dist/components/chart.js +2 -1
  190. package/dist/components/chart.js.map +1 -1
  191. package/dist/components/checkbox.d.ts +24 -1
  192. package/dist/components/checkbox.js +2 -1
  193. package/dist/components/checkbox.js.map +1 -1
  194. package/dist/components/collapsible.d.ts +28 -1
  195. package/dist/components/collapsible.js +1 -1
  196. package/dist/components/collapsible.js.map +1 -1
  197. package/dist/components/color-picker.d.ts +35 -1
  198. package/dist/components/color-picker.js +5 -1
  199. package/dist/components/color-picker.js.map +1 -1
  200. package/dist/components/combobox.d.ts +98 -1
  201. package/dist/components/combobox.js +6 -1
  202. package/dist/components/combobox.js.map +1 -1
  203. package/dist/components/command.d.ts +63 -1
  204. package/dist/components/command.js +3 -1
  205. package/dist/components/command.js.map +1 -1
  206. package/dist/components/context-menu.d.ts +70 -1
  207. package/dist/components/context-menu.js +2 -1
  208. package/dist/components/context-menu.js.map +1 -1
  209. package/dist/components/date-picker.d.ts +71 -1
  210. package/dist/components/date-picker.js +5 -1
  211. package/dist/components/date-picker.js.map +1 -1
  212. package/dist/components/dialog.d.ts +58 -1
  213. package/dist/components/dialog.js +2 -1
  214. package/dist/components/dialog.js.map +1 -1
  215. package/dist/components/drawer.d.ts +60 -1
  216. package/dist/components/drawer.js +2 -1
  217. package/dist/components/drawer.js.map +1 -1
  218. package/dist/components/dropdown-menu.d.ts +76 -1
  219. package/dist/components/dropdown-menu.js +2 -1
  220. package/dist/components/dropdown-menu.js.map +1 -1
  221. package/dist/components/file-upload.d.ts +44 -1
  222. package/dist/components/file-upload.js +3 -1
  223. package/dist/components/file-upload.js.map +1 -1
  224. package/dist/components/form.d.ts +67 -1
  225. package/dist/components/form.js +3 -1
  226. package/dist/components/form.js.map +1 -1
  227. package/dist/components/hover-card.d.ts +43 -1
  228. package/dist/components/hover-card.js +2 -1
  229. package/dist/components/hover-card.js.map +1 -1
  230. package/dist/components/input-otp.d.ts +38 -1
  231. package/dist/components/input-otp.js +2 -1
  232. package/dist/components/input-otp.js.map +1 -1
  233. package/dist/components/input.d.ts +38 -1
  234. package/dist/components/input.js +2 -1
  235. package/dist/components/input.js.map +1 -1
  236. package/dist/components/label.d.ts +20 -1
  237. package/dist/components/label.js +2 -1
  238. package/dist/components/label.js.map +1 -1
  239. package/dist/components/menubar.d.ts +82 -1
  240. package/dist/components/menubar.js +2 -1
  241. package/dist/components/menubar.js.map +1 -1
  242. package/dist/components/navigation-menu.d.ts +64 -1
  243. package/dist/components/navigation-menu.js +2 -1
  244. package/dist/components/navigation-menu.js.map +1 -1
  245. package/dist/components/pagination.d.ts +59 -1
  246. package/dist/components/pagination.js +3 -1
  247. package/dist/components/pagination.js.map +1 -1
  248. package/dist/components/password-input.d.ts +32 -1
  249. package/dist/components/password-input.js +3 -1
  250. package/dist/components/password-input.js.map +1 -1
  251. package/dist/components/permission-grid.d.ts +67 -1
  252. package/dist/components/permission-grid.js +3 -1
  253. package/dist/components/permission-grid.js.map +1 -1
  254. package/dist/components/popover.d.ts +37 -1
  255. package/dist/components/popover.js +2 -1
  256. package/dist/components/popover.js.map +1 -1
  257. package/dist/components/progress.d.ts +20 -1
  258. package/dist/components/progress.js +2 -1
  259. package/dist/components/progress.js.map +1 -1
  260. package/dist/components/radio-group.d.ts +38 -1
  261. package/dist/components/radio-group.js +2 -1
  262. package/dist/components/radio-group.js.map +1 -1
  263. package/dist/components/rating.d.ts +35 -1
  264. package/dist/components/rating.js +2 -1
  265. package/dist/components/rating.js.map +1 -1
  266. package/dist/components/resizable.d.ts +36 -1
  267. package/dist/components/resizable.js +2 -1
  268. package/dist/components/resizable.js.map +1 -1
  269. package/dist/components/scope-tree.d.ts +78 -1
  270. package/dist/components/scope-tree.js +3 -1
  271. package/dist/components/scope-tree.js.map +1 -1
  272. package/dist/components/scope-type-badge.d.ts +35 -1
  273. package/dist/components/scope-type-badge.js +3 -1
  274. package/dist/components/scope-type-badge.js.map +1 -1
  275. package/dist/components/scroll-area.d.ts +29 -1
  276. package/dist/components/scroll-area.js +2 -1
  277. package/dist/components/scroll-area.js.map +1 -1
  278. package/dist/components/select.d.ts +52 -1
  279. package/dist/components/select.js +2 -1
  280. package/dist/components/select.js.map +1 -1
  281. package/dist/components/separator.d.ts +24 -1
  282. package/dist/components/separator.js +2 -1
  283. package/dist/components/separator.js.map +1 -1
  284. package/dist/components/sheet.d.ts +51 -1
  285. package/dist/components/sheet.js +2 -1
  286. package/dist/components/sheet.js.map +1 -1
  287. package/dist/components/skeleton.d.ts +25 -1
  288. package/dist/components/skeleton.js +2 -1
  289. package/dist/components/skeleton.js.map +1 -1
  290. package/dist/components/slider.d.ts +24 -1
  291. package/dist/components/slider.js +2 -1
  292. package/dist/components/slider.js.map +1 -1
  293. package/dist/components/slug-input.d.ts +50 -1
  294. package/dist/components/slug-input.js +4 -1
  295. package/dist/components/slug-input.js.map +1 -1
  296. package/dist/components/sonner.d.ts +22 -1
  297. package/dist/components/sonner.js +1 -1
  298. package/dist/components/sonner.js.map +1 -1
  299. package/dist/components/stage-type-badge.d.ts +30 -1
  300. package/dist/components/stage-type-badge.js +3 -1
  301. package/dist/components/stage-type-badge.js.map +1 -1
  302. package/dist/components/switch.d.ts +26 -1
  303. package/dist/components/switch.js +2 -1
  304. package/dist/components/switch.js.map +1 -1
  305. package/dist/components/table.d.ts +57 -1
  306. package/dist/components/table.js +2 -1
  307. package/dist/components/table.js.map +1 -1
  308. package/dist/components/tabs.d.ts +39 -1
  309. package/dist/components/tabs.js +2 -1
  310. package/dist/components/tabs.js.map +1 -1
  311. package/dist/components/tag-input.d.ts +40 -1
  312. package/dist/components/tag-input.js +3 -1
  313. package/dist/components/tag-input.js.map +1 -1
  314. package/dist/components/textarea.d.ts +21 -1
  315. package/dist/components/textarea.js +2 -1
  316. package/dist/components/textarea.js.map +1 -1
  317. package/dist/components/time-picker.d.ts +57 -1
  318. package/dist/components/time-picker.js +6 -1
  319. package/dist/components/time-picker.js.map +1 -1
  320. package/dist/components/toggle-group.d.ts +45 -1
  321. package/dist/components/toggle-group.js +3 -1
  322. package/dist/components/toggle-group.js.map +1 -1
  323. package/dist/components/toggle.d.ts +31 -1
  324. package/dist/components/toggle.js +2 -1
  325. package/dist/components/toggle.js.map +1 -1
  326. package/dist/components/tooltip.d.ts +34 -1
  327. package/dist/components/tooltip.js +2 -1
  328. package/dist/components/tooltip.js.map +1 -1
  329. package/dist/components/workflow-category-badge.d.ts +32 -1
  330. package/dist/components/workflow-category-badge.js +3 -1
  331. package/dist/components/workflow-category-badge.js.map +1 -1
  332. package/dist/components/workflow-diagram.d.ts +63 -1
  333. package/dist/components/workflow-diagram.js +3 -1
  334. package/dist/components/workflow-diagram.js.map +1 -1
  335. package/dist/components/workflow-status-badge.d.ts +30 -1
  336. package/dist/components/workflow-status-badge.js +3 -1
  337. package/dist/components/workflow-status-badge.js.map +1 -1
  338. package/dist/components/workflow-stepper.d.ts +52 -1
  339. package/dist/components/workflow-stepper.js +2 -1
  340. package/dist/components/workflow-stepper.js.map +1 -1
  341. package/dist/hooks/use-mobile.d.ts +3 -1
  342. package/dist/hooks/use-mobile.js +1 -1
  343. package/dist/hooks/use-mobile.js.map +1 -1
  344. package/dist/index.d.ts +108 -13
  345. package/dist/index.js +69 -11
  346. package/dist/lib/types.d.ts +84 -1
  347. package/dist/lib/types.js +1 -1
  348. package/dist/lib/types.js.map +1 -1
  349. package/dist/lib/utils.d.ts +5 -1
  350. package/dist/lib/utils.js +1 -1
  351. package/dist/lib/utils.js.map +1 -1
  352. package/package.json +69 -30
  353. package/src/styles/fonts.css +0 -0
  354. package/src/styles/index.css +3 -1
  355. package/src/styles/tailwind.css +4 -0
  356. package/src/styles/theme.css +461 -0
  357. package/dist/chunk-2ZIFL2X3.js +0 -189
  358. package/dist/chunk-2ZIFL2X3.js.map +0 -1
  359. package/dist/chunk-5BL4VFRJ.js +0 -57
  360. package/dist/chunk-5BL4VFRJ.js.map +0 -1
  361. package/dist/chunk-5D3OAVOZ.js +0 -91
  362. package/dist/chunk-5D3OAVOZ.js.map +0 -1
  363. package/dist/chunk-DTM76EJD.js +0 -235
  364. package/dist/chunk-DTM76EJD.js.map +0 -1
  365. package/dist/chunk-EJEVW4RO.js +0 -49
  366. package/dist/chunk-EJEVW4RO.js.map +0 -1
  367. package/dist/chunk-O25D7DCP.js +0 -72
  368. package/dist/chunk-O25D7DCP.js.map +0 -1
  369. package/dist/chunk-OY3PSPA5.js +0 -661
  370. package/dist/chunk-OY3PSPA5.js.map +0 -1
  371. package/dist/chunk-RSCXIS4D.js +0 -37
  372. package/dist/chunk-RSCXIS4D.js.map +0 -1
  373. package/dist/chunk-SHHZRZMM.js +0 -83
  374. package/dist/chunk-SHHZRZMM.js.map +0 -1
  375. package/dist/chunk-X57K24P3.js +0 -224
  376. package/dist/chunk-X57K24P3.js.map +0 -1
  377. package/dist/chunk-XDXGUPCR.js +0 -123
  378. package/dist/chunk-XDXGUPCR.js.map +0 -1
  379. package/dist/components/AppShell.d.ts +0 -27
  380. package/dist/components/AppShell.js +0 -11
  381. package/dist/components/AppShell.js.map +0 -1
  382. package/dist/components/Header.d.ts +0 -11
  383. package/dist/components/Header.js +0 -6
  384. package/dist/components/Header.js.map +0 -1
  385. package/dist/components/OrganizationSelector.d.ts +0 -8
  386. package/dist/components/OrganizationSelector.js +0 -4
  387. package/dist/components/OrganizationSelector.js.map +0 -1
  388. package/dist/components/OrganizationSetupModal.d.ts +0 -5
  389. package/dist/components/OrganizationSetupModal.js +0 -4
  390. package/dist/components/OrganizationSetupModal.js.map +0 -1
  391. package/dist/components/PageContainer.d.ts +0 -105
  392. package/dist/components/PageContainer.js +0 -3
  393. package/dist/components/PageContainer.js.map +0 -1
  394. package/dist/components/ServiceMenu.d.ts +0 -11
  395. package/dist/components/ServiceMenu.js +0 -3
  396. package/dist/components/ServiceMenu.js.map +0 -1
  397. package/dist/components/Sidebar.d.ts +0 -11
  398. package/dist/components/Sidebar.js +0 -5
  399. package/dist/components/Sidebar.js.map +0 -1
  400. package/dist/contexts/OrganizationContext.d.ts +0 -26
  401. package/dist/contexts/OrganizationContext.js +0 -3
  402. package/dist/contexts/OrganizationContext.js.map +0 -1
  403. package/dist/contexts/ThemeContext.d.ts +0 -14
  404. package/dist/contexts/ThemeContext.js +0 -3
  405. package/dist/contexts/ThemeContext.js.map +0 -1
  406. package/dist/hooks/useDateFormat.d.ts +0 -28
  407. package/dist/hooks/useDateFormat.js +0 -4
  408. package/dist/hooks/useDateFormat.js.map +0 -1
  409. package/dist/i18n.d.ts +0 -38
  410. package/dist/i18n.js +0 -3
  411. package/dist/i18n.js.map +0 -1
  412. package/dist/types.d.ts +0 -89
  413. package/dist/types.js +0 -3
  414. package/dist/types.js.map +0 -1
@@ -0,0 +1,171 @@
1
+ import { Popover, PopoverTrigger, PopoverContent } from './chunk-C34KSTWA.js';
2
+ import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from './chunk-6GWVQB3Q.js';
3
+ import { Button } from './chunk-55E7D2HR.js';
4
+ import { cn } from './chunk-DGPY4WP3.js';
5
+ import * as React from 'react';
6
+ import { X, ChevronsUpDown, Check } from 'lucide-react';
7
+ import { jsxs, jsx } from 'react/jsx-runtime';
8
+
9
+ function Combobox({
10
+ options,
11
+ value,
12
+ onChange,
13
+ placeholder = "Ch\u1ECDn...",
14
+ searchPlaceholder = "T\xECm ki\u1EBFm...",
15
+ emptyText = "Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3.",
16
+ className,
17
+ disabled,
18
+ clearable = false
19
+ }) {
20
+ const [open, setOpen] = React.useState(false);
21
+ const selectedOption = options.find((option) => option.value === value);
22
+ const handleClear = (e) => {
23
+ e.stopPropagation();
24
+ onChange?.("");
25
+ };
26
+ return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
27
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
28
+ Button,
29
+ {
30
+ variant: "outline",
31
+ role: "combobox",
32
+ "aria-expanded": open,
33
+ disabled,
34
+ className: cn(
35
+ "w-full justify-between",
36
+ !value && "text-muted-foreground",
37
+ className
38
+ ),
39
+ children: [
40
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: selectedOption ? selectedOption.label : placeholder }),
41
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 ml-2", children: [
42
+ clearable && value && /* @__PURE__ */ jsx(
43
+ X,
44
+ {
45
+ className: "h-4 w-4 opacity-50 hover:opacity-100",
46
+ onClick: handleClear
47
+ }
48
+ ),
49
+ /* @__PURE__ */ jsx(ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50" })
50
+ ] })
51
+ ]
52
+ }
53
+ ) }),
54
+ /* @__PURE__ */ jsx(PopoverContent, { className: "w-[--radix-popover-trigger-width] p-0", align: "start", children: /* @__PURE__ */ jsxs(Command, { children: [
55
+ /* @__PURE__ */ jsx(CommandInput, { placeholder: searchPlaceholder }),
56
+ /* @__PURE__ */ jsxs(CommandList, { children: [
57
+ /* @__PURE__ */ jsx(CommandEmpty, { children: emptyText }),
58
+ /* @__PURE__ */ jsx(CommandGroup, { children: options.map((option) => /* @__PURE__ */ jsxs(
59
+ CommandItem,
60
+ {
61
+ value: option.value,
62
+ disabled: option.disabled,
63
+ onSelect: (currentValue) => {
64
+ onChange?.(currentValue === value ? "" : currentValue);
65
+ setOpen(false);
66
+ },
67
+ children: [
68
+ /* @__PURE__ */ jsx(
69
+ Check,
70
+ {
71
+ className: cn(
72
+ "mr-2 h-4 w-4",
73
+ value === option.value ? "opacity-100" : "opacity-0"
74
+ )
75
+ }
76
+ ),
77
+ option.label
78
+ ]
79
+ },
80
+ option.value
81
+ )) })
82
+ ] })
83
+ ] }) })
84
+ ] });
85
+ }
86
+ function MultiCombobox({
87
+ options,
88
+ value = [],
89
+ onChange,
90
+ placeholder = "Ch\u1ECDn...",
91
+ searchPlaceholder = "T\xECm ki\u1EBFm...",
92
+ emptyText = "Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3.",
93
+ className,
94
+ disabled,
95
+ maxSelected
96
+ }) {
97
+ const [open, setOpen] = React.useState(false);
98
+ const selectedLabels = value.map((v) => options.find((opt) => opt.value === v)?.label).filter(Boolean);
99
+ const handleSelect = (selectedValue) => {
100
+ const newValue = value.includes(selectedValue) ? value.filter((v) => v !== selectedValue) : maxSelected && value.length >= maxSelected ? value : [...value, selectedValue];
101
+ onChange?.(newValue);
102
+ };
103
+ const handleClearAll = (e) => {
104
+ e.stopPropagation();
105
+ onChange?.([]);
106
+ };
107
+ return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
108
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
109
+ Button,
110
+ {
111
+ variant: "outline",
112
+ role: "combobox",
113
+ "aria-expanded": open,
114
+ disabled,
115
+ className: cn(
116
+ "w-full justify-between",
117
+ !value.length && "text-muted-foreground",
118
+ className
119
+ ),
120
+ children: [
121
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: selectedLabels.length > 0 ? selectedLabels.length === 1 ? selectedLabels[0] : `${selectedLabels.length} m\u1EE5c \u0111\xE3 ch\u1ECDn` : placeholder }),
122
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 ml-2", children: [
123
+ value.length > 0 && /* @__PURE__ */ jsx(
124
+ X,
125
+ {
126
+ className: "h-4 w-4 opacity-50 hover:opacity-100",
127
+ onClick: handleClearAll
128
+ }
129
+ ),
130
+ /* @__PURE__ */ jsx(ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50" })
131
+ ] })
132
+ ]
133
+ }
134
+ ) }),
135
+ /* @__PURE__ */ jsx(PopoverContent, { className: "w-[--radix-popover-trigger-width] p-0", align: "start", children: /* @__PURE__ */ jsxs(Command, { children: [
136
+ /* @__PURE__ */ jsx(CommandInput, { placeholder: searchPlaceholder }),
137
+ /* @__PURE__ */ jsxs(CommandList, { children: [
138
+ /* @__PURE__ */ jsx(CommandEmpty, { children: emptyText }),
139
+ /* @__PURE__ */ jsx(CommandGroup, { children: options.map((option) => {
140
+ const isSelected = value.includes(option.value);
141
+ const isDisabled = option.disabled || !isSelected && maxSelected && value.length >= maxSelected;
142
+ return /* @__PURE__ */ jsxs(
143
+ CommandItem,
144
+ {
145
+ value: option.value,
146
+ disabled: !!isDisabled,
147
+ onSelect: () => handleSelect(option.value),
148
+ children: [
149
+ /* @__PURE__ */ jsx(
150
+ Check,
151
+ {
152
+ className: cn(
153
+ "mr-2 h-4 w-4",
154
+ isSelected ? "opacity-100" : "opacity-0"
155
+ )
156
+ }
157
+ ),
158
+ option.label
159
+ ]
160
+ },
161
+ option.value
162
+ );
163
+ }) })
164
+ ] })
165
+ ] }) })
166
+ ] });
167
+ }
168
+
169
+ export { Combobox, MultiCombobox };
170
+ //# sourceMappingURL=chunk-NPL2R5LD.js.map
171
+ //# sourceMappingURL=chunk-NPL2R5LD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/combobox.tsx"],"names":[],"mappings":"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","file":"chunk-NPL2R5LD.js","sourcesContent":["import * as React from \"react\";\nimport { Check, ChevronsUpDown, X } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"./command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\n/** A single option in the Combobox dropdown. */\nexport interface ComboboxOption {\n /** Unique value for this option. */\n value: string;\n /** Display label shown in the dropdown list. */\n label: string;\n /** Whether this option is non-selectable. */\n disabled?: boolean;\n}\n\ninterface ComboboxProps {\n /** Available options to display in the dropdown. */\n options: ComboboxOption[];\n /** Currently selected value. */\n value?: string;\n /** Callback fired when the selected value changes. */\n onChange?: (value: string) => void;\n /** Placeholder text shown when no value is selected. */\n placeholder?: string;\n /** Placeholder text for the search input inside the dropdown. */\n searchPlaceholder?: string;\n /** Text shown when no options match the search query. */\n emptyText?: string;\n /** Additional CSS class for the trigger button. */\n className?: string;\n /** Whether the combobox is disabled. */\n disabled?: boolean;\n /** Whether to show a clear button when a value is selected. */\n clearable?: boolean;\n}\n\n/**\n * Searchable single-select combobox built on cmdk and Radix Popover.\n * Combines a text search input with a selectable option list.\n *\n * @example\n * ```tsx\n * const [value, setValue] = useState(\"\");\n *\n * <Combobox\n * options={[\n * { value: \"react\", label: \"React\" },\n * { value: \"vue\", label: \"Vue\" },\n * { value: \"svelte\", label: \"Svelte\" },\n * ]}\n * value={value}\n * onChange={setValue}\n * placeholder=\"Select framework...\"\n * searchPlaceholder=\"Search...\"\n * clearable\n * />\n * ```\n */\nexport function Combobox({\n options,\n value,\n onChange,\n placeholder = \"Chọn...\",\n searchPlaceholder = \"Tìm kiếm...\",\n emptyText = \"Không tìm thấy kết quả.\",\n className,\n disabled,\n clearable = false,\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false);\n\n const selectedOption = options.find((option) => option.value === value);\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.(\"\");\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n \"w-full justify-between\",\n !value && \"text-muted-foreground\",\n className\n )}\n >\n <span className=\"truncate\">\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n <div className=\"flex items-center gap-1 ml-2\">\n {clearable && value && (\n <X\n className=\"h-4 w-4 opacity-50 hover:opacity-100\"\n onClick={handleClear}\n />\n )}\n <ChevronsUpDown className=\"h-4 w-4 shrink-0 opacity-50\" />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[--radix-popover-trigger-width] p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder={searchPlaceholder} />\n <CommandList>\n <CommandEmpty>{emptyText}</CommandEmpty>\n <CommandGroup>\n {options.map((option) => (\n <CommandItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n onSelect={(currentValue) => {\n onChange?.(currentValue === value ? \"\" : currentValue);\n setOpen(false);\n }}\n >\n <Check\n className={cn(\n \"mr-2 h-4 w-4\",\n value === option.value ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n {option.label}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n}\n\ninterface MultiComboboxProps {\n /** Available options to display in the dropdown. */\n options: ComboboxOption[];\n /** Array of currently selected values. */\n value?: string[];\n /** Callback fired when the selection changes. */\n onChange?: (value: string[]) => void;\n /** Placeholder text shown when no values are selected. */\n placeholder?: string;\n /** Placeholder text for the search input inside the dropdown. */\n searchPlaceholder?: string;\n /** Text shown when no options match the search query. */\n emptyText?: string;\n /** Additional CSS class for the trigger button. */\n className?: string;\n /** Whether the combobox is disabled. */\n disabled?: boolean;\n /** Maximum number of items that can be selected. */\n maxSelected?: number;\n}\n\n/**\n * Searchable multi-select combobox that allows selecting multiple values.\n * Selected items are shown as a count in the trigger button.\n *\n * @example\n * ```tsx\n * const [selected, setSelected] = useState<string[]>([]);\n *\n * <MultiCombobox\n * options={[\n * { value: \"react\", label: \"React\" },\n * { value: \"vue\", label: \"Vue\" },\n * { value: \"svelte\", label: \"Svelte\" },\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Select frameworks...\"\n * maxSelected={3}\n * />\n * ```\n */\nexport function MultiCombobox({\n options,\n value = [],\n onChange,\n placeholder = \"Chọn...\",\n searchPlaceholder = \"Tìm kiếm...\",\n emptyText = \"Không tìm thấy kết quả.\",\n className,\n disabled,\n maxSelected,\n}: MultiComboboxProps) {\n const [open, setOpen] = React.useState(false);\n\n const selectedLabels = value\n .map((v) => options.find((opt) => opt.value === v)?.label)\n .filter(Boolean);\n\n const handleSelect = (selectedValue: string) => {\n const newValue = value.includes(selectedValue)\n ? value.filter((v) => v !== selectedValue)\n : maxSelected && value.length >= maxSelected\n ? value\n : [...value, selectedValue];\n\n onChange?.(newValue);\n };\n\n const handleClearAll = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.([]);\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n \"w-full justify-between\",\n !value.length && \"text-muted-foreground\",\n className\n )}\n >\n <span className=\"truncate\">\n {selectedLabels.length > 0\n ? selectedLabels.length === 1\n ? selectedLabels[0]\n : `${selectedLabels.length} mục đã chọn`\n : placeholder}\n </span>\n <div className=\"flex items-center gap-1 ml-2\">\n {value.length > 0 && (\n <X\n className=\"h-4 w-4 opacity-50 hover:opacity-100\"\n onClick={handleClearAll}\n />\n )}\n <ChevronsUpDown className=\"h-4 w-4 shrink-0 opacity-50\" />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[--radix-popover-trigger-width] p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder={searchPlaceholder} />\n <CommandList>\n <CommandEmpty>{emptyText}</CommandEmpty>\n <CommandGroup>\n {options.map((option) => {\n const isSelected = value.includes(option.value);\n const isDisabled =\n option.disabled ||\n (!isSelected && maxSelected && value.length >= maxSelected);\n\n return (\n <CommandItem\n key={option.value}\n value={option.value}\n disabled={!!isDisabled}\n onSelect={() => handleSelect(option.value)}\n >\n <Check\n className={cn(\n \"mr-2 h-4 w-4\",\n isSelected ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n {option.label}\n </CommandItem>\n );\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n}\n"]}
@@ -0,0 +1,44 @@
1
+ import { cn } from './chunk-DGPY4WP3.js';
2
+ import * as TogglePrimitive from '@radix-ui/react-toggle';
3
+ import { cva } from 'class-variance-authority';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var toggleVariants = cva(
7
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: "bg-transparent",
12
+ outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground"
13
+ },
14
+ size: {
15
+ default: "h-9 px-2 min-w-9",
16
+ sm: "h-8 px-1.5 min-w-8",
17
+ lg: "h-10 px-2.5 min-w-10"
18
+ }
19
+ },
20
+ defaultVariants: {
21
+ variant: "default",
22
+ size: "default"
23
+ }
24
+ }
25
+ );
26
+ function Toggle({
27
+ className,
28
+ variant,
29
+ size,
30
+ ...props
31
+ }) {
32
+ return /* @__PURE__ */ jsx(
33
+ TogglePrimitive.Root,
34
+ {
35
+ "data-slot": "toggle",
36
+ className: cn(toggleVariants({ variant, size, className })),
37
+ ...props
38
+ }
39
+ );
40
+ }
41
+
42
+ export { Toggle, toggleVariants };
43
+ //# sourceMappingURL=chunk-NU56GKGM.js.map
44
+ //# sourceMappingURL=chunk-NU56GKGM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/toggle.tsx"],"names":[],"mappings":";;;;;AAMA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,+iBAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gBAAA;AAAA,QACT,OAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,kBAAA;AAAA,QACT,EAAA,EAAI,oBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAsBA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgB;AACd,EAAA,uBACE,GAAA;AAAA,IAAiB,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-NU56GKGM.js","sourcesContent":["import * as React from \"react\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/utils\";\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-input bg-transparent hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\ninterface ToggleProps\n extends React.ComponentProps<typeof TogglePrimitive.Root>,\n VariantProps<typeof toggleVariants> {}\n\n/**\n * Two-state button that can be toggled on or off, with variant and size options.\n *\n * @example\n * ```tsx\n * // Basic toggle\n * <Toggle aria-label=\"Toggle bold\">\n * <BoldIcon className=\"size-4\" />\n * </Toggle>\n *\n * // Outline variant, small size\n * <Toggle variant=\"outline\" size=\"sm\">\n * <ItalicIcon className=\"size-4\" />\n * </Toggle>\n * ```\n */\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: ToggleProps) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\nexport type { ToggleProps };"]}
@@ -0,0 +1,24 @@
1
+ import { cn } from './chunk-DGPY4WP3.js';
2
+ import * as React from 'react';
3
+ import * as LabelPrimitive from '@radix-ui/react-label';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var Label = React.forwardRef(({ className, ...props }, ref) => {
7
+ return /* @__PURE__ */ jsx(
8
+ LabelPrimitive.Root,
9
+ {
10
+ ref,
11
+ "data-slot": "label",
12
+ className: cn(
13
+ "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
14
+ className
15
+ ),
16
+ ...props
17
+ }
18
+ );
19
+ });
20
+ Label.displayName = LabelPrimitive.Root.displayName;
21
+
22
+ export { Label };
23
+ //# sourceMappingURL=chunk-P3M5TZD2.js.map
24
+ //# sourceMappingURL=chunk-P3M5TZD2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/label.tsx"],"names":[],"mappings":";;;;;AAoBA,IAAM,KAAA,GAAc,iBAGlB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAClC,EAAA,uBACE,GAAA;AAAA,IAAgB,cAAA,CAAA,IAAA;AAAA,IAAf;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qNAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC;AACD,KAAA,CAAM,cAA6B,cAAA,CAAA,IAAA,CAAK,WAAA","file":"chunk-P3M5TZD2.js","sourcesContent":["import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\n\nimport { cn } from \"../lib/utils\";\n\ntype LabelProps = React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>;\n\n/**\n * Accessible label for form controls, automatically associated via `htmlFor`.\n *\n * @example\n * ```tsx\n * // With an input\n * <Label htmlFor=\"email\">Email address</Label>\n * <Input id=\"email\" type=\"email\" />\n *\n * // Disabled state (responds to group/peer disabled)\n * <Label htmlFor=\"name\">Name</Label>\n * ```\n */\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n LabelProps\n>(({ className, ...props }, ref) => {\n return (\n <LabelPrimitive.Root\n ref={ref}\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n});\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\nexport type { LabelProps };\n"]}
@@ -0,0 +1,28 @@
1
+ import { cn } from './chunk-DGPY4WP3.js';
2
+ import * as SeparatorPrimitive from '@radix-ui/react-separator';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function Separator({
6
+ className,
7
+ orientation = "horizontal",
8
+ decorative = true,
9
+ ...props
10
+ }) {
11
+ return /* @__PURE__ */ jsx(
12
+ SeparatorPrimitive.Root,
13
+ {
14
+ "data-slot": "separator-root",
15
+ decorative,
16
+ orientation,
17
+ className: cn(
18
+ "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
19
+ className
20
+ ),
21
+ ...props
22
+ }
23
+ );
24
+ }
25
+
26
+ export { Separator };
27
+ //# sourceMappingURL=chunk-PGWNOZDX.js.map
28
+ //# sourceMappingURL=chunk-PGWNOZDX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/separator.tsx"],"names":[],"mappings":";;;;AAuBA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,GAAG;AACL,CAAA,EAAmB;AACjB,EAAA,uBACE,GAAA;AAAA,IAAoB,kBAAA,CAAA,IAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,gKAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-PGWNOZDX.js","sourcesContent":["import * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\n\nimport { cn } from \"../lib/utils\";\n\ntype SeparatorProps = React.ComponentProps<typeof SeparatorPrimitive.Root>;\n\n/**\n * Visual divider between content sections, rendered as a horizontal or vertical line.\n *\n * @example\n * ```tsx\n * // Horizontal (default)\n * <Separator />\n *\n * // Vertical divider in a flex row\n * <div className=\"flex items-center gap-4\">\n * <span>Left</span>\n * <Separator orientation=\"vertical\" className=\"h-4\" />\n * <span>Right</span>\n * </div>\n * ```\n */\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: SeparatorProps) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator-root\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\nexport type { SeparatorProps };"]}
@@ -0,0 +1,92 @@
1
+ import { buttonVariants } from './chunk-55E7D2HR.js';
2
+ import { cn } from './chunk-DGPY4WP3.js';
3
+ import { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon } from 'lucide-react';
4
+ import { getDefaultClassNames, DayPicker } from 'react-day-picker';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ function Calendar({
8
+ className,
9
+ classNames,
10
+ showOutsideDays = true,
11
+ ...props
12
+ }) {
13
+ const defaultClassNames = getDefaultClassNames();
14
+ return /* @__PURE__ */ jsx(
15
+ DayPicker,
16
+ {
17
+ showOutsideDays,
18
+ className: cn("p-3", className),
19
+ classNames: {
20
+ root: cn("w-fit", defaultClassNames.root),
21
+ months: cn("flex flex-col sm:flex-row gap-2", defaultClassNames.months),
22
+ month: cn("flex flex-col gap-4 w-full", defaultClassNames.month),
23
+ month_caption: cn(
24
+ "flex justify-center pt-1 relative items-center w-full",
25
+ defaultClassNames.month_caption
26
+ ),
27
+ caption_label: cn("text-sm font-medium select-none", defaultClassNames.caption_label),
28
+ dropdowns: cn(
29
+ "flex items-center text-sm font-medium justify-center gap-1.5",
30
+ defaultClassNames.dropdowns
31
+ ),
32
+ dropdown_root: cn(
33
+ "relative border border-input rounded-md",
34
+ defaultClassNames.dropdown_root
35
+ ),
36
+ dropdown: cn("absolute inset-0 opacity-0", defaultClassNames.dropdown),
37
+ nav: cn(
38
+ "flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",
39
+ defaultClassNames.nav
40
+ ),
41
+ button_previous: cn(
42
+ buttonVariants({ variant: "outline" }),
43
+ "size-7 bg-transparent p-0 opacity-50 hover:opacity-100 select-none",
44
+ defaultClassNames.button_previous
45
+ ),
46
+ button_next: cn(
47
+ buttonVariants({ variant: "outline" }),
48
+ "size-7 bg-transparent p-0 opacity-50 hover:opacity-100 select-none",
49
+ defaultClassNames.button_next
50
+ ),
51
+ table: "w-full border-collapse",
52
+ weekdays: cn("flex", defaultClassNames.weekdays),
53
+ weekday: cn(
54
+ "text-muted-foreground rounded-md w-8 font-normal text-[0.8rem] select-none",
55
+ defaultClassNames.weekday
56
+ ),
57
+ week: cn("flex w-full mt-2", defaultClassNames.week),
58
+ day: cn(
59
+ "relative p-0 text-center text-sm focus-within:relative focus-within:z-20 select-none",
60
+ "[&:has([aria-selected])]:bg-accent",
61
+ "[&:has([aria-selected].rdp-day_range_end)]:rounded-r-md",
62
+ props.mode === "range" ? "[&:has(>.rdp-day_range_end)]:rounded-r-md [&:has(>.rdp-day_range_start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md" : "[&:has([aria-selected])]:rounded-md",
63
+ defaultClassNames.day
64
+ ),
65
+ day_button: cn(
66
+ buttonVariants({ variant: "ghost" }),
67
+ "size-8 p-0 font-normal aria-selected:opacity-100"
68
+ ),
69
+ range_start: "rdp-day_range_start aria-selected:bg-primary aria-selected:text-primary-foreground rounded-l-md",
70
+ range_end: "rdp-day_range_end aria-selected:bg-primary aria-selected:text-primary-foreground rounded-r-md",
71
+ selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground rounded-md",
72
+ today: "bg-accent text-accent-foreground rounded-md",
73
+ outside: "text-muted-foreground aria-selected:text-muted-foreground",
74
+ disabled: "text-muted-foreground opacity-50",
75
+ range_middle: "aria-selected:bg-accent aria-selected:text-accent-foreground rounded-none",
76
+ hidden: "invisible",
77
+ ...classNames
78
+ },
79
+ components: {
80
+ Chevron: ({ className: className2, orientation, ...chevronProps }) => {
81
+ const Icon = orientation === "left" ? ChevronLeftIcon : orientation === "right" ? ChevronRightIcon : ChevronDownIcon;
82
+ return /* @__PURE__ */ jsx(Icon, { className: cn("size-4", className2), ...chevronProps });
83
+ }
84
+ },
85
+ ...props
86
+ }
87
+ );
88
+ }
89
+
90
+ export { Calendar };
91
+ //# sourceMappingURL=chunk-QB3UWRZH.js.map
92
+ //# sourceMappingURL=chunk-QB3UWRZH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/calendar.tsx"],"names":["className"],"mappings":"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","file":"chunk-QB3UWRZH.js","sourcesContent":["import * as React from \"react\";\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon } from \"lucide-react\";\nimport { DayPicker, getDefaultClassNames } from \"react-day-picker\";\n\nimport { cn } from \"../lib/utils\";\nimport { buttonVariants } from \"./button\";\n\n/**\n * Date picker calendar built on `react-day-picker` v9. Supports single, multiple,\n * and range selection modes. Styled with Shadcn UI conventions.\n *\n * @param showOutsideDays - Whether to show days from adjacent months. Defaults to `true`.\n *\n * @example\n * ```tsx\n * const [date, setDate] = useState<Date | undefined>();\n * <Calendar mode=\"single\" selected={date} onSelect={setDate} />\n * ```\n */\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: React.ComponentProps<typeof DayPicker>) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\"flex flex-col sm:flex-row gap-2\", defaultClassNames.months),\n month: cn(\"flex flex-col gap-4 w-full\", defaultClassNames.month),\n month_caption: cn(\n \"flex justify-center pt-1 relative items-center w-full\",\n defaultClassNames.month_caption,\n ),\n caption_label: cn(\"text-sm font-medium select-none\", defaultClassNames.caption_label),\n dropdowns: cn(\n \"flex items-center text-sm font-medium justify-center gap-1.5\",\n defaultClassNames.dropdowns,\n ),\n dropdown_root: cn(\n \"relative border border-input rounded-md\",\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn(\"absolute inset-0 opacity-0\", defaultClassNames.dropdown),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: \"outline\" }),\n \"size-7 bg-transparent p-0 opacity-50 hover:opacity-100 select-none\",\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\" }),\n \"size-7 bg-transparent p-0 opacity-50 hover:opacity-100 select-none\",\n defaultClassNames.button_next,\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-md w-8 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday,\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n day: cn(\n \"relative p-0 text-center text-sm focus-within:relative focus-within:z-20 select-none\",\n \"[&:has([aria-selected])]:bg-accent\",\n \"[&:has([aria-selected].rdp-day_range_end)]:rounded-r-md\",\n props.mode === \"range\"\n ? \"[&:has(>.rdp-day_range_end)]:rounded-r-md [&:has(>.rdp-day_range_start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md\"\n : \"[&:has([aria-selected])]:rounded-md\",\n defaultClassNames.day,\n ),\n day_button: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"size-8 p-0 font-normal aria-selected:opacity-100\",\n ),\n range_start:\n \"rdp-day_range_start aria-selected:bg-primary aria-selected:text-primary-foreground rounded-l-md\",\n range_end:\n \"rdp-day_range_end aria-selected:bg-primary aria-selected:text-primary-foreground rounded-r-md\",\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground rounded-md\",\n today: \"bg-accent text-accent-foreground rounded-md\",\n outside: \"text-muted-foreground aria-selected:text-muted-foreground\",\n disabled: \"text-muted-foreground opacity-50\",\n range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground rounded-none\",\n hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n Chevron: ({ className, orientation, ...chevronProps }) => {\n const Icon =\n orientation === \"left\"\n ? ChevronLeftIcon\n : orientation === \"right\"\n ? ChevronRightIcon\n : ChevronDownIcon;\n return <Icon className={cn(\"size-4\", className)} {...chevronProps} />;\n },\n }}\n {...props}\n />\n );\n}\n\nexport { Calendar };\n"]}
@@ -0,0 +1,33 @@
1
+ import { cn } from './chunk-DGPY4WP3.js';
2
+ import * as ProgressPrimitive from '@radix-ui/react-progress';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function Progress({
6
+ className,
7
+ value,
8
+ ...props
9
+ }) {
10
+ return /* @__PURE__ */ jsx(
11
+ ProgressPrimitive.Root,
12
+ {
13
+ "data-slot": "progress",
14
+ className: cn(
15
+ "bg-primary/20 relative h-2 w-full overflow-hidden rounded-full",
16
+ className
17
+ ),
18
+ ...props,
19
+ children: /* @__PURE__ */ jsx(
20
+ ProgressPrimitive.Indicator,
21
+ {
22
+ "data-slot": "progress-indicator",
23
+ className: "bg-primary h-full w-full flex-1 transition-all",
24
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
25
+ }
26
+ )
27
+ }
28
+ );
29
+ }
30
+
31
+ export { Progress };
32
+ //# sourceMappingURL=chunk-R2CDE5DO.js.map
33
+ //# sourceMappingURL=chunk-R2CDE5DO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/progress.tsx"],"names":[],"mappings":";;;;AAmBA,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,uBACE,GAAA;AAAA,IAAmB,iBAAA,CAAA,IAAA;AAAA,IAAlB;AAAA,MACC,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,gEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA;AAAA,QAAmB,iBAAA,CAAA,SAAA;AAAA,QAAlB;AAAA,UACC,WAAA,EAAU,oBAAA;AAAA,UACV,SAAA,EAAU,gDAAA;AAAA,UACV,OAAO,EAAE,SAAA,EAAW,eAAe,GAAA,IAAO,KAAA,IAAS,EAAE,CAAA,EAAA,CAAA;AAAK;AAAA;AAC5D;AAAA,GACF;AAEJ","file":"chunk-R2CDE5DO.js","sourcesContent":["import * as React from \"react\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\n\nimport { cn } from \"../lib/utils\";\n\ntype ProgressProps = React.ComponentProps<typeof ProgressPrimitive.Root>;\n\n/**\n * Horizontal bar that indicates the completion progress of a task or operation.\n *\n * @example\n * ```tsx\n * // Basic usage (65% complete)\n * <Progress value={65} />\n *\n * // With custom styling\n * <Progress value={40} className=\"h-3\" />\n * ```\n */\nfunction Progress({\n className,\n value,\n ...props\n}: ProgressProps) {\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n className={cn(\n \"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full\",\n className,\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"bg-primary h-full w-full flex-1 transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n );\n}\n\nexport { Progress };\nexport type { ProgressProps };"]}
@@ -0,0 +1,65 @@
1
+ import { cn } from './chunk-DGPY4WP3.js';
2
+ import * as React from 'react';
3
+ import { OTPInput, OTPInputContext } from 'input-otp';
4
+ import { MinusIcon } from 'lucide-react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ function InputOTP({
8
+ className,
9
+ containerClassName,
10
+ ...props
11
+ }) {
12
+ return /* @__PURE__ */ jsx(
13
+ OTPInput,
14
+ {
15
+ "data-slot": "input-otp",
16
+ containerClassName: cn(
17
+ "flex items-center gap-2 has-disabled:opacity-50",
18
+ containerClassName
19
+ ),
20
+ className: cn("disabled:cursor-not-allowed", className),
21
+ ...props
22
+ }
23
+ );
24
+ }
25
+ function InputOTPGroup({ className, ...props }) {
26
+ return /* @__PURE__ */ jsx(
27
+ "div",
28
+ {
29
+ "data-slot": "input-otp-group",
30
+ className: cn("flex items-center gap-1", className),
31
+ ...props
32
+ }
33
+ );
34
+ }
35
+ function InputOTPSlot({
36
+ index,
37
+ className,
38
+ ...props
39
+ }) {
40
+ const inputOTPContext = React.useContext(OTPInputContext);
41
+ const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
42
+ return /* @__PURE__ */ jsxs(
43
+ "div",
44
+ {
45
+ "data-slot": "input-otp-slot",
46
+ "data-active": isActive,
47
+ className: cn(
48
+ "data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm bg-input-background transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]",
49
+ className
50
+ ),
51
+ ...props,
52
+ children: [
53
+ char,
54
+ hasFakeCaret && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" }) })
55
+ ]
56
+ }
57
+ );
58
+ }
59
+ function InputOTPSeparator({ ...props }) {
60
+ return /* @__PURE__ */ jsx("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx(MinusIcon, {}) });
61
+ }
62
+
63
+ export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
64
+ //# sourceMappingURL=chunk-RQNZDWY3.js.map
65
+ //# sourceMappingURL=chunk-RQNZDWY3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/input-otp.tsx"],"names":[],"mappings":";;;;;;AA2BA,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,kBAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,kBAAA,EAAoB,EAAA;AAAA,QAClB,iDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,SAAS,CAAA;AAAA,MACrD,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC3E,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,YAAA,CAAa;AAAA,EACpB,KAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,eAAA,GAAwB,iBAAW,eAAe,CAAA;AACxD,EAAA,MAAM,EAAE,MAAM,YAAA,EAAc,QAAA,KAAa,eAAA,EAAiB,KAAA,CAAM,KAAK,CAAA,IAAK,EAAC;AAE3E,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,aAAA,EAAa,QAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,ogBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,QACA,YAAA,wBACE,KAAA,EAAA,EAAI,SAAA,EAAU,yEACb,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EAA2D,CAAA,EAC5E;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAGA,SAAS,iBAAA,CAAkB,EAAE,GAAG,KAAA,EAAM,EAAgC;AACpE,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,qBAAA,EAAsB,IAAA,EAAK,aAAa,GAAG,KAAA,EACxD,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,CAAA,EACb,CAAA;AAEJ","file":"chunk-RQNZDWY3.js","sourcesContent":["import * as React from \"react\";\nimport { OTPInput, OTPInputContext } from \"input-otp\";\nimport { MinusIcon } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * One-time password input component built on the `input-otp` library.\n * Renders a segmented input for entering verification codes.\n *\n * @example\n * ```tsx\n * <InputOTP maxLength={6} value={otp} onChange={setOtp}>\n * <InputOTPGroup>\n * <InputOTPSlot index={0} />\n * <InputOTPSlot index={1} />\n * <InputOTPSlot index={2} />\n * </InputOTPGroup>\n * <InputOTPSeparator />\n * <InputOTPGroup>\n * <InputOTPSlot index={3} />\n * <InputOTPSlot index={4} />\n * <InputOTPSlot index={5} />\n * </InputOTPGroup>\n * </InputOTP>\n * ```\n */\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string;\n}) {\n return (\n <OTPInput\n data-slot=\"input-otp\"\n containerClassName={cn(\n \"flex items-center gap-2 has-disabled:opacity-50\",\n containerClassName,\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n );\n}\n\n/** Groups adjacent OTP slots together visually. */\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(\"flex items-center gap-1\", className)}\n {...props}\n />\n );\n}\n\n/** Individual character slot within an OTP group. */\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number;\n}) {\n const inputOTPContext = React.useContext(OTPInputContext);\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n \"data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm bg-input-background transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]\",\n className,\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"animate-caret-blink bg-foreground h-4 w-px duration-1000\" />\n </div>\n )}\n </div>\n );\n}\n\n/** Visual separator (dash) between OTP groups. */\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\n <MinusIcon />\n </div>\n );\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator };"]}