@omnifyjp/ui 1.0.2 → 2.0.1

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 (456) hide show
  1. package/dist/{chunk-TJMK2KBE.js → chunk-2BRCVWXR.js} +3 -3
  2. package/dist/chunk-2BRCVWXR.js.map +1 -0
  3. package/dist/{chunk-RQNZDWY3.js → chunk-33QLY6GI.js} +2 -2
  4. package/dist/chunk-33QLY6GI.js.map +1 -0
  5. package/dist/{chunk-NPL2R5LD.js → chunk-3V6NS4EQ.js} +5 -5
  6. package/dist/chunk-3V6NS4EQ.js.map +1 -0
  7. package/dist/{chunk-G7HTZBUR.js → chunk-47TUWE63.js} +3 -3
  8. package/dist/chunk-47TUWE63.js.map +1 -0
  9. package/dist/{chunk-75WZR6HF.js → chunk-4AGNE75K.js} +4 -4
  10. package/dist/chunk-4AGNE75K.js.map +1 -0
  11. package/dist/chunk-4NBDYSSQ.js +90 -0
  12. package/dist/chunk-4NBDYSSQ.js.map +1 -0
  13. package/dist/{chunk-FRKG7JQY.js → chunk-5AGUCELC.js} +2 -2
  14. package/dist/chunk-5AGUCELC.js.map +1 -0
  15. package/dist/{chunk-A3BB5ZOC.js → chunk-5SAUUOCN.js} +2 -2
  16. package/dist/chunk-5SAUUOCN.js.map +1 -0
  17. package/dist/{chunk-2TUWDXAC.js → chunk-5WOCEAZG.js} +3 -3
  18. package/dist/chunk-5WOCEAZG.js.map +1 -0
  19. package/dist/{chunk-2C2HRGM7.js → chunk-6W5FYOXQ.js} +3 -3
  20. package/dist/chunk-6W5FYOXQ.js.map +1 -0
  21. package/dist/{chunk-ZHEKDP5X.js → chunk-6Z6NRIQ2.js} +3 -3
  22. package/dist/chunk-6Z6NRIQ2.js.map +1 -0
  23. package/dist/{chunk-BAQWGQJG.js → chunk-7KZ7CVRN.js} +3 -3
  24. package/dist/chunk-7KZ7CVRN.js.map +1 -0
  25. package/dist/{chunk-C34KSTWA.js → chunk-7NMNLY7F.js} +2 -2
  26. package/dist/chunk-7NMNLY7F.js.map +1 -0
  27. package/dist/{chunk-55E7D2HR.js → chunk-BOV3Q2JH.js} +2 -2
  28. package/dist/chunk-BOV3Q2JH.js.map +1 -0
  29. package/dist/{chunk-34ARZSNP.js → chunk-CECQY5LL.js} +2 -2
  30. package/dist/chunk-CECQY5LL.js.map +1 -0
  31. package/dist/{chunk-JRU2QX7T.js → chunk-CLYBVDEQ.js} +2 -2
  32. package/dist/chunk-CLYBVDEQ.js.map +1 -0
  33. package/dist/{chunk-TGYQ3AKH.js → chunk-CNS3OMZ7.js} +2 -2
  34. package/dist/chunk-CNS3OMZ7.js.map +1 -0
  35. package/dist/{chunk-C5NZAOA7.js → chunk-CSYH7P6N.js} +2 -2
  36. package/dist/chunk-CSYH7P6N.js.map +1 -0
  37. package/dist/{chunk-USIHM7FV.js → chunk-DEKVLLTL.js} +2 -2
  38. package/dist/chunk-DEKVLLTL.js.map +1 -0
  39. package/dist/{chunk-Z2QAABLM.js → chunk-DXKFFJIE.js} +2 -2
  40. package/dist/chunk-DXKFFJIE.js.map +1 -0
  41. package/dist/{chunk-IAWKX5W4.js → chunk-DXZZURPN.js} +2 -2
  42. package/dist/chunk-DXZZURPN.js.map +1 -0
  43. package/dist/{chunk-XOJJBNDX.js → chunk-EAY3QSID.js} +2 -2
  44. package/dist/chunk-EAY3QSID.js.map +1 -0
  45. package/dist/{chunk-7XH3MGBR.js → chunk-EBV2XEHD.js} +5 -5
  46. package/dist/chunk-EBV2XEHD.js.map +1 -0
  47. package/dist/{chunk-P3M5TZD2.js → chunk-EYJ7TJIX.js} +2 -2
  48. package/dist/chunk-EYJ7TJIX.js.map +1 -0
  49. package/dist/{chunk-67YUL2ZS.js → chunk-FTNPOZGK.js} +2 -2
  50. package/dist/chunk-FTNPOZGK.js.map +1 -0
  51. package/dist/{chunk-JXGRW2MR.js → chunk-GR7T5QHL.js} +2 -2
  52. package/dist/chunk-GR7T5QHL.js.map +1 -0
  53. package/dist/{chunk-WS6E7HBT.js → chunk-HDTHGIQR.js} +3 -3
  54. package/dist/chunk-HDTHGIQR.js.map +1 -0
  55. package/dist/{chunk-LMT327XH.js → chunk-HEQVBUJO.js} +2 -2
  56. package/dist/chunk-HEQVBUJO.js.map +1 -0
  57. package/dist/{chunk-VVYSAGB3.js → chunk-I6PJSYBI.js} +3 -3
  58. package/dist/chunk-I6PJSYBI.js.map +1 -0
  59. package/dist/{chunk-35DNN46W.js → chunk-ITTPI2Z3.js} +3 -3
  60. package/dist/chunk-ITTPI2Z3.js.map +1 -0
  61. package/dist/{chunk-JAJMM32I.js → chunk-IXEPDTUE.js} +3 -3
  62. package/dist/chunk-IXEPDTUE.js.map +1 -0
  63. package/dist/{chunk-PGWNOZDX.js → chunk-KCUSO3CK.js} +2 -2
  64. package/dist/chunk-KCUSO3CK.js.map +1 -0
  65. package/dist/{chunk-QB3UWRZH.js → chunk-KJAXKHJ2.js} +3 -3
  66. package/dist/chunk-KJAXKHJ2.js.map +1 -0
  67. package/dist/{chunk-7IRLBU2I.js → chunk-LA4L3QIK.js} +3 -3
  68. package/dist/chunk-LA4L3QIK.js.map +1 -0
  69. package/dist/{chunk-NNJTKHCE.js → chunk-LTGCKJX7.js} +2 -2
  70. package/dist/chunk-LTGCKJX7.js.map +1 -0
  71. package/dist/{chunk-JJSVA3TH.js → chunk-LUYTKHGS.js} +2 -2
  72. package/dist/chunk-LUYTKHGS.js.map +1 -0
  73. package/dist/{chunk-6GWVQB3Q.js → chunk-MVYSUWSD.js} +3 -3
  74. package/dist/chunk-MVYSUWSD.js.map +1 -0
  75. package/dist/{chunk-YBMEQZX7.js → chunk-N5BNNKBR.js} +2 -2
  76. package/dist/chunk-N5BNNKBR.js.map +1 -0
  77. package/dist/{chunk-35U6QG4P.js → chunk-N6OUJIQD.js} +2 -2
  78. package/dist/chunk-N6OUJIQD.js.map +1 -0
  79. package/dist/{chunk-R2CDE5DO.js → chunk-NWVMNWOH.js} +2 -2
  80. package/dist/chunk-NWVMNWOH.js.map +1 -0
  81. package/dist/{chunk-NU56GKGM.js → chunk-ORTPKXBI.js} +2 -2
  82. package/dist/chunk-ORTPKXBI.js.map +1 -0
  83. package/dist/{chunk-FLWMT4DB.js → chunk-PJZ7D36X.js} +2 -2
  84. package/dist/chunk-PJZ7D36X.js.map +1 -0
  85. package/dist/{chunk-CUZR4JWM.js → chunk-PYB6RRA5.js} +3 -3
  86. package/dist/chunk-PYB6RRA5.js.map +1 -0
  87. package/dist/{chunk-BRSM3SZP.js → chunk-QGU4BRMO.js} +2 -2
  88. package/dist/chunk-QGU4BRMO.js.map +1 -0
  89. package/dist/{chunk-S6PDRGR5.js → chunk-RZZH57ZL.js} +2 -2
  90. package/dist/chunk-RZZH57ZL.js.map +1 -0
  91. package/dist/{chunk-EWBCV7VA.js → chunk-S73PGQD5.js} +2 -2
  92. package/dist/chunk-S73PGQD5.js.map +1 -0
  93. package/dist/{chunk-N47H4MHX.js → chunk-SAHHVJMQ.js} +3 -3
  94. package/dist/chunk-SAHHVJMQ.js.map +1 -0
  95. package/dist/{chunk-INLM7UJC.js → chunk-T65EBJUJ.js} +2 -2
  96. package/dist/chunk-T65EBJUJ.js.map +1 -0
  97. package/dist/{chunk-ZPMXRW2A.js → chunk-TPBRGO4D.js} +3 -3
  98. package/dist/chunk-TPBRGO4D.js.map +1 -0
  99. package/dist/{chunk-MJLFJPUG.js → chunk-V3S2AZKJ.js} +5 -5
  100. package/dist/chunk-V3S2AZKJ.js.map +1 -0
  101. package/dist/{chunk-MZ2P566X.js → chunk-VATNOBZ2.js} +3 -3
  102. package/dist/chunk-VATNOBZ2.js.map +1 -0
  103. package/dist/{chunk-JLTBUACL.js → chunk-VOLR236J.js} +2 -2
  104. package/dist/chunk-VOLR236J.js.map +1 -0
  105. package/dist/chunk-VPTIRPZW.js +75 -0
  106. package/dist/chunk-VPTIRPZW.js.map +1 -0
  107. package/dist/{chunk-WL4ZO2H3.js → chunk-W477ZR6B.js} +2 -2
  108. package/dist/chunk-W477ZR6B.js.map +1 -0
  109. package/dist/{chunk-3EOHW4QN.js → chunk-WJX6NKKF.js} +3 -3
  110. package/dist/chunk-WJX6NKKF.js.map +1 -0
  111. package/dist/{chunk-LTTNCAAA.js → chunk-XNUFKQYL.js} +3 -3
  112. package/dist/chunk-XNUFKQYL.js.map +1 -0
  113. package/dist/chunk-YN26HHZ4.js +71 -0
  114. package/dist/chunk-YN26HHZ4.js.map +1 -0
  115. package/dist/{chunk-ZYEGBF7G.js → chunk-YU23NDE4.js} +3 -3
  116. package/dist/chunk-YU23NDE4.js.map +1 -0
  117. package/dist/chunk-YU55YBID.js +144 -0
  118. package/dist/chunk-YU55YBID.js.map +1 -0
  119. package/dist/{chunk-F2ZJLKDP.js → chunk-YVCLIOMM.js} +2 -2
  120. package/dist/chunk-YVCLIOMM.js.map +1 -0
  121. package/dist/{chunk-7RMTPT6O.js → chunk-YYJVVYFS.js} +2 -2
  122. package/dist/chunk-YYJVVYFS.js.map +1 -0
  123. package/dist/chunk-ZUBW2ERW.js +70 -0
  124. package/dist/chunk-ZUBW2ERW.js.map +1 -0
  125. package/dist/components/display/accordion.js +4 -0
  126. package/dist/components/display/aspect-ratio.js +3 -0
  127. package/dist/components/display/avatar.js +4 -0
  128. package/dist/components/{badge.d.ts → display/badge.d.ts} +1 -1
  129. package/dist/components/display/badge.js +4 -0
  130. package/dist/components/display/card.js +4 -0
  131. package/dist/components/{carousel.d.ts → display/carousel.d.ts} +2 -2
  132. package/dist/components/display/carousel.js +5 -0
  133. package/dist/components/{chart.js → display/chart.js} +1 -1
  134. package/dist/components/display/chart.js.map +1 -0
  135. package/dist/components/{collapsible.js → display/collapsible.js} +1 -1
  136. package/dist/components/display/resizable.js +4 -0
  137. package/dist/components/display/scroll-area.js +4 -0
  138. package/dist/components/display/separator.js +4 -0
  139. package/dist/components/display/table.js +4 -0
  140. package/dist/components/display/toggle-group.js +5 -0
  141. package/dist/components/display/toggle.js +4 -0
  142. package/dist/components/domain/calendar/calendar-category-badge.js +5 -0
  143. package/dist/components/{calendar-event-chip.js → domain/calendar/calendar-event-chip.js} +1 -1
  144. package/dist/components/domain/calendar/calendar-event-chip.js.map +1 -0
  145. package/dist/components/{calendar-event-sheet.d.ts → domain/calendar/calendar-event-sheet.d.ts} +4 -1
  146. package/dist/components/{calendar-event-sheet.js → domain/calendar/calendar-event-sheet.js} +12 -8
  147. package/dist/components/domain/calendar/calendar-event-sheet.js.map +1 -0
  148. package/dist/components/{calendar-mini.d.ts → domain/calendar/calendar-mini.d.ts} +4 -1
  149. package/dist/components/{calendar-mini.js → domain/calendar/calendar-mini.js} +9 -5
  150. package/dist/components/domain/calendar/calendar-mini.js.map +1 -0
  151. package/dist/components/{calendar-toolbar.d.ts → domain/calendar/calendar-toolbar.d.ts} +4 -1
  152. package/dist/components/{calendar-toolbar.js → domain/calendar/calendar-toolbar.js} +10 -6
  153. package/dist/components/domain/calendar/calendar-toolbar.js.map +1 -0
  154. package/dist/components/domain/calendar/calendar.js +5 -0
  155. package/dist/components/domain/rbac/permission-grid.js +5 -0
  156. package/dist/components/domain/rbac/scope-tree.js +5 -0
  157. package/dist/components/domain/rbac/scope-type-badge.js +5 -0
  158. package/dist/components/domain/workflow/stage-type-badge.js +5 -0
  159. package/dist/components/domain/workflow/workflow-category-badge.js +5 -0
  160. package/dist/components/domain/workflow/workflow-diagram.js +5 -0
  161. package/dist/components/domain/workflow/workflow-status-badge.js +5 -0
  162. package/dist/components/domain/workflow/workflow-stepper.js +4 -0
  163. package/dist/components/{alert.d.ts → feedback/alert.d.ts} +1 -1
  164. package/dist/components/feedback/alert.js +4 -0
  165. package/dist/components/feedback/progress.js +4 -0
  166. package/dist/components/feedback/skeleton.js +4 -0
  167. package/dist/components/{button.d.ts → inputs/button.d.ts} +2 -2
  168. package/dist/components/inputs/button.js +4 -0
  169. package/dist/components/inputs/checkbox.js +4 -0
  170. package/dist/components/inputs/color-picker.js +9 -0
  171. package/dist/components/inputs/combobox.js +8 -0
  172. package/dist/components/{date-picker.d.ts → inputs/date-picker.d.ts} +2 -2
  173. package/dist/components/{date-picker.js → inputs/date-picker.js} +15 -8
  174. package/dist/components/inputs/date-picker.js.map +1 -0
  175. package/dist/components/inputs/file-upload.js +5 -0
  176. package/dist/components/{form.js → inputs/form.js} +2 -2
  177. package/dist/components/inputs/form.js.map +1 -0
  178. package/dist/components/inputs/input-otp.js +4 -0
  179. package/dist/components/inputs/input.d.ts +75 -0
  180. package/dist/components/inputs/input.js +6 -0
  181. package/dist/components/inputs/label.js +4 -0
  182. package/dist/components/{password-input.d.ts → inputs/password-input.d.ts} +2 -0
  183. package/dist/components/inputs/password-input.js +7 -0
  184. package/dist/components/inputs/radio-group.js +4 -0
  185. package/dist/components/inputs/rating.js +4 -0
  186. package/dist/components/{select.js → inputs/select.js} +2 -2
  187. package/dist/components/inputs/slider.js +4 -0
  188. package/dist/components/inputs/slug-input.js +8 -0
  189. package/dist/components/inputs/switch.js +4 -0
  190. package/dist/components/inputs/tag-input.js +5 -0
  191. package/dist/components/inputs/textarea.d.ts +67 -0
  192. package/dist/components/inputs/textarea.js +6 -0
  193. package/dist/{chunk-6DIDQ4TB.js → components/inputs/time-picker.js} +9 -7
  194. package/dist/components/inputs/time-picker.js.map +1 -0
  195. package/dist/components/inputs/translatable-field.d.ts +51 -0
  196. package/dist/components/inputs/translatable-field.js +4 -0
  197. package/dist/components/inputs/translatable-field.js.map +1 -0
  198. package/dist/components/layout/page-container.d.ts +96 -0
  199. package/dist/components/layout/page-container.js +5 -0
  200. package/dist/components/layout/page-container.js.map +1 -0
  201. package/dist/components/{breadcrumb.js → navigation/breadcrumb.js} +2 -2
  202. package/dist/components/{command.d.ts → navigation/command.d.ts} +1 -1
  203. package/dist/components/{command.js → navigation/command.js} +3 -3
  204. package/dist/components/{context-menu.js → navigation/context-menu.js} +2 -2
  205. package/dist/components/{dropdown-menu.js → navigation/dropdown-menu.js} +2 -2
  206. package/dist/components/{menubar.js → navigation/menubar.js} +2 -2
  207. package/dist/components/{navigation-menu.js → navigation/navigation-menu.js} +2 -2
  208. package/dist/components/{pagination.d.ts → navigation/pagination.d.ts} +2 -2
  209. package/dist/components/{pagination.js → navigation/pagination.js} +3 -3
  210. package/dist/components/navigation/tabs.js +4 -0
  211. package/dist/components/{alert-dialog.js → overlay/alert-dialog.js} +3 -3
  212. package/dist/components/{dialog.js → overlay/dialog.js} +2 -2
  213. package/dist/components/{drawer.js → overlay/drawer.js} +2 -2
  214. package/dist/components/{hover-card.js → overlay/hover-card.js} +2 -2
  215. package/dist/components/overlay/popover.js +4 -0
  216. package/dist/components/overlay/sheet.js +4 -0
  217. package/dist/components/overlay/sonner.js +3 -0
  218. package/dist/components/overlay/tooltip.js +4 -0
  219. package/dist/index.d.ts +84 -83
  220. package/dist/index.js +62 -60
  221. package/dist/providers/ui-provider.d.ts +96 -0
  222. package/dist/providers/ui-provider.js +3 -0
  223. package/dist/providers/ui-provider.js.map +1 -0
  224. package/package.json +13 -8
  225. package/dist/chunk-2C2HRGM7.js.map +0 -1
  226. package/dist/chunk-2TUWDXAC.js.map +0 -1
  227. package/dist/chunk-34ARZSNP.js.map +0 -1
  228. package/dist/chunk-35DNN46W.js.map +0 -1
  229. package/dist/chunk-35U6QG4P.js.map +0 -1
  230. package/dist/chunk-3EOHW4QN.js.map +0 -1
  231. package/dist/chunk-3VU56V66.js +0 -41
  232. package/dist/chunk-3VU56V66.js.map +0 -1
  233. package/dist/chunk-55E7D2HR.js.map +0 -1
  234. package/dist/chunk-67YUL2ZS.js.map +0 -1
  235. package/dist/chunk-6DIDQ4TB.js.map +0 -1
  236. package/dist/chunk-6GWVQB3Q.js.map +0 -1
  237. package/dist/chunk-75WZR6HF.js.map +0 -1
  238. package/dist/chunk-7IRLBU2I.js.map +0 -1
  239. package/dist/chunk-7RMTPT6O.js.map +0 -1
  240. package/dist/chunk-7XH3MGBR.js.map +0 -1
  241. package/dist/chunk-A3BB5ZOC.js.map +0 -1
  242. package/dist/chunk-BAQWGQJG.js.map +0 -1
  243. package/dist/chunk-BRSM3SZP.js.map +0 -1
  244. package/dist/chunk-C34KSTWA.js.map +0 -1
  245. package/dist/chunk-C5NZAOA7.js.map +0 -1
  246. package/dist/chunk-CUZR4JWM.js.map +0 -1
  247. package/dist/chunk-EWBCV7VA.js.map +0 -1
  248. package/dist/chunk-F2ZJLKDP.js.map +0 -1
  249. package/dist/chunk-FLWMT4DB.js.map +0 -1
  250. package/dist/chunk-FRKG7JQY.js.map +0 -1
  251. package/dist/chunk-G7HTZBUR.js.map +0 -1
  252. package/dist/chunk-IAWKX5W4.js.map +0 -1
  253. package/dist/chunk-INLM7UJC.js.map +0 -1
  254. package/dist/chunk-JAJMM32I.js.map +0 -1
  255. package/dist/chunk-JJSVA3TH.js.map +0 -1
  256. package/dist/chunk-JLTBUACL.js.map +0 -1
  257. package/dist/chunk-JRU2QX7T.js.map +0 -1
  258. package/dist/chunk-JXGRW2MR.js.map +0 -1
  259. package/dist/chunk-LMT327XH.js.map +0 -1
  260. package/dist/chunk-LTTNCAAA.js.map +0 -1
  261. package/dist/chunk-MJLFJPUG.js.map +0 -1
  262. package/dist/chunk-MZ2P566X.js.map +0 -1
  263. package/dist/chunk-N47H4MHX.js.map +0 -1
  264. package/dist/chunk-NNJTKHCE.js.map +0 -1
  265. package/dist/chunk-NPL2R5LD.js.map +0 -1
  266. package/dist/chunk-NU56GKGM.js.map +0 -1
  267. package/dist/chunk-P3M5TZD2.js.map +0 -1
  268. package/dist/chunk-PGWNOZDX.js.map +0 -1
  269. package/dist/chunk-QB3UWRZH.js.map +0 -1
  270. package/dist/chunk-R2CDE5DO.js.map +0 -1
  271. package/dist/chunk-RQNZDWY3.js.map +0 -1
  272. package/dist/chunk-S6PDRGR5.js.map +0 -1
  273. package/dist/chunk-TGYQ3AKH.js.map +0 -1
  274. package/dist/chunk-TJMK2KBE.js.map +0 -1
  275. package/dist/chunk-USIHM7FV.js.map +0 -1
  276. package/dist/chunk-VVYSAGB3.js.map +0 -1
  277. package/dist/chunk-WD5KZE25.js +0 -25
  278. package/dist/chunk-WD5KZE25.js.map +0 -1
  279. package/dist/chunk-WL4ZO2H3.js.map +0 -1
  280. package/dist/chunk-WS6E7HBT.js.map +0 -1
  281. package/dist/chunk-XOJJBNDX.js.map +0 -1
  282. package/dist/chunk-YBMEQZX7.js.map +0 -1
  283. package/dist/chunk-Z2QAABLM.js.map +0 -1
  284. package/dist/chunk-ZHEKDP5X.js.map +0 -1
  285. package/dist/chunk-ZPMXRW2A.js.map +0 -1
  286. package/dist/chunk-ZYEGBF7G.js.map +0 -1
  287. package/dist/components/accordion.js +0 -4
  288. package/dist/components/alert.js +0 -4
  289. package/dist/components/aspect-ratio.js +0 -3
  290. package/dist/components/avatar.js +0 -4
  291. package/dist/components/badge.js +0 -4
  292. package/dist/components/button.js +0 -4
  293. package/dist/components/calendar-category-badge.js +0 -5
  294. package/dist/components/calendar-event-chip.js.map +0 -1
  295. package/dist/components/calendar-event-sheet.js.map +0 -1
  296. package/dist/components/calendar-mini.js.map +0 -1
  297. package/dist/components/calendar-toolbar.js.map +0 -1
  298. package/dist/components/calendar.js +0 -5
  299. package/dist/components/card.js +0 -4
  300. package/dist/components/carousel.js +0 -5
  301. package/dist/components/chart.js.map +0 -1
  302. package/dist/components/checkbox.js +0 -4
  303. package/dist/components/color-picker.js +0 -7
  304. package/dist/components/combobox.js +0 -8
  305. package/dist/components/date-picker.js.map +0 -1
  306. package/dist/components/file-upload.js +0 -5
  307. package/dist/components/form.js.map +0 -1
  308. package/dist/components/input-otp.js +0 -4
  309. package/dist/components/input.d.ts +0 -38
  310. package/dist/components/input.js +0 -4
  311. package/dist/components/label.js +0 -4
  312. package/dist/components/password-input.js +0 -5
  313. package/dist/components/permission-grid.js +0 -5
  314. package/dist/components/popover.js +0 -4
  315. package/dist/components/progress.js +0 -4
  316. package/dist/components/radio-group.js +0 -4
  317. package/dist/components/rating.js +0 -4
  318. package/dist/components/resizable.js +0 -4
  319. package/dist/components/scope-tree.js +0 -5
  320. package/dist/components/scope-type-badge.js +0 -5
  321. package/dist/components/scroll-area.js +0 -4
  322. package/dist/components/separator.js +0 -4
  323. package/dist/components/sheet.js +0 -4
  324. package/dist/components/skeleton.js +0 -4
  325. package/dist/components/slider.js +0 -4
  326. package/dist/components/slug-input.js +0 -6
  327. package/dist/components/sonner.js +0 -3
  328. package/dist/components/stage-type-badge.js +0 -5
  329. package/dist/components/switch.js +0 -4
  330. package/dist/components/table.js +0 -4
  331. package/dist/components/tabs.js +0 -4
  332. package/dist/components/tag-input.js +0 -5
  333. package/dist/components/textarea.d.ts +0 -21
  334. package/dist/components/textarea.js +0 -4
  335. package/dist/components/time-picker.js +0 -8
  336. package/dist/components/time-picker.js.map +0 -1
  337. package/dist/components/toggle-group.js +0 -5
  338. package/dist/components/toggle.js +0 -4
  339. package/dist/components/tooltip.js +0 -4
  340. package/dist/components/workflow-category-badge.js +0 -5
  341. package/dist/components/workflow-diagram.js +0 -5
  342. package/dist/components/workflow-status-badge.js +0 -5
  343. package/dist/components/workflow-stepper.js +0 -4
  344. /package/dist/components/{accordion.d.ts → display/accordion.d.ts} +0 -0
  345. /package/dist/components/{accordion.js.map → display/accordion.js.map} +0 -0
  346. /package/dist/components/{aspect-ratio.d.ts → display/aspect-ratio.d.ts} +0 -0
  347. /package/dist/components/{aspect-ratio.js.map → display/aspect-ratio.js.map} +0 -0
  348. /package/dist/components/{avatar.d.ts → display/avatar.d.ts} +0 -0
  349. /package/dist/components/{avatar.js.map → display/avatar.js.map} +0 -0
  350. /package/dist/components/{badge.js.map → display/badge.js.map} +0 -0
  351. /package/dist/components/{card.d.ts → display/card.d.ts} +0 -0
  352. /package/dist/components/{card.js.map → display/card.js.map} +0 -0
  353. /package/dist/components/{carousel.js.map → display/carousel.js.map} +0 -0
  354. /package/dist/components/{chart.d.ts → display/chart.d.ts} +0 -0
  355. /package/dist/components/{collapsible.d.ts → display/collapsible.d.ts} +0 -0
  356. /package/dist/components/{collapsible.js.map → display/collapsible.js.map} +0 -0
  357. /package/dist/components/{resizable.d.ts → display/resizable.d.ts} +0 -0
  358. /package/dist/components/{resizable.js.map → display/resizable.js.map} +0 -0
  359. /package/dist/components/{scroll-area.d.ts → display/scroll-area.d.ts} +0 -0
  360. /package/dist/components/{scroll-area.js.map → display/scroll-area.js.map} +0 -0
  361. /package/dist/components/{separator.d.ts → display/separator.d.ts} +0 -0
  362. /package/dist/components/{separator.js.map → display/separator.js.map} +0 -0
  363. /package/dist/components/{table.d.ts → display/table.d.ts} +0 -0
  364. /package/dist/components/{table.js.map → display/table.js.map} +0 -0
  365. /package/dist/components/{toggle-group.d.ts → display/toggle-group.d.ts} +0 -0
  366. /package/dist/components/{toggle-group.js.map → display/toggle-group.js.map} +0 -0
  367. /package/dist/components/{toggle.d.ts → display/toggle.d.ts} +0 -0
  368. /package/dist/components/{toggle.js.map → display/toggle.js.map} +0 -0
  369. /package/dist/components/{calendar-category-badge.d.ts → domain/calendar/calendar-category-badge.d.ts} +0 -0
  370. /package/dist/components/{calendar-category-badge.js.map → domain/calendar/calendar-category-badge.js.map} +0 -0
  371. /package/dist/components/{calendar-event-chip.d.ts → domain/calendar/calendar-event-chip.d.ts} +0 -0
  372. /package/dist/components/{calendar.d.ts → domain/calendar/calendar.d.ts} +0 -0
  373. /package/dist/components/{calendar.js.map → domain/calendar/calendar.js.map} +0 -0
  374. /package/dist/components/{permission-grid.d.ts → domain/rbac/permission-grid.d.ts} +0 -0
  375. /package/dist/components/{permission-grid.js.map → domain/rbac/permission-grid.js.map} +0 -0
  376. /package/dist/components/{scope-tree.d.ts → domain/rbac/scope-tree.d.ts} +0 -0
  377. /package/dist/components/{scope-tree.js.map → domain/rbac/scope-tree.js.map} +0 -0
  378. /package/dist/components/{scope-type-badge.d.ts → domain/rbac/scope-type-badge.d.ts} +0 -0
  379. /package/dist/components/{scope-type-badge.js.map → domain/rbac/scope-type-badge.js.map} +0 -0
  380. /package/dist/components/{stage-type-badge.d.ts → domain/workflow/stage-type-badge.d.ts} +0 -0
  381. /package/dist/components/{stage-type-badge.js.map → domain/workflow/stage-type-badge.js.map} +0 -0
  382. /package/dist/components/{workflow-category-badge.d.ts → domain/workflow/workflow-category-badge.d.ts} +0 -0
  383. /package/dist/components/{workflow-category-badge.js.map → domain/workflow/workflow-category-badge.js.map} +0 -0
  384. /package/dist/components/{workflow-diagram.d.ts → domain/workflow/workflow-diagram.d.ts} +0 -0
  385. /package/dist/components/{workflow-diagram.js.map → domain/workflow/workflow-diagram.js.map} +0 -0
  386. /package/dist/components/{workflow-status-badge.d.ts → domain/workflow/workflow-status-badge.d.ts} +0 -0
  387. /package/dist/components/{workflow-status-badge.js.map → domain/workflow/workflow-status-badge.js.map} +0 -0
  388. /package/dist/components/{workflow-stepper.d.ts → domain/workflow/workflow-stepper.d.ts} +0 -0
  389. /package/dist/components/{workflow-stepper.js.map → domain/workflow/workflow-stepper.js.map} +0 -0
  390. /package/dist/components/{alert.js.map → feedback/alert.js.map} +0 -0
  391. /package/dist/components/{progress.d.ts → feedback/progress.d.ts} +0 -0
  392. /package/dist/components/{progress.js.map → feedback/progress.js.map} +0 -0
  393. /package/dist/components/{skeleton.d.ts → feedback/skeleton.d.ts} +0 -0
  394. /package/dist/components/{skeleton.js.map → feedback/skeleton.js.map} +0 -0
  395. /package/dist/components/{button.js.map → inputs/button.js.map} +0 -0
  396. /package/dist/components/{checkbox.d.ts → inputs/checkbox.d.ts} +0 -0
  397. /package/dist/components/{checkbox.js.map → inputs/checkbox.js.map} +0 -0
  398. /package/dist/components/{color-picker.d.ts → inputs/color-picker.d.ts} +0 -0
  399. /package/dist/components/{color-picker.js.map → inputs/color-picker.js.map} +0 -0
  400. /package/dist/components/{combobox.d.ts → inputs/combobox.d.ts} +0 -0
  401. /package/dist/components/{combobox.js.map → inputs/combobox.js.map} +0 -0
  402. /package/dist/components/{file-upload.d.ts → inputs/file-upload.d.ts} +0 -0
  403. /package/dist/components/{file-upload.js.map → inputs/file-upload.js.map} +0 -0
  404. /package/dist/components/{form.d.ts → inputs/form.d.ts} +0 -0
  405. /package/dist/components/{input-otp.d.ts → inputs/input-otp.d.ts} +0 -0
  406. /package/dist/components/{input-otp.js.map → inputs/input-otp.js.map} +0 -0
  407. /package/dist/components/{input.js.map → inputs/input.js.map} +0 -0
  408. /package/dist/components/{label.d.ts → inputs/label.d.ts} +0 -0
  409. /package/dist/components/{label.js.map → inputs/label.js.map} +0 -0
  410. /package/dist/components/{password-input.js.map → inputs/password-input.js.map} +0 -0
  411. /package/dist/components/{radio-group.d.ts → inputs/radio-group.d.ts} +0 -0
  412. /package/dist/components/{radio-group.js.map → inputs/radio-group.js.map} +0 -0
  413. /package/dist/components/{rating.d.ts → inputs/rating.d.ts} +0 -0
  414. /package/dist/components/{rating.js.map → inputs/rating.js.map} +0 -0
  415. /package/dist/components/{select.d.ts → inputs/select.d.ts} +0 -0
  416. /package/dist/components/{select.js.map → inputs/select.js.map} +0 -0
  417. /package/dist/components/{slider.d.ts → inputs/slider.d.ts} +0 -0
  418. /package/dist/components/{slider.js.map → inputs/slider.js.map} +0 -0
  419. /package/dist/components/{slug-input.d.ts → inputs/slug-input.d.ts} +0 -0
  420. /package/dist/components/{slug-input.js.map → inputs/slug-input.js.map} +0 -0
  421. /package/dist/components/{switch.d.ts → inputs/switch.d.ts} +0 -0
  422. /package/dist/components/{switch.js.map → inputs/switch.js.map} +0 -0
  423. /package/dist/components/{tag-input.d.ts → inputs/tag-input.d.ts} +0 -0
  424. /package/dist/components/{tag-input.js.map → inputs/tag-input.js.map} +0 -0
  425. /package/dist/components/{textarea.js.map → inputs/textarea.js.map} +0 -0
  426. /package/dist/components/{time-picker.d.ts → inputs/time-picker.d.ts} +0 -0
  427. /package/dist/components/{breadcrumb.d.ts → navigation/breadcrumb.d.ts} +0 -0
  428. /package/dist/components/{breadcrumb.js.map → navigation/breadcrumb.js.map} +0 -0
  429. /package/dist/components/{command.js.map → navigation/command.js.map} +0 -0
  430. /package/dist/components/{context-menu.d.ts → navigation/context-menu.d.ts} +0 -0
  431. /package/dist/components/{context-menu.js.map → navigation/context-menu.js.map} +0 -0
  432. /package/dist/components/{dropdown-menu.d.ts → navigation/dropdown-menu.d.ts} +0 -0
  433. /package/dist/components/{dropdown-menu.js.map → navigation/dropdown-menu.js.map} +0 -0
  434. /package/dist/components/{menubar.d.ts → navigation/menubar.d.ts} +0 -0
  435. /package/dist/components/{menubar.js.map → navigation/menubar.js.map} +0 -0
  436. /package/dist/components/{navigation-menu.d.ts → navigation/navigation-menu.d.ts} +0 -0
  437. /package/dist/components/{navigation-menu.js.map → navigation/navigation-menu.js.map} +0 -0
  438. /package/dist/components/{pagination.js.map → navigation/pagination.js.map} +0 -0
  439. /package/dist/components/{tabs.d.ts → navigation/tabs.d.ts} +0 -0
  440. /package/dist/components/{tabs.js.map → navigation/tabs.js.map} +0 -0
  441. /package/dist/components/{alert-dialog.d.ts → overlay/alert-dialog.d.ts} +0 -0
  442. /package/dist/components/{alert-dialog.js.map → overlay/alert-dialog.js.map} +0 -0
  443. /package/dist/components/{dialog.d.ts → overlay/dialog.d.ts} +0 -0
  444. /package/dist/components/{dialog.js.map → overlay/dialog.js.map} +0 -0
  445. /package/dist/components/{drawer.d.ts → overlay/drawer.d.ts} +0 -0
  446. /package/dist/components/{drawer.js.map → overlay/drawer.js.map} +0 -0
  447. /package/dist/components/{hover-card.d.ts → overlay/hover-card.d.ts} +0 -0
  448. /package/dist/components/{hover-card.js.map → overlay/hover-card.js.map} +0 -0
  449. /package/dist/components/{popover.d.ts → overlay/popover.d.ts} +0 -0
  450. /package/dist/components/{popover.js.map → overlay/popover.js.map} +0 -0
  451. /package/dist/components/{sheet.d.ts → overlay/sheet.d.ts} +0 -0
  452. /package/dist/components/{sheet.js.map → overlay/sheet.js.map} +0 -0
  453. /package/dist/components/{sonner.d.ts → overlay/sonner.d.ts} +0 -0
  454. /package/dist/components/{sonner.js.map → overlay/sonner.js.map} +0 -0
  455. /package/dist/components/{tooltip.d.ts → overlay/tooltip.d.ts} +0 -0
  456. /package/dist/components/{tooltip.js.map → overlay/tooltip.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dropdown-menu.tsx"],"names":[],"mappings":"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","file":"chunk-IAWKX5W4.js","sourcesContent":["import * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * Dropdown menu component built on Radix UI DropdownMenu.\n *\n * Displays a menu of actions or options triggered by a button click.\n * Supports items, checkbox items, radio items, sub-menus, separators,\n * labels, shortcuts, and destructive variants.\n *\n * @example\n * ```tsx\n * <DropdownMenu>\n * <DropdownMenuTrigger asChild>\n * <Button variant=\"outline\">Actions</Button>\n * </DropdownMenuTrigger>\n * <DropdownMenuContent>\n * <DropdownMenuLabel>My Account</DropdownMenuLabel>\n * <DropdownMenuSeparator />\n * <DropdownMenuItem>\n * <UserIcon className=\"size-4\" />\n * Profile\n * <DropdownMenuShortcut>Ctrl+P</DropdownMenuShortcut>\n * </DropdownMenuItem>\n * <DropdownMenuItem>\n * <SettingsIcon className=\"size-4\" />\n * Settings\n * </DropdownMenuItem>\n * <DropdownMenuSeparator />\n * <DropdownMenuItem variant=\"destructive\">\n * <TrashIcon className=\"size-4\" />\n * Delete\n * </DropdownMenuItem>\n * </DropdownMenuContent>\n * </DropdownMenu>\n * ```\n */\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\n/** Portal that renders dropdown content outside the DOM hierarchy. */\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n );\n}\n\n/** Element that opens the dropdown menu when clicked. Use `asChild` to merge into your own button. */\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n );\n}\n\n/** Floating container for menu items, positioned relative to the trigger. */\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\n/** Groups related menu items together for accessibility. */\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n );\n}\n\n/** Actionable menu item. Set `variant=\"destructive\"` for dangerous actions, `inset` for left-padding alignment. */\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-[var(--density-menu-item-py)] text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Menu item with a checkbox indicator for toggling options. */\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\n/** Container for radio menu items where only one can be selected at a time. */\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n );\n}\n\n/** Menu item with a radio indicator for single-selection groups. */\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\n/** Non-interactive label used to title a group of menu items. */\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Visual divider between groups of menu items. */\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\n/** Keyboard shortcut hint displayed at the end of a menu item. */\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Container for a nested sub-menu within the dropdown. */\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\n/** Menu item that opens a sub-menu on hover. Displays a chevron indicator. */\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\n/** Floating container for sub-menu items. */\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/menubar.tsx"],"names":[],"mappings":"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","file":"chunk-INLM7UJC.js","sourcesContent":["import * as React from \"react\";\nimport * as MenubarPrimitive from \"@radix-ui/react-menubar\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * Horizontal menu bar component built on Radix UI Menubar.\n *\n * Provides a desktop-style menu bar with multiple dropdown menus.\n * Each menu is defined by a `MenubarMenu` containing a `MenubarTrigger`\n * and `MenubarContent` with items.\n *\n * @example\n * ```tsx\n * <Menubar>\n * <MenubarMenu>\n * <MenubarTrigger>File</MenubarTrigger>\n * <MenubarContent>\n * <MenubarItem>\n * New Tab\n * <MenubarShortcut>Ctrl+T</MenubarShortcut>\n * </MenubarItem>\n * <MenubarItem>New Window</MenubarItem>\n * <MenubarSeparator />\n * <MenubarSub>\n * <MenubarSubTrigger>Share</MenubarSubTrigger>\n * <MenubarSubContent>\n * <MenubarItem>Email Link</MenubarItem>\n * <MenubarItem>Messages</MenubarItem>\n * </MenubarSubContent>\n * </MenubarSub>\n * </MenubarContent>\n * </MenubarMenu>\n * <MenubarMenu>\n * <MenubarTrigger>Edit</MenubarTrigger>\n * <MenubarContent>\n * <MenubarItem>Undo</MenubarItem>\n * <MenubarItem>Redo</MenubarItem>\n * </MenubarContent>\n * </MenubarMenu>\n * </Menubar>\n * ```\n */\nfunction Menubar({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn(\n \"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Wraps a single menu within the menu bar, containing a trigger and content. */\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />;\n}\n\n/** Groups related menubar items together for accessibility. */\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />;\n}\n\n/** Portal that renders menubar content outside the DOM hierarchy. */\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />;\n}\n\n/** Container for radio menubar items where only one can be selected at a time. */\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return (\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n );\n}\n\n/** Button label in the menu bar that opens its associated dropdown content on click. */\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Floating container for menubar items, positioned below the trigger. */\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md\",\n className,\n )}\n {...props}\n />\n </MenubarPortal>\n );\n}\n\n/** Actionable menu item. Set `variant=\"destructive\"` for dangerous actions, `inset` for left-padding alignment. */\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Menu item with a checkbox indicator for toggling options. */\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n );\n}\n\n/** Menu item with a radio indicator for single-selection groups. */\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n );\n}\n\n/** Non-interactive label used to title a group of menu items. */\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Visual divider between groups of menu items. */\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\n/** Keyboard shortcut hint displayed at the end of a menu item. */\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Container for a nested sub-menu within the menubar. */\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />;\n}\n\n/** Menu item that opens a sub-menu on hover. Displays a chevron indicator. */\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </MenubarPrimitive.SubTrigger>\n );\n}\n\n/** Floating container for sub-menu items. */\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n};"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/calendar-category-badge.tsx"],"names":[],"mappings":";;;AAEA,IAAM,qBAAA,GAAgD;AAAA,EACpD,OAAA,EAAS,yGAAA;AAAA,EACT,QAAA,EAAU,mGAAA;AAAA,EACV,QAAA,EAAU,+GAAA;AAAA,EACV,QAAA,EAAU,qHAAA;AAAA,EACV,OAAA,EAAS;AACX,CAAA;AAsBO,SAAS,qBAAA,CAAsB,EAAE,QAAA,EAAU,KAAA,EAAO,QAAO,EAA+B;AAC7F,EAAA,MAAM,SAAA,GAAY,EAAE,GAAG,qBAAA,EAAuB,GAAG,MAAA,EAAO;AACxD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,SAAA,EAAW,UAAU,QAAQ,CAAA,IAAK,EAAA,EACxD,QAAA,EAAA,KAAA,IAAS,QAAA,EACZ,CAAA;AAEJ","file":"chunk-JAJMM32I.js","sourcesContent":["import { Badge } from './badge';\n\nconst defaultCategoryStyles: Record<string, string> = {\n meeting: 'bg-blue-50 dark:bg-blue-500/15 text-blue-600 dark:text-blue-400 border-blue-200 dark:border-blue-500/30',\n deadline: 'bg-red-50 dark:bg-red-500/15 text-red-600 dark:text-red-400 border-red-200 dark:border-red-500/30',\n reminder: 'bg-amber-50 dark:bg-amber-500/15 text-amber-600 dark:text-amber-400 border-amber-200 dark:border-amber-500/30',\n personal: 'bg-purple-50 dark:bg-purple-500/15 text-purple-600 dark:text-purple-400 border-purple-200 dark:border-purple-500/30',\n holiday: 'bg-green-50 dark:bg-green-500/15 text-green-600 dark:text-green-400 border-green-200 dark:border-green-500/30',\n};\n\nexport interface CalendarCategoryBadgeProps {\n /** The category key (e.g. \"meeting\", \"deadline\"). Determines the badge color from built-in or custom styles. */\n category: string;\n /** Override display label. Defaults to the raw category key. */\n label?: string;\n /** Custom className styles per category key, merged with built-in defaults. */\n styles?: Record<string, string>;\n}\n\n/**\n * Color-coded badge for calendar event categories. Ships with built-in styles\n * for meeting (blue), deadline (red), reminder (amber), personal (purple), and\n * holiday (green). Custom categories can be styled via the `styles` prop.\n *\n * @example\n * ```tsx\n * <CalendarCategoryBadge category=\"meeting\" label=\"Meeting\" />\n * <CalendarCategoryBadge category=\"custom\" label=\"Custom\" styles={{ custom: \"bg-pink-50 text-pink-600\" }} />\n * ```\n */\nexport function CalendarCategoryBadge({ category, label, styles }: CalendarCategoryBadgeProps) {\n const allStyles = { ...defaultCategoryStyles, ...styles };\n return (\n <Badge variant=\"outline\" className={allStyles[category] ?? ''}>\n {label ?? category}\n </Badge>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/scroll-area.tsx"],"names":[],"mappings":";;;;AAyBA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACE,IAAA;AAAA,IAAqB,mBAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAqB,mBAAA,CAAA,QAAA;AAAA,UAApB;AAAA,YACC,WAAA,EAAU,sBAAA;AAAA,YACV,SAAA,EAAU,oJAAA;AAAA,YAET;AAAA;AAAA,SACH;AAAA,4BACC,SAAA,EAAA,EAAU,CAAA;AAAA,wBACX,GAAA,CAAqB,4BAApB,EAA2B;AAAA;AAAA;AAAA,GAC9B;AAEJ;AAGA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,UAAA;AAAA,EACd,GAAG;AACL,CAAA,EAAyE;AACvE,EAAA,uBACE,GAAA;AAAA,IAAqB,mBAAA,CAAA,mBAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,oDAAA;AAAA,QACA,gBAAgB,UAAA,IACd,4CAAA;AAAA,QACF,gBAAgB,YAAA,IACd,8CAAA;AAAA,QACF;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA;AAAA,QAAqB,mBAAA,CAAA,eAAA;AAAA,QAApB;AAAA,UACC,WAAA,EAAU,mBAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,GACF;AAEJ","file":"chunk-JJSVA3TH.js","sourcesContent":["import * as React from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * Custom scrollable container with styled scrollbar built on Radix ScrollArea.\n *\n * Replaces native browser scrollbars with a thin, themed scrollbar.\n * Includes a vertical `ScrollBar` by default. Add a horizontal `ScrollBar`\n * as a child if needed.\n *\n * @example\n * ```tsx\n * <ScrollArea className=\"h-72 w-48 rounded-md border\">\n * <div className=\"p-4\">\n * {items.map((item) => (\n * <div key={item} className=\"py-2 text-sm\">\n * {item}\n * </div>\n * ))}\n * </div>\n * </ScrollArea>\n * ```\n */\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\n/** Styled scrollbar track and thumb. Set `orientation` to `\"horizontal\"` or `\"vertical\"` (default). */\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/sheet.tsx"],"names":[],"mappings":"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","file":"chunk-JLTBUACL.js","sourcesContent":["import * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * Slide-out panel component built on Radix UI Dialog.\n *\n * A sheet slides in from the edge of the screen, ideal for navigation,\n * filters, or supplementary content. Supports `top`, `right`, `bottom`,\n * and `left` sides via the `side` prop on `SheetContent`.\n *\n * @example\n * ```tsx\n * <Sheet open={open} onOpenChange={setOpen}>\n * <SheetTrigger asChild>\n * <Button variant=\"outline\">Open Sheet</Button>\n * </SheetTrigger>\n * <SheetContent side=\"right\">\n * <SheetHeader>\n * <SheetTitle>Settings</SheetTitle>\n * <SheetDescription>\n * Adjust your preferences below.\n * </SheetDescription>\n * </SheetHeader>\n * <div className=\"p-4\">Content here</div>\n * <SheetFooter>\n * <Button onClick={() => setOpen(false)}>Done</Button>\n * </SheetFooter>\n * </SheetContent>\n * </Sheet>\n * ```\n */\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\n/** Element that opens the sheet when clicked. Use `asChild` to merge into your own button. */\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\n/** Button that closes the sheet. Use `asChild` to merge into your own button. */\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\n/** Portal that renders sheet content outside the DOM hierarchy. */\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\n/** Semi-transparent backdrop rendered behind the sheet panel. */\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Sliding content panel. Set `side` to control which edge it slides from (default: `\"right\"`). */\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className,\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\n/** Container for SheetTitle and SheetDescription at the top of the sheet. */\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-[var(--density-sheet)]\", className)}\n {...props}\n />\n );\n}\n\n/** Container for action buttons at the bottom of the sheet. Pushed to the bottom via `mt-auto`. */\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-[var(--density-sheet)]\", className)}\n {...props}\n />\n );\n}\n\n/** Accessible title rendered inside SheetHeader. */\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n );\n}\n\n/** Accessible description rendered inside SheetHeader below the title. */\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/hover-card.tsx"],"names":[],"mappings":";;;;AAqCA,SAAS,SAAA,CAAU;AAAA,EACjB,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,2BAA2B,kBAAA,CAAA,IAAA,EAAnB,EAAwB,WAAA,EAAU,YAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AACpE;AAGA,SAAS,gBAAA,CAAiB;AAAA,EACxB,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,2BACsB,kBAAA,CAAA,OAAA,EAAnB,EAA2B,WAAA,EAAU,oBAAA,EAAsB,GAAG,KAAA,EAAO,CAAA;AAE1E;AAGA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,KAAA,GAAQ,QAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACE,GAAA,CAAoB,kBAAA,CAAA,MAAA,EAAnB,EAA0B,WAAA,EAAU,mBAAA,EACnC,QAAA,kBAAA,GAAA;AAAA,IAAoB,kBAAA,CAAA,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,meAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ","file":"chunk-JRU2QX7T.js","sourcesContent":["import * as React from \"react\";\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * Hover-activated floating card built on Radix UI HoverCard.\n *\n * Displays a preview card when the user hovers over a trigger element.\n * Ideal for showing user profiles, link previews, or supplementary info\n * without requiring a click.\n *\n * @example\n * ```tsx\n * <HoverCard>\n * <HoverCardTrigger asChild>\n * <a href=\"/user/john\" className=\"underline\">\n * @john\n * </a>\n * </HoverCardTrigger>\n * <HoverCardContent>\n * <div className=\"flex gap-4\">\n * <Avatar>\n * <AvatarImage src=\"/avatars/john.png\" />\n * <AvatarFallback>JD</AvatarFallback>\n * </Avatar>\n * <div>\n * <h4 className=\"text-sm font-semibold\">John Doe</h4>\n * <p className=\"text-sm text-muted-foreground\">\n * Software Engineer\n * </p>\n * </div>\n * </div>\n * </HoverCardContent>\n * </HoverCard>\n * ```\n */\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />;\n}\n\n/** Element that shows the hover card on mouse enter. Use `asChild` to merge into your own element. */\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n );\n}\n\n/** Floating content panel that appears on hover. */\nfunction HoverCardContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className,\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n );\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent };"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/skeleton.tsx"],"names":[],"mappings":";;;AAuBA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkB;AACxD,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-JXGRW2MR.js","sourcesContent":["import { cn } from \"../lib/utils\";\n\ntype SkeletonProps = React.ComponentProps<\"div\">;\n\n/**\n * Placeholder loading indicator with a pulse animation, used to represent\n * content that is being fetched or rendered.\n *\n * @example\n * ```tsx\n * // Text placeholder\n * <Skeleton className=\"h-4 w-48\" />\n *\n * // Circular avatar placeholder\n * <Skeleton className=\"size-10 rounded-full\" />\n *\n * // Card skeleton\n * <div className=\"space-y-2\">\n * <Skeleton className=\"h-4 w-full\" />\n * <Skeleton className=\"h-4 w-3/4\" />\n * </div>\n * ```\n */\nfunction Skeleton({ className, ...props }: SkeletonProps) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\nexport type { SkeletonProps };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/workflow-stepper.tsx"],"names":[],"mappings":";;;;AAqDO,SAAS,eAAA,CAAgB;AAAA,EAC9B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,YAAA,GAAe,CAAC,GAAG,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA;AACjE,EAAA,MAAM,iBAAA,GAAoB,IAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAC,CAAA;AAE/D,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,8CAAA,EAAgD,SAAS,CAAA,EACzE,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,KAAU;AAClC,IAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA;AAClD,IAAA,MAAM,SAAA,GAAY,MAAM,EAAA,KAAO,cAAA;AAC/B,IAAA,MAAM,YAAA,GAAe,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,OAAA,KAAY,MAAM,EAAE,CAAA;AAC/D,IAAA,MAAM,UAAA,GAAa,cAAc,QAAA,KAAa,UAAA;AAE9C,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAmB,SAAA,EAAU,iCAAA,EAC5B,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kCAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,sGAAA;AAAA,cACA,WAAA,GACI,UAAA,GACE,8CAAA,GACA,sCAAA,GACF,YACE,yDAAA,GACA;AAAA,aACR;AAAA,YAEC,wCAAc,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,IAAK,KAAA,CAAM;AAAA;AAAA,SACvD;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,uCAAA;AAAA,cACA,YAAY,6BAAA,GAAgC;AAAA,aAC9C;AAAA,YAEC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT,OAAA,EACF,CAAA;AAAA,MACC,KAAA,GAAQ,YAAA,CAAa,MAAA,GAAS,CAAA,oBAC7B,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,4BAAA;AAAA,YACA,cAAc,YAAA,GAAe;AAAA;AAC/B;AAAA;AACF,KAAA,EAAA,EA/BM,MAAM,EAiChB,CAAA;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ","file":"chunk-LMT327XH.js","sourcesContent":["import { Check } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\n/** A single stage in the workflow stepper. */\nexport interface WorkflowStepperStage {\n /** Unique identifier for this stage. */\n id: string;\n /** Display name shown below the stage circle. */\n name: string;\n /** Numeric order used to sort stages left-to-right. */\n order: number;\n}\n\n/** A history entry representing a completed (or rejected) stage. */\nexport interface WorkflowStepperHistoryEntry {\n /** The stage ID this history entry applies to. */\n stageId: string;\n /** The decision made at this stage. \"rejected\" stages render in red. */\n decision: 'approved' | 'rejected' | 'skipped' | (string & {});\n}\n\nexport interface WorkflowStepperProps {\n /** Ordered list of stages to display. Will be sorted by `order`. */\n stages: WorkflowStepperStage[];\n /** History of completed stages. Used to determine which stages are done. */\n history: WorkflowStepperHistoryEntry[];\n /** The id of the currently active stage. */\n currentStageId: string;\n /** Optional additional className for the root container. */\n className?: string;\n}\n\n/**\n * WorkflowStepper displays a horizontal progression of workflow stages.\n *\n * Each stage is shown as a numbered circle. Completed stages show a checkmark\n * (green for approved, red for rejected). The current stage pulses with a blue\n * highlight. Stages are connected by a horizontal line that turns green once\n * the preceding stage is completed.\n *\n * @example\n * ```tsx\n * <WorkflowStepper\n * stages={[\n * { id: \"s1\", name: \"Submit\", order: 1 },\n * { id: \"s2\", name: \"Review\", order: 2 },\n * { id: \"s3\", name: \"Approve\", order: 3 },\n * ]}\n * history={[{ stageId: \"s1\", decision: \"approved\" }]}\n * currentStageId=\"s2\"\n * />\n * ```\n */\nexport function WorkflowStepper({\n stages,\n history,\n currentStageId,\n className,\n}: WorkflowStepperProps) {\n const sortedStages = [...stages].sort((a, b) => a.order - b.order);\n const completedStageIds = new Set(history.map((h) => h.stageId));\n\n return (\n <div className={cn('flex items-center gap-0 overflow-x-auto pb-2', className)}>\n {sortedStages.map((stage, index) => {\n const isCompleted = completedStageIds.has(stage.id);\n const isCurrent = stage.id === currentStageId;\n const historyEntry = history.find((h) => h.stageId === stage.id);\n const isRejected = historyEntry?.decision === 'rejected';\n\n return (\n <div key={stage.id} className=\"flex items-center flex-shrink-0\">\n <div className=\"flex flex-col items-center gap-1\">\n <div\n className={cn(\n 'w-8 h-8 rounded-full flex items-center justify-center text-sm font-medium border-2 transition-colors',\n isCompleted\n ? isRejected\n ? 'bg-destructive border-destructive text-white'\n : 'bg-success border-success text-white'\n : isCurrent\n ? 'border-primary bg-primary/10 text-primary animate-pulse'\n : 'border-border bg-muted text-muted-foreground',\n )}\n >\n {isCompleted ? <Check className=\"w-4 h-4\" /> : stage.order}\n </div>\n <span\n className={cn(\n 'text-xs max-w-20 text-center truncate',\n isCurrent ? 'font-medium text-foreground' : 'text-muted-foreground',\n )}\n >\n {stage.name}\n </span>\n </div>\n {index < sortedStages.length - 1 && (\n <div\n className={cn(\n 'w-12 h-0.5 mx-1 mt-[-12px]',\n isCompleted ? 'bg-success' : 'bg-border',\n )}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/alert-dialog.tsx"],"names":[],"mappings":"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","file":"chunk-LTTNCAAA.js","sourcesContent":["import * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\n\nimport { cn } from \"../lib/utils\";\nimport { buttonVariants } from \"./button\";\n\n/**\n * Confirmation dialog built on Radix UI AlertDialog.\n *\n * Unlike `Dialog`, an alert dialog requires an explicit user action to dismiss\n * (no click-outside or Escape by default). Use it for destructive actions or\n * important confirmations.\n *\n * @example\n * ```tsx\n * <AlertDialog open={open} onOpenChange={setOpen}>\n * <AlertDialogTrigger asChild>\n * <Button variant=\"destructive\">Delete Item</Button>\n * </AlertDialogTrigger>\n * <AlertDialogContent>\n * <AlertDialogHeader>\n * <AlertDialogTitle>Are you sure?</AlertDialogTitle>\n * <AlertDialogDescription>\n * This action cannot be undone. This will permanently delete\n * your item and remove it from our servers.\n * </AlertDialogDescription>\n * </AlertDialogHeader>\n * <AlertDialogFooter>\n * <AlertDialogCancel>Cancel</AlertDialogCancel>\n * <AlertDialogAction>Delete</AlertDialogAction>\n * </AlertDialogFooter>\n * </AlertDialogContent>\n * </AlertDialog>\n * ```\n */\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />;\n}\n\n/** Element that opens the alert dialog when clicked. Use `asChild` to merge into your own button. */\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n );\n}\n\n/** Portal that renders alert dialog content outside the DOM hierarchy. */\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n );\n}\n\n/** Semi-transparent backdrop rendered behind the alert dialog content. */\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Alert dialog content panel with overlay backdrop. */\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n );\n}\n\n/** Container for AlertDialogTitle and AlertDialogDescription. */\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\n/** Container for AlertDialogAction and AlertDialogCancel buttons. */\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Accessible title for the alert dialog. */\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n );\n}\n\n/** Accessible description explaining the consequences of the action. */\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\n/** Primary action button that confirms and closes the alert dialog. */\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n return (\n <AlertDialogPrimitive.Action\n className={cn(buttonVariants(), className)}\n {...props}\n />\n );\n}\n\n/** Cancel button that dismisses the alert dialog without taking action. Styled as outline variant. */\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n );\n}\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/color-picker.tsx"],"names":[],"mappings":"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","file":"chunk-MJLFJPUG.js","sourcesContent":["import * as React from \"react\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\nimport { Input } from \"./input\";\n\nconst PRESET_COLORS = [\n \"#EF4444\", // Red\n \"#F97316\", // Orange\n \"#F59E0B\", // Amber\n \"#EAB308\", // Yellow\n \"#84CC16\", // Lime\n \"#22C55E\", // Green\n \"#10B981\", // Emerald\n \"#14B8A6\", // Teal\n \"#06B6D4\", // Cyan\n \"#0EA5E9\", // Sky\n \"#3B82F6\", // Blue\n \"#6366F1\", // Indigo\n \"#8B5CF6\", // Purple\n \"#A855F7\", // Violet\n \"#D946EF\", // Fuchsia\n \"#EC4899\", // Pink\n \"#F43F5E\", // Rose\n \"#64748B\", // Slate\n \"#6B7280\", // Gray\n \"#000000\", // Black\n];\n\ninterface ColorPickerProps {\n /** Currently selected color as a hex string (e.g., `\"#3B82F6\"`). */\n value?: string;\n /** Callback fired when a color is selected. Receives a hex string. */\n onChange?: (color: string) => void;\n /** Additional CSS class for the trigger button. */\n className?: string;\n /** Whether the color picker is disabled. */\n disabled?: boolean;\n /** Whether to show the preset color grid. Defaults to `true`. */\n showPresets?: boolean;\n /** Whether to show the custom hex input with native color picker. Defaults to `true`. */\n showInput?: boolean;\n}\n\n/**\n * Color picker with a popover containing preset color swatches and an optional custom hex input.\n * The trigger button shows the currently selected color swatch and its hex value.\n *\n * @example\n * ```tsx\n * const [color, setColor] = useState(\"#3B82F6\");\n *\n * <ColorPicker\n * value={color}\n * onChange={setColor}\n * showPresets\n * showInput\n * />\n * ```\n */\nexport function ColorPicker({\n value = \"#3B82F6\",\n onChange,\n className,\n disabled,\n showPresets = true,\n showInput = true,\n}: ColorPickerProps) {\n const [customColor, setCustomColor] = React.useState(value);\n\n const handleColorChange = (color: string) => {\n setCustomColor(color);\n onChange?.(color);\n };\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"w-full justify-start gap-2\",\n className\n )}\n >\n <div\n className=\"h-4 w-4 rounded border border-border\"\n style={{ backgroundColor: value }}\n />\n <span className=\"flex-1 text-left\">{value}</span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-64 p-3\" align=\"start\">\n <div className=\"space-y-3\">\n {showPresets && (\n <div>\n <div className=\"text-xs font-medium mb-2 text-foreground\">\n Màu mặc định\n </div>\n <div className=\"grid grid-cols-10 gap-1.5\">\n {PRESET_COLORS.map((color) => (\n <button\n key={color}\n type=\"button\"\n className={cn(\n \"h-6 w-6 rounded border-2 transition-all hover:scale-110\",\n value === color\n ? \"border-foreground ring-2 ring-foreground ring-offset-1\"\n : \"border-border\"\n )}\n style={{ backgroundColor: color }}\n onClick={() => handleColorChange(color)}\n >\n {value === color && (\n <Check className=\"w-3 h-3 text-white mx-auto drop-shadow\" />\n )}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {showInput && (\n <div>\n <div className=\"text-xs font-medium mb-2 text-foreground\">\n Màu tùy chỉnh\n </div>\n <div className=\"flex gap-2\">\n <div className=\"relative flex-1\">\n <Input\n value={customColor}\n onChange={(e) => setCustomColor(e.target.value)}\n onBlur={() => {\n // Validate hex color\n if (/^#[0-9A-F]{6}$/i.test(customColor)) {\n handleColorChange(customColor);\n } else {\n setCustomColor(value);\n }\n }}\n placeholder=\"#000000\"\n className=\"pr-10\"\n />\n <input\n type=\"color\"\n value={customColor}\n onChange={(e) => {\n setCustomColor(e.target.value);\n handleColorChange(e.target.value);\n }}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 h-6 w-6 rounded border border-border cursor-pointer\"\n />\n </div>\n </div>\n </div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/workflow-diagram.tsx"],"names":[],"mappings":"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","file":"chunk-MZ2P566X.js","sourcesContent":["import { ArrowRight, CheckCircle, Eye, Bell, GitBranch, Users } from 'lucide-react';\nimport { cn } from '../lib/utils';\nimport { Card, CardContent } from './card';\n\n/**\n * Supported stage types for the workflow diagram. Each type has a dedicated\n * icon (CheckCircle, Eye, Bell, GitBranch) and color.\n */\nexport type WorkflowDiagramStageType = 'approval' | 'review' | 'notification' | 'conditional';\n\n/** A single stage in the workflow diagram. */\nexport interface WorkflowDiagramStage {\n /** Unique identifier for this stage. */\n id: string;\n /** Display name shown on the stage card. */\n name: string;\n /** Stage type that determines the icon and color. */\n type: WorkflowDiagramStageType;\n /** List of user IDs assigned as approvers. Count is displayed on the card. */\n approverIds: string[];\n /** Numeric order used to sort stages left-to-right. */\n order: number;\n}\n\n/** User-visible labels for the workflow diagram. All have English defaults. */\nexport interface WorkflowDiagramLabels {\n /** Label shown above stage name for each stage type */\n approval?: string;\n review?: string;\n notification?: string;\n conditional?: string;\n /** Text for the approver count (e.g. \"approvers\") */\n approvers?: string;\n}\n\nexport interface WorkflowDiagramProps {\n /** Ordered list of stages to display. Will be sorted by `order`. */\n stages: WorkflowDiagramStage[];\n /** The id of the currently active stage. Highlighted with a blue border. */\n currentStageId?: string;\n /** User-visible labels with English defaults. */\n labels?: WorkflowDiagramLabels;\n /** Optional additional className for the root container. */\n className?: string;\n}\n\nconst stageIcons: Record<WorkflowDiagramStageType, typeof CheckCircle> = {\n approval: CheckCircle,\n review: Eye,\n notification: Bell,\n conditional: GitBranch,\n};\n\nconst stageColors: Record<WorkflowDiagramStageType, string> = {\n approval: 'text-green-600 dark:text-green-400',\n review: 'text-blue-600 dark:text-blue-400',\n notification: 'text-amber-600 dark:text-amber-400',\n conditional: 'text-purple-600 dark:text-purple-400',\n};\n\nconst defaultLabels: Required<WorkflowDiagramLabels> = {\n approval: 'Approval',\n review: 'Review',\n notification: 'Notification',\n conditional: 'Conditional',\n approvers: 'approvers',\n};\n\n/**\n * WorkflowDiagram renders a horizontal flow of workflow stages as cards\n * connected by arrows.\n *\n * Each stage card displays an icon based on stage type, the stage name,\n * and an optional approver count. The current stage is highlighted with\n * a blue border.\n *\n * @example\n * ```tsx\n * <WorkflowDiagram\n * stages={[\n * { id: \"s1\", name: \"Manager Review\", type: \"review\", approverIds: [\"u1\"], order: 1 },\n * { id: \"s2\", name: \"Final Approval\", type: \"approval\", approverIds: [\"u2\", \"u3\"], order: 2 },\n * ]}\n * currentStageId=\"s1\"\n * labels={{ approvers: \"approvers\" }}\n * />\n * ```\n */\nexport function WorkflowDiagram({\n stages,\n currentStageId,\n labels,\n className,\n}: WorkflowDiagramProps) {\n const sortedStages = [...stages].sort((a, b) => a.order - b.order);\n\n const resolvedLabels = { ...defaultLabels, ...labels };\n\n const typeLabels: Record<WorkflowDiagramStageType, string> = {\n approval: resolvedLabels.approval,\n review: resolvedLabels.review,\n notification: resolvedLabels.notification,\n conditional: resolvedLabels.conditional,\n };\n\n return (\n <div className={cn('flex items-start gap-2 overflow-x-auto pb-2', className)}>\n {sortedStages.map((stage, index) => {\n const Icon = stageIcons[stage.type];\n const isCurrent = stage.id === currentStageId;\n\n return (\n <div key={stage.id} className=\"flex items-center gap-2 flex-shrink-0\">\n <Card className={cn('w-48', isCurrent && 'border-primary border-2')}>\n <CardContent className=\"px-3 py-3\">\n <div className=\"flex items-center gap-2 mb-1\">\n <Icon className={cn('w-4 h-4', stageColors[stage.type])} />\n <span className=\"text-xs font-medium text-muted-foreground\">\n {typeLabels[stage.type]}\n </span>\n </div>\n <p className=\"text-sm font-medium truncate\">{stage.name}</p>\n {stage.approverIds.length > 0 && (\n <div className=\"flex items-center gap-1 mt-1.5 text-xs text-muted-foreground\">\n <Users className=\"w-3 h-3\" />\n <span>\n {stage.approverIds.length} {resolvedLabels.approvers.toLowerCase()}\n </span>\n </div>\n )}\n </CardContent>\n </Card>\n {index < sortedStages.length - 1 && (\n <ArrowRight className=\"w-4 h-4 text-muted-foreground flex-shrink-0\" />\n )}\n </div>\n );\n })}\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/scope-type-badge.tsx"],"names":[],"mappings":";;;;;AAYA,IAAM,cAAA,GAAuD;AAAA,EAC3D,MAAA,EAAQ;AAAA,IACN,SAAA,EACE,yGAAA;AAAA,IACF,IAAA,EAAM;AAAA,GACR;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,SAAA,EACE,qHAAA;AAAA,IACF,IAAA,EAAM;AAAA,GACR;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,SAAA,EACE,+GAAA;AAAA,IACF,IAAA,EAAM;AAAA,GACR;AAAA,EACA,QAAA,EAAU;AAAA,IACR,SAAA,EACE,+GAAA;AAAA,IACF,IAAA,EAAM;AAAA;AAEV,CAAA;AAyBO,SAAS,cAAA,CAAe;AAAA,EAC7B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA,EAAQ;AACV,CAAA,EAAwB;AACtB,EAAA,MAAM,QAAA,GAAW,cAAA,CAAe,IAAI,CAAA,IAAK,cAAA,CAAe,MAAA;AACxD,EAAA,MAAM,IAAA,GAAO,cAAA,EAAgB,IAAA,IAAQ,QAAA,CAAS,IAAA;AAC9C,EAAA,MAAM,cAAA,GAAiB,cAAA,EAAgB,SAAA,IAAa,QAAA,CAAS,SAAA;AAE7D,EAAA,uBACE,IAAA,CAAC,SAAM,OAAA,EAAQ,SAAA,EAAU,WAAW,EAAA,CAAG,cAAA,EAAgB,SAAS,CAAA,EAC9D,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,WAAU,cAAA,EAAe,CAAA;AAAA,IAC9B;AAAA,GAAA,EACH,CAAA;AAEJ","file":"chunk-N47H4MHX.js","sourcesContent":["import { Globe, Building2, GitBranch, MapPin, type LucideIcon } from 'lucide-react';\nimport { Badge } from './badge';\nimport { cn } from '../lib/utils';\n\n/** Custom style and icon overrides for a scope type badge. */\nexport interface ScopeTypeBadgeStyles {\n /** Tailwind className string for the badge background, text, and border colors. */\n className: string;\n /** Lucide icon component to display in the badge. */\n icon: LucideIcon;\n}\n\nconst DEFAULT_STYLES: Record<string, ScopeTypeBadgeStyles> = {\n global: {\n className:\n 'bg-blue-50 dark:bg-blue-500/15 text-blue-600 dark:text-blue-400 border-blue-200 dark:border-blue-500/30',\n icon: Globe,\n },\n organization: {\n className:\n 'bg-purple-50 dark:bg-purple-500/15 text-purple-600 dark:text-purple-400 border-purple-200 dark:border-purple-500/30',\n icon: Building2,\n },\n branch: {\n className:\n 'bg-amber-50 dark:bg-amber-500/15 text-amber-600 dark:text-amber-400 border-amber-200 dark:border-amber-500/30',\n icon: GitBranch,\n },\n location: {\n className:\n 'bg-green-50 dark:bg-green-500/15 text-green-600 dark:text-green-400 border-green-200 dark:border-green-500/30',\n icon: MapPin,\n },\n};\n\nexport interface ScopeTypeBadgeProps {\n /** The scope type key (e.g. \"global\", \"organization\", \"branch\", \"location\"). */\n type: string;\n /** The display label for the badge. */\n label: string;\n /** Optional className to append to the badge. */\n className?: string;\n /** Override default styles and icon for the given type. */\n styles?: Partial<ScopeTypeBadgeStyles>;\n}\n\n/**\n * Color-coded badge with an icon indicating a scope type. Ships with built-in\n * styles for global (blue/Globe), organization (purple/Building2), branch\n * (amber/GitBranch), and location (green/MapPin). Custom types fall back to\n * global styling unless overridden via `styles`.\n *\n * @example\n * ```tsx\n * <ScopeTypeBadge type=\"organization\" label=\"Organization\" />\n * <ScopeTypeBadge type=\"branch\" label=\"Branch\" />\n * ```\n */\nexport function ScopeTypeBadge({\n type,\n label,\n className,\n styles: styleOverrides,\n}: ScopeTypeBadgeProps) {\n const defaults = DEFAULT_STYLES[type] ?? DEFAULT_STYLES.global;\n const Icon = styleOverrides?.icon ?? defaults.icon;\n const badgeClassName = styleOverrides?.className ?? defaults.className;\n\n return (\n <Badge variant=\"outline\" className={cn(badgeClassName, className)}>\n <Icon className=\"w-3 h-3 mr-1\" />\n {label}\n </Badge>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/select.tsx"],"names":[],"mappings":"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","file":"chunk-NNJTKHCE.js","sourcesContent":["import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport {\n CheckIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n} from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * Select dropdown component built on Radix UI Select.\n * Provides a styled, accessible dropdown for selecting a single value from a list.\n *\n * @example\n * ```tsx\n * <Select value={value} onValueChange={setValue}>\n * <SelectTrigger>\n * <SelectValue placeholder=\"Choose...\" />\n * </SelectTrigger>\n * <SelectContent>\n * <SelectGroup>\n * <SelectLabel>Fruits</SelectLabel>\n * <SelectItem value=\"apple\">Apple</SelectItem>\n * <SelectItem value=\"banana\">Banana</SelectItem>\n * </SelectGroup>\n * <SelectSeparator />\n * <SelectGroup>\n * <SelectLabel>Vegetables</SelectLabel>\n * <SelectItem value=\"carrot\">Carrot</SelectItem>\n * </SelectGroup>\n * </SelectContent>\n * </Select>\n * ```\n */\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\n/** Groups related select items under an optional label. */\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\n/** Displays the currently selected value or a placeholder. */\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\n/** Button that toggles the select dropdown open/closed. */\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\";\n }\n>(({ className, size = \"default\", children, ...props }, ref) => {\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-full items-center justify-between gap-2 rounded-md border bg-input-background px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-element data-[size=sm]:h-element-sm *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n});\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\n/** Dropdown content container rendered in a portal. */\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\n/** Non-interactive label rendered inside a SelectGroup. */\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n );\n}\n\n/** A selectable option within the dropdown. */\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\n/** Visual separator between select groups or items. */\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\n/** Scroll-up indicator shown when the list is scrollable. */\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\n/** Scroll-down indicator shown when the list is scrollable. */\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};"]}
