@omnifyjp/ui 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/README.md +230 -0
  2. package/dist/chunk-23SALQ3G.js +219 -0
  3. package/dist/chunk-23SALQ3G.js.map +1 -0
  4. package/dist/chunk-3TGN2DFB.js +41 -0
  5. package/dist/chunk-3TGN2DFB.js.map +1 -0
  6. package/dist/chunk-3TV2IR7L.js +65 -0
  7. package/dist/chunk-3TV2IR7L.js.map +1 -0
  8. package/dist/chunk-4CT5SCAH.js +54 -0
  9. package/dist/chunk-4CT5SCAH.js.map +1 -0
  10. package/dist/chunk-4D6FDXCG.js +41 -0
  11. package/dist/chunk-4D6FDXCG.js.map +1 -0
  12. package/dist/chunk-4HCORCR2.js +114 -0
  13. package/dist/chunk-4HCORCR2.js.map +1 -0
  14. package/dist/chunk-4N357E44.js +119 -0
  15. package/dist/chunk-4N357E44.js.map +1 -0
  16. package/dist/chunk-4Q2FLTAW.js +23 -0
  17. package/dist/chunk-4Q2FLTAW.js.map +1 -0
  18. package/dist/chunk-5M67ZEPM.js +33 -0
  19. package/dist/chunk-5M67ZEPM.js.map +1 -0
  20. package/dist/chunk-5WCL47ZW.js +30 -0
  21. package/dist/chunk-5WCL47ZW.js.map +1 -0
  22. package/dist/chunk-5Y3SQ3EA.js +52 -0
  23. package/dist/chunk-5Y3SQ3EA.js.map +1 -0
  24. package/dist/chunk-6GCAG5FH.js +46 -0
  25. package/dist/chunk-6GCAG5FH.js.map +1 -0
  26. package/dist/chunk-6MVBERQJ.js +44 -0
  27. package/dist/chunk-6MVBERQJ.js.map +1 -0
  28. package/dist/chunk-725ICC47.js +44 -0
  29. package/dist/chunk-725ICC47.js.map +1 -0
  30. package/dist/chunk-7ALADSN3.js +56 -0
  31. package/dist/chunk-7ALADSN3.js.map +1 -0
  32. package/dist/chunk-7NMWBCF4.js +171 -0
  33. package/dist/chunk-7NMWBCF4.js.map +1 -0
  34. package/dist/chunk-7ZFYPC74.js +155 -0
  35. package/dist/chunk-7ZFYPC74.js.map +1 -0
  36. package/dist/chunk-ANTYNEUU.js +35 -0
  37. package/dist/chunk-ANTYNEUU.js.map +1 -0
  38. package/dist/chunk-AZARDPXB.js +43 -0
  39. package/dist/chunk-AZARDPXB.js.map +1 -0
  40. package/dist/chunk-BJO5JCFB.js +111 -0
  41. package/dist/chunk-BJO5JCFB.js.map +1 -0
  42. package/dist/chunk-BOYSXIM3.js +160 -0
  43. package/dist/chunk-BOYSXIM3.js.map +1 -0
  44. package/dist/chunk-CDARHMTL.js +25 -0
  45. package/dist/chunk-CDARHMTL.js.map +1 -0
  46. package/dist/chunk-CESZTYQQ.js +93 -0
  47. package/dist/chunk-CESZTYQQ.js.map +1 -0
  48. package/dist/chunk-D3GCOO74.js +90 -0
  49. package/dist/chunk-D3GCOO74.js.map +1 -0
  50. package/dist/chunk-DGPY4WP3.js +11 -0
  51. package/dist/chunk-DGPY4WP3.js.map +1 -0
  52. package/dist/chunk-DIS42JLG.js +13 -0
  53. package/dist/chunk-DIS42JLG.js.map +1 -0
  54. package/dist/chunk-DQGDQEXD.js +617 -0
  55. package/dist/chunk-DQGDQEXD.js.map +1 -0
  56. package/dist/chunk-DZENMCRL.js +63 -0
  57. package/dist/chunk-DZENMCRL.js.map +1 -0
  58. package/dist/chunk-EIF6WZAZ.js +38 -0
  59. package/dist/chunk-EIF6WZAZ.js.map +1 -0
  60. package/dist/chunk-F6VQCMYH.js +81 -0
  61. package/dist/chunk-F6VQCMYH.js.map +1 -0
  62. package/dist/chunk-FBNG2KGO.js +66 -0
  63. package/dist/chunk-FBNG2KGO.js.map +1 -0
  64. package/dist/chunk-FO7J3PYY.js +131 -0
  65. package/dist/chunk-FO7J3PYY.js.map +1 -0
  66. package/dist/chunk-FSFXDD6P.js +196 -0
  67. package/dist/chunk-FSFXDD6P.js.map +1 -0
  68. package/dist/chunk-IDRQ6BNQ.js +63 -0
  69. package/dist/chunk-IDRQ6BNQ.js.map +1 -0
  70. package/dist/chunk-IJIGJGL5.js +48 -0
  71. package/dist/chunk-IJIGJGL5.js.map +1 -0
  72. package/dist/chunk-JPTN62BV.js +128 -0
  73. package/dist/chunk-JPTN62BV.js.map +1 -0
  74. package/dist/chunk-KABLXGWK.js +66 -0
  75. package/dist/chunk-KABLXGWK.js.map +1 -0
  76. package/dist/chunk-KOGOYUEE.js +121 -0
  77. package/dist/chunk-KOGOYUEE.js.map +1 -0
  78. package/dist/chunk-KULHYNE2.js +138 -0
  79. package/dist/chunk-KULHYNE2.js.map +1 -0
  80. package/dist/chunk-KXT75MXF.js +164 -0
  81. package/dist/chunk-KXT75MXF.js.map +1 -0
  82. package/dist/chunk-KXZ7IND6.js +24 -0
  83. package/dist/chunk-KXZ7IND6.js.map +1 -0
  84. package/dist/chunk-L46XUK4O.js +33 -0
  85. package/dist/chunk-L46XUK4O.js.map +1 -0
  86. package/dist/chunk-LI7CKURD.js +65 -0
  87. package/dist/chunk-LI7CKURD.js.map +1 -0
  88. package/dist/chunk-LW5PTU7D.js +211 -0
  89. package/dist/chunk-LW5PTU7D.js.map +1 -0
  90. package/dist/chunk-MNAT3ZF6.js +106 -0
  91. package/dist/chunk-MNAT3ZF6.js.map +1 -0
  92. package/dist/chunk-NFAXCC73.js +239 -0
  93. package/dist/chunk-NFAXCC73.js.map +1 -0
  94. package/dist/chunk-OHBCYKNT.js +63 -0
  95. package/dist/chunk-OHBCYKNT.js.map +1 -0
  96. package/dist/chunk-ONAUEREV.js +28 -0
  97. package/dist/chunk-ONAUEREV.js.map +1 -0
  98. package/dist/chunk-OXQNDQJW.js +86 -0
  99. package/dist/chunk-OXQNDQJW.js.map +1 -0
  100. package/dist/chunk-PCQSHXOQ.js +104 -0
  101. package/dist/chunk-PCQSHXOQ.js.map +1 -0
  102. package/dist/chunk-PH6P53QX.js +48 -0
  103. package/dist/chunk-PH6P53QX.js.map +1 -0
  104. package/dist/chunk-PPZSGU2L.js +33 -0
  105. package/dist/chunk-PPZSGU2L.js.map +1 -0
  106. package/dist/chunk-QCGYYBDZ.js +25 -0
  107. package/dist/chunk-QCGYYBDZ.js.map +1 -0
  108. package/dist/chunk-QMAMDYRD.js +65 -0
  109. package/dist/chunk-QMAMDYRD.js.map +1 -0
  110. package/dist/chunk-RVJDDGQW.js +112 -0
  111. package/dist/chunk-RVJDDGQW.js.map +1 -0
  112. package/dist/chunk-SABAKV4J.js +238 -0
  113. package/dist/chunk-SABAKV4J.js.map +1 -0
  114. package/dist/chunk-TEYOLOZY.js +18 -0
  115. package/dist/chunk-TEYOLOZY.js.map +1 -0
  116. package/dist/chunk-TMFQJ7E3.js +61 -0
  117. package/dist/chunk-TMFQJ7E3.js.map +1 -0
  118. package/dist/chunk-UCEUTKTQ.js +116 -0
  119. package/dist/chunk-UCEUTKTQ.js.map +1 -0
  120. package/dist/chunk-UV6UVSCF.js +187 -0
  121. package/dist/chunk-UV6UVSCF.js.map +1 -0
  122. package/dist/chunk-VGQC333M.js +17 -0
  123. package/dist/chunk-VGQC333M.js.map +1 -0
  124. package/dist/chunk-WAPGZIAL.js +99 -0
  125. package/dist/chunk-WAPGZIAL.js.map +1 -0
  126. package/dist/chunk-WRCHR4AK.js +23 -0
  127. package/dist/chunk-WRCHR4AK.js.map +1 -0
  128. package/dist/chunk-XKVHX75G.js +51 -0
  129. package/dist/chunk-XKVHX75G.js.map +1 -0
  130. package/dist/chunk-YF6WRCTG.js +41 -0
  131. package/dist/chunk-YF6WRCTG.js.map +1 -0
  132. package/dist/chunk-YGBYH4EO.js +28 -0
  133. package/dist/chunk-YGBYH4EO.js.map +1 -0
  134. package/dist/chunk-YKJZV2JK.js +109 -0
  135. package/dist/chunk-YKJZV2JK.js.map +1 -0
  136. package/dist/chunk-YUYC6Y6E.js +143 -0
  137. package/dist/chunk-YUYC6Y6E.js.map +1 -0
  138. package/dist/chunk-Z47W426M.js +53 -0
  139. package/dist/chunk-Z47W426M.js.map +1 -0
  140. package/dist/components/accordion.d.ts +10 -0
  141. package/dist/components/accordion.js +4 -0
  142. package/dist/components/accordion.js.map +1 -0
  143. package/dist/components/alert-dialog.d.ts +17 -0
  144. package/dist/components/alert-dialog.js +5 -0
  145. package/dist/components/alert-dialog.js.map +1 -0
  146. package/dist/components/alert.d.ts +13 -0
  147. package/dist/components/alert.js +4 -0
  148. package/dist/components/alert.js.map +1 -0
  149. package/dist/components/aspect-ratio.d.ts +6 -0
  150. package/dist/components/aspect-ratio.js +3 -0
  151. package/dist/components/aspect-ratio.js.map +1 -0
  152. package/dist/components/avatar.d.ts +9 -0
  153. package/dist/components/avatar.js +4 -0
  154. package/dist/components/avatar.js.map +1 -0
  155. package/dist/components/badge.d.ts +13 -0
  156. package/dist/components/badge.js +4 -0
  157. package/dist/components/badge.js.map +1 -0
  158. package/dist/components/breadcrumb.d.ts +14 -0
  159. package/dist/components/breadcrumb.js +4 -0
  160. package/dist/components/breadcrumb.js.map +1 -0
  161. package/dist/components/button.d.ts +16 -0
  162. package/dist/components/button.js +4 -0
  163. package/dist/components/button.js.map +1 -0
  164. package/dist/components/calendar-category-badge.d.ts +10 -0
  165. package/dist/components/calendar-category-badge.js +5 -0
  166. package/dist/components/calendar-category-badge.js.map +1 -0
  167. package/dist/components/calendar-event-chip.d.ts +18 -0
  168. package/dist/components/calendar-event-chip.js +4 -0
  169. package/dist/components/calendar-event-chip.js.map +1 -0
  170. package/dist/components/calendar-event-sheet.d.ts +31 -0
  171. package/dist/components/calendar-event-sheet.js +9 -0
  172. package/dist/components/calendar-event-sheet.js.map +1 -0
  173. package/dist/components/calendar-mini.d.ts +29 -0
  174. package/dist/components/calendar-mini.js +6 -0
  175. package/dist/components/calendar-mini.js.map +1 -0
  176. package/dist/components/calendar-toolbar.d.ts +25 -0
  177. package/dist/components/calendar-toolbar.js +7 -0
  178. package/dist/components/calendar-toolbar.js.map +1 -0
  179. package/dist/components/calendar.d.ts +7 -0
  180. package/dist/components/calendar.js +5 -0
  181. package/dist/components/calendar.js.map +1 -0
  182. package/dist/components/card.d.ts +12 -0
  183. package/dist/components/card.js +4 -0
  184. package/dist/components/card.js.map +1 -0
  185. package/dist/components/carousel.d.ts +24 -0
  186. package/dist/components/carousel.js +5 -0
  187. package/dist/components/carousel.js.map +1 -0
  188. package/dist/components/chart.d.ts +43 -0
  189. package/dist/components/chart.js +4 -0
  190. package/dist/components/chart.js.map +1 -0
  191. package/dist/components/checkbox.d.ts +6 -0
  192. package/dist/components/checkbox.js +4 -0
  193. package/dist/components/checkbox.js.map +1 -0
  194. package/dist/components/collapsible.d.ts +8 -0
  195. package/dist/components/collapsible.js +3 -0
  196. package/dist/components/collapsible.js.map +1 -0
  197. package/dist/components/color-picker.d.ts +13 -0
  198. package/dist/components/color-picker.js +7 -0
  199. package/dist/components/color-picker.js.map +1 -0
  200. package/dist/components/combobox.d.ts +33 -0
  201. package/dist/components/combobox.js +8 -0
  202. package/dist/components/combobox.js.map +1 -0
  203. package/dist/components/command.d.ts +20 -0
  204. package/dist/components/command.js +5 -0
  205. package/dist/components/command.js.map +1 -0
  206. package/dist/components/context-menu.d.ts +28 -0
  207. package/dist/components/context-menu.js +4 -0
  208. package/dist/components/context-menu.js.map +1 -0
  209. package/dist/components/date-picker.d.ts +31 -0
  210. package/dist/components/date-picker.js +7 -0
  211. package/dist/components/date-picker.js.map +1 -0
  212. package/dist/components/dialog.d.ts +16 -0
  213. package/dist/components/dialog.js +4 -0
  214. package/dist/components/dialog.js.map +1 -0
  215. package/dist/components/drawer.d.ts +17 -0
  216. package/dist/components/drawer.js +4 -0
  217. package/dist/components/drawer.js.map +1 -0
  218. package/dist/components/dropdown-menu.d.ts +28 -0
  219. package/dist/components/dropdown-menu.js +4 -0
  220. package/dist/components/dropdown-menu.js.map +1 -0
  221. package/dist/components/file-upload.d.ts +17 -0
  222. package/dist/components/file-upload.js +5 -0
  223. package/dist/components/file-upload.js.map +1 -0
  224. package/dist/components/form.d.ts +28 -0
  225. package/dist/components/form.js +5 -0
  226. package/dist/components/form.js.map +1 -0
  227. package/dist/components/hover-card.d.ts +9 -0
  228. package/dist/components/hover-card.js +4 -0
  229. package/dist/components/hover-card.js.map +1 -0
  230. package/dist/components/input-otp.d.ts +14 -0
  231. package/dist/components/input-otp.js +4 -0
  232. package/dist/components/input-otp.js.map +1 -0
  233. package/dist/components/input.d.ts +5 -0
  234. package/dist/components/input.js +4 -0
  235. package/dist/components/input.js.map +1 -0
  236. package/dist/components/label.d.ts +6 -0
  237. package/dist/components/label.js +4 -0
  238. package/dist/components/label.js.map +1 -0
  239. package/dist/components/menubar.d.ts +29 -0
  240. package/dist/components/menubar.js +4 -0
  241. package/dist/components/menubar.js.map +1 -0
  242. package/dist/components/navigation-menu.d.ts +18 -0
  243. package/dist/components/navigation-menu.js +4 -0
  244. package/dist/components/navigation-menu.js.map +1 -0
  245. package/dist/components/pagination.d.ts +18 -0
  246. package/dist/components/pagination.js +5 -0
  247. package/dist/components/pagination.js.map +1 -0
  248. package/dist/components/permission-grid.d.ts +30 -0
  249. package/dist/components/permission-grid.js +5 -0
  250. package/dist/components/permission-grid.js.map +1 -0
  251. package/dist/components/popover.d.ts +10 -0
  252. package/dist/components/popover.js +4 -0
  253. package/dist/components/popover.js.map +1 -0
  254. package/dist/components/progress.d.ts +7 -0
  255. package/dist/components/progress.js +4 -0
  256. package/dist/components/progress.js.map +1 -0
  257. package/dist/components/radio-group.d.ts +8 -0
  258. package/dist/components/radio-group.js +4 -0
  259. package/dist/components/radio-group.js.map +1 -0
  260. package/dist/components/rating.d.ts +14 -0
  261. package/dist/components/rating.js +4 -0
  262. package/dist/components/rating.js.map +1 -0
  263. package/dist/components/resizable.d.ts +11 -0
  264. package/dist/components/resizable.js +4 -0
  265. package/dist/components/resizable.js.map +1 -0
  266. package/dist/components/scope-tree.d.ts +35 -0
  267. package/dist/components/scope-tree.js +5 -0
  268. package/dist/components/scope-tree.js.map +1 -0
  269. package/dist/components/scope-type-badge.d.ts +20 -0
  270. package/dist/components/scope-type-badge.js +5 -0
  271. package/dist/components/scope-type-badge.js.map +1 -0
  272. package/dist/components/scroll-area.d.ts +8 -0
  273. package/dist/components/scroll-area.js +4 -0
  274. package/dist/components/scroll-area.js.map +1 -0
  275. package/dist/components/select.d.ts +18 -0
  276. package/dist/components/select.js +4 -0
  277. package/dist/components/select.js.map +1 -0
  278. package/dist/components/separator.d.ts +7 -0
  279. package/dist/components/separator.js +4 -0
  280. package/dist/components/separator.js.map +1 -0
  281. package/dist/components/sheet.d.ts +16 -0
  282. package/dist/components/sheet.js +4 -0
  283. package/dist/components/sheet.js.map +1 -0
  284. package/dist/components/sidebar.d.ts +75 -0
  285. package/dist/components/sidebar.js +11 -0
  286. package/dist/components/sidebar.js.map +1 -0
  287. package/dist/components/skeleton.d.ts +5 -0
  288. package/dist/components/skeleton.js +4 -0
  289. package/dist/components/skeleton.js.map +1 -0
  290. package/dist/components/slider.d.ts +7 -0
  291. package/dist/components/slider.js +4 -0
  292. package/dist/components/slider.js.map +1 -0
  293. package/dist/components/slug-input.d.ts +22 -0
  294. package/dist/components/slug-input.js +6 -0
  295. package/dist/components/slug-input.js.map +1 -0
  296. package/dist/components/sonner.d.ts +6 -0
  297. package/dist/components/sonner.js +3 -0
  298. package/dist/components/sonner.js.map +1 -0
  299. package/dist/components/stage-type-badge.d.ts +24 -0
  300. package/dist/components/stage-type-badge.js +5 -0
  301. package/dist/components/stage-type-badge.js.map +1 -0
  302. package/dist/components/switch.d.ts +7 -0
  303. package/dist/components/switch.js +4 -0
  304. package/dist/components/switch.js.map +1 -0
  305. package/dist/components/table.d.ts +13 -0
  306. package/dist/components/table.js +4 -0
  307. package/dist/components/table.js.map +1 -0
  308. package/dist/components/tabs.d.ts +10 -0
  309. package/dist/components/tabs.js +4 -0
  310. package/dist/components/tabs.js.map +1 -0
  311. package/dist/components/tag-input.d.ts +15 -0
  312. package/dist/components/tag-input.js +5 -0
  313. package/dist/components/tag-input.js.map +1 -0
  314. package/dist/components/textarea.d.ts +5 -0
  315. package/dist/components/textarea.js +4 -0
  316. package/dist/components/textarea.js.map +1 -0
  317. package/dist/components/time-picker.d.ts +20 -0
  318. package/dist/components/time-picker.js +8 -0
  319. package/dist/components/time-picker.js.map +1 -0
  320. package/dist/components/toggle-group.d.ts +12 -0
  321. package/dist/components/toggle-group.js +5 -0
  322. package/dist/components/toggle-group.js.map +1 -0
  323. package/dist/components/toggle.d.ts +13 -0
  324. package/dist/components/toggle.js +4 -0
  325. package/dist/components/toggle.js.map +1 -0
  326. package/dist/components/tooltip.d.ts +10 -0
  327. package/dist/components/tooltip.js +4 -0
  328. package/dist/components/tooltip.js.map +1 -0
  329. package/dist/components/workflow-category-badge.d.ts +26 -0
  330. package/dist/components/workflow-category-badge.js +5 -0
  331. package/dist/components/workflow-category-badge.js.map +1 -0
  332. package/dist/components/workflow-diagram.d.ts +43 -0
  333. package/dist/components/workflow-diagram.js +5 -0
  334. package/dist/components/workflow-diagram.js.map +1 -0
  335. package/dist/components/workflow-status-badge.d.ts +24 -0
  336. package/dist/components/workflow-status-badge.js +5 -0
  337. package/dist/components/workflow-status-badge.js.map +1 -0
  338. package/dist/components/workflow-stepper.d.ts +34 -0
  339. package/dist/components/workflow-stepper.js +4 -0
  340. package/dist/components/workflow-stepper.js.map +1 -0
  341. package/dist/hooks/use-mobile.d.ts +3 -0
  342. package/dist/hooks/use-mobile.js +3 -0
  343. package/dist/hooks/use-mobile.js.map +1 -0
  344. package/dist/index.d.ts +111 -0
  345. package/dist/index.js +71 -0
  346. package/dist/index.js.map +1 -0
  347. package/dist/lib/utils.d.ts +5 -0
  348. package/dist/lib/utils.js +3 -0
  349. package/dist/lib/utils.js.map +1 -0
  350. package/package.json +101 -0
  351. package/src/styles/fonts.css +0 -0
  352. package/src/styles/index.css +3 -0
  353. package/src/styles/tailwind.css +4 -0
  354. package/src/styles/theme.css +447 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/permission-grid.tsx"],"names":[],"mappings":"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","file":"chunk-RVJDDGQW.js","sourcesContent":["import { Checkbox } from './checkbox';\nimport { cn } from '../lib/utils';\n\nexport interface PermissionDefinition {\n key: string;\n label: string;\n}\n\nexport interface PermissionModule {\n key: string;\n label: string;\n permissions: PermissionDefinition[];\n}\n\nexport interface PermissionGridLabels {\n moduleHeader: string;\n selectAll: string;\n}\n\nexport interface PermissionGridProps {\n modules: PermissionModule[];\n selectedIds: string[];\n onChange?: (ids: string[]) => void;\n readOnly?: boolean;\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\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"]}
@@ -0,0 +1,238 @@
1
+ import { cn } from './chunk-DGPY4WP3.js';
2
+ import * as MenubarPrimitive from '@radix-ui/react-menubar';
3
+ import { CheckIcon, CircleIcon, ChevronRightIcon } from 'lucide-react';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ function Menubar({
7
+ className,
8
+ ...props
9
+ }) {
10
+ return /* @__PURE__ */ jsx(
11
+ MenubarPrimitive.Root,
12
+ {
13
+ "data-slot": "menubar",
14
+ className: cn(
15
+ "bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs",
16
+ className
17
+ ),
18
+ ...props
19
+ }
20
+ );
21
+ }
22
+ function MenubarMenu({
23
+ ...props
24
+ }) {
25
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Menu, { "data-slot": "menubar-menu", ...props });
26
+ }
27
+ function MenubarGroup({
28
+ ...props
29
+ }) {
30
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Group, { "data-slot": "menubar-group", ...props });
31
+ }
32
+ function MenubarPortal({
33
+ ...props
34
+ }) {
35
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Portal, { "data-slot": "menubar-portal", ...props });
36
+ }
37
+ function MenubarRadioGroup({
38
+ ...props
39
+ }) {
40
+ return /* @__PURE__ */ jsx(MenubarPrimitive.RadioGroup, { "data-slot": "menubar-radio-group", ...props });
41
+ }
42
+ function MenubarTrigger({
43
+ className,
44
+ ...props
45
+ }) {
46
+ return /* @__PURE__ */ jsx(
47
+ MenubarPrimitive.Trigger,
48
+ {
49
+ "data-slot": "menubar-trigger",
50
+ className: cn(
51
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none",
52
+ className
53
+ ),
54
+ ...props
55
+ }
56
+ );
57
+ }
58
+ function MenubarContent({
59
+ className,
60
+ align = "start",
61
+ alignOffset = -4,
62
+ sideOffset = 8,
63
+ ...props
64
+ }) {
65
+ return /* @__PURE__ */ jsx(MenubarPortal, { children: /* @__PURE__ */ jsx(
66
+ MenubarPrimitive.Content,
67
+ {
68
+ "data-slot": "menubar-content",
69
+ align,
70
+ alignOffset,
71
+ sideOffset,
72
+ className: cn(
73
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md",
74
+ className
75
+ ),
76
+ ...props
77
+ }
78
+ ) });
79
+ }
80
+ function MenubarItem({
81
+ className,
82
+ inset,
83
+ variant = "default",
84
+ ...props
85
+ }) {
86
+ return /* @__PURE__ */ jsx(
87
+ MenubarPrimitive.Item,
88
+ {
89
+ "data-slot": "menubar-item",
90
+ "data-inset": inset,
91
+ "data-variant": variant,
92
+ className: cn(
93
+ "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",
94
+ className
95
+ ),
96
+ ...props
97
+ }
98
+ );
99
+ }
100
+ function MenubarCheckboxItem({
101
+ className,
102
+ children,
103
+ checked,
104
+ ...props
105
+ }) {
106
+ return /* @__PURE__ */ jsxs(
107
+ MenubarPrimitive.CheckboxItem,
108
+ {
109
+ "data-slot": "menubar-checkbox-item",
110
+ className: cn(
111
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
112
+ className
113
+ ),
114
+ checked,
115
+ ...props,
116
+ children: [
117
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) }) }),
118
+ children
119
+ ]
120
+ }
121
+ );
122
+ }
123
+ function MenubarRadioItem({
124
+ className,
125
+ children,
126
+ ...props
127
+ }) {
128
+ return /* @__PURE__ */ jsxs(
129
+ MenubarPrimitive.RadioItem,
130
+ {
131
+ "data-slot": "menubar-radio-item",
132
+ className: cn(
133
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
134
+ className
135
+ ),
136
+ ...props,
137
+ children: [
138
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) }) }),
139
+ children
140
+ ]
141
+ }
142
+ );
143
+ }
144
+ function MenubarLabel({
145
+ className,
146
+ inset,
147
+ ...props
148
+ }) {
149
+ return /* @__PURE__ */ jsx(
150
+ MenubarPrimitive.Label,
151
+ {
152
+ "data-slot": "menubar-label",
153
+ "data-inset": inset,
154
+ className: cn(
155
+ "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
156
+ className
157
+ ),
158
+ ...props
159
+ }
160
+ );
161
+ }
162
+ function MenubarSeparator({
163
+ className,
164
+ ...props
165
+ }) {
166
+ return /* @__PURE__ */ jsx(
167
+ MenubarPrimitive.Separator,
168
+ {
169
+ "data-slot": "menubar-separator",
170
+ className: cn("bg-border -mx-1 my-1 h-px", className),
171
+ ...props
172
+ }
173
+ );
174
+ }
175
+ function MenubarShortcut({
176
+ className,
177
+ ...props
178
+ }) {
179
+ return /* @__PURE__ */ jsx(
180
+ "span",
181
+ {
182
+ "data-slot": "menubar-shortcut",
183
+ className: cn(
184
+ "text-muted-foreground ml-auto text-xs tracking-widest",
185
+ className
186
+ ),
187
+ ...props
188
+ }
189
+ );
190
+ }
191
+ function MenubarSub({
192
+ ...props
193
+ }) {
194
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Sub, { "data-slot": "menubar-sub", ...props });
195
+ }
196
+ function MenubarSubTrigger({
197
+ className,
198
+ inset,
199
+ children,
200
+ ...props
201
+ }) {
202
+ return /* @__PURE__ */ jsxs(
203
+ MenubarPrimitive.SubTrigger,
204
+ {
205
+ "data-slot": "menubar-sub-trigger",
206
+ "data-inset": inset,
207
+ className: cn(
208
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8",
209
+ className
210
+ ),
211
+ ...props,
212
+ children: [
213
+ children,
214
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto h-4 w-4" })
215
+ ]
216
+ }
217
+ );
218
+ }
219
+ function MenubarSubContent({
220
+ className,
221
+ ...props
222
+ }) {
223
+ return /* @__PURE__ */ jsx(
224
+ MenubarPrimitive.SubContent,
225
+ {
226
+ "data-slot": "menubar-sub-content",
227
+ className: cn(
228
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
229
+ className
230
+ ),
231
+ ...props
232
+ }
233
+ );
234
+ }
235
+
236
+ export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger };
237
+ //# sourceMappingURL=chunk-SABAKV4J.js.map
238
+ //# sourceMappingURL=chunk-SABAKV4J.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/menubar.tsx"],"names":[],"mappings":"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","file":"chunk-SABAKV4J.js","sourcesContent":["import * as React from \"react\";\nimport * as MenubarPrimitive from \"@radix-ui/react-menubar\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\nfunction Menubar({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn(\n \"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />;\n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />;\n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />;\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return (\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n );\n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md\",\n className,\n )}\n {...props}\n />\n </MenubarPortal>\n );\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n );\n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n );\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />;\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </MenubarPrimitive.SubTrigger>\n );\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n};"]}
@@ -0,0 +1,18 @@
1
+ import { Badge } from './chunk-3TGN2DFB.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ var defaultCategoryStyles = {
5
+ meeting: "bg-blue-50 dark:bg-blue-500/15 text-blue-600 dark:text-blue-400 border-blue-200 dark:border-blue-500/30",
6
+ deadline: "bg-red-50 dark:bg-red-500/15 text-red-600 dark:text-red-400 border-red-200 dark:border-red-500/30",
7
+ reminder: "bg-amber-50 dark:bg-amber-500/15 text-amber-600 dark:text-amber-400 border-amber-200 dark:border-amber-500/30",
8
+ personal: "bg-purple-50 dark:bg-purple-500/15 text-purple-600 dark:text-purple-400 border-purple-200 dark:border-purple-500/30",
9
+ holiday: "bg-green-50 dark:bg-green-500/15 text-green-600 dark:text-green-400 border-green-200 dark:border-green-500/30"
10
+ };
11
+ function CalendarCategoryBadge({ category, label, styles }) {
12
+ const allStyles = { ...defaultCategoryStyles, ...styles };
13
+ return /* @__PURE__ */ jsx(Badge, { variant: "outline", className: allStyles[category] ?? "", children: label ?? category });
14
+ }
15
+
16
+ export { CalendarCategoryBadge };
17
+ //# sourceMappingURL=chunk-TEYOLOZY.js.map
18
+ //# sourceMappingURL=chunk-TEYOLOZY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/calendar-category-badge.tsx"],"names":[],"mappings":";;;AAEA,IAAM,qBAAA,GAAgD;AAAA,EACpD,OAAA,EAAS,yGAAA;AAAA,EACT,QAAA,EAAU,mGAAA;AAAA,EACV,QAAA,EAAU,+GAAA;AAAA,EACV,QAAA,EAAU,qHAAA;AAAA,EACV,OAAA,EAAS;AACX,CAAA;AAQO,SAAS,qBAAA,CAAsB,EAAE,QAAA,EAAU,KAAA,EAAO,QAAO,EAA+B;AAC7F,EAAA,MAAM,SAAA,GAAY,EAAE,GAAG,qBAAA,EAAuB,GAAG,MAAA,EAAO;AACxD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,SAAA,EAAW,UAAU,QAAQ,CAAA,IAAK,EAAA,EACxD,QAAA,EAAA,KAAA,IAAS,QAAA,EACZ,CAAA;AAEJ","file":"chunk-TEYOLOZY.js","sourcesContent":["import { Badge } from './badge';\n\nconst defaultCategoryStyles: Record<string, string> = {\n meeting: 'bg-blue-50 dark:bg-blue-500/15 text-blue-600 dark:text-blue-400 border-blue-200 dark:border-blue-500/30',\n deadline: 'bg-red-50 dark:bg-red-500/15 text-red-600 dark:text-red-400 border-red-200 dark:border-red-500/30',\n reminder: 'bg-amber-50 dark:bg-amber-500/15 text-amber-600 dark:text-amber-400 border-amber-200 dark:border-amber-500/30',\n personal: 'bg-purple-50 dark:bg-purple-500/15 text-purple-600 dark:text-purple-400 border-purple-200 dark:border-purple-500/30',\n holiday: 'bg-green-50 dark:bg-green-500/15 text-green-600 dark:text-green-400 border-green-200 dark:border-green-500/30',\n};\n\nexport interface CalendarCategoryBadgeProps {\n category: string;\n label?: string;\n styles?: Record<string, string>;\n}\n\nexport function CalendarCategoryBadge({ category, label, styles }: CalendarCategoryBadgeProps) {\n const allStyles = { ...defaultCategoryStyles, ...styles };\n return (\n <Badge variant=\"outline\" className={allStyles[category] ?? ''}>\n {label ?? category}\n </Badge>\n );\n}\n"]}
@@ -0,0 +1,61 @@
1
+ import { cn } from './chunk-DGPY4WP3.js';
2
+ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ function ScrollArea({
6
+ className,
7
+ children,
8
+ ...props
9
+ }) {
10
+ return /* @__PURE__ */ jsxs(
11
+ ScrollAreaPrimitive.Root,
12
+ {
13
+ "data-slot": "scroll-area",
14
+ className: cn("relative", className),
15
+ ...props,
16
+ children: [
17
+ /* @__PURE__ */ jsx(
18
+ ScrollAreaPrimitive.Viewport,
19
+ {
20
+ "data-slot": "scroll-area-viewport",
21
+ className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
22
+ children
23
+ }
24
+ ),
25
+ /* @__PURE__ */ jsx(ScrollBar, {}),
26
+ /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
27
+ ]
28
+ }
29
+ );
30
+ }
31
+ function ScrollBar({
32
+ className,
33
+ orientation = "vertical",
34
+ ...props
35
+ }) {
36
+ return /* @__PURE__ */ jsx(
37
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
38
+ {
39
+ "data-slot": "scroll-area-scrollbar",
40
+ orientation,
41
+ className: cn(
42
+ "flex touch-none p-px transition-colors select-none",
43
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent",
44
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent",
45
+ className
46
+ ),
47
+ ...props,
48
+ children: /* @__PURE__ */ jsx(
49
+ ScrollAreaPrimitive.ScrollAreaThumb,
50
+ {
51
+ "data-slot": "scroll-area-thumb",
52
+ className: "bg-border relative flex-1 rounded-full"
53
+ }
54
+ )
55
+ }
56
+ );
57
+ }
58
+
59
+ export { ScrollArea, ScrollBar };
60
+ //# sourceMappingURL=chunk-TMFQJ7E3.js.map
61
+ //# sourceMappingURL=chunk-TMFQJ7E3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/scroll-area.tsx"],"names":[],"mappings":";;;;AAKA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACE,IAAA;AAAA,IAAqB,mBAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAqB,mBAAA,CAAA,QAAA;AAAA,UAApB;AAAA,YACC,WAAA,EAAU,sBAAA;AAAA,YACV,SAAA,EAAU,oJAAA;AAAA,YAET;AAAA;AAAA,SACH;AAAA,4BACC,SAAA,EAAA,EAAU,CAAA;AAAA,wBACX,GAAA,CAAqB,4BAApB,EAA2B;AAAA;AAAA;AAAA,GAC9B;AAEJ;AAEA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,UAAA;AAAA,EACd,GAAG;AACL,CAAA,EAAyE;AACvE,EAAA,uBACE,GAAA;AAAA,IAAqB,mBAAA,CAAA,mBAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,oDAAA;AAAA,QACA,gBAAgB,UAAA,IACd,4CAAA;AAAA,QACF,gBAAgB,YAAA,IACd,8CAAA;AAAA,QACF;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA;AAAA,QAAqB,mBAAA,CAAA,eAAA;AAAA,QAApB;AAAA,UACC,WAAA,EAAU,mBAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,GACF;AAEJ","file":"chunk-TMFQJ7E3.js","sourcesContent":["import * as React from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\n\nimport { cn } from \"../lib/utils\";\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };"]}
@@ -0,0 +1,116 @@
1
+ import { cn } from './chunk-DGPY4WP3.js';
2
+ import * as React from 'react';
3
+ import { Star } from 'lucide-react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ function Rating({
7
+ value = 0,
8
+ onChange,
9
+ max = 5,
10
+ size = "md",
11
+ readonly = false,
12
+ allowHalf = false,
13
+ className
14
+ }) {
15
+ const [hoverValue, setHoverValue] = React.useState(null);
16
+ const sizeClasses = {
17
+ sm: "w-4 h-4",
18
+ md: "w-5 h-5",
19
+ lg: "w-6 h-6"
20
+ };
21
+ const handleClick = (index, isHalf) => {
22
+ if (readonly) return;
23
+ const newValue = isHalf ? index + 0.5 : index + 1;
24
+ onChange?.(newValue);
25
+ };
26
+ const handleMouseMove = (index, e) => {
27
+ if (readonly || !allowHalf) return;
28
+ const rect = e.currentTarget.getBoundingClientRect();
29
+ const x = e.clientX - rect.left;
30
+ const isHalf = x < rect.width / 2;
31
+ setHoverValue(isHalf ? index + 0.5 : index + 1);
32
+ };
33
+ const handleMouseEnter = (index) => {
34
+ if (readonly) return;
35
+ if (!allowHalf) {
36
+ setHoverValue(index + 1);
37
+ }
38
+ };
39
+ const handleMouseLeave = () => {
40
+ setHoverValue(null);
41
+ };
42
+ const getStarFill = (index) => {
43
+ const currentValue = hoverValue !== null ? hoverValue : value;
44
+ if (currentValue >= index + 1) {
45
+ return "full";
46
+ } else if (allowHalf && currentValue >= index + 0.5) {
47
+ return "half";
48
+ } else {
49
+ return "empty";
50
+ }
51
+ };
52
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-1", className), children: [
53
+ Array.from({ length: max }).map((_, index) => {
54
+ const fill = getStarFill(index);
55
+ return /* @__PURE__ */ jsx(
56
+ "button",
57
+ {
58
+ type: "button",
59
+ onClick: (e) => {
60
+ if (!allowHalf) {
61
+ handleClick(index, false);
62
+ return;
63
+ }
64
+ const rect = e.currentTarget.getBoundingClientRect();
65
+ const x = e.clientX - rect.left;
66
+ const isHalf = x < rect.width / 2;
67
+ handleClick(index, isHalf);
68
+ },
69
+ onMouseMove: (e) => handleMouseMove(index, e),
70
+ onMouseEnter: () => handleMouseEnter(index),
71
+ onMouseLeave: handleMouseLeave,
72
+ disabled: readonly,
73
+ className: cn(
74
+ "relative transition-transform hover:scale-110",
75
+ !readonly && "cursor-pointer",
76
+ readonly && "cursor-default"
77
+ ),
78
+ children: fill === "half" ? /* @__PURE__ */ jsxs("div", { className: "relative", children: [
79
+ /* @__PURE__ */ jsx(
80
+ Star,
81
+ {
82
+ className: cn(
83
+ sizeClasses[size],
84
+ "text-gray-300"
85
+ )
86
+ }
87
+ ),
88
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 overflow-hidden w-1/2", children: /* @__PURE__ */ jsx(
89
+ Star,
90
+ {
91
+ className: cn(
92
+ sizeClasses[size],
93
+ "text-yellow-400 fill-yellow-400"
94
+ )
95
+ }
96
+ ) })
97
+ ] }) : /* @__PURE__ */ jsx(
98
+ Star,
99
+ {
100
+ className: cn(
101
+ sizeClasses[size],
102
+ fill === "full" ? "text-yellow-400 fill-yellow-400" : "text-gray-300"
103
+ )
104
+ }
105
+ )
106
+ },
107
+ index
108
+ );
109
+ }),
110
+ value > 0 && /* @__PURE__ */ jsx("span", { className: "ml-2 text-sm text-gray-600", children: value.toFixed(allowHalf ? 1 : 0) })
111
+ ] });
112
+ }
113
+
114
+ export { Rating };
115
+ //# sourceMappingURL=chunk-UCEUTKTQ.js.map
116
+ //# sourceMappingURL=chunk-UCEUTKTQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/rating.tsx"],"names":[],"mappings":"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","file":"chunk-UCEUTKTQ.js","sourcesContent":["import * as React from \"react\";\nimport { Star } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\ninterface RatingProps {\n value?: number;\n onChange?: (value: number) => void;\n max?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n readonly?: boolean;\n allowHalf?: boolean;\n className?: string;\n}\n\nexport function Rating({\n value = 0,\n onChange,\n max = 5,\n size = \"md\",\n readonly = false,\n allowHalf = false,\n className,\n}: RatingProps) {\n const [hoverValue, setHoverValue] = React.useState<number | null>(null);\n\n const sizeClasses = {\n sm: \"w-4 h-4\",\n md: \"w-5 h-5\",\n lg: \"w-6 h-6\",\n };\n\n const handleClick = (index: number, isHalf: boolean) => {\n if (readonly) return;\n const newValue = isHalf ? index + 0.5 : index + 1;\n onChange?.(newValue);\n };\n\n const handleMouseMove = (index: number, e: React.MouseEvent<HTMLButtonElement>) => {\n if (readonly || !allowHalf) return;\n\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const isHalf = x < rect.width / 2;\n\n setHoverValue(isHalf ? index + 0.5 : index + 1);\n };\n\n const handleMouseEnter = (index: number) => {\n if (readonly) return;\n if (!allowHalf) {\n setHoverValue(index + 1);\n }\n };\n\n const handleMouseLeave = () => {\n setHoverValue(null);\n };\n\n const getStarFill = (index: number) => {\n const currentValue = hoverValue !== null ? hoverValue : value;\n\n if (currentValue >= index + 1) {\n return \"full\";\n } else if (allowHalf && currentValue >= index + 0.5) {\n return \"half\";\n } else {\n return \"empty\";\n }\n };\n\n return (\n <div className={cn(\"flex items-center gap-1\", className)}>\n {Array.from({ length: max }).map((_, index) => {\n const fill = getStarFill(index);\n\n return (\n <button\n key={index}\n type=\"button\"\n onClick={(e) => {\n if (!allowHalf) {\n handleClick(index, false);\n return;\n }\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const isHalf = x < rect.width / 2;\n handleClick(index, isHalf);\n }}\n onMouseMove={(e) => handleMouseMove(index, e)}\n onMouseEnter={() => handleMouseEnter(index)}\n onMouseLeave={handleMouseLeave}\n disabled={readonly}\n className={cn(\n \"relative transition-transform hover:scale-110\",\n !readonly && \"cursor-pointer\",\n readonly && \"cursor-default\"\n )}\n >\n {fill === \"half\" ? (\n <div className=\"relative\">\n <Star\n className={cn(\n sizeClasses[size],\n \"text-gray-300\"\n )}\n />\n <div className=\"absolute inset-0 overflow-hidden w-1/2\">\n <Star\n className={cn(\n sizeClasses[size],\n \"text-yellow-400 fill-yellow-400\"\n )}\n />\n </div>\n </div>\n ) : (\n <Star\n className={cn(\n sizeClasses[size],\n fill === \"full\"\n ? \"text-yellow-400 fill-yellow-400\"\n : \"text-gray-300\"\n )}\n />\n )}\n </button>\n );\n })}\n\n {value > 0 && (\n <span className=\"ml-2 text-sm text-gray-600\">\n {value.toFixed(allowHalf ? 1 : 0)}\n </span>\n )}\n </div>\n );\n}\n"]}