@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.
- package/README.md +230 -0
- package/dist/chunk-23SALQ3G.js +219 -0
- package/dist/chunk-23SALQ3G.js.map +1 -0
- package/dist/chunk-3TGN2DFB.js +41 -0
- package/dist/chunk-3TGN2DFB.js.map +1 -0
- package/dist/chunk-3TV2IR7L.js +65 -0
- package/dist/chunk-3TV2IR7L.js.map +1 -0
- package/dist/chunk-4CT5SCAH.js +54 -0
- package/dist/chunk-4CT5SCAH.js.map +1 -0
- package/dist/chunk-4D6FDXCG.js +41 -0
- package/dist/chunk-4D6FDXCG.js.map +1 -0
- package/dist/chunk-4HCORCR2.js +114 -0
- package/dist/chunk-4HCORCR2.js.map +1 -0
- package/dist/chunk-4N357E44.js +119 -0
- package/dist/chunk-4N357E44.js.map +1 -0
- package/dist/chunk-4Q2FLTAW.js +23 -0
- package/dist/chunk-4Q2FLTAW.js.map +1 -0
- package/dist/chunk-5M67ZEPM.js +33 -0
- package/dist/chunk-5M67ZEPM.js.map +1 -0
- package/dist/chunk-5WCL47ZW.js +30 -0
- package/dist/chunk-5WCL47ZW.js.map +1 -0
- package/dist/chunk-5Y3SQ3EA.js +52 -0
- package/dist/chunk-5Y3SQ3EA.js.map +1 -0
- package/dist/chunk-6GCAG5FH.js +46 -0
- package/dist/chunk-6GCAG5FH.js.map +1 -0
- package/dist/chunk-6MVBERQJ.js +44 -0
- package/dist/chunk-6MVBERQJ.js.map +1 -0
- package/dist/chunk-725ICC47.js +44 -0
- package/dist/chunk-725ICC47.js.map +1 -0
- package/dist/chunk-7ALADSN3.js +56 -0
- package/dist/chunk-7ALADSN3.js.map +1 -0
- package/dist/chunk-7NMWBCF4.js +171 -0
- package/dist/chunk-7NMWBCF4.js.map +1 -0
- package/dist/chunk-7ZFYPC74.js +155 -0
- package/dist/chunk-7ZFYPC74.js.map +1 -0
- package/dist/chunk-ANTYNEUU.js +35 -0
- package/dist/chunk-ANTYNEUU.js.map +1 -0
- package/dist/chunk-AZARDPXB.js +43 -0
- package/dist/chunk-AZARDPXB.js.map +1 -0
- package/dist/chunk-BJO5JCFB.js +111 -0
- package/dist/chunk-BJO5JCFB.js.map +1 -0
- package/dist/chunk-BOYSXIM3.js +160 -0
- package/dist/chunk-BOYSXIM3.js.map +1 -0
- package/dist/chunk-CDARHMTL.js +25 -0
- package/dist/chunk-CDARHMTL.js.map +1 -0
- package/dist/chunk-CESZTYQQ.js +93 -0
- package/dist/chunk-CESZTYQQ.js.map +1 -0
- package/dist/chunk-D3GCOO74.js +90 -0
- package/dist/chunk-D3GCOO74.js.map +1 -0
- package/dist/chunk-DGPY4WP3.js +11 -0
- package/dist/chunk-DGPY4WP3.js.map +1 -0
- package/dist/chunk-DIS42JLG.js +13 -0
- package/dist/chunk-DIS42JLG.js.map +1 -0
- package/dist/chunk-DQGDQEXD.js +617 -0
- package/dist/chunk-DQGDQEXD.js.map +1 -0
- package/dist/chunk-DZENMCRL.js +63 -0
- package/dist/chunk-DZENMCRL.js.map +1 -0
- package/dist/chunk-EIF6WZAZ.js +38 -0
- package/dist/chunk-EIF6WZAZ.js.map +1 -0
- package/dist/chunk-F6VQCMYH.js +81 -0
- package/dist/chunk-F6VQCMYH.js.map +1 -0
- package/dist/chunk-FBNG2KGO.js +66 -0
- package/dist/chunk-FBNG2KGO.js.map +1 -0
- package/dist/chunk-FO7J3PYY.js +131 -0
- package/dist/chunk-FO7J3PYY.js.map +1 -0
- package/dist/chunk-FSFXDD6P.js +196 -0
- package/dist/chunk-FSFXDD6P.js.map +1 -0
- package/dist/chunk-IDRQ6BNQ.js +63 -0
- package/dist/chunk-IDRQ6BNQ.js.map +1 -0
- package/dist/chunk-IJIGJGL5.js +48 -0
- package/dist/chunk-IJIGJGL5.js.map +1 -0
- package/dist/chunk-JPTN62BV.js +128 -0
- package/dist/chunk-JPTN62BV.js.map +1 -0
- package/dist/chunk-KABLXGWK.js +66 -0
- package/dist/chunk-KABLXGWK.js.map +1 -0
- package/dist/chunk-KOGOYUEE.js +121 -0
- package/dist/chunk-KOGOYUEE.js.map +1 -0
- package/dist/chunk-KULHYNE2.js +138 -0
- package/dist/chunk-KULHYNE2.js.map +1 -0
- package/dist/chunk-KXT75MXF.js +164 -0
- package/dist/chunk-KXT75MXF.js.map +1 -0
- package/dist/chunk-KXZ7IND6.js +24 -0
- package/dist/chunk-KXZ7IND6.js.map +1 -0
- package/dist/chunk-L46XUK4O.js +33 -0
- package/dist/chunk-L46XUK4O.js.map +1 -0
- package/dist/chunk-LI7CKURD.js +65 -0
- package/dist/chunk-LI7CKURD.js.map +1 -0
- package/dist/chunk-LW5PTU7D.js +211 -0
- package/dist/chunk-LW5PTU7D.js.map +1 -0
- package/dist/chunk-MNAT3ZF6.js +106 -0
- package/dist/chunk-MNAT3ZF6.js.map +1 -0
- package/dist/chunk-NFAXCC73.js +239 -0
- package/dist/chunk-NFAXCC73.js.map +1 -0
- package/dist/chunk-OHBCYKNT.js +63 -0
- package/dist/chunk-OHBCYKNT.js.map +1 -0
- package/dist/chunk-ONAUEREV.js +28 -0
- package/dist/chunk-ONAUEREV.js.map +1 -0
- package/dist/chunk-OXQNDQJW.js +86 -0
- package/dist/chunk-OXQNDQJW.js.map +1 -0
- package/dist/chunk-PCQSHXOQ.js +104 -0
- package/dist/chunk-PCQSHXOQ.js.map +1 -0
- package/dist/chunk-PH6P53QX.js +48 -0
- package/dist/chunk-PH6P53QX.js.map +1 -0
- package/dist/chunk-PPZSGU2L.js +33 -0
- package/dist/chunk-PPZSGU2L.js.map +1 -0
- package/dist/chunk-QCGYYBDZ.js +25 -0
- package/dist/chunk-QCGYYBDZ.js.map +1 -0
- package/dist/chunk-QMAMDYRD.js +65 -0
- package/dist/chunk-QMAMDYRD.js.map +1 -0
- package/dist/chunk-RVJDDGQW.js +112 -0
- package/dist/chunk-RVJDDGQW.js.map +1 -0
- package/dist/chunk-SABAKV4J.js +238 -0
- package/dist/chunk-SABAKV4J.js.map +1 -0
- package/dist/chunk-TEYOLOZY.js +18 -0
- package/dist/chunk-TEYOLOZY.js.map +1 -0
- package/dist/chunk-TMFQJ7E3.js +61 -0
- package/dist/chunk-TMFQJ7E3.js.map +1 -0
- package/dist/chunk-UCEUTKTQ.js +116 -0
- package/dist/chunk-UCEUTKTQ.js.map +1 -0
- package/dist/chunk-UV6UVSCF.js +187 -0
- package/dist/chunk-UV6UVSCF.js.map +1 -0
- package/dist/chunk-VGQC333M.js +17 -0
- package/dist/chunk-VGQC333M.js.map +1 -0
- package/dist/chunk-WAPGZIAL.js +99 -0
- package/dist/chunk-WAPGZIAL.js.map +1 -0
- package/dist/chunk-WRCHR4AK.js +23 -0
- package/dist/chunk-WRCHR4AK.js.map +1 -0
- package/dist/chunk-XKVHX75G.js +51 -0
- package/dist/chunk-XKVHX75G.js.map +1 -0
- package/dist/chunk-YF6WRCTG.js +41 -0
- package/dist/chunk-YF6WRCTG.js.map +1 -0
- package/dist/chunk-YGBYH4EO.js +28 -0
- package/dist/chunk-YGBYH4EO.js.map +1 -0
- package/dist/chunk-YKJZV2JK.js +109 -0
- package/dist/chunk-YKJZV2JK.js.map +1 -0
- package/dist/chunk-YUYC6Y6E.js +143 -0
- package/dist/chunk-YUYC6Y6E.js.map +1 -0
- package/dist/chunk-Z47W426M.js +53 -0
- package/dist/chunk-Z47W426M.js.map +1 -0
- package/dist/components/accordion.d.ts +10 -0
- package/dist/components/accordion.js +4 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert-dialog.d.ts +17 -0
- package/dist/components/alert-dialog.js +5 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/alert.d.ts +13 -0
- package/dist/components/alert.js +4 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/aspect-ratio.d.ts +6 -0
- package/dist/components/aspect-ratio.js +3 -0
- package/dist/components/aspect-ratio.js.map +1 -0
- package/dist/components/avatar.d.ts +9 -0
- package/dist/components/avatar.js +4 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.d.ts +13 -0
- package/dist/components/badge.js +4 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/breadcrumb.d.ts +14 -0
- package/dist/components/breadcrumb.js +4 -0
- package/dist/components/breadcrumb.js.map +1 -0
- package/dist/components/button.d.ts +16 -0
- package/dist/components/button.js +4 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar-category-badge.d.ts +10 -0
- package/dist/components/calendar-category-badge.js +5 -0
- package/dist/components/calendar-category-badge.js.map +1 -0
- package/dist/components/calendar-event-chip.d.ts +18 -0
- package/dist/components/calendar-event-chip.js +4 -0
- package/dist/components/calendar-event-chip.js.map +1 -0
- package/dist/components/calendar-event-sheet.d.ts +31 -0
- package/dist/components/calendar-event-sheet.js +9 -0
- package/dist/components/calendar-event-sheet.js.map +1 -0
- package/dist/components/calendar-mini.d.ts +29 -0
- package/dist/components/calendar-mini.js +6 -0
- package/dist/components/calendar-mini.js.map +1 -0
- package/dist/components/calendar-toolbar.d.ts +25 -0
- package/dist/components/calendar-toolbar.js +7 -0
- package/dist/components/calendar-toolbar.js.map +1 -0
- package/dist/components/calendar.d.ts +7 -0
- package/dist/components/calendar.js +5 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/card.d.ts +12 -0
- package/dist/components/card.js +4 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/carousel.d.ts +24 -0
- package/dist/components/carousel.js +5 -0
- package/dist/components/carousel.js.map +1 -0
- package/dist/components/chart.d.ts +43 -0
- package/dist/components/chart.js +4 -0
- package/dist/components/chart.js.map +1 -0
- package/dist/components/checkbox.d.ts +6 -0
- package/dist/components/checkbox.js +4 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/collapsible.d.ts +8 -0
- package/dist/components/collapsible.js +3 -0
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/color-picker.d.ts +13 -0
- package/dist/components/color-picker.js +7 -0
- package/dist/components/color-picker.js.map +1 -0
- package/dist/components/combobox.d.ts +33 -0
- package/dist/components/combobox.js +8 -0
- package/dist/components/combobox.js.map +1 -0
- package/dist/components/command.d.ts +20 -0
- package/dist/components/command.js +5 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/context-menu.d.ts +28 -0
- package/dist/components/context-menu.js +4 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/date-picker.d.ts +31 -0
- package/dist/components/date-picker.js +7 -0
- package/dist/components/date-picker.js.map +1 -0
- package/dist/components/dialog.d.ts +16 -0
- package/dist/components/dialog.js +4 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/drawer.d.ts +17 -0
- package/dist/components/drawer.js +4 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +28 -0
- package/dist/components/dropdown-menu.js +4 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/file-upload.d.ts +17 -0
- package/dist/components/file-upload.js +5 -0
- package/dist/components/file-upload.js.map +1 -0
- package/dist/components/form.d.ts +28 -0
- package/dist/components/form.js +5 -0
- package/dist/components/form.js.map +1 -0
- package/dist/components/hover-card.d.ts +9 -0
- package/dist/components/hover-card.js +4 -0
- package/dist/components/hover-card.js.map +1 -0
- package/dist/components/input-otp.d.ts +14 -0
- package/dist/components/input-otp.js +4 -0
- package/dist/components/input-otp.js.map +1 -0
- package/dist/components/input.d.ts +5 -0
- package/dist/components/input.js +4 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/label.d.ts +6 -0
- package/dist/components/label.js +4 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/menubar.d.ts +29 -0
- package/dist/components/menubar.js +4 -0
- package/dist/components/menubar.js.map +1 -0
- package/dist/components/navigation-menu.d.ts +18 -0
- package/dist/components/navigation-menu.js +4 -0
- package/dist/components/navigation-menu.js.map +1 -0
- package/dist/components/pagination.d.ts +18 -0
- package/dist/components/pagination.js +5 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/permission-grid.d.ts +30 -0
- package/dist/components/permission-grid.js +5 -0
- package/dist/components/permission-grid.js.map +1 -0
- package/dist/components/popover.d.ts +10 -0
- package/dist/components/popover.js +4 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.d.ts +7 -0
- package/dist/components/progress.js +4 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.d.ts +8 -0
- package/dist/components/radio-group.js +4 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/rating.d.ts +14 -0
- package/dist/components/rating.js +4 -0
- package/dist/components/rating.js.map +1 -0
- package/dist/components/resizable.d.ts +11 -0
- package/dist/components/resizable.js +4 -0
- package/dist/components/resizable.js.map +1 -0
- package/dist/components/scope-tree.d.ts +35 -0
- package/dist/components/scope-tree.js +5 -0
- package/dist/components/scope-tree.js.map +1 -0
- package/dist/components/scope-type-badge.d.ts +20 -0
- package/dist/components/scope-type-badge.js +5 -0
- package/dist/components/scope-type-badge.js.map +1 -0
- package/dist/components/scroll-area.d.ts +8 -0
- package/dist/components/scroll-area.js +4 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/select.d.ts +18 -0
- package/dist/components/select.js +4 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.d.ts +7 -0
- package/dist/components/separator.js +4 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.d.ts +16 -0
- package/dist/components/sheet.js +4 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/sidebar.d.ts +75 -0
- package/dist/components/sidebar.js +11 -0
- package/dist/components/sidebar.js.map +1 -0
- package/dist/components/skeleton.d.ts +5 -0
- package/dist/components/skeleton.js +4 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.d.ts +7 -0
- package/dist/components/slider.js +4 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/slug-input.d.ts +22 -0
- package/dist/components/slug-input.js +6 -0
- package/dist/components/slug-input.js.map +1 -0
- package/dist/components/sonner.d.ts +6 -0
- package/dist/components/sonner.js +3 -0
- package/dist/components/sonner.js.map +1 -0
- package/dist/components/stage-type-badge.d.ts +24 -0
- package/dist/components/stage-type-badge.js +5 -0
- package/dist/components/stage-type-badge.js.map +1 -0
- package/dist/components/switch.d.ts +7 -0
- package/dist/components/switch.js +4 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table.d.ts +13 -0
- package/dist/components/table.js +4 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.d.ts +10 -0
- package/dist/components/tabs.js +4 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/tag-input.d.ts +15 -0
- package/dist/components/tag-input.js +5 -0
- package/dist/components/tag-input.js.map +1 -0
- package/dist/components/textarea.d.ts +5 -0
- package/dist/components/textarea.js +4 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/time-picker.d.ts +20 -0
- package/dist/components/time-picker.js +8 -0
- package/dist/components/time-picker.js.map +1 -0
- package/dist/components/toggle-group.d.ts +12 -0
- package/dist/components/toggle-group.js +5 -0
- package/dist/components/toggle-group.js.map +1 -0
- package/dist/components/toggle.d.ts +13 -0
- package/dist/components/toggle.js +4 -0
- package/dist/components/toggle.js.map +1 -0
- package/dist/components/tooltip.d.ts +10 -0
- package/dist/components/tooltip.js +4 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/workflow-category-badge.d.ts +26 -0
- package/dist/components/workflow-category-badge.js +5 -0
- package/dist/components/workflow-category-badge.js.map +1 -0
- package/dist/components/workflow-diagram.d.ts +43 -0
- package/dist/components/workflow-diagram.js +5 -0
- package/dist/components/workflow-diagram.js.map +1 -0
- package/dist/components/workflow-status-badge.d.ts +24 -0
- package/dist/components/workflow-status-badge.js +5 -0
- package/dist/components/workflow-status-badge.js.map +1 -0
- package/dist/components/workflow-stepper.d.ts +34 -0
- package/dist/components/workflow-stepper.js +4 -0
- package/dist/components/workflow-stepper.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +3 -0
- package/dist/hooks/use-mobile.js +3 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/index.d.ts +111 -0
- package/dist/index.js +71 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +3 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +101 -0
- package/src/styles/fonts.css +0 -0
- package/src/styles/index.css +3 -0
- package/src/styles/tailwind.css +4 -0
- package/src/styles/theme.css +447 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/permission-grid.tsx"],"names":[],"mappings":";;;;AA2BA,IAAM,aAAA,GAAsC;AAAA,EAC1C,YAAA,EAAc,QAAA;AAAA,EACd,SAAA,EAAW;AACb,CAAA;AAMO,SAAS,iBAAA,CAAkB,WAAmB,aAAA,EAA+B;AAClF,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA;AACtC;AAKA,SAAS,eAAe,OAAA,EAAuC;AAC7D,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,WAAA,EAAa;AAClC,MAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA,EAAG;AACvB,QAAA,IAAA,CAAK,GAAA,CAAI,KAAK,GAAG,CAAA;AACjB,QAAA,OAAA,CAAQ,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAKA,SAAS,cAAA,CAAe,SAA6B,GAAA,EAAqB;AACxE,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,MAAM,OAAO,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,QAAQ,GAAG,CAAA;AACpD,IAAA,IAAI,IAAA,SAAa,IAAA,CAAK,KAAA;AAAA,EACxB;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,OAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,MAAA,EAAQ;AACV,CAAA,EAAwB;AACtB,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,aAAA,EAAe,GAAG,cAAA,EAAe;AACrD,EAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA;AAEtC,EAAA,MAAM,gBAAA,GAAmB,CAAC,MAAA,KAAmB;AAC3C,IAAA,IAAI,QAAA,IAAY,CAAC,QAAA,EAAU;AAC3B,IAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAM,CAAA,EAAG;AAChC,MAAA,QAAA,CAAS,WAAA,CAAY,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,KAAO,MAAM,CAAC,CAAA;AAAA,IAClD,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,CAAC,GAAG,WAAA,EAAa,MAAM,CAAC,CAAA;AAAA,IACnC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAA0B;AAC9C,IAAA,IAAI,QAAA,IAAY,CAAC,QAAA,EAAU;AAC3B,IAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,CAAA,CAAA,KAAK,kBAAkB,GAAA,CAAI,GAAA,EAAK,CAAA,CAAE,GAAG,CAAC,CAAA;AAChF,IAAA,MAAM,cAAc,aAAA,CAAc,KAAA,CAAM,QAAM,WAAA,CAAY,QAAA,CAAS,EAAE,CAAC,CAAA;AAEtE,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,QAAA,CAAS,WAAA,CAAY,OAAO,CAAA,EAAA,KAAM,CAAC,cAAc,QAAA,CAAS,EAAE,CAAC,CAAC,CAAA;AAAA,IAChE,CAAA,MAAO;AACL,MAAA,MAAM,MAAA,uBAAa,GAAA,CAAI,CAAC,GAAG,WAAA,EAAa,GAAG,aAAa,CAAC,CAAA;AACzD,MAAA,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,GAAA,KAAmC;AAC9D,IAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,CAAA,CAAA,KAAK,kBAAkB,GAAA,CAAI,GAAA,EAAK,CAAA,CAAE,GAAG,CAAC,CAAA;AAChF,IAAA,OAAO,aAAA,CAAc,SAAS,CAAA,IAAK,aAAA,CAAc,MAAM,CAAA,EAAA,KAAM,WAAA,CAAY,QAAA,CAAS,EAAE,CAAC,CAAA;AAAA,EACvF,CAAA;AAEA,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,mDACb,QAAA,kBAAA,IAAA,CAAC,OAAA,EAAA,EAAM,WAAU,QAAA,EACf,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,aAAA,EACZ,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gGAAA,EACX,QAAA,EAAA,MAAA,CAAO,YAAA,EACV,CAAA;AAAA,MACC,OAAA,CAAQ,IAAI,CAAA,MAAA,qBACX,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAU,uGAAA;AAAA,UAET,QAAA,EAAA,cAAA,CAAe,SAAS,MAAM;AAAA,SAAA;AAAA,QAH1B;AAAA,OAKR,CAAA;AAAA,MACA,CAAC,QAAA,oBACA,GAAA,CAAC,QAAG,SAAA,EAAU,uGAAA,EACX,iBAAO,SAAA,EACV;AAAA,KAAA,EAEJ,CAAA,EACF,CAAA;AAAA,wBACC,OAAA,EAAA,EACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAK,GAAA,KAAQ;AACzB,MAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,GAAA,CAAI,YAAY,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,GAAG,CAAC,CAAA;AAC3D,MAAA,uBACE,IAAA,CAAC,QAAiB,SAAA,EAAW,EAAA,CAAG,MAAM,CAAA,KAAM,CAAA,GAAI,eAAA,GAAkB,aAAa,CAAA,EAC7E,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA,GAAA,CAAI,KAAA,EAAM,CAAA;AAAA,QACxD,OAAA,CAAQ,IAAI,CAAA,MAAA,KAAU;AACrB,UAAA,IAAI,CAAC,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA,EAAG;AAC5B,YAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAgB,SAAA,EAAU,uBAAA,EACzB,QAAA,kBAAA,GAAA,CAAC,UAAK,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,GAAA,EAAC,CAAA,EAAA,EADlC,MAET,CAAA;AAAA,UAEJ;AACA,UAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,GAAA,CAAI,GAAA,EAAK,MAAM,CAAA;AAChD,UAAA,MAAM,OAAA,GAAU,WAAA,CAAY,QAAA,CAAS,MAAM,CAAA;AAC3C,UAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAgB,SAAA,EAAU,uBAAA,EACzB,QAAA,kBAAA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,OAAA;AAAA,cACA,eAAA,EAAiB,MAAM,gBAAA,CAAiB,MAAM,CAAA;AAAA,cAC9C,QAAA,EAAU,QAAA;AAAA,cACV,SAAA,EAAU;AAAA;AAAA,eALL,MAOT,CAAA;AAAA,QAEJ,CAAC,CAAA;AAAA,QACA,CAAC,QAAA,oBACA,GAAA,CAAC,IAAA,EAAA,EAAG,WAAU,uBAAA,EACZ,QAAA,kBAAA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,oBAAoB,GAAG,CAAA;AAAA,YAChC,eAAA,EAAiB,MAAM,YAAA,CAAa,GAAG,CAAA;AAAA,YACvC,SAAA,EAAU;AAAA;AAAA,SACZ,EACF;AAAA,OAAA,EAAA,EA9BK,IAAI,GAgCb,CAAA;AAAA,IAEJ,CAAC,CAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ","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"]}
|