@omnifyjp/ui 0.1.5 → 0.1.7

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 (343) hide show
  1. package/dist/{chunk-F5IKVHRW.js → chunk-33DTBAFF.js} +3 -3
  2. package/dist/chunk-33DTBAFF.js.map +1 -0
  3. package/dist/{chunk-DZENMCRL.js → chunk-34ARZSNP.js} +2 -2
  4. package/dist/chunk-34ARZSNP.js.map +1 -0
  5. package/dist/{chunk-DIS42JLG.js → chunk-35DNN46W.js} +2 -2
  6. package/dist/chunk-35DNN46W.js.map +1 -0
  7. package/dist/{chunk-ANTYNEUU.js → chunk-3EOHW4QN.js} +2 -2
  8. package/dist/chunk-3EOHW4QN.js.map +1 -0
  9. package/dist/chunk-3UPBCOS4.js +39 -0
  10. package/dist/chunk-3UPBCOS4.js.map +1 -0
  11. package/dist/{chunk-XP4TPMSN.js → chunk-3VU56V66.js} +16 -14
  12. package/dist/chunk-3VU56V66.js.map +1 -0
  13. package/dist/{chunk-CCBDR2U2.js → chunk-4MD7BIEK.js} +6 -6
  14. package/dist/chunk-4MD7BIEK.js.map +1 -0
  15. package/dist/{chunk-7ALADSN3.js → chunk-4SMVBJFU.js} +2 -2
  16. package/dist/chunk-4SMVBJFU.js.map +1 -0
  17. package/dist/{chunk-Z47W426M.js → chunk-67YUL2ZS.js} +2 -2
  18. package/dist/chunk-67YUL2ZS.js.map +1 -0
  19. package/dist/{chunk-7ZFYPC74.js → chunk-6GWVQB3Q.js} +3 -3
  20. package/dist/chunk-6GWVQB3Q.js.map +1 -0
  21. package/dist/{chunk-K7GDYMMU.js → chunk-75WZR6HF.js} +4 -4
  22. package/dist/chunk-75WZR6HF.js.map +1 -0
  23. package/dist/{chunk-WAPGZIAL.js → chunk-7RMTPT6O.js} +2 -2
  24. package/dist/chunk-7RMTPT6O.js.map +1 -0
  25. package/dist/{chunk-JPTN62BV.js → chunk-7XH3MGBR.js} +2 -2
  26. package/dist/chunk-7XH3MGBR.js.map +1 -0
  27. package/dist/{chunk-NFAXCC73.js → chunk-B434PORR.js} +2 -2
  28. package/dist/chunk-B434PORR.js.map +1 -0
  29. package/dist/{chunk-XKVHX75G.js → chunk-BEZF6UWZ.js} +3 -3
  30. package/dist/chunk-BEZF6UWZ.js.map +1 -0
  31. package/dist/{chunk-QCGYYBDZ.js → chunk-BOMDCV63.js} +3 -3
  32. package/dist/chunk-BOMDCV63.js.map +1 -0
  33. package/dist/{chunk-6GCAG5FH.js → chunk-BRSM3SZP.js} +2 -2
  34. package/dist/chunk-BRSM3SZP.js.map +1 -0
  35. package/dist/{chunk-AZARDPXB.js → chunk-C34KSTWA.js} +2 -2
  36. package/dist/chunk-C34KSTWA.js.map +1 -0
  37. package/dist/{chunk-4CT5SCAH.js → chunk-C5NZAOA7.js} +2 -2
  38. package/dist/chunk-C5NZAOA7.js.map +1 -0
  39. package/dist/{chunk-TB3R2RA7.js → chunk-C6EAO7IA.js} +5 -5
  40. package/dist/chunk-C6EAO7IA.js.map +1 -0
  41. package/dist/{chunk-4D6FDXCG.js → chunk-C7LPAIU6.js} +3 -3
  42. package/dist/chunk-C7LPAIU6.js.map +1 -0
  43. package/dist/{chunk-4Q2FLTAW.js → chunk-CUZR4JWM.js} +2 -2
  44. package/dist/chunk-CUZR4JWM.js.map +1 -0
  45. package/dist/{chunk-YF6WRCTG.js → chunk-DZ7752H3.js} +3 -3
  46. package/dist/chunk-DZ7752H3.js.map +1 -0
  47. package/dist/{chunk-MNAT3ZF6.js → chunk-EIY5FVSV.js} +3 -3
  48. package/dist/chunk-EIY5FVSV.js.map +1 -0
  49. package/dist/{chunk-QMAMDYRD.js → chunk-EWBCV7VA.js} +2 -2
  50. package/dist/chunk-EWBCV7VA.js.map +1 -0
  51. package/dist/{chunk-4N357E44.js → chunk-F2ZJLKDP.js} +2 -2
  52. package/dist/chunk-F2ZJLKDP.js.map +1 -0
  53. package/dist/{chunk-KABLXGWK.js → chunk-FLWMT4DB.js} +2 -2
  54. package/dist/chunk-FLWMT4DB.js.map +1 -0
  55. package/dist/{chunk-IJIGJGL5.js → chunk-FRKG7JQY.js} +2 -2
  56. package/dist/chunk-FRKG7JQY.js.map +1 -0
  57. package/dist/{chunk-UCEUTKTQ.js → chunk-HY4FVDA4.js} +2 -2
  58. package/dist/chunk-HY4FVDA4.js.map +1 -0
  59. package/dist/{chunk-23SALQ3G.js → chunk-IAWKX5W4.js} +2 -2
  60. package/dist/chunk-IAWKX5W4.js.map +1 -0
  61. package/dist/{chunk-SABAKV4J.js → chunk-INLM7UJC.js} +2 -2
  62. package/dist/chunk-INLM7UJC.js.map +1 -0
  63. package/dist/{chunk-P3KBN6YH.js → chunk-JBQT2H4K.js} +8 -8
  64. package/dist/chunk-JBQT2H4K.js.map +1 -0
  65. package/dist/{chunk-TMFQJ7E3.js → chunk-JJSVA3TH.js} +2 -2
  66. package/dist/chunk-JJSVA3TH.js.map +1 -0
  67. package/dist/{chunk-KOGOYUEE.js → chunk-JLTBUACL.js} +2 -2
  68. package/dist/chunk-JLTBUACL.js.map +1 -0
  69. package/dist/{chunk-EIF6WZAZ.js → chunk-JRU2QX7T.js} +2 -2
  70. package/dist/chunk-JRU2QX7T.js.map +1 -0
  71. package/dist/{chunk-VGQC333M.js → chunk-JXGRW2MR.js} +2 -2
  72. package/dist/chunk-JXGRW2MR.js.map +1 -0
  73. package/dist/{chunk-CESZTYQQ.js → chunk-KTBOZ4NE.js} +4 -4
  74. package/dist/chunk-KTBOZ4NE.js.map +1 -0
  75. package/dist/{chunk-FBNG2KGO.js → chunk-L6K7UH3O.js} +2 -2
  76. package/dist/chunk-L6K7UH3O.js.map +1 -0
  77. package/dist/{chunk-BJO5JCFB.js → chunk-LVZNNIK4.js} +3 -3
  78. package/dist/chunk-LVZNNIK4.js.map +1 -0
  79. package/dist/{chunk-BOYSXIM3.js → chunk-NNJTKHCE.js} +2 -2
  80. package/dist/chunk-NNJTKHCE.js.map +1 -0
  81. package/dist/{chunk-725ICC47.js → chunk-NU56GKGM.js} +2 -2
  82. package/dist/{chunk-725ICC47.js.map → chunk-NU56GKGM.js.map} +1 -1
  83. package/dist/{chunk-3TGN2DFB.js → chunk-OBZQTY3H.js} +2 -2
  84. package/dist/chunk-OBZQTY3H.js.map +1 -0
  85. package/dist/{chunk-KXZ7IND6.js → chunk-P3M5TZD2.js} +2 -2
  86. package/dist/chunk-P3M5TZD2.js.map +1 -0
  87. package/dist/{chunk-ONAUEREV.js → chunk-PGWNOZDX.js} +2 -2
  88. package/dist/chunk-PGWNOZDX.js.map +1 -0
  89. package/dist/{chunk-3TV2IR7L.js → chunk-QX56UQ2I.js} +3 -3
  90. package/dist/chunk-QX56UQ2I.js.map +1 -0
  91. package/dist/{chunk-L46XUK4O.js → chunk-R2CDE5DO.js} +2 -2
  92. package/dist/chunk-R2CDE5DO.js.map +1 -0
  93. package/dist/{chunk-LI7CKURD.js → chunk-RQNZDWY3.js} +2 -2
  94. package/dist/chunk-RQNZDWY3.js.map +1 -0
  95. package/dist/{chunk-YKJZV2JK.js → chunk-S6PDRGR5.js} +2 -2
  96. package/dist/chunk-S6PDRGR5.js.map +1 -0
  97. package/dist/{chunk-RVJDDGQW.js → chunk-TJMK2KBE.js} +3 -3
  98. package/dist/chunk-TJMK2KBE.js.map +1 -0
  99. package/dist/{chunk-5WCL47ZW.js → chunk-TTH7TWVX.js} +2 -2
  100. package/dist/chunk-TTH7TWVX.js.map +1 -0
  101. package/dist/{chunk-PQJX2M64.js → chunk-TX42RKQU.js} +3 -3
  102. package/dist/chunk-TX42RKQU.js.map +1 -0
  103. package/dist/{chunk-HTO5C5BA.js → chunk-UAX7UJIJ.js} +3 -3
  104. package/dist/chunk-UAX7UJIJ.js.map +1 -0
  105. package/dist/{chunk-LW5PTU7D.js → chunk-USIHM7FV.js} +2 -2
  106. package/dist/chunk-USIHM7FV.js.map +1 -0
  107. package/dist/{chunk-MXNSBAG4.js → chunk-UVOH3VSV.js} +5 -5
  108. package/dist/chunk-UVOH3VSV.js.map +1 -0
  109. package/dist/{chunk-TEYOLOZY.js → chunk-V4ZOPVXV.js} +3 -3
  110. package/dist/chunk-V4ZOPVXV.js.map +1 -0
  111. package/dist/{chunk-CDARHMTL.js → chunk-WD5KZE25.js} +2 -2
  112. package/dist/chunk-WD5KZE25.js.map +1 -0
  113. package/dist/{chunk-PPZSGU2L.js → chunk-WL4ZO2H3.js} +2 -2
  114. package/dist/chunk-WL4ZO2H3.js.map +1 -0
  115. package/dist/{chunk-7W3WTMUH.js → chunk-WNKEQCXM.js} +6 -6
  116. package/dist/chunk-WNKEQCXM.js.map +1 -0
  117. package/dist/{chunk-5M67ZEPM.js → chunk-XOJJBNDX.js} +2 -2
  118. package/dist/chunk-XOJJBNDX.js.map +1 -0
  119. package/dist/{chunk-3BB6UBX4.js → chunk-Y65FNGEE.js} +16 -14
  120. package/dist/chunk-Y65FNGEE.js.map +1 -0
  121. package/dist/{chunk-KXT75MXF.js → chunk-YBMEQZX7.js} +2 -2
  122. package/dist/chunk-YBMEQZX7.js.map +1 -0
  123. package/dist/{chunk-RSHV4SNK.js → chunk-YE7EHQ6P.js} +3 -3
  124. package/dist/chunk-YE7EHQ6P.js.map +1 -0
  125. package/dist/{chunk-ZMHZH572.js → chunk-YT3W2URB.js} +4 -4
  126. package/dist/chunk-YT3W2URB.js.map +1 -0
  127. package/dist/{chunk-OXQNDQJW.js → chunk-Z2QAABLM.js} +2 -2
  128. package/dist/chunk-Z2QAABLM.js.map +1 -0
  129. package/dist/{chunk-PCQSHXOQ.js → chunk-ZB2FWKHF.js} +3 -3
  130. package/dist/chunk-ZB2FWKHF.js.map +1 -0
  131. package/dist/{chunk-FGD3OQOS.js → chunk-ZHP73HKU.js} +3 -3
  132. package/dist/chunk-ZHP73HKU.js.map +1 -0
  133. package/dist/{chunk-OHBCYKNT.js → chunk-ZPMXRW2A.js} +3 -3
  134. package/dist/chunk-ZPMXRW2A.js.map +1 -0
  135. package/dist/{chunk-TPPX6QNL.js → chunk-ZYSFPIGY.js} +5 -5
  136. package/dist/chunk-ZYSFPIGY.js.map +1 -0
  137. package/dist/components/accordion.d.ts +27 -0
  138. package/dist/components/accordion.js +1 -1
  139. package/dist/components/alert-dialog.d.ts +39 -0
  140. package/dist/components/alert-dialog.js +2 -2
  141. package/dist/components/alert.d.ts +29 -0
  142. package/dist/components/alert.js +1 -1
  143. package/dist/components/aspect-ratio.d.ts +17 -0
  144. package/dist/components/aspect-ratio.js +1 -1
  145. package/dist/components/avatar.d.ts +43 -4
  146. package/dist/components/avatar.js +1 -1
  147. package/dist/components/badge.d.ts +19 -3
  148. package/dist/components/badge.js +1 -1
  149. package/dist/components/breadcrumb.d.ts +36 -0
  150. package/dist/components/breadcrumb.js +1 -1
  151. package/dist/components/button.d.ts +46 -6
  152. package/dist/components/button.js +1 -1
  153. package/dist/components/calendar-category-badge.d.ts +14 -0
  154. package/dist/components/calendar-category-badge.js +2 -2
  155. package/dist/components/calendar-event-chip.d.ts +23 -0
  156. package/dist/components/calendar-event-chip.js +1 -1
  157. package/dist/components/calendar-event-sheet.d.ts +37 -0
  158. package/dist/components/calendar-event-sheet.js +6 -6
  159. package/dist/components/calendar-mini.d.ts +36 -0
  160. package/dist/components/calendar-mini.js +3 -3
  161. package/dist/components/calendar-toolbar.d.ts +34 -1
  162. package/dist/components/calendar-toolbar.js +4 -4
  163. package/dist/components/calendar.d.ts +12 -0
  164. package/dist/components/calendar.js +2 -2
  165. package/dist/components/card.d.ts +31 -0
  166. package/dist/components/card.js +1 -1
  167. package/dist/components/carousel.d.ts +28 -0
  168. package/dist/components/carousel.js +2 -2
  169. package/dist/components/chart.d.ts +61 -1
  170. package/dist/components/chart.js +1 -1
  171. package/dist/components/checkbox.d.ts +19 -1
  172. package/dist/components/checkbox.js +1 -1
  173. package/dist/components/collapsible.d.ts +20 -0
  174. package/dist/components/collapsible.js +1 -1
  175. package/dist/components/color-picker.d.ts +22 -0
  176. package/dist/components/color-picker.js +4 -4
  177. package/dist/components/combobox.d.ts +65 -0
  178. package/dist/components/combobox.js +5 -5
  179. package/dist/components/command.d.ts +43 -0
  180. package/dist/components/command.js +2 -2
  181. package/dist/components/context-menu.d.ts +42 -0
  182. package/dist/components/context-menu.js +1 -1
  183. package/dist/components/date-picker.d.ts +42 -2
  184. package/dist/components/date-picker.js +4 -4
  185. package/dist/components/dialog.d.ts +42 -0
  186. package/dist/components/dialog.js +1 -1
  187. package/dist/components/drawer.d.ts +43 -0
  188. package/dist/components/drawer.js +1 -1
  189. package/dist/components/dropdown-menu.d.ts +48 -0
  190. package/dist/components/dropdown-menu.js +1 -1
  191. package/dist/components/file-upload.d.ts +27 -0
  192. package/dist/components/file-upload.js +2 -2
  193. package/dist/components/form.d.ts +39 -0
  194. package/dist/components/form.js +2 -2
  195. package/dist/components/hover-card.d.ts +34 -0
  196. package/dist/components/hover-card.js +1 -1
  197. package/dist/components/input-otp.d.ts +24 -0
  198. package/dist/components/input-otp.js +1 -1
  199. package/dist/components/input.d.ts +30 -4
  200. package/dist/components/input.js +1 -1
  201. package/dist/components/label.d.ts +15 -1
  202. package/dist/components/label.js +1 -1
  203. package/dist/components/menubar.d.ts +53 -0
  204. package/dist/components/menubar.js +1 -1
  205. package/dist/components/navigation-menu.d.ts +46 -0
  206. package/dist/components/navigation-menu.js +1 -1
  207. package/dist/components/pagination.d.ts +40 -0
  208. package/dist/components/pagination.js +2 -2
  209. package/dist/components/password-input.d.ts +28 -5
  210. package/dist/components/password-input.js +2 -2
  211. package/dist/components/permission-grid.d.ts +37 -0
  212. package/dist/components/permission-grid.js +2 -2
  213. package/dist/components/popover.d.ts +27 -0
  214. package/dist/components/popover.js +1 -1
  215. package/dist/components/progress.d.ts +15 -2
  216. package/dist/components/progress.js +1 -1
  217. package/dist/components/radio-group.d.ts +33 -3
  218. package/dist/components/radio-group.js +1 -1
  219. package/dist/components/rating.d.ts +21 -0
  220. package/dist/components/rating.js +1 -1
  221. package/dist/components/resizable.d.ts +25 -0
  222. package/dist/components/resizable.js +1 -1
  223. package/dist/components/scope-tree.d.ts +45 -2
  224. package/dist/components/scope-tree.js +2 -2
  225. package/dist/components/scope-type-badge.d.ts +15 -0
  226. package/dist/components/scope-type-badge.js +2 -2
  227. package/dist/components/scroll-area.d.ts +21 -0
  228. package/dist/components/scroll-area.js +1 -1
  229. package/dist/components/select.d.ts +34 -0
  230. package/dist/components/select.js +1 -1
  231. package/dist/components/separator.d.ts +19 -2
  232. package/dist/components/separator.js +1 -1
  233. package/dist/components/sheet.d.ts +35 -0
  234. package/dist/components/sheet.js +1 -1
  235. package/dist/components/sidebar.d.ts +93 -0
  236. package/dist/components/sidebar.js +7 -7
  237. package/dist/components/skeleton.d.ts +22 -2
  238. package/dist/components/skeleton.js +1 -1
  239. package/dist/components/slider.d.ts +19 -2
  240. package/dist/components/slider.js +1 -1
  241. package/dist/components/slug-input.d.ts +28 -0
  242. package/dist/components/slug-input.js +3 -3
  243. package/dist/components/sonner.d.ts +16 -0
  244. package/dist/components/sonner.js +1 -1
  245. package/dist/components/stage-type-badge.d.ts +6 -0
  246. package/dist/components/stage-type-badge.js +2 -2
  247. package/dist/components/switch.d.ts +21 -2
  248. package/dist/components/switch.js +1 -1
  249. package/dist/components/table.d.ts +44 -0
  250. package/dist/components/table.js +1 -1
  251. package/dist/components/tabs.d.ts +29 -0
  252. package/dist/components/tabs.js +1 -1
  253. package/dist/components/tag-input.d.ts +25 -0
  254. package/dist/components/tag-input.js +2 -2
  255. package/dist/components/textarea.d.ts +17 -1
  256. package/dist/components/textarea.js +1 -1
  257. package/dist/components/time-picker.d.ts +37 -0
  258. package/dist/components/time-picker.js +5 -5
  259. package/dist/components/toggle-group.d.ts +36 -3
  260. package/dist/components/toggle-group.js +2 -2
  261. package/dist/components/toggle.d.ts +20 -2
  262. package/dist/components/toggle.js +1 -1
  263. package/dist/components/tooltip.d.ts +24 -0
  264. package/dist/components/tooltip.js +1 -1
  265. package/dist/components/workflow-category-badge.d.ts +6 -0
  266. package/dist/components/workflow-category-badge.js +2 -2
  267. package/dist/components/workflow-diagram.d.ts +21 -1
  268. package/dist/components/workflow-diagram.js +2 -2
  269. package/dist/components/workflow-status-badge.d.ts +6 -0
  270. package/dist/components/workflow-status-badge.js +2 -2
  271. package/dist/components/workflow-stepper.d.ts +18 -0
  272. package/dist/components/workflow-stepper.js +1 -1
  273. package/dist/index.d.ts +16 -16
  274. package/dist/index.js +68 -68
  275. package/package.json +1 -1
  276. package/dist/chunk-23SALQ3G.js.map +0 -1
  277. package/dist/chunk-3BB6UBX4.js.map +0 -1
  278. package/dist/chunk-3TGN2DFB.js.map +0 -1
  279. package/dist/chunk-3TV2IR7L.js.map +0 -1
  280. package/dist/chunk-4CT5SCAH.js.map +0 -1
  281. package/dist/chunk-4D6FDXCG.js.map +0 -1
  282. package/dist/chunk-4N357E44.js.map +0 -1
  283. package/dist/chunk-4Q2FLTAW.js.map +0 -1
  284. package/dist/chunk-5M67ZEPM.js.map +0 -1
  285. package/dist/chunk-5WCL47ZW.js.map +0 -1
  286. package/dist/chunk-6GCAG5FH.js.map +0 -1
  287. package/dist/chunk-7ALADSN3.js.map +0 -1
  288. package/dist/chunk-7W3WTMUH.js.map +0 -1
  289. package/dist/chunk-7ZFYPC74.js.map +0 -1
  290. package/dist/chunk-ANTYNEUU.js.map +0 -1
  291. package/dist/chunk-AZARDPXB.js.map +0 -1
  292. package/dist/chunk-BJO5JCFB.js.map +0 -1
  293. package/dist/chunk-BOYSXIM3.js.map +0 -1
  294. package/dist/chunk-CCBDR2U2.js.map +0 -1
  295. package/dist/chunk-CDARHMTL.js.map +0 -1
  296. package/dist/chunk-CESZTYQQ.js.map +0 -1
  297. package/dist/chunk-DIS42JLG.js.map +0 -1
  298. package/dist/chunk-DZENMCRL.js.map +0 -1
  299. package/dist/chunk-EIF6WZAZ.js.map +0 -1
  300. package/dist/chunk-F5IKVHRW.js.map +0 -1
  301. package/dist/chunk-FBNG2KGO.js.map +0 -1
  302. package/dist/chunk-FGD3OQOS.js.map +0 -1
  303. package/dist/chunk-HTO5C5BA.js.map +0 -1
  304. package/dist/chunk-IJIGJGL5.js.map +0 -1
  305. package/dist/chunk-JPTN62BV.js.map +0 -1
  306. package/dist/chunk-K7GDYMMU.js.map +0 -1
  307. package/dist/chunk-KABLXGWK.js.map +0 -1
  308. package/dist/chunk-KOGOYUEE.js.map +0 -1
  309. package/dist/chunk-KXT75MXF.js.map +0 -1
  310. package/dist/chunk-KXZ7IND6.js.map +0 -1
  311. package/dist/chunk-L46XUK4O.js.map +0 -1
  312. package/dist/chunk-LI7CKURD.js.map +0 -1
  313. package/dist/chunk-LW5PTU7D.js.map +0 -1
  314. package/dist/chunk-MNAT3ZF6.js.map +0 -1
  315. package/dist/chunk-MXNSBAG4.js.map +0 -1
  316. package/dist/chunk-NFAXCC73.js.map +0 -1
  317. package/dist/chunk-OHBCYKNT.js.map +0 -1
  318. package/dist/chunk-ONAUEREV.js.map +0 -1
  319. package/dist/chunk-OXQNDQJW.js.map +0 -1
  320. package/dist/chunk-P3KBN6YH.js.map +0 -1
  321. package/dist/chunk-PCQSHXOQ.js.map +0 -1
  322. package/dist/chunk-PPZSGU2L.js.map +0 -1
  323. package/dist/chunk-PQJX2M64.js.map +0 -1
  324. package/dist/chunk-QCGYYBDZ.js.map +0 -1
  325. package/dist/chunk-QMAMDYRD.js.map +0 -1
  326. package/dist/chunk-RSHV4SNK.js.map +0 -1
  327. package/dist/chunk-RVJDDGQW.js.map +0 -1
  328. package/dist/chunk-SABAKV4J.js.map +0 -1
  329. package/dist/chunk-TB3R2RA7.js.map +0 -1
  330. package/dist/chunk-TEYOLOZY.js.map +0 -1
  331. package/dist/chunk-TMFQJ7E3.js.map +0 -1
  332. package/dist/chunk-TPPX6QNL.js.map +0 -1
  333. package/dist/chunk-UCEUTKTQ.js.map +0 -1
  334. package/dist/chunk-VGQC333M.js.map +0 -1
  335. package/dist/chunk-WAPGZIAL.js.map +0 -1
  336. package/dist/chunk-XKVHX75G.js.map +0 -1
  337. package/dist/chunk-XP4TPMSN.js.map +0 -1
  338. package/dist/chunk-YF6WRCTG.js.map +0 -1
  339. package/dist/chunk-YKJZV2JK.js.map +0 -1
  340. package/dist/chunk-Z47W426M.js.map +0 -1
  341. package/dist/chunk-ZMHZH572.js.map +0 -1
  342. package/dist/chunk-ZNXCXN7Q.js +0 -37
  343. package/dist/chunk-ZNXCXN7Q.js.map +0 -1