@@ -1 +0,0 @@
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"]}
@@ -1 +0,0 @@
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 };"]}
@@ -1 +0,0 @@
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"]}
@@ -1 +0,0 @@
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 };"]}
@@ -1 +0,0 @@
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"]}
@@ -1 +0,0 @@
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 };"]}
@@ -1 +0,0 @@
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 };"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/table.tsx"],"names":[],"mappings":";;;AAyCA,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkC;AACrE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAU,iCAAA;AAAA,MAEV,QAAA,kBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAU,OAAA;AAAA,UACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,UACvD,GAAG;AAAA;AAAA;AACN;AAAA,GACF;AAEJ;AAGA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkC;AAC3E,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA;AAAA,MACzC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkC;AACzE,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,MACpD,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkC;AAC3E,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,yDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AACrE,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,6EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AACtE,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,4JAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AACtE,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoC;AAClC,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-S6PDRGR5.js","sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * Data table component with header, body, footer, row, head, cell, and caption sub-components.\n *\n * Renders inside a horizontally scrollable container. Uses density tokens for\n * consistent header height (`h-table-head`) and cell padding.\n *\n * @example\n * ```tsx\n * <Table>\n * <TableHeader>\n * <TableRow>\n * <TableHead>Name</TableHead>\n * <TableHead>Email</TableHead>\n * <TableHead>Role</TableHead>\n * </TableRow>\n * </TableHeader>\n * <TableBody>\n * <TableRow>\n * <TableCell>Alice</TableCell>\n * <TableCell>alice@example.com</TableCell>\n * <TableCell>Admin</TableCell>\n * </TableRow>\n * <TableRow>\n * <TableCell>Bob</TableCell>\n * <TableCell>bob@example.com</TableCell>\n * <TableCell>Member</TableCell>\n * </TableRow>\n * </TableBody>\n * <TableFooter>\n * <TableRow>\n * <TableCell colSpan={3}>2 users total</TableCell>\n * </TableRow>\n * </TableFooter>\n * <TableCaption>A list of team members.</TableCaption>\n * </Table>\n * ```\n */\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n );\n}\n\n/** Table header container. Groups `TableRow` elements for column headings. */\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n );\n}\n\n/** Table body container. Groups `TableRow` elements for data rows. */\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n );\n}\n\n/** Table footer container. Renders with a muted background and top border. */\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Table row with hover highlight and selected state support via `data-state=\"selected\"`. */\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Table head cell. Renders as a `<th>` with density-based height (`h-table-head`). */\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-table-head px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Table data cell. Renders as a `<td>` with consistent padding and alignment. */\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Table caption displayed below the table in muted text. */\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/alert.tsx"],"names":[],"mappings":"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","file":"chunk-TGYQ3AKH.js","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/utils\";\nimport type { UIColor } from \"../lib/types\";\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n // Bordered card style — color applied via compoundVariants\n default: \"\",\n // Legacy — maps to default + destructive color (backward compatible)\n destructive: \"\",\n // Filled background style — color applied via compoundVariants\n soft: \"\",\n },\n color: {\n primary: \"\",\n destructive: \"\",\n success: \"\",\n warning: \"\",\n info: \"\",\n },\n },\n compoundVariants: [\n // ── Default (bordered) × color ──\n { variant: \"default\", color: \"primary\", className: \"bg-card text-card-foreground\" },\n { variant: \"default\", color: \"destructive\", className: \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\" },\n { variant: \"default\", color: \"success\", className: \"text-success bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-success/90\" },\n { variant: \"default\", color: \"warning\", className: \"text-warning bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-warning/90\" },\n { variant: \"default\", color: \"info\", className: \"text-info bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-info/90\" },\n\n // ── Legacy destructive variant (backward compat) ──\n { variant: \"destructive\", className: \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\" },\n\n // ── Soft (filled bg) × color ──\n { variant: \"soft\", color: \"primary\", className: \"bg-primary/10 text-primary border-primary/20 [&>svg]:text-current *:data-[slot=alert-description]:text-primary/90\" },\n { variant: \"soft\", color: \"destructive\", className: \"bg-destructive/10 text-destructive border-destructive/20 [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\" },\n { variant: \"soft\", color: \"success\", className: \"bg-success/10 text-success border-success/20 [&>svg]:text-current *:data-[slot=alert-description]:text-success/90\" },\n { variant: \"soft\", color: \"warning\", className: \"bg-warning/10 text-warning border-warning/20 [&>svg]:text-current *:data-[slot=alert-description]:text-warning/90\" },\n { variant: \"soft\", color: \"info\", className: \"bg-info/10 text-info border-info/20 [&>svg]:text-current *:data-[slot=alert-description]:text-info/90\" },\n ],\n defaultVariants: {\n variant: \"default\",\n color: \"primary\",\n },\n },\n);\n\ninterface AlertProps\n extends React.ComponentProps<\"div\">,\n Omit<VariantProps<typeof alertVariants>, \"color\"> {\n /**\n * Semantic color intent.\n *\n * @default \"primary\"\n * @example\n * ```tsx\n * <Alert color=\"success\">Operation completed</Alert>\n * <Alert color=\"warning\">Check your input</Alert>\n * <Alert variant=\"soft\" color=\"info\">Tip</Alert>\n * ```\n */\n color?: UIColor;\n}\n\n/**\n * Static alert banner for displaying important messages.\n *\n * Supports semantic colors via `color` prop and two visual styles: `default` (bordered)\n * and `soft` (filled background). All existing `variant=\"destructive\"` usage continues to work.\n *\n * @example\n * ```tsx\n * // Default (bordered)\n * <Alert>\n * <InfoIcon className=\"size-4\" />\n * <AlertTitle>Heads up!</AlertTitle>\n * <AlertDescription>You can add components using the CLI.</AlertDescription>\n * </Alert>\n *\n * // Semantic colors\n * <Alert color=\"success\">\n * <CheckIcon className=\"size-4\" />\n * <AlertTitle>Success</AlertTitle>\n * <AlertDescription>Changes saved successfully.</AlertDescription>\n * </Alert>\n *\n * // Soft variant (filled background)\n * <Alert variant=\"soft\" color=\"warning\">\n * <AlertTriangleIcon className=\"size-4\" />\n * <AlertTitle>Warning</AlertTitle>\n * <AlertDescription>This action cannot be undone.</AlertDescription>\n * </Alert>\n *\n * // Legacy (still works)\n * <Alert variant=\"destructive\">\n * <AlertCircleIcon className=\"size-4\" />\n * <AlertTitle>Error</AlertTitle>\n * <AlertDescription>Session expired.</AlertDescription>\n * </Alert>\n * ```\n */\nfunction Alert({\n className,\n variant,\n color,\n ...props\n}: AlertProps) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant, color }), className)}\n {...props}\n />\n );\n}\n\n/** Bold title text within an Alert. Rendered in the second grid column when an icon is present. */\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Descriptive body text within an Alert, rendered below the title. */\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/permission-grid.tsx"],"names":[],"mappings":"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","file":"chunk-TJMK2KBE.js","sourcesContent":["import { Checkbox } from './checkbox';\nimport { cn } from '../lib/utils';\n\n/** A single permission action (e.g. \"view\", \"create\", \"delete\"). */\nexport interface PermissionDefinition {\n /** Unique key for this permission (e.g. \"view\", \"create\"). Used to build `module:action` IDs. */\n key: string;\n /** Display label shown in the column header. */\n label: string;\n}\n\n/** A module (row) in the permission grid containing its available permission actions. */\nexport interface PermissionModule {\n /** Unique key for this module (e.g. \"users\", \"projects\"). Used to build `module:action` IDs. */\n key: string;\n /** Display label shown in the first column. */\n label: string;\n /** List of permission actions available for this module. */\n permissions: PermissionDefinition[];\n}\n\n/** Localizable labels for the permission grid. */\nexport interface PermissionGridLabels {\n /** Header text for the module name column. */\n moduleHeader: string;\n /** Header text for the \"Select All\" column. */\n selectAll: string;\n}\n\nexport interface PermissionGridProps {\n /** List of modules (rows) to display, each with its available permission actions. */\n modules: PermissionModule[];\n /** Currently selected permission IDs in `module:action` format (e.g. `[\"users:view\", \"users:create\"]`). */\n selectedIds: string[];\n /** Callback with the updated list of selected permission IDs when checkboxes change. */\n onChange?: (ids: string[]) => void;\n /** When true, all checkboxes are disabled and the \"Select All\" column is hidden. Defaults to `false`. */\n readOnly?: boolean;\n /** Localizable UI labels with English defaults. */\n labels?: Partial<PermissionGridLabels>;\n}\n\nconst defaultLabels: PermissionGridLabels = {\n moduleHeader: 'Module',\n selectAll: 'Select All',\n};\n\n/**\n * Builds a permission ID from module key and permission key.\n * Used internally and exposed for consumers to construct IDs.\n */\nexport function buildPermissionId(moduleKey: string, permissionKey: string): string {\n return `${moduleKey}:${permissionKey}`;\n}\n\n/**\n * Collects all unique permission keys across all modules (preserving order).\n */\nfunction collectColumns(modules: PermissionModule[]): string[] {\n const seen = new Set<string>();\n const columns: string[] = [];\n for (const mod of modules) {\n for (const perm of mod.permissions) {\n if (!seen.has(perm.key)) {\n seen.add(perm.key);\n columns.push(perm.key);\n }\n }\n }\n return columns;\n}\n\n/**\n * Gets the label for a column key from the first module that defines it.\n */\nfunction getColumnLabel(modules: PermissionModule[], key: string): string {\n for (const mod of modules) {\n const perm = mod.permissions.find(p => p.key === key);\n if (perm) return perm.label;\n }\n return key;\n}\n\n/**\n * Table-based permission matrix with modules as rows and permission actions\n * as columns. Each cell is a checkbox. Permission IDs use `module:action`\n * format (built via {@link buildPermissionId}). Includes per-row \"Select All\"\n * toggles. Supports read-only mode.\n *\n * @example\n * ```tsx\n * const modules: PermissionModule[] = [\n * { key: \"users\", label: \"Users\", permissions: [\n * { key: \"view\", label: \"View\" },\n * { key: \"create\", label: \"Create\" },\n * ]},\n * ];\n *\n * <PermissionGrid\n * modules={modules}\n * selectedIds={[\"users:view\"]}\n * onChange={(ids) => setPermissions(ids)}\n * />\n * ```\n */\nexport function PermissionGrid({\n modules,\n selectedIds,\n onChange,\n readOnly = false,\n labels: labelOverrides,\n}: PermissionGridProps) {\n const labels = { ...defaultLabels, ...labelOverrides };\n const columns = collectColumns(modules);\n\n const togglePermission = (permId: string) => {\n if (readOnly || !onChange) return;\n if (selectedIds.includes(permId)) {\n onChange(selectedIds.filter(id => id !== permId));\n } else {\n onChange([...selectedIds, permId]);\n }\n };\n\n const toggleModule = (mod: PermissionModule) => {\n if (readOnly || !onChange) return;\n const modulePermIds = mod.permissions.map(p => buildPermissionId(mod.key, p.key));\n const allSelected = modulePermIds.every(id => selectedIds.includes(id));\n\n if (allSelected) {\n onChange(selectedIds.filter(id => !modulePermIds.includes(id)));\n } else {\n const newIds = new Set([...selectedIds, ...modulePermIds]);\n onChange(Array.from(newIds));\n }\n };\n\n const isModuleAllSelected = (mod: PermissionModule): boolean => {\n const modulePermIds = mod.permissions.map(p => buildPermissionId(mod.key, p.key));\n return modulePermIds.length > 0 && modulePermIds.every(id => selectedIds.includes(id));\n };\n\n return (\n <div className=\"border border-border rounded-lg overflow-hidden\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"bg-muted/50\">\n <th className=\"text-left text-xs font-medium text-muted-foreground uppercase tracking-wider px-4 h-table-head\">\n {labels.moduleHeader}\n </th>\n {columns.map(colKey => (\n <th\n key={colKey}\n className=\"text-center text-xs font-medium text-muted-foreground uppercase tracking-wider px-2 h-table-head w-20\"\n >\n {getColumnLabel(modules, colKey)}\n </th>\n ))}\n {!readOnly && (\n <th className=\"text-center text-xs font-medium text-muted-foreground uppercase tracking-wider px-2 h-table-head w-20\">\n {labels.selectAll}\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {modules.map((mod, idx) => {\n const modPermKeys = new Set(mod.permissions.map(p => p.key));\n return (\n <tr key={mod.key} className={cn(idx % 2 === 0 ? 'bg-background' : 'bg-muted/20')}>\n <td className=\"px-4 py-3 text-sm font-medium\">{mod.label}</td>\n {columns.map(colKey => {\n if (!modPermKeys.has(colKey)) {\n return (\n <td key={colKey} className=\"text-center px-2 py-3\">\n <span className=\"text-muted-foreground\">-</span>\n </td>\n );\n }\n const permId = buildPermissionId(mod.key, colKey);\n const checked = selectedIds.includes(permId);\n return (\n <td key={colKey} className=\"text-center px-2 py-3\">\n <Checkbox\n checked={checked}\n onCheckedChange={() => togglePermission(permId)}\n disabled={readOnly}\n className=\"mx-auto\"\n />\n </td>\n );\n })}\n {!readOnly && (\n <td className=\"text-center px-2 py-3\">\n <Checkbox\n checked={isModuleAllSelected(mod)}\n onCheckedChange={() => toggleModule(mod)}\n className=\"mx-auto\"\n />\n </td>\n )}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/context-menu.tsx"],"names":[],"mappings":"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","file":"chunk-USIHM7FV.js","sourcesContent":["import * as React from \"react\";\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * Right-click context menu built on Radix UI ContextMenu.\n *\n * Displays a menu of actions when the user right-clicks (or long-presses)\n * on the trigger area. Supports items, checkbox items, radio items,\n * sub-menus, separators, labels, and shortcuts.\n *\n * @example\n * ```tsx\n * <ContextMenu>\n * <ContextMenuTrigger className=\"flex h-40 w-64 items-center justify-center rounded-md border border-dashed\">\n * Right click here\n * </ContextMenuTrigger>\n * <ContextMenuContent>\n * <ContextMenuItem>\n * Copy\n * <ContextMenuShortcut>Ctrl+C</ContextMenuShortcut>\n * </ContextMenuItem>\n * <ContextMenuItem>\n * Paste\n * <ContextMenuShortcut>Ctrl+V</ContextMenuShortcut>\n * </ContextMenuItem>\n * <ContextMenuSeparator />\n * <ContextMenuItem variant=\"destructive\">Delete</ContextMenuItem>\n * </ContextMenuContent>\n * </ContextMenu>\n * ```\n */\nfunction ContextMenu({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />;\n}\n\n/** Area that opens the context menu on right-click. */\nfunction ContextMenuTrigger({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\n return (\n <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\n );\n}\n\n/** Groups related context menu items together for accessibility. */\nfunction ContextMenuGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\n return (\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n );\n}\n\n/** Portal that renders context menu content outside the DOM hierarchy. */\nfunction ContextMenuPortal({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\n return (\n <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\n );\n}\n\n/** Container for a nested sub-menu within the context menu. */\nfunction ContextMenuSub({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />;\n}\n\n/** Container for radio context menu items where only one can be selected at a time. */\nfunction ContextMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\n return (\n <ContextMenuPrimitive.RadioGroup\n data-slot=\"context-menu-radio-group\"\n {...props}\n />\n );\n}\n\n/** Menu item that opens a sub-menu on hover. Displays a chevron indicator. */\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <ContextMenuPrimitive.SubTrigger\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </ContextMenuPrimitive.SubTrigger>\n );\n}\n\n/** Floating container for sub-menu items. */\nfunction ContextMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\n return (\n <ContextMenuPrimitive.SubContent\n data-slot=\"context-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Floating container for context menu items, positioned at the cursor location. */\nfunction ContextMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n data-slot=\"context-menu-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className,\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n );\n}\n\n/** Actionable menu item. Set `variant=\"destructive\"` for dangerous actions, `inset` for left-padding alignment. */\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Menu item with a checkbox indicator for toggling options. */\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n );\n}\n\n/** Menu item with a radio indicator for single-selection groups. */\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n );\n}\n\n/** Non-interactive label used to title a group of menu items. */\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <ContextMenuPrimitive.Label\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn(\n \"text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Visual divider between groups of menu items. */\nfunction ContextMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\n return (\n <ContextMenuPrimitive.Separator\n data-slot=\"context-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\n/** Keyboard shortcut hint displayed at the end of a menu item. */\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n};"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/tag-input.tsx"],"names":[],"mappings":"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","file":"chunk-VVYSAGB3.js","sourcesContent":["import * as React from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { Badge } from \"./badge\";\n\ninterface TagInputProps {\n /** Array of current tag strings. */\n value?: string[];\n /** Callback fired when the tags array changes. */\n onChange?: (tags: string[]) => void;\n /** Placeholder text shown when there are no tags. */\n placeholder?: string;\n /** Additional CSS class for the outer container. */\n className?: string;\n /** Whether the tag input is disabled. */\n disabled?: boolean;\n /** Maximum number of tags allowed. */\n maxTags?: number;\n /** Whether duplicate tag values are allowed. Defaults to `false`. */\n allowDuplicates?: boolean;\n /** Character or pattern used to split pasted text into tags. Defaults to `\",\"`. */\n delimiter?: string | RegExp;\n}\n\n/**\n * Tag input that lets users add and remove string tags.\n * Tags are added by pressing Enter or the delimiter key, and by pasting comma-separated text.\n * Backspace removes the last tag when the input is empty.\n *\n * @example\n * ```tsx\n * const [tags, setTags] = useState<string[]>([\"react\", \"typescript\"]);\n *\n * <TagInput\n * value={tags}\n * onChange={setTags}\n * placeholder=\"Add a tag...\"\n * maxTags={10}\n * />\n * ```\n */\nexport function TagInput({\n value = [],\n onChange,\n placeholder = \"Nhập và nhấn Enter...\",\n className,\n disabled,\n maxTags,\n allowDuplicates = false,\n delimiter = \",\",\n}: TagInputProps) {\n const [inputValue, setInputValue] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n\n const addTag = (tag: string) => {\n const trimmedTag = tag.trim();\n\n if (!trimmedTag) return;\n\n if (maxTags && value.length >= maxTags) return;\n\n if (!allowDuplicates && value.includes(trimmedTag)) return;\n\n onChange?.([ ...value, trimmedTag]);\n setInputValue(\"\");\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" || e.key === delimiter) {\n e.preventDefault();\n addTag(inputValue);\n } else if (e.key === \"Backspace\" && !inputValue && value.length > 0) {\n // Remove last tag on backspace if input is empty\n onChange?.(value.slice(0, -1));\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n const pastedText = e.clipboardData.getData(\"text\");\n const tags = pastedText.split(delimiter).map((tag) => tag.trim()).filter(Boolean);\n\n const newTags = allowDuplicates\n ? tags\n : tags.filter((tag) => !value.includes(tag));\n\n const tagsToAdd = maxTags\n ? newTags.slice(0, maxTags - value.length)\n : newTags;\n\n onChange?.([...value, ...tagsToAdd]);\n setInputValue(\"\");\n };\n\n const removeTag = (index: number) => {\n onChange?.(value.filter((_, i) => i !== index));\n };\n\n return (\n <div\n className={cn(\n \"flex flex-wrap gap-2 p-2 border rounded-lg bg-background min-h-[42px] cursor-text\",\n disabled && \"opacity-50 cursor-not-allowed bg-muted\",\n className\n )}\n onClick={() => !disabled && inputRef.current?.focus()}\n >\n {value.map((tag, index) => (\n <Badge\n key={index}\n variant=\"secondary\"\n className=\"gap-1 pl-2 pr-1 py-1 h-auto\"\n >\n <span>{tag}</span>\n {!disabled && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n removeTag(index);\n }}\n className=\"rounded-full hover:bg-muted-foreground/30 p-0.5 transition-colors\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n )}\n </Badge>\n ))}\n\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n disabled={disabled || (maxTags ? value.length >= maxTags : false)}\n placeholder={value.length === 0 ? placeholder : \"\"}\n className=\"flex-1 outline-none bg-transparent min-w-[120px] text-sm disabled:cursor-not-allowed\"\n />\n </div>\n );\n}\n"]}
@@ -1,25 +0,0 @@
1
- import { cn } from './chunk-DGPY4WP3.js';
2
- import * as React from 'react';
3
- import { jsx } from 'react/jsx-runtime';
4
-
5
- var Textarea = React.forwardRef(
6
- ({ className, ...props }, ref) => {
7
- return /* @__PURE__ */ jsx(
8
- "textarea",
9
- {
10
- ref,
11
- "data-slot": "textarea",
12
- className: cn(
13
- "resize-none border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-input-background px-3 py-2 text-base transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
14
- className
15
- ),
16
- ...props
17
- }
18
- );
19
- }
20
- );
21
- Textarea.displayName = "Textarea";
22
-
23
- export { Textarea };
24
- //# sourceMappingURL=chunk-WD5KZE25.js.map
25
- //# sourceMappingURL=chunk-WD5KZE25.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/textarea.tsx"],"names":[],"mappings":";;;;AAqBA,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,uBACE,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,UAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,4cAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-WD5KZE25.js","sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\ntype TextareaProps = React.ComponentProps<\"textarea\">;\n\n/**\n * Multi-line text input with auto-sizing via `field-sizing-content`.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Textarea placeholder=\"Enter a description...\" />\n *\n * // Controlled\n * <Textarea value={content} onChange={(e) => setContent(e.target.value)} />\n *\n * // With rows constraint\n * <Textarea rows={5} placeholder=\"Feedback\" />\n * ```\n */\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n ref={ref}\n data-slot=\"textarea\"\n className={cn(\n \"resize-none border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-input-background px-3 py-2 text-base transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className,\n )}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\nexport type { TextareaProps };"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/checkbox.tsx"],"names":[],"mappings":";;;;;;AAyBA,IAAM,QAAA,GAAiB,iBAGrB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAClC,EAAA,uBACE,GAAA;AAAA,IAAmB,iBAAA,CAAA,IAAA;AAAA,IAAlB;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,2fAAA;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,+DAAA;AAAA,UAEV,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA;AAClC;AAAA,GACF;AAEJ,CAAC;AACD,QAAA,CAAS,cAAgC,iBAAA,CAAA,IAAA,CAAK,WAAA","file":"chunk-WL4ZO2H3.js","sourcesContent":["import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { CheckIcon } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\ntype CheckboxProps = React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>;\n\n/**\n * Checkable input that allows selecting one or more options from a set.\n * Supports checked, unchecked, and indeterminate states.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Checkbox id=\"terms\" />\n * <Label htmlFor=\"terms\">Accept terms</Label>\n *\n * // Controlled\n * <Checkbox checked={accepted} onCheckedChange={setAccepted} />\n *\n * // Indeterminate (partial selection)\n * <Checkbox checked=\"indeterminate\" />\n * ```\n */\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, ...props }, ref) => {\n return (\n <CheckboxPrimitive.Root\n ref={ref}\n data-slot=\"checkbox\"\n className={cn(\n \"peer border bg-input-background dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n});\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\nexport type { CheckboxProps };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/password-input.tsx"],"names":[],"mappings":";;;;;;AAiCA,IAAM,aAAA,GAAsB,KAAA,CAAA,UAAA;AAAA,EAC1B,CAAC,EAAE,SAAA,EAAW,MAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtC,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAU,eAAS,KAAK,CAAA;AAElD,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,UAAU,MAAA,GAAS,UAAA;AAAA,UACzB,GAAA;AAAA,UACA,WAAA,EAAU,OAAA;AAAA,UACV,SAAA,EAAW,EAAA,CAAG,aAAA,CAAc,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,CAAG,+EAAA,EAAiF,SAAS,CAAA,EAAG,CAAC,CAAA;AAAA,UAC/I,GAAG;AAAA;AAAA,OACN;AAAA,sBACA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,QAAA,EAAU,EAAA;AAAA,UACV,SAAA,EAAU,mIAAA;AAAA,UACV,SAAS,MAAM,UAAA,CAAW,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,UACnC,YAAA,EAAY,UAAU,eAAA,GAAkB,eAAA;AAAA,UAEvC,QAAA,EAAA,OAAA,uBACE,MAAA,EAAA,EAAO,SAAA,EAAU,WAAU,CAAA,mBAE5B,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAE7B,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AACA,aAAA,CAAc,WAAA,GAAc,eAAA","file":"chunk-WS6E7HBT.js","sourcesContent":["import * as React from \"react\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport { Eye, EyeOff } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\nimport { inputVariants } from \"./input\";\n\ninterface PasswordInputProps\n extends Omit<React.ComponentProps<\"input\">, \"type\" | \"size\">,\n VariantProps<typeof inputVariants> {}\n\n/**\n * Password input with a built-in show/hide toggle button.\n *\n * Extends native `<input>` (minus `type` which is managed internally).\n * Shares the same size variants as `Input`.\n *\n * @example\n * ```tsx\n * // Default size\n * <PasswordInput placeholder=\"Enter password\" />\n *\n * // Sizes: xs (24px) | sm (28px) | default (32px) | lg (36px) | xl (44px)\n * <PasswordInput size=\"xl\" placeholder=\"Password\" />\n *\n * // Controlled\n * <PasswordInput\n * value={password}\n * onChange={(e) => setPassword(e.target.value)}\n * placeholder=\"Password\"\n * />\n * ```\n */\nconst PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n ({ className, size, ...props }, ref) => {\n const [visible, setVisible] = React.useState(false);\n\n return (\n <div className=\"relative\">\n <input\n type={visible ? \"text\" : \"password\"}\n ref={ref}\n data-slot=\"input\"\n className={cn(inputVariants({ size, className: cn(\"pr-10 [&::-ms-reveal]:hidden [&::-webkit-credentials-auto-fill-button]:hidden\", className) }))}\n {...props}\n />\n <button\n type=\"button\"\n tabIndex={-1}\n className=\"absolute right-0 top-0 flex h-full w-10 items-center justify-center text-muted-foreground hover:text-foreground transition-colors\"\n onClick={() => setVisible((v) => !v)}\n aria-label={visible ? \"Hide password\" : \"Show password\"}\n >\n {visible ? (\n <EyeOff className=\"h-4 w-4\" />\n ) : (\n <Eye className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n );\n },\n);\nPasswordInput.displayName = \"PasswordInput\";\n\nexport { PasswordInput };\nexport type { PasswordInputProps };\n"]}