@@ -13,5 +13,5 @@ function Skeleton({ className, ...props }) {
13
13
  }
14
14
 
15
15
  export { Skeleton };
16
- //# sourceMappingURL=chunk-VGQC333M.js.map
17
- //# sourceMappingURL=chunk-VGQC333M.js.map
16
+ //# sourceMappingURL=chunk-JXGRW2MR.js.map
17
+ //# sourceMappingURL=chunk-JXGRW2MR.js.map
@@ -0,0 +1 @@
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,5 +1,5 @@
1
- import { Checkbox } from './chunk-PPZSGU2L.js';
2
- import { Separator } from './chunk-ONAUEREV.js';
1
+ import { Checkbox } from './chunk-WL4ZO2H3.js';
2
+ import { Separator } from './chunk-PGWNOZDX.js';
3
3
  import { cn } from './chunk-DGPY4WP3.js';
4
4
  import { useMemo } from 'react';
5
5
  import { startOfMonth, endOfMonth, startOfWeek, endOfWeek, eachDayOfInterval, format, isSameMonth, isSameDay, isToday } from 'date-fns';
@@ -89,5 +89,5 @@ function CalendarMini({
89
89
  }
90
90
 
91
91
  export { CalendarMini };
92
- //# sourceMappingURL=chunk-CESZTYQQ.js.map
93
- //# sourceMappingURL=chunk-CESZTYQQ.js.map
92
+ //# sourceMappingURL=chunk-KTBOZ4NE.js.map
93
+ //# sourceMappingURL=chunk-KTBOZ4NE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/calendar-mini.tsx"],"names":[],"mappings":"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","file":"chunk-KTBOZ4NE.js","sourcesContent":["import { useMemo } from 'react';\nimport {\n startOfMonth, endOfMonth, startOfWeek, endOfWeek,\n eachDayOfInterval, isSameMonth, isSameDay, isToday, format,\n} from 'date-fns';\nimport { cn } from '../lib/utils';\nimport { Checkbox } from './checkbox';\nimport { Separator } from './separator';\n\n/** A category that can be toggled on/off in the mini calendar's filter section. */\nexport interface CalendarCategory {\n /** Unique key for this category. */\n key: string;\n /** CSS color string used for the category dot. */\n color: string;\n /** Display label for the category. */\n label: string;\n}\n\n/** Localizable labels for the mini calendar. All have English defaults. */\nexport interface CalendarMiniLabels {\n /** Label for Sunday column header. */\n sun?: string;\n /** Label for Monday column header. */\n mon?: string;\n /** Label for Tuesday column header. */\n tue?: string;\n /** Label for Wednesday column header. */\n wed?: string;\n /** Label for Thursday column header. */\n thu?: string;\n /** Label for Friday column header. */\n fri?: string;\n /** Label for Saturday column header. */\n sat?: string;\n /** Heading text for the categories filter section. */\n categories?: string;\n}\n\nconst defaultLabels: Required<CalendarMiniLabels> = {\n sun: 'Sun', mon: 'Mon', tue: 'Tue', wed: 'Wed', thu: 'Thu', fri: 'Fri', sat: 'Sat',\n categories: 'Categories',\n};\n\nexport interface CalendarMiniProps {\n /** The month to display (any date within the target month). */\n currentDate: Date;\n /** The currently selected date, highlighted with primary color. */\n selectedDate: Date;\n /** Callback when a day cell is clicked. */\n onSelectDate: (date: Date) => void;\n /** Optional list of event categories for the filter section. */\n categories?: CalendarCategory[];\n /** Keys of currently enabled categories. */\n enabledCategories?: string[];\n /** Callback when a category checkbox is toggled. */\n onToggleCategory?: (key: string) => void;\n /** Localizable UI labels with English defaults. */\n labels?: CalendarMiniLabels;\n}\n\n/**\n * Compact month calendar with optional category filters. Designed for sidebar\n * placement in calendar views. Locale-agnostic via the `labels` prop.\n *\n * @example\n * ```tsx\n * <CalendarMini\n * currentDate={new Date()}\n * selectedDate={selectedDate}\n * onSelectDate={setSelectedDate}\n * categories={[{ key: \"meeting\", color: \"#3b82f6\", label: \"Meeting\" }]}\n * enabledCategories={[\"meeting\"]}\n * onToggleCategory={(key) => toggle(key)}\n * />\n * ```\n */\nexport function CalendarMini({\n currentDate,\n selectedDate,\n onSelectDate,\n categories,\n enabledCategories,\n onToggleCategory,\n labels: labelsProp,\n}: CalendarMiniProps) {\n const labels = { ...defaultLabels, ...labelsProp };\n\n const days = useMemo(() => {\n const monthStart = startOfMonth(currentDate);\n const monthEnd = endOfMonth(currentDate);\n const calStart = startOfWeek(monthStart, { weekStartsOn: 0 });\n const calEnd = endOfWeek(monthEnd, { weekStartsOn: 0 });\n return eachDayOfInterval({ start: calStart, end: calEnd });\n }, [currentDate]);\n\n const weekDays = [labels.sun, labels.mon, labels.tue, labels.wed, labels.thu, labels.fri, labels.sat];\n\n return (\n <div className=\"space-y-4\">\n {/* Mini calendar */}\n <div>\n <p className=\"text-sm font-semibold mb-2\">{format(currentDate, 'MMMM yyyy')}</p>\n <div className=\"grid grid-cols-7 gap-0\">\n {weekDays.map(day => (\n <div key={day} className=\"text-center text-[10px] font-medium text-muted-foreground py-1\">\n {day}\n </div>\n ))}\n {days.map(day => {\n const inMonth = isSameMonth(day, currentDate);\n const selected = isSameDay(day, selectedDate);\n const today = isToday(day);\n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n onClick={() => onSelectDate(day)}\n className={cn(\n 'w-7 h-7 text-[11px] rounded-full flex items-center justify-center transition-colors',\n !inMonth && 'text-muted-foreground/40',\n inMonth && !selected && 'hover:bg-accent',\n selected && 'bg-primary text-primary-foreground',\n today && !selected && 'font-bold text-primary',\n )}\n >\n {format(day, 'd')}\n </button>\n );\n })}\n </div>\n </div>\n\n {categories && categories.length > 0 && (\n <>\n <Separator />\n {/* Category filters */}\n <div>\n <p className=\"text-sm font-semibold mb-2\">{labels.categories}</p>\n <div className=\"space-y-1.5\">\n {categories.map(cat => (\n <label\n key={cat.key}\n className=\"flex items-center gap-2 py-1 px-1 rounded hover:bg-accent transition-colors cursor-pointer\"\n >\n <Checkbox\n checked={enabledCategories?.includes(cat.key) ?? false}\n onCheckedChange={() => onToggleCategory?.(cat.key)}\n />\n <div className=\"w-2.5 h-2.5 rounded-full\" style={{ backgroundColor: cat.color }} />\n <span className=\"text-sm\">{cat.label}</span>\n </label>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n"]}
@@ -62,5 +62,5 @@ function AlertDescription({
62
62
  }
63
63
 
64
64
  export { Alert, AlertDescription, AlertTitle };
65
- //# sourceMappingURL=chunk-FBNG2KGO.js.map
66
- //# sourceMappingURL=chunk-FBNG2KGO.js.map
65
+ //# sourceMappingURL=chunk-L6K7UH3O.js.map
66
+ //# sourceMappingURL=chunk-L6K7UH3O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/alert.tsx"],"names":[],"mappings":";;;;AAMA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,mOAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,8BAAA;AAAA,QACT,WAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AA4BA,SAAS,KAAA,CAAM;AAAA,EACb,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqE;AACnE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACL,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,6DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,gGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-L6K7UH3O.js","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/utils\";\n\n/** Style variants for the Alert component. Supports `\"default\"` and `\"destructive\"` variants. */\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 default: \"bg-card text-card-foreground\",\n destructive:\n \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\n/**\n * Static alert banner for displaying important messages.\n *\n * Renders an inline callout with an optional icon, title, and description.\n * Use `variant=\"destructive\"` for error or warning messages.\n * Unlike AlertDialog, this is not a modal -- it renders inline in the page.\n *\n * @example\n * ```tsx\n * <Alert>\n * <InfoIcon className=\"size-4\" />\n * <AlertTitle>Heads up!</AlertTitle>\n * <AlertDescription>\n * You can add components to your app using the CLI.\n * </AlertDescription>\n * </Alert>\n *\n * <Alert variant=\"destructive\">\n * <AlertCircleIcon className=\"size-4\" />\n * <AlertTitle>Error</AlertTitle>\n * <AlertDescription>\n * Your session has expired. Please log in again.\n * </AlertDescription>\n * </Alert>\n * ```\n */\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), 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,4 +1,4 @@
1
- import { Label } from './chunk-KXZ7IND6.js';
1
+ import { Label } from './chunk-P3M5TZD2.js';
2
2
  import { cn } from './chunk-DGPY4WP3.js';
3
3
  import * as React from 'react';
4
4
  import { Slot } from '@radix-ui/react-slot';
@@ -107,5 +107,5 @@ function FormMessage({ className, ...props }) {
107
107
  }
108
108
 
109
109
  export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField };
110
- //# sourceMappingURL=chunk-BJO5JCFB.js.map
111
- //# sourceMappingURL=chunk-BJO5JCFB.js.map
110
+ //# sourceMappingURL=chunk-LVZNNIK4.js.map
111
+ //# sourceMappingURL=chunk-LVZNNIK4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form.tsx"],"names":[],"mappings":"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","file":"chunk-LVZNNIK4.js","sourcesContent":["import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\";\n\nimport { cn } from \"../lib/utils\";\nimport { Label } from \"./label\";\n\n/**\n * Form provider component built on react-hook-form's FormProvider.\n * Wraps form fields and provides form context for validation, error display, and accessibility.\n *\n * @example\n * ```tsx\n * const form = useForm({ defaultValues: { email: \"\" } });\n *\n * <Form {...form}>\n * <form onSubmit={form.handleSubmit(onSubmit)}>\n * <FormField\n * control={form.control}\n * name=\"email\"\n * render={({ field }) => (\n * <FormItem>\n * <FormLabel>Email</FormLabel>\n * <FormControl>\n * <Input placeholder=\"you@example.com\" {...field} />\n * </FormControl>\n * <FormDescription>Your work email address.</FormDescription>\n * <FormMessage />\n * </FormItem>\n * )}\n * />\n * <Button type=\"submit\">Submit</Button>\n * </form>\n * </Form>\n * ```\n */\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue,\n);\n\n/** Connects a form field to react-hook-form's Controller and provides field context. */\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\n/**\n * Hook that returns field state, IDs, and error information for the current form field.\n * Must be used within a `FormField` component.\n */\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\");\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue,\n);\n\n/** Container for a single form field, grouping label, control, description, and message. */\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"grid gap-2\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n );\n}\n\n/** Label for a form field that turns red on validation error. */\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField();\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\n/** Slot wrapper that wires up aria attributes for the form control. */\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } =\n useFormField();\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\n/** Helper text displayed below the form control. */\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\n/** Displays the validation error message for the form field. */\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? \"\") : props.children;\n\n if (!body) {\n return null;\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-sm\", className)}\n {...props}\n >\n {body}\n </p>\n );\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n};"]}
@@ -156,5 +156,5 @@ function SelectScrollDownButton({
156
156
  }
157
157
 
158
158
  export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue };
159
- //# sourceMappingURL=chunk-BOYSXIM3.js.map
160
- //# sourceMappingURL=chunk-BOYSXIM3.js.map
159
+ //# sourceMappingURL=chunk-NNJTKHCE.js.map
160
+ //# sourceMappingURL=chunk-NNJTKHCE.js.map
@@ -0,0 +1 @@
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};"]}
@@ -40,5 +40,5 @@ function Toggle({
40
40
  }
41
41
 
42
42
  export { Toggle, toggleVariants };
43
- //# sourceMappingURL=chunk-725ICC47.js.map
44
- //# sourceMappingURL=chunk-725ICC47.js.map
43
+ //# sourceMappingURL=chunk-NU56GKGM.js.map
44
+ //# sourceMappingURL=chunk-NU56GKGM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/toggle.tsx"],"names":[],"mappings":";;;;;AAMA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,+iBAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gBAAA;AAAA,QACT,OAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,kBAAA;AAAA,QACT,EAAA,EAAI,oBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAEA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAG;AACL,CAAA,EACuC;AACrC,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-725ICC47.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\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\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 };"]}
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 };"]}
@@ -37,5 +37,5 @@ function Badge({
37
37
  }
38
38
 
39
39
  export { Badge, badgeVariants };
40
- //# sourceMappingURL=chunk-3TGN2DFB.js.map
41
- //# sourceMappingURL=chunk-3TGN2DFB.js.map
40
+ //# sourceMappingURL=chunk-OBZQTY3H.js.map
41
+ //# sourceMappingURL=chunk-OBZQTY3H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/badge.tsx"],"names":[],"mappings":";;;;;AAMA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,gZAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,gFAAA;AAAA,QACF,SAAA,EACE,sFAAA;AAAA,QACF,WAAA,EACE,2KAAA;AAAA,QACF,OAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAuBA,SAAS,KAAA,CAAM;AAAA,EACb,SAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACL,CAAA,EAAe;AACb,EAAA,MAAM,IAAA,GAAO,UAAU,IAAA,GAAO,MAAA;AAE9B,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-OBZQTY3H.js","sourcesContent":["import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\ninterface BadgeProps\n extends React.ComponentProps<\"span\">,\n VariantProps<typeof badgeVariants> {\n /** Render as a child component using Radix Slot. @default false */\n asChild?: boolean;\n}\n\n/**\n * Inline status descriptor for categorization and metadata display.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Badge>New</Badge>\n *\n * // With variants\n * <Badge variant=\"secondary\">Draft</Badge>\n * <Badge variant=\"destructive\">Error</Badge>\n * <Badge variant=\"outline\">v1.0.0</Badge>\n * ```\n */\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: BadgeProps) {\n const Comp = asChild ? Slot : \"span\";\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge, badgeVariants };\nexport type { BadgeProps };\n"]}
@@ -20,5 +20,5 @@ var Label = React.forwardRef(({ className, ...props }, ref) => {
20
20
  Label.displayName = LabelPrimitive.Root.displayName;
21
21
 
22
22
  export { Label };
23
- //# sourceMappingURL=chunk-KXZ7IND6.js.map
24
- //# sourceMappingURL=chunk-KXZ7IND6.js.map
23
+ //# sourceMappingURL=chunk-P3M5TZD2.js.map
24
+ //# sourceMappingURL=chunk-P3M5TZD2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/label.tsx"],"names":[],"mappings":";;;;;AAoBA,IAAM,KAAA,GAAc,iBAGlB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAClC,EAAA,uBACE,GAAA;AAAA,IAAgB,cAAA,CAAA,IAAA;AAAA,IAAf;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qNAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC;AACD,KAAA,CAAM,cAA6B,cAAA,CAAA,IAAA,CAAK,WAAA","file":"chunk-P3M5TZD2.js","sourcesContent":["import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\n\nimport { cn } from \"../lib/utils\";\n\ntype LabelProps = React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>;\n\n/**\n * Accessible label for form controls, automatically associated via `htmlFor`.\n *\n * @example\n * ```tsx\n * // With an input\n * <Label htmlFor=\"email\">Email address</Label>\n * <Input id=\"email\" type=\"email\" />\n *\n * // Disabled state (responds to group/peer disabled)\n * <Label htmlFor=\"name\">Name</Label>\n * ```\n */\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n LabelProps\n>(({ className, ...props }, ref) => {\n return (\n <LabelPrimitive.Root\n ref={ref}\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n});\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\nexport type { LabelProps };\n"]}
@@ -24,5 +24,5 @@ function Separator({
24
24
  }
25
25
 
26
26
  export { Separator };
27
- //# sourceMappingURL=chunk-ONAUEREV.js.map
28
- //# sourceMappingURL=chunk-ONAUEREV.js.map
27
+ //# sourceMappingURL=chunk-PGWNOZDX.js.map
28
+ //# sourceMappingURL=chunk-PGWNOZDX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/separator.tsx"],"names":[],"mappings":";;;;AAuBA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,GAAG;AACL,CAAA,EAAmB;AACjB,EAAA,uBACE,GAAA;AAAA,IAAoB,kBAAA,CAAA,IAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,gKAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-PGWNOZDX.js","sourcesContent":["import * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\n\nimport { cn } from \"../lib/utils\";\n\ntype SeparatorProps = React.ComponentProps<typeof SeparatorPrimitive.Root>;\n\n/**\n * Visual divider between content sections, rendered as a horizontal or vertical line.\n *\n * @example\n * ```tsx\n * // Horizontal (default)\n * <Separator />\n *\n * // Vertical divider in a flex row\n * <div className=\"flex items-center gap-4\">\n * <span>Left</span>\n * <Separator orientation=\"vertical\" className=\"h-4\" />\n * <span>Right</span>\n * </div>\n * ```\n */\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: SeparatorProps) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator-root\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\nexport type { SeparatorProps };"]}
@@ -1,4 +1,4 @@
1
- import { Card, CardContent } from './chunk-OXQNDQJW.js';
1
+ import { Card, CardContent } from './chunk-Z2QAABLM.js';
2
2
  import { cn } from './chunk-DGPY4WP3.js';
3
3
  import { GitBranch, Bell, Eye, CheckCircle, Users, ArrowRight } from 'lucide-react';
4
4
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -61,5 +61,5 @@ function WorkflowDiagram({
61
61
  }
62
62
 
63
63
  export { WorkflowDiagram };
64
- //# sourceMappingURL=chunk-3TV2IR7L.js.map
65
- //# sourceMappingURL=chunk-3TV2IR7L.js.map
64
+ //# sourceMappingURL=chunk-QX56UQ2I.js.map
65
+ //# sourceMappingURL=chunk-QX56UQ2I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/workflow-diagram.tsx"],"names":[],"mappings":"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","file":"chunk-QX56UQ2I.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-blue-500 dark:border-blue-400 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"]}
@@ -29,5 +29,5 @@ function Progress({
29
29
  }
30
30
 
31
31
  export { Progress };
32
- //# sourceMappingURL=chunk-L46XUK4O.js.map
33
- //# sourceMappingURL=chunk-L46XUK4O.js.map
32
+ //# sourceMappingURL=chunk-R2CDE5DO.js.map
33
+ //# sourceMappingURL=chunk-R2CDE5DO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/progress.tsx"],"names":[],"mappings":";;;;AAmBA,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,uBACE,GAAA;AAAA,IAAmB,iBAAA,CAAA,IAAA;AAAA,IAAlB;AAAA,MACC,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,gEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA;AAAA,QAAmB,iBAAA,CAAA,SAAA;AAAA,QAAlB;AAAA,UACC,WAAA,EAAU,oBAAA;AAAA,UACV,SAAA,EAAU,gDAAA;AAAA,UACV,OAAO,EAAE,SAAA,EAAW,eAAe,GAAA,IAAO,KAAA,IAAS,EAAE,CAAA,EAAA,CAAA;AAAK;AAAA;AAC5D;AAAA,GACF;AAEJ","file":"chunk-R2CDE5DO.js","sourcesContent":["import * as React from \"react\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\n\nimport { cn } from \"../lib/utils\";\n\ntype ProgressProps = React.ComponentProps<typeof ProgressPrimitive.Root>;\n\n/**\n * Horizontal bar that indicates the completion progress of a task or operation.\n *\n * @example\n * ```tsx\n * // Basic usage (65% complete)\n * <Progress value={65} />\n *\n * // With custom styling\n * <Progress value={40} className=\"h-3\" />\n * ```\n */\nfunction Progress({\n className,\n value,\n ...props\n}: ProgressProps) {\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n className={cn(\n \"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full\",\n className,\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"bg-primary h-full w-full flex-1 transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n );\n}\n\nexport { Progress };\nexport type { ProgressProps };"]}
@@ -61,5 +61,5 @@ function InputOTPSeparator({ ...props }) {
61
61
  }
62
62
 
63
63
  export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
64
- //# sourceMappingURL=chunk-LI7CKURD.js.map
65
- //# sourceMappingURL=chunk-LI7CKURD.js.map
64
+ //# sourceMappingURL=chunk-RQNZDWY3.js.map
65
+ //# sourceMappingURL=chunk-RQNZDWY3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/input-otp.tsx"],"names":[],"mappings":";;;;;;AA2BA,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,kBAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,kBAAA,EAAoB,EAAA;AAAA,QAClB,iDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,SAAS,CAAA;AAAA,MACrD,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC3E,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,YAAA,CAAa;AAAA,EACpB,KAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,eAAA,GAAwB,iBAAW,eAAe,CAAA;AACxD,EAAA,MAAM,EAAE,MAAM,YAAA,EAAc,QAAA,KAAa,eAAA,EAAiB,KAAA,CAAM,KAAK,CAAA,IAAK,EAAC;AAE3E,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,aAAA,EAAa,QAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,ogBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,QACA,YAAA,wBACE,KAAA,EAAA,EAAI,SAAA,EAAU,yEACb,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EAA2D,CAAA,EAC5E;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAGA,SAAS,iBAAA,CAAkB,EAAE,GAAG,KAAA,EAAM,EAAgC;AACpE,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,qBAAA,EAAsB,IAAA,EAAK,aAAa,GAAG,KAAA,EACxD,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,CAAA,EACb,CAAA;AAEJ","file":"chunk-RQNZDWY3.js","sourcesContent":["import * as React from \"react\";\nimport { OTPInput, OTPInputContext } from \"input-otp\";\nimport { MinusIcon } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * One-time password input component built on the `input-otp` library.\n * Renders a segmented input for entering verification codes.\n *\n * @example\n * ```tsx\n * <InputOTP maxLength={6} value={otp} onChange={setOtp}>\n * <InputOTPGroup>\n * <InputOTPSlot index={0} />\n * <InputOTPSlot index={1} />\n * <InputOTPSlot index={2} />\n * </InputOTPGroup>\n * <InputOTPSeparator />\n * <InputOTPGroup>\n * <InputOTPSlot index={3} />\n * <InputOTPSlot index={4} />\n * <InputOTPSlot index={5} />\n * </InputOTPGroup>\n * </InputOTP>\n * ```\n */\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string;\n}) {\n return (\n <OTPInput\n data-slot=\"input-otp\"\n containerClassName={cn(\n \"flex items-center gap-2 has-disabled:opacity-50\",\n containerClassName,\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n );\n}\n\n/** Groups adjacent OTP slots together visually. */\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(\"flex items-center gap-1\", className)}\n {...props}\n />\n );\n}\n\n/** Individual character slot within an OTP group. */\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number;\n}) {\n const inputOTPContext = React.useContext(OTPInputContext);\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n \"data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm bg-input-background transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]\",\n className,\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"animate-caret-blink bg-foreground h-4 w-px duration-1000\" />\n </div>\n )}\n </div>\n );\n}\n\n/** Visual separator (dash) between OTP groups. */\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\n <MinusIcon />\n </div>\n );\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator };"]}
@@ -105,5 +105,5 @@ function TableCaption({
105
105
  }
106
106
 
107
107
  export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow };
108
- //# sourceMappingURL=chunk-YKJZV2JK.js.map
109
- //# sourceMappingURL=chunk-YKJZV2JK.js.map
108
+ //# sourceMappingURL=chunk-S6PDRGR5.js.map
109
+ //# sourceMappingURL=chunk-S6PDRGR5.js.map
@@ -0,0 +1 @@
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,4 +1,4 @@
1
- import { Checkbox } from './chunk-PPZSGU2L.js';
1
+ import { Checkbox } from './chunk-WL4ZO2H3.js';
2
2
  import { cn } from './chunk-DGPY4WP3.js';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
 
@@ -108,5 +108,5 @@ function PermissionGrid({
108
108
  }
109
109
 
110
110
  export { PermissionGrid, buildPermissionId };
111
- //# sourceMappingURL=chunk-RVJDDGQW.js.map
112
- //# sourceMappingURL=chunk-RVJDDGQW.js.map
111
+ //# sourceMappingURL=chunk-TJMK2KBE.js.map
112
+ //# sourceMappingURL=chunk-TJMK2KBE.js.map
@@ -0,0 +1 @@
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"]}
@@ -26,5 +26,5 @@ function CalendarEventChip({ event, compact = false, onClick }) {
26
26
  }
27
27
 
28
28
  export { CalendarEventChip };
29
- //# sourceMappingURL=chunk-5WCL47ZW.js.map
30
- //# sourceMappingURL=chunk-5WCL47ZW.js.map
29
+ //# sourceMappingURL=chunk-TTH7TWVX.js.map
30
+ //# sourceMappingURL=chunk-TTH7TWVX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/calendar-event-chip.tsx"],"names":[],"mappings":";;;;AAyCO,SAAS,kBAAkB,EAAE,KAAA,EAAO,OAAA,GAAU,KAAA,EAAO,SAAQ,EAA2B;AAC7F,EAAA,uBACE,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,OAAA,GAAU,KAAK,CAAA;AAAA,MAC9B,SAAA,EAAW,EAAA;AAAA,QACT,wHAAA;AAAA,QACA,UAAU,eAAA,GAAkB;AAAA,OAC9B;AAAA,MACA,KAAA,EAAO;AAAA,QACL,eAAA,EAAiB,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAA,CAAA;AAAA,QAC/B,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,UAAA,EAAY,CAAA,UAAA,EAAa,KAAA,CAAM,KAAK,CAAA;AAAA,OACtC;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,CAAC,KAAA,CAAM,MAAA,IAAU,CAAC,OAAA,oBACjB,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,OAAO,CAAA,EAAE,CAAA;AAAA,QAEjE,KAAA,CAAM;AAAA;AAAA;AAAA,GACT;AAEJ","file":"chunk-TTH7TWVX.js","sourcesContent":["import { format } from 'date-fns';\nimport { cn } from '../lib/utils';\n\n/** Event data shape required by CalendarEventChip. */\nexport interface CalendarEventChipEvent {\n /** Unique event identifier. */\n id: string;\n /** Display title of the event. */\n title: string;\n /** Event start date/time. */\n start: Date;\n /** Event end date/time. */\n end: Date;\n /** Whether this is an all-day event. When true, time is not displayed. */\n allDay?: boolean;\n /** CSS color string used for the chip background, text, and left border. */\n color: string;\n}\n\nexport interface CalendarEventChipProps {\n /** The event to display. */\n event: CalendarEventChipEvent;\n /** Use compact layout with tighter line-height. Defaults to `false`. */\n compact?: boolean;\n /** Callback when the chip is clicked. */\n onClick?: (event: CalendarEventChipEvent) => void;\n}\n\n/**\n * Small colored chip representing a calendar event. Shows the event title\n * with a colored left border and tinted background. Optionally displays\n * the start time for non-all-day events.\n *\n * @example\n * ```tsx\n * <CalendarEventChip\n * event={{ id: \"1\", title: \"Standup\", start: new Date(), end: new Date(), color: \"#3b82f6\" }}\n * onClick={(e) => openDetail(e.id)}\n * />\n * ```\n */\nexport function CalendarEventChip({ event, compact = false, onClick }: CalendarEventChipProps) {\n return (\n <button\n type=\"button\"\n onClick={() => onClick?.(event)}\n className={cn(\n 'w-full text-left rounded px-1.5 py-0.5 text-xs font-medium truncate transition-opacity hover:opacity-80 cursor-pointer',\n compact ? 'leading-tight' : 'leading-normal'\n )}\n style={{\n backgroundColor: `${event.color}20`,\n color: event.color,\n borderLeft: `2px solid ${event.color}`,\n }}\n >\n {!event.allDay && !compact && (\n <span className=\"opacity-75 mr-1\">{format(event.start, 'HH:mm')}</span>\n )}\n {event.title}\n </button>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Button } from './chunk-3BB6UBX4.js';
1
+ import { Button } from './chunk-Y65FNGEE.js';
2
2
  import { cn } from './chunk-DGPY4WP3.js';
3
3
  import * as React from 'react';
4
4
  import useEmblaCarousel from 'embla-carousel-react';
@@ -192,5 +192,5 @@ function CarouselNext({
192
192
  }
193
193
 
194
194
  export { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious };
195
- //# sourceMappingURL=chunk-PQJX2M64.js.map
196
- //# sourceMappingURL=chunk-PQJX2M64.js.map
195
+ //# sourceMappingURL=chunk-TX42RKQU.js.map
196
+ //# sourceMappingURL=chunk-TX42RKQU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/carousel.tsx"],"names":["api"],"mappings":";;;;;;;AAgCA,IAAM,eAAA,GAAwB,oBAA2C,IAAI,CAAA;AAG7E,SAAS,WAAA,GAAc;AACrB,EAAA,MAAM,OAAA,GAAgB,iBAAW,eAAe,CAAA;AAEhD,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EAClE;AAEA,EAAA,OAAO,OAAA;AACT;AAsBA,SAAS,QAAA,CAAS;AAAA,EAChB,WAAA,GAAc,YAAA;AAAA,EACd,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgD;AAC9C,EAAA,MAAM,CAAC,WAAA,EAAa,GAAG,CAAA,GAAI,gBAAA;AAAA,IACzB;AAAA,MACE,GAAG,IAAA;AAAA,MACH,IAAA,EAAM,WAAA,KAAgB,YAAA,GAAe,GAAA,GAAM;AAAA,KAC7C;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAU,eAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAU,eAAS,KAAK,CAAA;AAE9D,EAAA,MAAM,QAAA,GAAiB,KAAA,CAAA,WAAA,CAAY,CAACA,IAAAA,KAAqB;AACvD,IAAA,IAAI,CAACA,IAAAA,EAAK;AACV,IAAA,gBAAA,CAAiBA,IAAAA,CAAI,eAAe,CAAA;AACpC,IAAA,gBAAA,CAAiBA,IAAAA,CAAI,eAAe,CAAA;AAAA,EACtC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAmB,kBAAY,MAAM;AACzC,IAAA,GAAA,EAAK,UAAA,EAAW;AAAA,EAClB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,UAAA,GAAmB,kBAAY,MAAM;AACzC,IAAA,GAAA,EAAK,UAAA,EAAW;AAAA,EAClB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,aAAA,GAAsB,KAAA,CAAA,WAAA;AAAA,IAC1B,CAAC,KAAA,KAA+C;AAC9C,MAAA,IAAI,KAAA,CAAM,QAAQ,WAAA,EAAa;AAC7B,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,UAAA,EAAW;AAAA,MACb,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,YAAA,EAAc;AACrC,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,UAAA,EAAW;AAAA,MACb;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAY,UAAU;AAAA,GACzB;AAEA,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,MAAA,EAAQ;AACrB,IAAA,MAAA,CAAO,GAAG,CAAA;AAAA,EACZ,CAAA,EAAG,CAAC,GAAA,EAAK,MAAM,CAAC,CAAA;AAEhB,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,QAAA,CAAS,GAAG,CAAA;AACZ,IAAA,GAAA,CAAI,EAAA,CAAG,UAAU,QAAQ,CAAA;AACzB,IAAA,GAAA,CAAI,EAAA,CAAG,UAAU,QAAQ,CAAA;AAEzB,IAAA,OAAO,MAAM;AACX,MAAA,GAAA,EAAK,GAAA,CAAI,UAAU,QAAQ,CAAA;AAAA,IAC7B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,GAAA,EAAK,QAAQ,CAAC,CAAA;AAElB,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA,CAAgB,QAAA;AAAA,IAAhB;AAAA,MACC,KAAA,EAAO;AAAA,QACL,WAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA;AAAA,QACA,WAAA,EACE,WAAA,KAAgB,IAAA,EAAM,IAAA,KAAS,MAAM,UAAA,GAAa,YAAA,CAAA;AAAA,QACpD,UAAA;AAAA,QACA,UAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,gBAAA,EAAkB,aAAA;AAAA,UAClB,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,UACnC,IAAA,EAAK,QAAA;AAAA,UACL,sBAAA,EAAqB,UAAA;AAAA,UACrB,WAAA,EAAU,UAAA;AAAA,UACT,GAAG,KAAA;AAAA,UAEH;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;AAGA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC7E,EAAA,MAAM,EAAE,WAAA,EAAa,WAAA,EAAY,GAAI,WAAA,EAAY;AAEjD,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,WAAA;AAAA,MACL,SAAA,EAAU,iBAAA;AAAA,MACV,WAAA,EAAU,kBAAA;AAAA,MAEV,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,MAAA;AAAA,YACA,WAAA,KAAgB,eAAe,OAAA,GAAU,gBAAA;AAAA,YACzC;AAAA,WACF;AAAA,UACC,GAAG;AAAA;AAAA;AACN;AAAA,GACF;AAEJ;AAGA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC1E,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,WAAA,EAAY;AAEpC,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,sBAAA,EAAqB,OAAA;AAAA,MACrB,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oCAAA;AAAA,QACA,WAAA,KAAgB,eAAe,MAAA,GAAS,MAAA;AAAA,QACxC;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,MAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAwC;AACtC,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,KAAkB,WAAA,EAAY;AAE/D,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,OAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,8BAAA;AAAA,QACA,WAAA,KAAgB,eACZ,mCAAA,GACA,6CAAA;AAAA,QACJ;AAAA,OACF;AAAA,MACA,UAAU,CAAC,aAAA;AAAA,MACX,OAAA,EAAS,UAAA;AAAA,MACR,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,CAAA;AAAA,wBACX,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,gBAAA,EAAc;AAAA;AAAA;AAAA,GAC1C;AAEJ;AAGA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,MAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAwC;AACtC,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,KAAkB,WAAA,EAAY;AAE/D,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,OAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,8BAAA;AAAA,QACA,WAAA,KAAgB,eACZ,oCAAA,GACA,gDAAA;AAAA,QACJ;AAAA,OACF;AAAA,MACA,UAAU,CAAC,aAAA;AAAA,MACX,OAAA,EAAS,UAAA;AAAA,MACR,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,CAAA;AAAA,wBACZ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,YAAA,EAAU;AAAA;AAAA;AAAA,GACtC;AAEJ","file":"chunk-TX42RKQU.js","sourcesContent":["import * as React from \"react\";\nimport useEmblaCarousel from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ntype CarouselApi = ReturnType<typeof useEmblaCarousel>[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n /** Embla Carousel options (e.g., `{ loop: true, align: \"start\" }`). */\n opts?: CarouselOptions;\n /** Embla Carousel plugins (e.g., Autoplay, ClassNames). */\n plugins?: CarouselPlugin;\n /** Scroll axis direction. Defaults to `\"horizontal\"`. */\n orientation?: \"horizontal\" | \"vertical\";\n /** Callback to receive the Embla API instance for external control. */\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\n/** Returns the carousel context. Must be called within a `<Carousel>` provider. */\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\n/**\n * Carousel/slider component powered by Embla Carousel.\n *\n * Provides a context for child components (`CarouselContent`, `CarouselItem`,\n * `CarouselPrevious`, `CarouselNext`). Supports horizontal/vertical orientation,\n * keyboard navigation (arrow keys), and plugin extensibility.\n *\n * @example\n * ```tsx\n * <Carousel opts={{ loop: true }}>\n * <CarouselContent>\n * <CarouselItem>Slide 1</CarouselItem>\n * <CarouselItem>Slide 2</CarouselItem>\n * <CarouselItem>Slide 3</CarouselItem>\n * </CarouselContent>\n * <CarouselPrevious />\n * <CarouselNext />\n * </Carousel>\n * ```\n */\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\n/** Scrollable container for `CarouselItem` elements. Manages the overflow viewport. */\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div\n ref={carouselRef}\n className=\"overflow-hidden\"\n data-slot=\"carousel-content\"\n >\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\n/** Individual slide within the carousel. Defaults to full-width (`basis-full`). */\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Navigation button to scroll to the previous slide. Automatically disabled when at the beginning. */\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-12 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\n/** Navigation button to scroll to the next slide. Automatically disabled when at the end. */\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-12 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { Button } from './chunk-3BB6UBX4.js';
1
+ import { Button } from './chunk-Y65FNGEE.js';
2
2
  import { cn } from './chunk-DGPY4WP3.js';
3
3
  import * as React from 'react';
4
4
  import { Upload, X, FileImage, FileVideo, FileText, File } from 'lucide-react';
@@ -183,5 +183,5 @@ function FileUpload({
183
183
  }
184
184
 
185
185
  export { FileUpload };
186
- //# sourceMappingURL=chunk-HTO5C5BA.js.map
187
- //# sourceMappingURL=chunk-HTO5C5BA.js.map
186
+ //# sourceMappingURL=chunk-UAX7UJIJ.js.map
187
+ //# sourceMappingURL=chunk-UAX7UJIJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/file-upload.tsx"],"names":["error"],"mappings":"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","file":"chunk-UAX7UJIJ.js","sourcesContent":["import * as React from \"react\";\nimport { Upload, X, File, FileImage, FileText, FileVideo } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ninterface FileUploadProps {\n /** Array of currently uploaded File objects. */\n value?: File[];\n /** Callback fired when files are added or removed. */\n onChange?: (files: File[]) => void;\n /** Accepted file types (e.g., `\"image/*,.pdf\"`). Maps to the HTML `accept` attribute. */\n accept?: string;\n /** Whether multiple files can be selected at once. Defaults to `false`. */\n multiple?: boolean;\n /** Maximum file size in bytes. Defaults to 10 MB. */\n maxSize?: number;\n /** Maximum number of files allowed. */\n maxFiles?: number;\n /** Whether the upload area is disabled. */\n disabled?: boolean;\n /** Additional CSS class for the outer wrapper. */\n className?: string;\n /** Whether to show the file list with previews below the drop zone. Defaults to `true`. */\n showPreview?: boolean;\n}\n\n/**\n * File upload component with drag-and-drop support and file previews.\n * Validates file size and count, shows image thumbnails, and provides remove buttons.\n *\n * @example\n * ```tsx\n * const [files, setFiles] = useState<File[]>([]);\n *\n * <FileUpload\n * value={files}\n * onChange={setFiles}\n * accept=\"image/*,.pdf\"\n * multiple\n * maxSize={5 * 1024 * 1024}\n * maxFiles={3}\n * />\n * ```\n */\nexport function FileUpload({\n value = [],\n onChange,\n accept,\n multiple = false,\n maxSize = 10 * 1024 * 1024, // 10MB default\n maxFiles,\n disabled,\n className,\n showPreview = true,\n}: FileUploadProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [dragActive, setDragActive] = React.useState(false);\n const [error, setError] = React.useState<string>(\"\");\n\n const handleDrag = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (e.type === \"dragenter\" || e.type === \"dragover\") {\n setDragActive(true);\n } else if (e.type === \"dragleave\") {\n setDragActive(false);\n }\n };\n\n const validateFiles = (files: File[]): { valid: File[]; error?: string } => {\n setError(\"\");\n\n // Check max files\n if (maxFiles && value.length + files.length > maxFiles) {\n return {\n valid: [],\n error: `Chỉ được chọn tối đa ${maxFiles} file`,\n };\n }\n\n // Check file size\n const oversizedFiles = files.filter((file) => file.size > maxSize);\n if (oversizedFiles.length > 0) {\n return {\n valid: [],\n error: `File vượt quá dung lượng cho phép (${Math.round(maxSize / 1024 / 1024)}MB)`,\n };\n }\n\n return { valid: files };\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n\n if (disabled) return;\n\n const droppedFiles = Array.from(e.dataTransfer.files);\n const { valid, error } = validateFiles(droppedFiles);\n\n if (error) {\n setError(error);\n return;\n }\n\n onChange?.([...value, ...valid]);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n const selectedFiles = Array.from(e.target.files || []);\n const { valid, error } = validateFiles(selectedFiles);\n\n if (error) {\n setError(error);\n return;\n }\n\n onChange?.([...value, ...valid]);\n\n // Reset input\n if (inputRef.current) {\n inputRef.current.value = \"\";\n }\n };\n\n const handleRemove = (index: number) => {\n onChange?.(value.filter((_, i) => i !== index));\n };\n\n const getFileIcon = (file: File) => {\n if (file.type.startsWith(\"image/\")) return FileImage;\n if (file.type.startsWith(\"video/\")) return FileVideo;\n if (file.type.startsWith(\"text/\")) return FileText;\n return File;\n };\n\n const formatFileSize = (bytes: number) => {\n if (bytes === 0) return \"0 Bytes\";\n const k = 1024;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + \" \" + sizes[i];\n };\n\n return (\n <div className={cn(\"w-full\", className)}>\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n disabled={disabled}\n className=\"hidden\"\n />\n\n {/* Upload Area */}\n <div\n onDragEnter={handleDrag}\n onDragLeave={handleDrag}\n onDragOver={handleDrag}\n onDrop={handleDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n className={cn(\n \"relative border-2 border-dashed rounded-lg p-8 text-center cursor-pointer transition-colors\",\n dragActive\n ? \"border-blue-500 bg-blue-50\"\n : \"border-gray-300 hover:border-gray-400\",\n disabled && \"opacity-50 cursor-not-allowed\",\n error && \"border-red-500\"\n )}\n >\n <Upload className=\"mx-auto h-12 w-12 text-gray-400 mb-4\" />\n <div className=\"text-sm text-gray-600 mb-2\">\n <span className=\"font-semibold text-blue-600\">Nhấp để chọn file</span>\n {\" \"}hoặc kéo thả file vào đây\n </div>\n <div className=\"text-xs text-gray-500\">\n {accept && <div>Định dạng: {accept}</div>}\n <div>Dung lượng tối đa: {Math.round(maxSize / 1024 / 1024)}MB</div>\n {maxFiles && <div>Số lượng tối đa: {maxFiles} file</div>}\n </div>\n </div>\n\n {/* Error Message */}\n {error && (\n <div className=\"mt-2 text-sm text-red-600\">{error}</div>\n )}\n\n {/* File List */}\n {showPreview && value.length > 0 && (\n <div className=\"mt-4 space-y-2\">\n {value.map((file, index) => {\n const FileIcon = getFileIcon(file);\n const isImage = file.type.startsWith(\"image/\");\n const previewUrl = isImage ? URL.createObjectURL(file) : null;\n\n return (\n <div\n key={`${file.name}-${index}`}\n className=\"flex items-center gap-3 p-3 border rounded-lg bg-gray-50\"\n >\n {previewUrl ? (\n <img\n src={previewUrl}\n alt={file.name}\n className=\"w-10 h-10 rounded object-cover\"\n />\n ) : (\n <div className=\"w-10 h-10 rounded bg-gray-200 flex items-center justify-center\">\n <FileIcon className=\"w-5 h-5 text-gray-600\" />\n </div>\n )}\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm font-medium truncate\">{file.name}</div>\n <div className=\"text-xs text-gray-500\">\n {formatFileSize(file.size)}\n </div>\n </div>\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleRemove(index)}\n disabled={disabled}\n className=\"flex-shrink-0\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -207,5 +207,5 @@ function ContextMenuShortcut({
207
207
  }
208
208
 
209
209
  export { ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger };
210
- //# sourceMappingURL=chunk-LW5PTU7D.js.map
211
- //# sourceMappingURL=chunk-LW5PTU7D.js.map
210
+ //# sourceMappingURL=chunk-USIHM7FV.js.map
211
+ //# sourceMappingURL=chunk-USIHM7FV.js.map
@@ -0,0 +1 @@
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,6 +1,6 @@
1
- import { Popover, PopoverTrigger, PopoverContent } from './chunk-AZARDPXB.js';
2
- import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from './chunk-7ZFYPC74.js';
3
- import { Button } from './chunk-3BB6UBX4.js';
1
+ import { Popover, PopoverTrigger, PopoverContent } from './chunk-C34KSTWA.js';
2
+ import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from './chunk-6GWVQB3Q.js';
3
+ import { Button } from './chunk-Y65FNGEE.js';
4
4
  import { cn } from './chunk-DGPY4WP3.js';
5
5
  import * as React from 'react';
6
6
  import { X, ChevronsUpDown, Check } from 'lucide-react';
@@ -167,5 +167,5 @@ function MultiCombobox({
167
167
  }
168
168
 
169
169
  export { Combobox, MultiCombobox };
170
- //# sourceMappingURL=chunk-MXNSBAG4.js.map
171
- //# sourceMappingURL=chunk-MXNSBAG4.js.map
170
+ //# sourceMappingURL=chunk-UVOH3VSV.js.map
171
+ //# sourceMappingURL=chunk-UVOH3VSV.js.map