@egose/shadcn-theme 0.1.10 → 0.1.12
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/LICENSE +201 -0
- package/README.md +88 -29
- package/{chunk-GBNJFKPB.js → chunk-26NBTW3I.js} +3 -3
- package/{chunk-7PX7GVOR.mjs → chunk-2EXZ4JQX.mjs} +2 -2
- package/{chunk-YJR5JBXS.js → chunk-36GT5EGU.js} +3 -3
- package/{chunk-7ZMTJBXT.mjs → chunk-3NMW42UR.mjs} +7 -7
- package/{chunk-AGPEWIPR.mjs → chunk-3R2OBHS6.mjs} +5 -5
- package/{chunk-QCHBJMD6.mjs → chunk-3R7FZDQ7.mjs} +2 -2
- package/{chunk-PS3LNHTA.js → chunk-3RQTEIV5.js} +3 -3
- package/{chunk-E7F5KADG.mjs → chunk-3YFVUGSK.mjs} +2 -2
- package/{chunk-7MDWTJEP.mjs → chunk-42IQSRLZ.mjs} +2 -2
- package/{chunk-GV62APQ6.js → chunk-5CUM73VT.js} +3 -3
- package/{chunk-P4EDRIBH.js → chunk-5LDEF3T6.js} +44 -44
- package/{chunk-HWDU5KVD.mjs → chunk-6M7NWFTI.mjs} +4 -4
- package/{chunk-CNYC22IA.mjs → chunk-6SAR4RAU.mjs} +4 -4
- package/{chunk-XMRJIUYX.mjs → chunk-7DB2YNKV.mjs} +2 -2
- package/{chunk-RPF753T2.mjs → chunk-7S5XDE3W.mjs} +2 -2
- package/{chunk-OMQVDSR6.js → chunk-A4VKE26S.js} +4 -4
- package/{chunk-WK4MG4VT.js → chunk-AH57ACVP.js} +6 -6
- package/{chunk-4BKWF5FK.js → chunk-AIZ3XYAI.js} +6 -6
- package/{chunk-RFORRZRN.js → chunk-AOGFHEQH.js} +11 -11
- package/{chunk-6ECNY4VS.mjs → chunk-ASPR3W6A.mjs} +4 -4
- package/{chunk-OVHPXYDN.mjs → chunk-B6SBEOMV.mjs} +2 -2
- package/{chunk-ZFSZ6K4K.js → chunk-BGITSWS4.js} +1 -1
- package/{chunk-WJBTXKFN.js → chunk-BIO4TVNT.js} +14 -14
- package/{chunk-RJVQU443.mjs → chunk-BKUEN3CP.mjs} +6 -6
- package/{chunk-OUVM5NST.js → chunk-BM53W77T.js} +9 -9
- package/{chunk-JZXOJAMQ.js → chunk-C4JWWUXI.js} +8 -8
- package/{chunk-IYVLRZJ4.js → chunk-C74J4JWA.js} +1 -1
- package/{chunk-OPNHC6JN.mjs → chunk-CFG4GTRV.mjs} +3 -3
- package/{chunk-YQENFZOY.mjs → chunk-CHV7CG5L.mjs} +2 -2
- package/{chunk-UFRPUC7K.js → chunk-CRBQL2FG.js} +3 -3
- package/{chunk-K4JVHEI2.js → chunk-CZZWPS2I.js} +3 -3
- package/{chunk-LAIO3QZX.js → chunk-DD3MCW6L.js} +17 -17
- package/{chunk-WXEEDLLR.js → chunk-DNOZXQ2U.js} +15 -15
- package/{chunk-BJK4J4VY.js → chunk-DYYTK4BP.js} +7 -7
- package/{chunk-N7JSYNXM.js → chunk-FUFUQWRV.js} +1 -1
- package/{chunk-LPDYWZN6.js → chunk-GOATL3D5.js} +14 -14
- package/{chunk-VBPJD7U3.js → chunk-HCWYPASJ.js} +13 -13
- package/{chunk-SX4LQFOF.mjs → chunk-HD7GX5UE.mjs} +1 -1
- package/{chunk-6POWZMND.js → chunk-HDO7OG7I.js} +3 -3
- package/{chunk-AQIBLBXW.js → chunk-I4ICCNHG.js} +9 -9
- package/{chunk-KB6BX6LA.js → chunk-IEPLSUBR.js} +5 -5
- package/{chunk-NMJ6372G.js → chunk-IOCZ25V7.js} +11 -11
- package/{chunk-FOEQYO2Q.js → chunk-JXITZDN4.js} +15 -15
- package/{chunk-6CRGZEQF.js → chunk-JYRR3NKH.js} +9 -9
- package/{chunk-Z342XYFY.js → chunk-KDDWHY5M.js} +6 -6
- package/{chunk-KGUUDFJE.mjs → chunk-KKCJ2GMO.mjs} +1 -1
- package/{chunk-4IDPSNL3.mjs → chunk-KS7PUPPU.mjs} +9 -9
- package/{chunk-RNKMPQDZ.mjs → chunk-L7EN73HA.mjs} +4 -4
- package/{chunk-NCJI2DCV.mjs → chunk-LBOUUQFM.mjs} +3 -3
- package/{chunk-RIBB6GXJ.mjs → chunk-MBDPHX4P.mjs} +3 -3
- package/{chunk-77MASFCZ.mjs → chunk-MLXTZKBJ.mjs} +1 -1
- package/{chunk-4ETXRZKO.js → chunk-MMD72AEX.js} +8 -8
- package/{chunk-O6PHWGJH.mjs → chunk-MP7OH5ZP.mjs} +2 -2
- package/{chunk-HTEQHRTK.mjs → chunk-MSZ2AHQM.mjs} +2 -2
- package/{chunk-CSL3CTEN.mjs → chunk-N3WWOWZ4.mjs} +2 -2
- package/{chunk-PSPAJNNB.js → chunk-NBQEF4JD.js} +1 -1
- package/{chunk-QMLV5G5Z.js → chunk-NDH24NNQ.js} +37 -37
- package/{chunk-P4DW3EEW.mjs → chunk-NPEOZHKQ.mjs} +4 -4
- package/{chunk-GUB2Y4JK.mjs → chunk-NQQR2NDC.mjs} +3 -3
- package/{chunk-ZEZK2FJ4.mjs → chunk-O6E6RGZT.mjs} +1 -1
- package/{chunk-QF6PFV6M.mjs → chunk-OXUVPYJE.mjs} +2 -2
- package/{chunk-CKGMFUU2.js → chunk-OZAVO5UA.js} +3 -3
- package/{chunk-US2CUADK.mjs → chunk-OZF3JOG4.mjs} +4 -4
- package/{chunk-ICOZ5BK7.mjs → chunk-PBCJ476S.mjs} +3 -3
- package/{chunk-OXCN3BD6.mjs → chunk-PODBONNQ.mjs} +2 -2
- package/{chunk-5CBMRDT7.mjs → chunk-PW4ITUWI.mjs} +3 -3
- package/{chunk-F2QWMBUB.mjs → chunk-Q23ZKF2E.mjs} +2 -2
- package/{chunk-K23YFVYE.mjs → chunk-QFLEJVD3.mjs} +4 -4
- package/{chunk-XVWILFYQ.mjs → chunk-RG3G5IZC.mjs} +2 -2
- package/{chunk-PDB2VCWX.mjs → chunk-RKVMGHH3.mjs} +1 -1
- package/{chunk-WKQDHQAS.js → chunk-RV4AOZUL.js} +10 -10
- package/{chunk-7BYWDRRI.mjs → chunk-S2LLOGBR.mjs} +3 -3
- package/{chunk-VHYQNTH7.mjs → chunk-S7HB64F7.mjs} +4 -4
- package/{chunk-TTCGK36S.js → chunk-SOJSGQJO.js} +8 -8
- package/{chunk-YEGS4ETW.js → chunk-SSBVBEDI.js} +12 -12
- package/{chunk-FD7CNCJW.mjs → chunk-SVZMGPZC.mjs} +4 -4
- package/{chunk-VYXQVM7A.js → chunk-TGQA25KR.js} +6 -6
- package/{chunk-3HZTA2ZQ.js → chunk-UHYOQN4B.js} +11 -11
- package/{chunk-K3LYDDTD.js → chunk-VHXALM6O.js} +5 -5
- package/{chunk-ZFBUIBJH.mjs → chunk-VQWCEF3I.mjs} +4 -4
- package/{chunk-4SYFVOM2.js → chunk-VRY6WSXJ.js} +1 -1
- package/{chunk-2YMMYND2.js → chunk-VVU3Q7KV.js} +3 -3
- package/chunk-VYBFV2QD.js +31 -0
- package/{chunk-QHCOMBHI.js → chunk-W4ZJYYQP.js} +6 -6
- package/{chunk-3JPKE36M.mjs → chunk-W7CX2O2V.mjs} +8 -8
- package/{chunk-NMYVYLKF.js → chunk-W7PK2KN7.js} +3 -3
- package/{chunk-UQW3H2JS.js → chunk-WEZTFUOR.js} +7 -7
- package/chunk-WJKG5MUH.mjs +30 -0
- package/{chunk-X3V6YE47.mjs → chunk-WR7C2Q2O.mjs} +1 -1
- package/{chunk-G6WKPZTL.js → chunk-X3FLPO26.js} +10 -10
- package/{chunk-YDRPNCWF.mjs → chunk-XH7WQWOD.mjs} +5 -5
- package/{chunk-A4FV6TTM.js → chunk-XR7BY66N.js} +1 -1
- package/{chunk-UKPBHVOT.js → chunk-XWASPFJ7.js} +11 -11
- package/{chunk-7MDE2NEO.mjs → chunk-YAFFRILU.mjs} +2 -2
- package/{chunk-MM5OJOOR.mjs → chunk-YHL7Q5J3.mjs} +2 -2
- package/{chunk-RJG7QLDD.js → chunk-YMBEAV7N.js} +3 -3
- package/{chunk-BMAIJZN6.js → chunk-ZE53QYI6.js} +3 -3
- package/{chunk-3GHC4JQU.mjs → chunk-ZJRJN2UJ.mjs} +2 -2
- package/{chunk-WIISPZZE.mjs → chunk-ZLGQUL4Y.mjs} +2 -2
- package/{chunk-BEPAUXCN.mjs → chunk-ZSHUAH66.mjs} +4 -4
- package/components/form/checkbox.js +5 -5
- package/components/form/checkbox.mjs +4 -4
- package/components/form/date-picker.js +9 -9
- package/components/form/date-picker.mjs +8 -8
- package/components/form/date-range-picker.js +13 -13
- package/components/form/date-range-picker.mjs +7 -7
- package/components/form/error.js +3 -3
- package/components/form/error.mjs +2 -2
- package/components/form/hook-checkbox.d.mts +7 -5
- package/components/form/hook-checkbox.d.ts +7 -5
- package/components/form/hook-checkbox.js +21 -13
- package/components/form/hook-checkbox.js.map +1 -1
- package/components/form/hook-checkbox.mjs +16 -8
- package/components/form/hook-checkbox.mjs.map +1 -1
- package/components/form/hook-date-picker.js +12 -12
- package/components/form/hook-date-picker.mjs +9 -9
- package/components/form/hook-multi-select.js +17 -17
- package/components/form/hook-multi-select.mjs +14 -14
- package/components/form/hook-native-select.d.mts +7 -4
- package/components/form/hook-native-select.d.ts +7 -4
- package/components/form/hook-native-select.js +22 -15
- package/components/form/hook-native-select.js.map +1 -1
- package/components/form/hook-native-select.mjs +17 -10
- package/components/form/hook-native-select.mjs.map +1 -1
- package/components/form/hook-searchable-select.js +15 -15
- package/components/form/hook-searchable-select.mjs +12 -12
- package/components/form/hook-select.js +8 -8
- package/components/form/hook-select.mjs +5 -5
- package/components/form/hook-tag-picker.js +9 -9
- package/components/form/hook-tag-picker.mjs +6 -6
- package/components/form/hook-text-input.d.mts +7 -4
- package/components/form/hook-text-input.d.ts +7 -4
- package/components/form/hook-text-input.js +36 -16
- package/components/form/hook-text-input.js.map +1 -1
- package/components/form/hook-text-input.mjs +31 -11
- package/components/form/hook-text-input.mjs.map +1 -1
- package/components/form/hook-textarea.d.mts +7 -4
- package/components/form/hook-textarea.d.ts +7 -4
- package/components/form/hook-textarea.js +30 -16
- package/components/form/hook-textarea.js.map +1 -1
- package/components/form/hook-textarea.mjs +25 -11
- package/components/form/hook-textarea.mjs.map +1 -1
- package/components/form/hook-time-input.d.mts +7 -5
- package/components/form/hook-time-input.d.ts +7 -5
- package/components/form/hook-time-input.js +36 -15
- package/components/form/hook-time-input.js.map +1 -1
- package/components/form/hook-time-input.mjs +31 -10
- package/components/form/hook-time-input.mjs.map +1 -1
- package/components/form/multi-select.js +14 -14
- package/components/form/multi-select.mjs +13 -13
- package/components/form/native-select.js +4 -4
- package/components/form/native-select.mjs +3 -3
- package/components/form/searchable-select.js +12 -12
- package/components/form/searchable-select.mjs +11 -11
- package/components/form/select.js +5 -5
- package/components/form/select.mjs +4 -4
- package/components/form/tag-picker.js +6 -6
- package/components/form/tag-picker.mjs +5 -5
- package/components/form/text-input.d.mts +12 -0
- package/components/form/text-input.d.ts +12 -0
- package/components/form/text-input.js +5 -5
- package/components/form/text-input.mjs +4 -4
- package/components/form/textarea.js +5 -5
- package/components/form/textarea.mjs +4 -4
- package/components/form/time-input.js +7 -7
- package/components/form/time-input.mjs +6 -6
- package/components/form/types.d.mts +18 -2
- package/components/form/types.d.ts +18 -2
- package/components/form/types.js +12 -1
- package/components/form/types.js.map +1 -1
- package/components/form/types.mjs +11 -0
- package/components/ui/accordion.js +5 -5
- package/components/ui/accordion.mjs +1 -1
- package/components/ui/alert-dialog.js +12 -12
- package/components/ui/alert-dialog.mjs +3 -3
- package/components/ui/alert.d.mts +1 -1
- package/components/ui/alert.d.ts +1 -1
- package/components/ui/alert.js +3 -3
- package/components/ui/alert.mjs +2 -2
- package/components/ui/avatar.js +3 -3
- package/components/ui/avatar.mjs +2 -2
- package/components/ui/badge.js +3 -3
- package/components/ui/badge.mjs +2 -2
- package/components/ui/basic-alert.js +3 -3
- package/components/ui/basic-alert.mjs +2 -2
- package/components/ui/breadcrumb.js +3 -3
- package/components/ui/breadcrumb.mjs +2 -2
- package/components/ui/button-group.js +6 -6
- package/components/ui/button-group.mjs +2 -2
- package/components/ui/button.d.mts +23 -0
- package/components/ui/button.d.ts +23 -0
- package/components/ui/button.js +4 -4
- package/components/ui/button.mjs +3 -3
- package/components/ui/calendar.js +5 -5
- package/components/ui/calendar.mjs +4 -4
- package/components/ui/card.js +8 -8
- package/components/ui/card.mjs +1 -1
- package/components/ui/carousel.js +10 -10
- package/components/ui/carousel.mjs +3 -3
- package/components/ui/checkbox.js +3 -3
- package/components/ui/checkbox.mjs +2 -2
- package/components/ui/combobox.js +22 -22
- package/components/ui/combobox.mjs +6 -6
- package/components/ui/command.js +9 -9
- package/components/ui/command.mjs +8 -8
- package/components/ui/context-menu.js +11 -11
- package/components/ui/context-menu.mjs +1 -1
- package/components/ui/copy-button.js +8 -8
- package/components/ui/copy-button.mjs +3 -3
- package/components/ui/dialog.js +5 -5
- package/components/ui/dialog.mjs +4 -4
- package/components/ui/drawer.js +7 -7
- package/components/ui/drawer.mjs +1 -1
- package/components/ui/dropdown-menu.js +3 -3
- package/components/ui/dropdown-menu.mjs +2 -2
- package/components/ui/empty.js +7 -7
- package/components/ui/empty.mjs +1 -1
- package/components/ui/extension/file-input.js +5 -5
- package/components/ui/extension/file-input.mjs +4 -4
- package/components/ui/field.js +15 -15
- package/components/ui/field.mjs +3 -3
- package/components/ui/hover-card.js +2 -2
- package/components/ui/hover-card.mjs +1 -1
- package/components/ui/input-group.js +7 -7
- package/components/ui/input-group.mjs +6 -6
- package/components/ui/input-otp.js +5 -5
- package/components/ui/input-otp.mjs +1 -1
- package/components/ui/input.js +3 -3
- package/components/ui/input.mjs +2 -2
- package/components/ui/item.js +12 -12
- package/components/ui/item.mjs +2 -2
- package/components/ui/kbd.js +3 -3
- package/components/ui/kbd.mjs +1 -1
- package/components/ui/label.js +3 -3
- package/components/ui/label.mjs +2 -2
- package/components/ui/menubar.js +12 -12
- package/components/ui/menubar.mjs +1 -1
- package/components/ui/multi-select.d.mts +1 -1
- package/components/ui/multi-select.d.ts +1 -1
- package/components/ui/multi-select.js +11 -11
- package/components/ui/multi-select.mjs +10 -10
- package/components/ui/native-select.js +3 -3
- package/components/ui/native-select.mjs +1 -1
- package/components/ui/navigation-menu.js +10 -10
- package/components/ui/navigation-menu.mjs +1 -1
- package/components/ui/pagination.js +9 -9
- package/components/ui/pagination.mjs +3 -3
- package/components/ui/popover.js +3 -3
- package/components/ui/popover.mjs +2 -2
- package/components/ui/progress.js +2 -2
- package/components/ui/progress.mjs +1 -1
- package/components/ui/radio-group.js +3 -3
- package/components/ui/radio-group.mjs +1 -1
- package/components/ui/resizable.js +3 -3
- package/components/ui/resizable.mjs +1 -1
- package/components/ui/scroll-area.js +3 -3
- package/components/ui/scroll-area.mjs +1 -1
- package/components/ui/select.js +3 -3
- package/components/ui/select.mjs +2 -2
- package/components/ui/separator.js +3 -3
- package/components/ui/separator.mjs +2 -2
- package/components/ui/sheet.js +5 -5
- package/components/ui/sheet.mjs +4 -4
- package/components/ui/sidebar.js +11 -11
- package/components/ui/sidebar.mjs +10 -10
- package/components/ui/skeleton.js +3 -3
- package/components/ui/skeleton.mjs +2 -2
- package/components/ui/slider.js +2 -2
- package/components/ui/slider.mjs +1 -1
- package/components/ui/spinner.js +3 -3
- package/components/ui/spinner.mjs +2 -2
- package/components/ui/switch.js +2 -2
- package/components/ui/switch.mjs +1 -1
- package/components/ui/table.js +9 -9
- package/components/ui/table.mjs +1 -1
- package/components/ui/tabs.js +5 -5
- package/components/ui/tabs.mjs +1 -1
- package/components/ui/tag-picker.js +4 -4
- package/components/ui/tag-picker.mjs +3 -3
- package/components/ui/textarea.js +3 -3
- package/components/ui/textarea.mjs +2 -2
- package/components/ui/toggle-group.js +5 -5
- package/components/ui/toggle-group.mjs +2 -2
- package/components/ui/toggle.js +3 -3
- package/components/ui/toggle.mjs +2 -2
- package/components/ui/tooltip.js +3 -3
- package/components/ui/tooltip.mjs +2 -2
- package/components/widgets/dialog-manager/context.d.mts +26 -0
- package/components/widgets/dialog-manager/context.d.ts +26 -0
- package/components/widgets/dialog-manager/context.js +2 -2
- package/components/widgets/dialog-manager/context.mjs +1 -1
- package/components/widgets/dialog-manager/index.js +3 -3
- package/components/widgets/dialog-manager/index.mjs +2 -2
- package/components/widgets/dialog-manager/provider.d.mts +13 -0
- package/components/widgets/dialog-manager/provider.d.ts +13 -0
- package/components/widgets/dialog-manager/provider.js +3 -3
- package/components/widgets/dialog-manager/provider.mjs +2 -2
- package/components/widgets/dialog-manager/types.d.mts +10 -0
- package/components/widgets/dialog-manager/types.d.ts +10 -0
- package/hooks/use-clipboard.d.mts +12 -0
- package/hooks/use-clipboard.d.ts +12 -0
- package/hooks/use-clipboard.js +2 -2
- package/hooks/use-clipboard.mjs +1 -1
- package/hooks/use-mobile.d.mts +5 -0
- package/hooks/use-mobile.d.ts +5 -0
- package/hooks/use-mobile.js +2 -2
- package/hooks/use-mobile.mjs +1 -1
- package/layouts/sidebar1/app-sidebar.d.mts +12 -0
- package/layouts/sidebar1/app-sidebar.d.ts +12 -0
- package/layouts/sidebar1/app-sidebar.js +17 -17
- package/layouts/sidebar1/app-sidebar.mjs +16 -16
- package/layouts/sidebar1/context-switcher.js +13 -13
- package/layouts/sidebar1/context-switcher.mjs +12 -12
- package/layouts/sidebar1/index.d.mts +22 -0
- package/layouts/sidebar1/index.d.ts +22 -0
- package/layouts/sidebar1/index.js +23 -23
- package/layouts/sidebar1/index.js.map +1 -1
- package/layouts/sidebar1/index.mjs +17 -17
- package/layouts/sidebar1/index.mjs.map +1 -1
- package/layouts/sidebar1/nav-menus.js +12 -12
- package/layouts/sidebar1/nav-menus.mjs +11 -11
- package/layouts/sidebar1/nav-user.d.mts +9 -0
- package/layouts/sidebar1/nav-user.d.ts +9 -0
- package/layouts/sidebar1/nav-user.js +14 -14
- package/layouts/sidebar1/nav-user.mjs +13 -13
- package/layouts/simple/index.d.mts +23 -0
- package/layouts/simple/index.d.ts +23 -0
- package/layouts/simple/index.js +17 -17
- package/layouts/simple/index.js.map +1 -1
- package/layouts/simple/index.mjs +6 -6
- package/layouts/simple/index.mjs.map +1 -1
- package/layouts/simple/mobile-menu.js +3 -3
- package/layouts/simple/mobile-menu.mjs +2 -2
- package/layouts/simple/types.d.mts +11 -0
- package/layouts/simple/types.d.ts +11 -0
- package/layouts/simple/user-menu.js +4 -4
- package/layouts/simple/user-menu.mjs +3 -3
- package/llms.txt +102 -0
- package/package.json +96 -16
- package/utils/date.d.mts +9 -0
- package/utils/date.d.ts +9 -0
- package/utils/date.js +2 -2
- package/utils/date.mjs +1 -1
- package/utils/time.d.mts +12 -0
- package/utils/time.d.ts +12 -0
- package/utils/time.js +2 -2
- package/utils/time.mjs +1 -1
- package/utils/ui.d.mts +8 -0
- package/utils/ui.d.ts +8 -0
- package/utils/ui.js +2 -2
- package/utils/ui.mjs +1 -1
- package/chunk-2NMEKWO5.js.map +0 -1
- package/chunk-2YMMYND2.js.map +0 -1
- package/chunk-3GHC4JQU.mjs.map +0 -1
- package/chunk-3HZTA2ZQ.js.map +0 -1
- package/chunk-3JPKE36M.mjs.map +0 -1
- package/chunk-4BKWF5FK.js.map +0 -1
- package/chunk-4ETXRZKO.js.map +0 -1
- package/chunk-4IDPSNL3.mjs.map +0 -1
- package/chunk-4SYFVOM2.js.map +0 -1
- package/chunk-5CBMRDT7.mjs.map +0 -1
- package/chunk-5SLUBHNN.js.map +0 -1
- package/chunk-5TXFHYQ5.js.map +0 -1
- package/chunk-6CRGZEQF.js.map +0 -1
- package/chunk-6ECNY4VS.mjs.map +0 -1
- package/chunk-6POWZMND.js.map +0 -1
- package/chunk-6T6UTNWD.mjs.map +0 -1
- package/chunk-77MASFCZ.mjs.map +0 -1
- package/chunk-7BYWDRRI.mjs.map +0 -1
- package/chunk-7GZ7NWTV.js.map +0 -1
- package/chunk-7MDE2NEO.mjs.map +0 -1
- package/chunk-7MDWTJEP.mjs.map +0 -1
- package/chunk-7PX7GVOR.mjs.map +0 -1
- package/chunk-7ZMTJBXT.mjs.map +0 -1
- package/chunk-A4FV6TTM.js.map +0 -1
- package/chunk-AGPEWIPR.mjs.map +0 -1
- package/chunk-AQIBLBXW.js.map +0 -1
- package/chunk-B2Z7BNYW.mjs.map +0 -1
- package/chunk-BEPAUXCN.mjs.map +0 -1
- package/chunk-BJK4J4VY.js.map +0 -1
- package/chunk-BMAIJZN6.js.map +0 -1
- package/chunk-CKGMFUU2.js.map +0 -1
- package/chunk-CNYC22IA.mjs.map +0 -1
- package/chunk-CSL3CTEN.mjs.map +0 -1
- package/chunk-E7F5KADG.mjs.map +0 -1
- package/chunk-F2QWMBUB.mjs.map +0 -1
- package/chunk-FD7CNCJW.mjs.map +0 -1
- package/chunk-FOEQYO2Q.js.map +0 -1
- package/chunk-G6WKPZTL.js.map +0 -1
- package/chunk-GBNJFKPB.js.map +0 -1
- package/chunk-GUB2Y4JK.mjs.map +0 -1
- package/chunk-GV62APQ6.js.map +0 -1
- package/chunk-HTEQHRTK.mjs.map +0 -1
- package/chunk-HWDU5KVD.mjs.map +0 -1
- package/chunk-ICOZ5BK7.mjs.map +0 -1
- package/chunk-IYVLRZJ4.js.map +0 -1
- package/chunk-JZXOJAMQ.js.map +0 -1
- package/chunk-K23YFVYE.mjs.map +0 -1
- package/chunk-K3LYDDTD.js.map +0 -1
- package/chunk-K4JVHEI2.js.map +0 -1
- package/chunk-KB6BX6LA.js.map +0 -1
- package/chunk-KGUUDFJE.mjs.map +0 -1
- package/chunk-LAIO3QZX.js.map +0 -1
- package/chunk-LPDYWZN6.js.map +0 -1
- package/chunk-LVXIGNFJ.mjs.map +0 -1
- package/chunk-M6UKU56L.mjs.map +0 -1
- package/chunk-MM5OJOOR.mjs.map +0 -1
- package/chunk-N7JSYNXM.js.map +0 -1
- package/chunk-NCJI2DCV.mjs.map +0 -1
- package/chunk-NMJ6372G.js.map +0 -1
- package/chunk-NMYVYLKF.js.map +0 -1
- package/chunk-O6PHWGJH.mjs.map +0 -1
- package/chunk-OMQVDSR6.js.map +0 -1
- package/chunk-OPNHC6JN.mjs.map +0 -1
- package/chunk-OUVM5NST.js.map +0 -1
- package/chunk-OVHPXYDN.mjs.map +0 -1
- package/chunk-OXCN3BD6.mjs.map +0 -1
- package/chunk-P4DW3EEW.mjs.map +0 -1
- package/chunk-P4EDRIBH.js.map +0 -1
- package/chunk-PDB2VCWX.mjs.map +0 -1
- package/chunk-PS3LNHTA.js.map +0 -1
- package/chunk-PSPAJNNB.js.map +0 -1
- package/chunk-QCHBJMD6.mjs.map +0 -1
- package/chunk-QF6PFV6M.mjs.map +0 -1
- package/chunk-QHCOMBHI.js.map +0 -1
- package/chunk-QMLV5G5Z.js.map +0 -1
- package/chunk-RFORRZRN.js.map +0 -1
- package/chunk-RIBB6GXJ.mjs.map +0 -1
- package/chunk-RJG7QLDD.js.map +0 -1
- package/chunk-RJVQU443.mjs.map +0 -1
- package/chunk-RNKMPQDZ.mjs.map +0 -1
- package/chunk-RPF753T2.mjs.map +0 -1
- package/chunk-SC6IX6NJ.js.map +0 -1
- package/chunk-SX4LQFOF.mjs.map +0 -1
- package/chunk-TTCGK36S.js.map +0 -1
- package/chunk-UFRPUC7K.js.map +0 -1
- package/chunk-UKPBHVOT.js.map +0 -1
- package/chunk-UQW3H2JS.js.map +0 -1
- package/chunk-US2CUADK.mjs.map +0 -1
- package/chunk-VBPJD7U3.js.map +0 -1
- package/chunk-VHYQNTH7.mjs.map +0 -1
- package/chunk-VYXQVM7A.js.map +0 -1
- package/chunk-WIISPZZE.mjs.map +0 -1
- package/chunk-WJBTXKFN.js.map +0 -1
- package/chunk-WK4MG4VT.js.map +0 -1
- package/chunk-WKQDHQAS.js.map +0 -1
- package/chunk-WXEEDLLR.js.map +0 -1
- package/chunk-X3V6YE47.mjs.map +0 -1
- package/chunk-XMRJIUYX.mjs.map +0 -1
- package/chunk-XVWILFYQ.mjs.map +0 -1
- package/chunk-YDRPNCWF.mjs.map +0 -1
- package/chunk-YEGS4ETW.js.map +0 -1
- package/chunk-YJR5JBXS.js.map +0 -1
- package/chunk-YOSPWY5K.mjs.map +0 -1
- package/chunk-YQENFZOY.mjs.map +0 -1
- package/chunk-Z342XYFY.js.map +0 -1
- package/chunk-ZEZK2FJ4.mjs.map +0 -1
- package/chunk-ZFBUIBJH.mjs.map +0 -1
- package/chunk-ZFSZ6K4K.js.map +0 -1
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import React__default from 'react';
|
|
2
2
|
import { UserMenuSection, MenuItem } from './types.mjs';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Props for {@link SimpleLayout}. The layout renders a fixed header with
|
|
6
|
+
* optional left/right nav menus, an optional user dropdown, an optional
|
|
7
|
+
* mobile menu, an optional footer, and a main content slot for `children`.
|
|
8
|
+
*
|
|
9
|
+
* `aslink` is required: pass your router's `Link` component so internal
|
|
10
|
+
* navigation works without re-implementing it. The same component is
|
|
11
|
+
* rendered for both `to=` (React Router) and `href=` (Next.js) prop styles.
|
|
12
|
+
*/
|
|
4
13
|
interface LayoutProps {
|
|
5
14
|
logo?: {
|
|
6
15
|
src?: string;
|
|
@@ -51,6 +60,20 @@ interface LayoutProps {
|
|
|
51
60
|
children?: React__default.ReactNode;
|
|
52
61
|
aslink: React__default.ElementType;
|
|
53
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Header + main + footer layout for content-light pages. Mobile-aware
|
|
65
|
+
* (collapsible menu under 768px). Compose the inner pieces with the
|
|
66
|
+
* `classNames` slots rather than overriding internal markup.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* <SimpleLayout
|
|
70
|
+
* aslink={Link}
|
|
71
|
+
* left={{ menus: [{ label: 'Home', link: '/' }] }}
|
|
72
|
+
* user={{ menuSections: [...] }}
|
|
73
|
+
* >
|
|
74
|
+
* {children}
|
|
75
|
+
* </SimpleLayout>
|
|
76
|
+
*/
|
|
54
77
|
declare function SimpleLayout(props: LayoutProps): React__default.JSX.Element;
|
|
55
78
|
|
|
56
79
|
export { SimpleLayout as default };
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import React__default from 'react';
|
|
2
2
|
import { UserMenuSection, MenuItem } from './types.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Props for {@link SimpleLayout}. The layout renders a fixed header with
|
|
6
|
+
* optional left/right nav menus, an optional user dropdown, an optional
|
|
7
|
+
* mobile menu, an optional footer, and a main content slot for `children`.
|
|
8
|
+
*
|
|
9
|
+
* `aslink` is required: pass your router's `Link` component so internal
|
|
10
|
+
* navigation works without re-implementing it. The same component is
|
|
11
|
+
* rendered for both `to=` (React Router) and `href=` (Next.js) prop styles.
|
|
12
|
+
*/
|
|
4
13
|
interface LayoutProps {
|
|
5
14
|
logo?: {
|
|
6
15
|
src?: string;
|
|
@@ -51,6 +60,20 @@ interface LayoutProps {
|
|
|
51
60
|
children?: React__default.ReactNode;
|
|
52
61
|
aslink: React__default.ElementType;
|
|
53
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Header + main + footer layout for content-light pages. Mobile-aware
|
|
65
|
+
* (collapsible menu under 768px). Compose the inner pieces with the
|
|
66
|
+
* `classNames` slots rather than overriding internal markup.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* <SimpleLayout
|
|
70
|
+
* aslink={Link}
|
|
71
|
+
* left={{ menus: [{ label: 'Home', link: '/' }] }}
|
|
72
|
+
* user={{ menuSections: [...] }}
|
|
73
|
+
* >
|
|
74
|
+
* {children}
|
|
75
|
+
* </SimpleLayout>
|
|
76
|
+
*/
|
|
54
77
|
declare function SimpleLayout(props: LayoutProps): React__default.JSX.Element;
|
|
55
78
|
|
|
56
79
|
export { SimpleLayout as default };
|
package/layouts/simple/index.js
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunkBM53W77Tjs = require('../../chunk-BM53W77T.js');
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var
|
|
9
|
-
require('../../chunk-
|
|
8
|
+
var _chunkA4VKE26Sjs = require('../../chunk-A4VKE26S.js');
|
|
9
|
+
require('../../chunk-XWASPFJ7.js');
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _chunkNBQEF4JDjs = require('../../chunk-NBQEF4JD.js');
|
|
13
13
|
require('../../chunk-2NMEKWO5.js');
|
|
14
14
|
|
|
15
15
|
// layouts/simple/index.tsx
|
|
@@ -38,7 +38,7 @@ function SimpleLayout(props) {
|
|
|
38
38
|
return /* @__PURE__ */ _react2.default.createElement("div", { className: "flex flex-col min-h-screen" }, /* @__PURE__ */ _react2.default.createElement(
|
|
39
39
|
"header",
|
|
40
40
|
{
|
|
41
|
-
className:
|
|
41
|
+
className: _chunkNBQEF4JDjs.cn.call(void 0,
|
|
42
42
|
"px-4 py-2 flex items-center justify-between bg-gray-100 border-b border-gray-300",
|
|
43
43
|
(_e = classNames == null ? void 0 : classNames.header) == null ? void 0 : _e.wrapper
|
|
44
44
|
)
|
|
@@ -50,7 +50,7 @@ function SimpleLayout(props) {
|
|
|
50
50
|
onClick: () => {
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
), logo && /* @__PURE__ */ _react2.default.createElement("div", { className:
|
|
53
|
+
), logo && /* @__PURE__ */ _react2.default.createElement("div", { className: _chunkNBQEF4JDjs.cn.call(void 0, "_logo") }, /* @__PURE__ */ _react2.default.createElement(LinkComponent, { to: (_f = logo.link) != null ? _f : "/", href: (_g = logo.link) != null ? _g : "/" }, /* @__PURE__ */ _react2.default.createElement("img", { src: logo.src, alt: "Logo", className: _chunkNBQEF4JDjs.cn.call(void 0, "h-10", (_h = classNames == null ? void 0 : classNames.header) == null ? void 0 : _h.logo) }))), /* @__PURE__ */ _react2.default.createElement("nav", { className: _chunkNBQEF4JDjs.cn.call(void 0, "flex space-x-4 items-center", (_j = (_i = classNames == null ? void 0 : classNames.header) == null ? void 0 : _i.left) == null ? void 0 : _j.nav) }, leftMenus.map(
|
|
54
54
|
(item) => {
|
|
55
55
|
var _a2, _b2, _c2, _d2;
|
|
56
56
|
return item.link ? /* @__PURE__ */ _react2.default.createElement(
|
|
@@ -59,7 +59,7 @@ function SimpleLayout(props) {
|
|
|
59
59
|
key: item.label,
|
|
60
60
|
to: item.link,
|
|
61
61
|
href: item.link,
|
|
62
|
-
className:
|
|
62
|
+
className: _chunkNBQEF4JDjs.cn.call(void 0,
|
|
63
63
|
"text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline",
|
|
64
64
|
(_b2 = (_a2 = classNames == null ? void 0 : classNames.header) == null ? void 0 : _a2.left) == null ? void 0 : _b2.link,
|
|
65
65
|
item.className,
|
|
@@ -72,7 +72,7 @@ function SimpleLayout(props) {
|
|
|
72
72
|
{
|
|
73
73
|
key: item.label,
|
|
74
74
|
onClick: item.action,
|
|
75
|
-
className:
|
|
75
|
+
className: _chunkNBQEF4JDjs.cn.call(void 0,
|
|
76
76
|
"text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline",
|
|
77
77
|
(_d2 = (_c2 = classNames == null ? void 0 : classNames.header) == null ? void 0 : _c2.left) == null ? void 0 : _d2.link,
|
|
78
78
|
item.className,
|
|
@@ -83,7 +83,7 @@ function SimpleLayout(props) {
|
|
|
83
83
|
);
|
|
84
84
|
}
|
|
85
85
|
))),
|
|
86
|
-
/* @__PURE__ */ _react2.default.createElement("nav", { className:
|
|
86
|
+
/* @__PURE__ */ _react2.default.createElement("nav", { className: _chunkNBQEF4JDjs.cn.call(void 0, "hidden md:flex space-x-4 items-center", (_l = (_k = classNames == null ? void 0 : classNames.header) == null ? void 0 : _k.right) == null ? void 0 : _l.nav) }, rightMenus.map(
|
|
87
87
|
(item) => {
|
|
88
88
|
var _a2, _b2, _c2, _d2;
|
|
89
89
|
return item.link ? /* @__PURE__ */ _react2.default.createElement(
|
|
@@ -92,7 +92,7 @@ function SimpleLayout(props) {
|
|
|
92
92
|
key: item.label,
|
|
93
93
|
to: item.link,
|
|
94
94
|
href: item.link,
|
|
95
|
-
className:
|
|
95
|
+
className: _chunkNBQEF4JDjs.cn.call(void 0,
|
|
96
96
|
"text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline",
|
|
97
97
|
(_b2 = (_a2 = classNames == null ? void 0 : classNames.header) == null ? void 0 : _a2.right) == null ? void 0 : _b2.link,
|
|
98
98
|
item.className
|
|
@@ -104,7 +104,7 @@ function SimpleLayout(props) {
|
|
|
104
104
|
{
|
|
105
105
|
key: item.label,
|
|
106
106
|
onClick: item.action,
|
|
107
|
-
className:
|
|
107
|
+
className: _chunkNBQEF4JDjs.cn.call(void 0,
|
|
108
108
|
"text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline",
|
|
109
109
|
(_d2 = (_c2 = classNames == null ? void 0 : classNames.header) == null ? void 0 : _c2.right) == null ? void 0 : _d2.link,
|
|
110
110
|
item.className
|
|
@@ -113,17 +113,17 @@ function SimpleLayout(props) {
|
|
|
113
113
|
item.label
|
|
114
114
|
);
|
|
115
115
|
}
|
|
116
|
-
), userMenuSections.length > 0 && /* @__PURE__ */ _react2.default.createElement(
|
|
116
|
+
), userMenuSections.length > 0 && /* @__PURE__ */ _react2.default.createElement(_chunkBM53W77Tjs.UserMenus, { sections: userMenuSections, trigger: user == null ? void 0 : user.trigger, aslink })),
|
|
117
117
|
/* @__PURE__ */ _react2.default.createElement("button", { onClick: toggleMobileMenu, className: "md:hidden p-2 text-gray-700 hover:text-primary cursor-pointer" }, /* @__PURE__ */ _react2.default.createElement(_lucidereact.Menu, { className: "" }))
|
|
118
|
-
), isMobile && mobileMenuOpen && /* @__PURE__ */ _react2.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ _react2.default.createElement(
|
|
118
|
+
), isMobile && mobileMenuOpen && /* @__PURE__ */ _react2.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ _react2.default.createElement(_chunkA4VKE26Sjs.MobileMenu, { sections: userMenuSections, aslink, onClick: toggleMobileMenu })), /* @__PURE__ */ _react2.default.createElement("main", { className: _chunkNBQEF4JDjs.cn.call(void 0, "p-4 flex flex-col flex-1", classNames == null ? void 0 : classNames.content) }, !loading && /* @__PURE__ */ _react2.default.createElement("div", { className: "flex items-center justify-center h-full" }, children), /* @__PURE__ */ _react2.default.createElement("div", { className: _chunkNBQEF4JDjs.cn.call(void 0, "flex-1", (_m = classNames == null ? void 0 : classNames.content) == null ? void 0 : _m.bottom) })), footer && /* @__PURE__ */ _react2.default.createElement(
|
|
119
119
|
"footer",
|
|
120
120
|
{
|
|
121
|
-
className:
|
|
121
|
+
className: _chunkNBQEF4JDjs.cn.call(void 0,
|
|
122
122
|
"px-4 py-4 bg-gray-100 border-t border-gray-300 text-sm text-gray-600",
|
|
123
123
|
(_n = classNames == null ? void 0 : classNames.footer) == null ? void 0 : _n.wrapper
|
|
124
124
|
)
|
|
125
125
|
},
|
|
126
|
-
/* @__PURE__ */ _react2.default.createElement("nav", { className:
|
|
126
|
+
/* @__PURE__ */ _react2.default.createElement("nav", { className: _chunkNBQEF4JDjs.cn.call(void 0, "flex flex-wrap justify-center space-x-4", (_o = classNames == null ? void 0 : classNames.footer) == null ? void 0 : _o.nav) }, footerMenus.map(
|
|
127
127
|
(item) => {
|
|
128
128
|
var _a2, _b2;
|
|
129
129
|
return item.link ? /* @__PURE__ */ _react2.default.createElement(
|
|
@@ -132,7 +132,7 @@ function SimpleLayout(props) {
|
|
|
132
132
|
key: item.label,
|
|
133
133
|
to: item.link,
|
|
134
134
|
href: item.link,
|
|
135
|
-
className:
|
|
135
|
+
className: _chunkNBQEF4JDjs.cn.call(void 0,
|
|
136
136
|
"text-secondary hover:text-primary cursor-pointer no-underline",
|
|
137
137
|
(_a2 = classNames == null ? void 0 : classNames.footer) == null ? void 0 : _a2.link,
|
|
138
138
|
item.className
|
|
@@ -144,7 +144,7 @@ function SimpleLayout(props) {
|
|
|
144
144
|
{
|
|
145
145
|
key: item.label,
|
|
146
146
|
onClick: item.action,
|
|
147
|
-
className:
|
|
147
|
+
className: _chunkNBQEF4JDjs.cn.call(void 0,
|
|
148
148
|
"text-secondary hover:text-primary cursor-pointer no-underline",
|
|
149
149
|
(_b2 = classNames == null ? void 0 : classNames.footer) == null ? void 0 : _b2.link,
|
|
150
150
|
item.className
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/layouts/simple/index.js","../../../layouts/simple/index.tsx"],"names":["_a","_b","_c","_d"],"mappings":"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","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/layouts/simple/index.js","sourcesContent":[null,"\"use client\";\nimport React, { useState, useMemo, useEffect } from 'react';\nimport { Menu } from 'lucide-react';\nimport { cn } from '../../utils/ui';\nimport { UserMenus } from './user-menu';\nimport { MobileMenu } from './mobile-menu';\nimport type { MenuItem, UserMenuSection } from './types';\n\ninterface LayoutProps {\n logo?: {\n src?: string;\n link?: string;\n };\n user?: {\n menuSections: UserMenuSection[];\n trigger?: React.ReactNode;\n };\n left?: {\n menus: MenuItem[];\n };\n right?: {\n menus: MenuItem[];\n };\n sidebar?: {\n title: string;\n content: React.ReactNode;\n };\n footer?: {\n menus: MenuItem[];\n content?: string;\n };\n classNames?: {\n header?: {\n wrapper: string;\n logo?: string;\n left?: {\n nav?: string;\n link?: string;\n };\n right?: {\n nav?: string;\n link?: string;\n };\n };\n content?: {\n wrapper?: string;\n bottom?: string;\n };\n footer?: {\n wrapper?: string;\n nav?: string;\n link?: string;\n };\n };\n loading?: boolean;\n children?: React.ReactNode;\n aslink: React.ElementType;\n}\n\nexport default function SimpleLayout(props: LayoutProps) {\n const { logo, user, left, right, sidebar, footer, classNames, loading, children, aslink } = props;\n\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const [isMobile, setIsMobile] = useState(false);\n\n const LinkComponent = aslink ?? 'button';\n\n useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth < 768);\n };\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n const toggleMobileMenu = () => setMobileMenuOpen(!mobileMenuOpen);\n\n const leftMenus = left?.menus ?? [];\n const rightMenus = right?.menus ?? [];\n const topMenus = [...leftMenus, ...rightMenus];\n const userMenuSections = user?.menuSections ?? [];\n const footerMenus = footer?.menus ?? [];\n\n return (\n <div className=\"flex flex-col min-h-screen\">\n {/* Header */}\n <header\n className={cn(\n 'px-4 py-2 flex items-center justify-between bg-gray-100 border-b border-gray-300',\n classNames?.header?.wrapper,\n )}\n >\n <div className=\"flex items-center space-x-4\">\n {sidebar && (\n <button\n className=\"bg-transparent border-gray-400 hover:border-gray-500\"\n onClick={() => {\n /* open sidebar */\n }}\n >\n {/* icon */}\n </button>\n )}\n {logo && (\n <div className={cn('_logo')}>\n <LinkComponent to={logo.link ?? '/'} href={logo.link ?? '/'}>\n <img src={logo.src} alt=\"Logo\" className={cn('h-10', classNames?.header?.logo)} />\n </LinkComponent>\n </div>\n )}\n\n {/* Left Menus */}\n <nav className={cn('flex space-x-4 items-center', classNames?.header?.left?.nav)}>\n {leftMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.left?.link,\n item.className,\n item.title || !isMobile ? 'inline-block' : 'hidden',\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.left?.link,\n item.className,\n item.title || !isMobile ? 'inline-block' : 'hidden',\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n </div>\n\n {/* Right menus */}\n <nav className={cn('hidden md:flex space-x-4 items-center', classNames?.header?.right?.nav)}>\n {rightMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.right?.link,\n item.className,\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.right?.link,\n item.className,\n )}\n >\n {item.label}\n </button>\n ),\n )}\n {userMenuSections.length > 0 && (\n <UserMenus sections={userMenuSections} trigger={user?.trigger} aslink={aslink} />\n )}\n </nav>\n\n {/* Mobile menu button */}\n <button onClick={toggleMobileMenu} className=\"md:hidden p-2 text-gray-700 hover:text-primary cursor-pointer\">\n <Menu className=\"\" />\n </button>\n </header>\n\n {/* Mobile menu */}\n {isMobile && mobileMenuOpen && (\n <div className=\"w-full\">\n <MobileMenu sections={userMenuSections} aslink={aslink} onClick={toggleMobileMenu} />\n </div>\n )}\n\n {/* Main content */}\n <main className={cn('p-4 flex flex-col flex-1', classNames?.content)}>\n {!loading && <div className=\"flex items-center justify-center h-full\">{children}</div>}\n <div className={cn('flex-1', classNames?.content?.bottom)}></div>\n </main>\n\n {/* Footer */}\n {footer && (\n <footer\n className={cn(\n 'px-4 py-4 bg-gray-100 border-t border-gray-300 text-sm text-gray-600',\n classNames?.footer?.wrapper,\n )}\n >\n <nav className={cn('flex flex-wrap justify-center space-x-4', classNames?.footer?.nav)}>\n {footerMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.footer?.link,\n item.className,\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.footer?.link,\n item.className,\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n <div className=\"mt-2 text-center\">{footer?.content}</div>\n </footer>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/layouts/simple/index.js","../../../layouts/simple/index.tsx"],"names":["_a","_b","_c","_d"],"mappings":"AAAA,qLAAY;AACZ;AACE;AACF,0DAAgC;AAChC;AACE;AACF,0DAAgC;AAChC,mCAAgC;AAChC;AACE;AACF,0DAAgC;AAChC,mCAAgC;AAChC;AACA;ACZA,4EAAoD;AACpD,2CAAqB;AAgFN,SAAR,YAAA,CAA8B,KAAA,EAAoB;AAlFzD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmFE,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAS,QAAA,EAAU,OAAO,EAAA,EAAI,KAAA;AAE5F,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,EAAA,EAAI,6BAAA,KAAc,CAAA;AAC1D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,EAAA,EAAI,6BAAA,KAAc,CAAA;AAE9C,EAAA,MAAM,cAAA,EAAgB,OAAA,GAAA,KAAA,EAAA,OAAA,EAAU,QAAA;AAEhC,EAAA,8BAAA,CAAU,EAAA,GAAM;AACd,IAAA,MAAM,aAAA,EAAe,CAAA,EAAA,GAAM;AACzB,MAAA,WAAA,CAAY,MAAA,CAAO,WAAA,EAAa,GAAG,CAAA;AAAA,IACrC,CAAA;AACA,IAAA,YAAA,CAAa,CAAA;AACb,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,YAAY,CAAA;AAC9C,IAAA,OAAO,CAAA,EAAA,GAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,EAChE,CAAA,EAAG,CAAC,CAAC,CAAA;AAEL,EAAA,MAAM,iBAAA,EAAmB,CAAA,EAAA,GAAM,iBAAA,CAAkB,CAAC,cAAc,CAAA;AAEhE,EAAA,MAAM,UAAA,EAAA,CAAY,GAAA,EAAA,KAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,IAAA,CAAM,KAAA,EAAA,GAAN,KAAA,EAAA,GAAA,EAAe,CAAC,CAAA;AAClC,EAAA,MAAM,WAAA,EAAA,CAAa,GAAA,EAAA,MAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,KAAA,CAAO,KAAA,EAAA,GAAP,KAAA,EAAA,GAAA,EAAgB,CAAC,CAAA;AACpC,EAAA,MAAM,SAAA,EAAW,CAAC,GAAG,SAAA,EAAW,GAAG,UAAU,CAAA;AAC7C,EAAA,MAAM,iBAAA,EAAA,CAAmB,GAAA,EAAA,KAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,IAAA,CAAM,YAAA,EAAA,GAAN,KAAA,EAAA,GAAA,EAAsB,CAAC,CAAA;AAChD,EAAA,MAAM,YAAA,EAAA,CAAc,GAAA,EAAA,OAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,MAAA,CAAQ,KAAA,EAAA,GAAR,KAAA,EAAA,GAAA,EAAiB,CAAC,CAAA;AAEtC,EAAA,uBACE,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,CAAA,kBAEb,eAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,iCAAA;AAAA,QACT,kFAAA;AAAA,QAAA,CACA,GAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,MAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAoB;AAAA,MACtB;AAAA,IAAA,CAAA;AAAA,oBAEA,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,CAAA,EACZ,QAAA,mBACC,eAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,sDAAA;AAAA,QACV,OAAA,EAAS,CAAA,EAAA,GAAM;AAAA,QAEf;AAAA,MAAA;AAAA,IAGF,CAAA,EAED,KAAA,mBACC,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,iCAAA,OAAU,EAAA,CAAA,kBACxB,eAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,EAAA,EAAA,CAAI,GAAA,EAAA,IAAA,CAAK,IAAA,EAAA,GAAL,KAAA,EAAA,GAAA,EAAa,GAAA,EAAK,IAAA,EAAA,CAAM,GAAA,EAAA,IAAA,CAAK,IAAA,EAAA,GAAL,KAAA,EAAA,GAAA,EAAa,IAAA,CAAA,kBACtD,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,GAAA,EAAI,MAAA,EAAO,SAAA,EAAW,iCAAA,MAAG,EAAA,CAAQ,GAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,MAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAoB,IAAI,EAAA,CAAG,CAClF,CACF,CAAA,kBAIF,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,iCAAA,6BAAG,EAAA,CAA+B,GAAA,EAAA,CAAA,GAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,MAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAoB,IAAA,EAAA,GAApB,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAA0B,GAAG,EAAA,CAAA,EAC5E,SAAA,CAAU,GAAA;AAAA,MAAI,CAAC,IAAA,EAAA,GAAM;AAzIlC,QAAA,IAAAA,GAAAA,EAAAC,GAAAA,EAAAC,GAAAA,EAAAC,GAAAA;AA0Ic,QAAA,OAAA,IAAA,CAAK,KAAA,kBACH,eAAA,CAAA,aAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,IAAA,CAAK,KAAA;AAAA,YACV,EAAA,EAAI,IAAA,CAAK,IAAA;AAAA,YACT,IAAA,EAAM,IAAA,CAAK,IAAA;AAAA,YACX,SAAA,EAAW,iCAAA;AAAA,cACT,gGAAA;AAAA,cAAA,CACAF,IAAAA,EAAAA,CAAAD,IAAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,MAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAAA,GAAAA,CAAoB,IAAA,EAAA,GAApB,KAAA,EAAA,KAAA,EAAA,EAAAC,GAAAA,CAA0B,IAAA;AAAA,cAC1B,IAAA,CAAK,SAAA;AAAA,cACL,IAAA,CAAK,MAAA,GAAS,CAAC,SAAA,EAAW,eAAA,EAAiB;AAAA,YAC7C;AAAA,UAAA,CAAA;AAAA,UAEC,IAAA,CAAK;AAAA,QACR,EAAA,kBAEA,eAAA,CAAA,aAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,IAAA,CAAK,KAAA;AAAA,YACV,OAAA,EAAS,IAAA,CAAK,MAAA;AAAA,YACd,SAAA,EAAW,iCAAA;AAAA,cACT,gGAAA;AAAA,cAAA,CACAE,IAAAA,EAAAA,CAAAD,IAAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,MAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAAA,GAAAA,CAAoB,IAAA,EAAA,GAApB,KAAA,EAAA,KAAA,EAAA,EAAAC,GAAAA,CAA0B,IAAA;AAAA,cAC1B,IAAA,CAAK,SAAA;AAAA,cACL,IAAA,CAAK,MAAA,GAAS,CAAC,SAAA,EAAW,eAAA,EAAiB;AAAA,YAC7C;AAAA,UAAA,CAAA;AAAA,UAEC,IAAA,CAAK;AAAA,QACR,CAAA;AAAA,MAAA;AAAA,IAEJ,CACF,CACF,CAAA;AAAA,oBAGA,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,iCAAA,uCAAG,EAAA,CAAyC,GAAA,EAAA,CAAA,GAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,MAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAoB,KAAA,EAAA,GAApB,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAA2B,GAAG,EAAA,CAAA,EACvF,UAAA,CAAW,GAAA;AAAA,MAAI,CAAC,IAAA,EAAA,GAAM;AA5KjC,QAAA,IAAAH,GAAAA,EAAAC,GAAAA,EAAAC,GAAAA,EAAAC,GAAAA;AA6KY,QAAA,OAAA,IAAA,CAAK,KAAA,kBACH,eAAA,CAAA,aAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,IAAA,CAAK,KAAA;AAAA,YACV,EAAA,EAAI,IAAA,CAAK,IAAA;AAAA,YACT,IAAA,EAAM,IAAA,CAAK,IAAA;AAAA,YACX,SAAA,EAAW,iCAAA;AAAA,cACT,gGAAA;AAAA,cAAA,CACAF,IAAAA,EAAAA,CAAAD,IAAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,MAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAAA,GAAAA,CAAoB,KAAA,EAAA,GAApB,KAAA,EAAA,KAAA,EAAA,EAAAC,GAAAA,CAA2B,IAAA;AAAA,cAC3B,IAAA,CAAK;AAAA,YACP;AAAA,UAAA,CAAA;AAAA,UAEC,IAAA,CAAK;AAAA,QACR,EAAA,kBAEA,eAAA,CAAA,aAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,IAAA,CAAK,KAAA;AAAA,YACV,OAAA,EAAS,IAAA,CAAK,MAAA;AAAA,YACd,SAAA,EAAW,iCAAA;AAAA,cACT,gGAAA;AAAA,cAAA,CACAE,IAAAA,EAAAA,CAAAD,IAAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,MAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAAA,GAAAA,CAAoB,KAAA,EAAA,GAApB,KAAA,EAAA,KAAA,EAAA,EAAAC,GAAAA,CAA2B,IAAA;AAAA,cAC3B,IAAA,CAAK;AAAA,YACP;AAAA,UAAA,CAAA;AAAA,UAEC,IAAA,CAAK;AAAA,QACR,CAAA;AAAA,MAAA;AAAA,IAEJ,CAAA,EACC,gBAAA,CAAiB,OAAA,EAAS,EAAA,mBACzB,eAAA,CAAA,aAAA,CAAC,0BAAA,EAAA,EAAU,QAAA,EAAU,gBAAA,EAAkB,OAAA,EAAS,KAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,IAAA,CAAM,OAAA,EAAS,OAAA,CAAgB,CAEnF,CAAA;AAAA,oBAGA,eAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAO,OAAA,EAAS,gBAAA,EAAkB,SAAA,EAAU,gEAAA,CAAA,kBAC3C,eAAA,CAAA,aAAA,CAAC,iBAAA,EAAA,EAAK,SAAA,EAAU,GAAA,CAAG,CACrB;AAAA,EACF,CAAA,EAGC,SAAA,GAAY,eAAA,mBACX,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,CAAA,kBACb,eAAA,CAAA,aAAA,CAAC,2BAAA,EAAA,EAAW,QAAA,EAAU,gBAAA,EAAkB,MAAA,EAAgB,OAAA,EAAS,iBAAA,CAAkB,CACrF,CAAA,kBAIF,eAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,iCAAA,0BAAG,EAA4B,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,OAAO,EAAA,CAAA,EAChE,CAAC,QAAA,mBAAW,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,CAAA,EAA2C,QAAS,CAAA,kBAChF,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,iCAAA,QAAG,EAAA,CAAU,GAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,OAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAqB,MAAM,EAAA,CAAG,CAC7D,CAAA,EAGC,OAAA,mBACC,eAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,iCAAA;AAAA,QACT,sEAAA;AAAA,QAAA,CACA,GAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,MAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAoB;AAAA,MACtB;AAAA,IAAA,CAAA;AAAA,oBAEA,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,iCAAA,yCAAG,EAAA,CAA2C,GAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,MAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAoB,GAAG,EAAA,CAAA,EAClF,WAAA,CAAY,GAAA;AAAA,MAAI,CAAC,IAAA,EAAA,GAAM;AAzOpC,QAAA,IAAAH,GAAAA,EAAAC,GAAAA;AA0Oc,QAAA,OAAA,IAAA,CAAK,KAAA,kBACH,eAAA,CAAA,aAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,IAAA,CAAK,KAAA;AAAA,YACV,EAAA,EAAI,IAAA,CAAK,IAAA;AAAA,YACT,IAAA,EAAM,IAAA,CAAK,IAAA;AAAA,YACX,SAAA,EAAW,iCAAA;AAAA,cACT,+DAAA;AAAA,cAAA,CACAD,IAAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,MAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAAA,GAAAA,CAAoB,IAAA;AAAA,cACpB,IAAA,CAAK;AAAA,YACP;AAAA,UAAA,CAAA;AAAA,UAEC,IAAA,CAAK;AAAA,QACR,EAAA,kBAEA,eAAA,CAAA,aAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,IAAA,CAAK,KAAA;AAAA,YACV,OAAA,EAAS,IAAA,CAAK,MAAA;AAAA,YACd,SAAA,EAAW,iCAAA;AAAA,cACT,+DAAA;AAAA,cAAA,CACAC,IAAAA,EAAA,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,MAAA,EAAA,GAAZ,KAAA,EAAA,KAAA,EAAA,EAAAA,GAAAA,CAAoB,IAAA;AAAA,cACpB,IAAA,CAAK;AAAA,YACP;AAAA,UAAA,CAAA;AAAA,UAEC,IAAA,CAAK;AAAA,QACR,CAAA;AAAA,MAAA;AAAA,IAEJ,CACF,CAAA;AAAA,oBACA,eAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,CAAA,EAAoB,OAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,MAAA,CAAQ,OAAQ;AAAA,EACrD,CAEJ,CAAA;AAEJ;AD7GA;AACE;AACF,+BAAC","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/layouts/simple/index.js","sourcesContent":[null,"\"use client\";\nimport React, { useState, useMemo, useEffect } from 'react';\nimport { Menu } from 'lucide-react';\nimport { cn } from '../../utils/ui';\nimport { UserMenus } from './user-menu';\nimport { MobileMenu } from './mobile-menu';\nimport type { MenuItem, UserMenuSection } from './types';\n\n/**\n * Props for {@link SimpleLayout}. The layout renders a fixed header with\n * optional left/right nav menus, an optional user dropdown, an optional\n * mobile menu, an optional footer, and a main content slot for `children`.\n *\n * `aslink` is required: pass your router's `Link` component so internal\n * navigation works without re-implementing it. The same component is\n * rendered for both `to=` (React Router) and `href=` (Next.js) prop styles.\n */\ninterface LayoutProps {\n logo?: {\n src?: string;\n link?: string;\n };\n user?: {\n menuSections: UserMenuSection[];\n trigger?: React.ReactNode;\n };\n left?: {\n menus: MenuItem[];\n };\n right?: {\n menus: MenuItem[];\n };\n sidebar?: {\n title: string;\n content: React.ReactNode;\n };\n footer?: {\n menus: MenuItem[];\n content?: string;\n };\n classNames?: {\n header?: {\n wrapper: string;\n logo?: string;\n left?: {\n nav?: string;\n link?: string;\n };\n right?: {\n nav?: string;\n link?: string;\n };\n };\n content?: {\n wrapper?: string;\n bottom?: string;\n };\n footer?: {\n wrapper?: string;\n nav?: string;\n link?: string;\n };\n };\n loading?: boolean;\n children?: React.ReactNode;\n aslink: React.ElementType;\n}\n\n/**\n * Header + main + footer layout for content-light pages. Mobile-aware\n * (collapsible menu under 768px). Compose the inner pieces with the\n * `classNames` slots rather than overriding internal markup.\n *\n * @example\n * <SimpleLayout\n * aslink={Link}\n * left={{ menus: [{ label: 'Home', link: '/' }] }}\n * user={{ menuSections: [...] }}\n * >\n * {children}\n * </SimpleLayout>\n */\nexport default function SimpleLayout(props: LayoutProps) {\n const { logo, user, left, right, sidebar, footer, classNames, loading, children, aslink } = props;\n\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const [isMobile, setIsMobile] = useState(false);\n\n const LinkComponent = aslink ?? 'button';\n\n useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth < 768);\n };\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n const toggleMobileMenu = () => setMobileMenuOpen(!mobileMenuOpen);\n\n const leftMenus = left?.menus ?? [];\n const rightMenus = right?.menus ?? [];\n const topMenus = [...leftMenus, ...rightMenus];\n const userMenuSections = user?.menuSections ?? [];\n const footerMenus = footer?.menus ?? [];\n\n return (\n <div className=\"flex flex-col min-h-screen\">\n {/* Header */}\n <header\n className={cn(\n 'px-4 py-2 flex items-center justify-between bg-gray-100 border-b border-gray-300',\n classNames?.header?.wrapper,\n )}\n >\n <div className=\"flex items-center space-x-4\">\n {sidebar && (\n <button\n className=\"bg-transparent border-gray-400 hover:border-gray-500\"\n onClick={() => {\n /* open sidebar */\n }}\n >\n {/* icon */}\n </button>\n )}\n {logo && (\n <div className={cn('_logo')}>\n <LinkComponent to={logo.link ?? '/'} href={logo.link ?? '/'}>\n <img src={logo.src} alt=\"Logo\" className={cn('h-10', classNames?.header?.logo)} />\n </LinkComponent>\n </div>\n )}\n\n {/* Left Menus */}\n <nav className={cn('flex space-x-4 items-center', classNames?.header?.left?.nav)}>\n {leftMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.left?.link,\n item.className,\n item.title || !isMobile ? 'inline-block' : 'hidden',\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.left?.link,\n item.className,\n item.title || !isMobile ? 'inline-block' : 'hidden',\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n </div>\n\n {/* Right menus */}\n <nav className={cn('hidden md:flex space-x-4 items-center', classNames?.header?.right?.nav)}>\n {rightMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.right?.link,\n item.className,\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.right?.link,\n item.className,\n )}\n >\n {item.label}\n </button>\n ),\n )}\n {userMenuSections.length > 0 && (\n <UserMenus sections={userMenuSections} trigger={user?.trigger} aslink={aslink} />\n )}\n </nav>\n\n {/* Mobile menu button */}\n <button onClick={toggleMobileMenu} className=\"md:hidden p-2 text-gray-700 hover:text-primary cursor-pointer\">\n <Menu className=\"\" />\n </button>\n </header>\n\n {/* Mobile menu */}\n {isMobile && mobileMenuOpen && (\n <div className=\"w-full\">\n <MobileMenu sections={userMenuSections} aslink={aslink} onClick={toggleMobileMenu} />\n </div>\n )}\n\n {/* Main content */}\n <main className={cn('p-4 flex flex-col flex-1', classNames?.content)}>\n {!loading && <div className=\"flex items-center justify-center h-full\">{children}</div>}\n <div className={cn('flex-1', classNames?.content?.bottom)}></div>\n </main>\n\n {/* Footer */}\n {footer && (\n <footer\n className={cn(\n 'px-4 py-4 bg-gray-100 border-t border-gray-300 text-sm text-gray-600',\n classNames?.footer?.wrapper,\n )}\n >\n <nav className={cn('flex flex-wrap justify-center space-x-4', classNames?.footer?.nav)}>\n {footerMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.footer?.link,\n item.className,\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.footer?.link,\n item.className,\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n <div className=\"mt-2 text-center\">{footer?.content}</div>\n </footer>\n )}\n </div>\n );\n}\n"]}
|
package/layouts/simple/index.mjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
MobileMenu
|
|
4
|
-
} from "../../chunk-OVHPXYDN.mjs";
|
|
5
2
|
import {
|
|
6
3
|
UserMenus
|
|
7
|
-
} from "../../chunk-
|
|
8
|
-
import
|
|
4
|
+
} from "../../chunk-MBDPHX4P.mjs";
|
|
5
|
+
import {
|
|
6
|
+
MobileMenu
|
|
7
|
+
} from "../../chunk-B6SBEOMV.mjs";
|
|
8
|
+
import "../../chunk-7S5XDE3W.mjs";
|
|
9
9
|
import {
|
|
10
10
|
cn
|
|
11
|
-
} from "../../chunk-
|
|
11
|
+
} from "../../chunk-KKCJ2GMO.mjs";
|
|
12
12
|
import "../../chunk-YOSPWY5K.mjs";
|
|
13
13
|
|
|
14
14
|
// layouts/simple/index.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../layouts/simple/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useState, useMemo, useEffect } from 'react';\nimport { Menu } from 'lucide-react';\nimport { cn } from '../../utils/ui';\nimport { UserMenus } from './user-menu';\nimport { MobileMenu } from './mobile-menu';\nimport type { MenuItem, UserMenuSection } from './types';\n\ninterface LayoutProps {\n logo?: {\n src?: string;\n link?: string;\n };\n user?: {\n menuSections: UserMenuSection[];\n trigger?: React.ReactNode;\n };\n left?: {\n menus: MenuItem[];\n };\n right?: {\n menus: MenuItem[];\n };\n sidebar?: {\n title: string;\n content: React.ReactNode;\n };\n footer?: {\n menus: MenuItem[];\n content?: string;\n };\n classNames?: {\n header?: {\n wrapper: string;\n logo?: string;\n left?: {\n nav?: string;\n link?: string;\n };\n right?: {\n nav?: string;\n link?: string;\n };\n };\n content?: {\n wrapper?: string;\n bottom?: string;\n };\n footer?: {\n wrapper?: string;\n nav?: string;\n link?: string;\n };\n };\n loading?: boolean;\n children?: React.ReactNode;\n aslink: React.ElementType;\n}\n\nexport default function SimpleLayout(props: LayoutProps) {\n const { logo, user, left, right, sidebar, footer, classNames, loading, children, aslink } = props;\n\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const [isMobile, setIsMobile] = useState(false);\n\n const LinkComponent = aslink ?? 'button';\n\n useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth < 768);\n };\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n const toggleMobileMenu = () => setMobileMenuOpen(!mobileMenuOpen);\n\n const leftMenus = left?.menus ?? [];\n const rightMenus = right?.menus ?? [];\n const topMenus = [...leftMenus, ...rightMenus];\n const userMenuSections = user?.menuSections ?? [];\n const footerMenus = footer?.menus ?? [];\n\n return (\n <div className=\"flex flex-col min-h-screen\">\n {/* Header */}\n <header\n className={cn(\n 'px-4 py-2 flex items-center justify-between bg-gray-100 border-b border-gray-300',\n classNames?.header?.wrapper,\n )}\n >\n <div className=\"flex items-center space-x-4\">\n {sidebar && (\n <button\n className=\"bg-transparent border-gray-400 hover:border-gray-500\"\n onClick={() => {\n /* open sidebar */\n }}\n >\n {/* icon */}\n </button>\n )}\n {logo && (\n <div className={cn('_logo')}>\n <LinkComponent to={logo.link ?? '/'} href={logo.link ?? '/'}>\n <img src={logo.src} alt=\"Logo\" className={cn('h-10', classNames?.header?.logo)} />\n </LinkComponent>\n </div>\n )}\n\n {/* Left Menus */}\n <nav className={cn('flex space-x-4 items-center', classNames?.header?.left?.nav)}>\n {leftMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.left?.link,\n item.className,\n item.title || !isMobile ? 'inline-block' : 'hidden',\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.left?.link,\n item.className,\n item.title || !isMobile ? 'inline-block' : 'hidden',\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n </div>\n\n {/* Right menus */}\n <nav className={cn('hidden md:flex space-x-4 items-center', classNames?.header?.right?.nav)}>\n {rightMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.right?.link,\n item.className,\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.right?.link,\n item.className,\n )}\n >\n {item.label}\n </button>\n ),\n )}\n {userMenuSections.length > 0 && (\n <UserMenus sections={userMenuSections} trigger={user?.trigger} aslink={aslink} />\n )}\n </nav>\n\n {/* Mobile menu button */}\n <button onClick={toggleMobileMenu} className=\"md:hidden p-2 text-gray-700 hover:text-primary cursor-pointer\">\n <Menu className=\"\" />\n </button>\n </header>\n\n {/* Mobile menu */}\n {isMobile && mobileMenuOpen && (\n <div className=\"w-full\">\n <MobileMenu sections={userMenuSections} aslink={aslink} onClick={toggleMobileMenu} />\n </div>\n )}\n\n {/* Main content */}\n <main className={cn('p-4 flex flex-col flex-1', classNames?.content)}>\n {!loading && <div className=\"flex items-center justify-center h-full\">{children}</div>}\n <div className={cn('flex-1', classNames?.content?.bottom)}></div>\n </main>\n\n {/* Footer */}\n {footer && (\n <footer\n className={cn(\n 'px-4 py-4 bg-gray-100 border-t border-gray-300 text-sm text-gray-600',\n classNames?.footer?.wrapper,\n )}\n >\n <nav className={cn('flex flex-wrap justify-center space-x-4', classNames?.footer?.nav)}>\n {footerMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.footer?.link,\n item.className,\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.footer?.link,\n item.className,\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n <div className=\"mt-2 text-center\">{footer?.content}</div>\n </footer>\n )}\n </div>\n );\n}\n"],"mappings":"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","names":["_a","_b","_c","_d"]}
|
|
1
|
+
{"version":3,"sources":["../../../layouts/simple/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useState, useMemo, useEffect } from 'react';\nimport { Menu } from 'lucide-react';\nimport { cn } from '../../utils/ui';\nimport { UserMenus } from './user-menu';\nimport { MobileMenu } from './mobile-menu';\nimport type { MenuItem, UserMenuSection } from './types';\n\n/**\n * Props for {@link SimpleLayout}. The layout renders a fixed header with\n * optional left/right nav menus, an optional user dropdown, an optional\n * mobile menu, an optional footer, and a main content slot for `children`.\n *\n * `aslink` is required: pass your router's `Link` component so internal\n * navigation works without re-implementing it. The same component is\n * rendered for both `to=` (React Router) and `href=` (Next.js) prop styles.\n */\ninterface LayoutProps {\n logo?: {\n src?: string;\n link?: string;\n };\n user?: {\n menuSections: UserMenuSection[];\n trigger?: React.ReactNode;\n };\n left?: {\n menus: MenuItem[];\n };\n right?: {\n menus: MenuItem[];\n };\n sidebar?: {\n title: string;\n content: React.ReactNode;\n };\n footer?: {\n menus: MenuItem[];\n content?: string;\n };\n classNames?: {\n header?: {\n wrapper: string;\n logo?: string;\n left?: {\n nav?: string;\n link?: string;\n };\n right?: {\n nav?: string;\n link?: string;\n };\n };\n content?: {\n wrapper?: string;\n bottom?: string;\n };\n footer?: {\n wrapper?: string;\n nav?: string;\n link?: string;\n };\n };\n loading?: boolean;\n children?: React.ReactNode;\n aslink: React.ElementType;\n}\n\n/**\n * Header + main + footer layout for content-light pages. Mobile-aware\n * (collapsible menu under 768px). Compose the inner pieces with the\n * `classNames` slots rather than overriding internal markup.\n *\n * @example\n * <SimpleLayout\n * aslink={Link}\n * left={{ menus: [{ label: 'Home', link: '/' }] }}\n * user={{ menuSections: [...] }}\n * >\n * {children}\n * </SimpleLayout>\n */\nexport default function SimpleLayout(props: LayoutProps) {\n const { logo, user, left, right, sidebar, footer, classNames, loading, children, aslink } = props;\n\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const [isMobile, setIsMobile] = useState(false);\n\n const LinkComponent = aslink ?? 'button';\n\n useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth < 768);\n };\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n const toggleMobileMenu = () => setMobileMenuOpen(!mobileMenuOpen);\n\n const leftMenus = left?.menus ?? [];\n const rightMenus = right?.menus ?? [];\n const topMenus = [...leftMenus, ...rightMenus];\n const userMenuSections = user?.menuSections ?? [];\n const footerMenus = footer?.menus ?? [];\n\n return (\n <div className=\"flex flex-col min-h-screen\">\n {/* Header */}\n <header\n className={cn(\n 'px-4 py-2 flex items-center justify-between bg-gray-100 border-b border-gray-300',\n classNames?.header?.wrapper,\n )}\n >\n <div className=\"flex items-center space-x-4\">\n {sidebar && (\n <button\n className=\"bg-transparent border-gray-400 hover:border-gray-500\"\n onClick={() => {\n /* open sidebar */\n }}\n >\n {/* icon */}\n </button>\n )}\n {logo && (\n <div className={cn('_logo')}>\n <LinkComponent to={logo.link ?? '/'} href={logo.link ?? '/'}>\n <img src={logo.src} alt=\"Logo\" className={cn('h-10', classNames?.header?.logo)} />\n </LinkComponent>\n </div>\n )}\n\n {/* Left Menus */}\n <nav className={cn('flex space-x-4 items-center', classNames?.header?.left?.nav)}>\n {leftMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.left?.link,\n item.className,\n item.title || !isMobile ? 'inline-block' : 'hidden',\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.left?.link,\n item.className,\n item.title || !isMobile ? 'inline-block' : 'hidden',\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n </div>\n\n {/* Right menus */}\n <nav className={cn('hidden md:flex space-x-4 items-center', classNames?.header?.right?.nav)}>\n {rightMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.right?.link,\n item.className,\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.header?.right?.link,\n item.className,\n )}\n >\n {item.label}\n </button>\n ),\n )}\n {userMenuSections.length > 0 && (\n <UserMenus sections={userMenuSections} trigger={user?.trigger} aslink={aslink} />\n )}\n </nav>\n\n {/* Mobile menu button */}\n <button onClick={toggleMobileMenu} className=\"md:hidden p-2 text-gray-700 hover:text-primary cursor-pointer\">\n <Menu className=\"\" />\n </button>\n </header>\n\n {/* Mobile menu */}\n {isMobile && mobileMenuOpen && (\n <div className=\"w-full\">\n <MobileMenu sections={userMenuSections} aslink={aslink} onClick={toggleMobileMenu} />\n </div>\n )}\n\n {/* Main content */}\n <main className={cn('p-4 flex flex-col flex-1', classNames?.content)}>\n {!loading && <div className=\"flex items-center justify-center h-full\">{children}</div>}\n <div className={cn('flex-1', classNames?.content?.bottom)}></div>\n </main>\n\n {/* Footer */}\n {footer && (\n <footer\n className={cn(\n 'px-4 py-4 bg-gray-100 border-t border-gray-300 text-sm text-gray-600',\n classNames?.footer?.wrapper,\n )}\n >\n <nav className={cn('flex flex-wrap justify-center space-x-4', classNames?.footer?.nav)}>\n {footerMenus.map((item) =>\n item.link ? (\n <LinkComponent\n key={item.label}\n to={item.link}\n href={item.link}\n className={cn(\n 'text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.footer?.link,\n item.className,\n )}\n >\n {item.label}\n </LinkComponent>\n ) : (\n <button\n key={item.label}\n onClick={item.action}\n className={cn(\n 'text-secondary hover:text-primary cursor-pointer no-underline',\n classNames?.footer?.link,\n item.className,\n )}\n >\n {item.label}\n </button>\n ),\n )}\n </nav>\n <div className=\"mt-2 text-center\">{footer?.content}</div>\n </footer>\n )}\n </div>\n );\n}\n"],"mappings":"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","names":["_a","_b","_c","_d"]}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
6
|
-
require('../../chunk-
|
|
5
|
+
var _chunkA4VKE26Sjs = require('../../chunk-A4VKE26S.js');
|
|
6
|
+
require('../../chunk-NBQEF4JD.js');
|
|
7
7
|
require('../../chunk-2NMEKWO5.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
exports.MobileMenu =
|
|
10
|
+
exports.MobileMenu = _chunkA4VKE26Sjs.MobileMenu;
|
|
11
11
|
//# sourceMappingURL=mobile-menu.js.map
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single menu entry rendered by {@link SimpleLayout}. Either `link` (for
|
|
3
|
+
* navigation) or `action` (for callbacks) should be supplied; `link` wins
|
|
4
|
+
* when both are present. `title: true` hides the entry on mobile widths and
|
|
5
|
+
* surfaces it as a section title in the mobile menu instead.
|
|
6
|
+
*/
|
|
1
7
|
interface MenuItem {
|
|
2
8
|
label: string;
|
|
3
9
|
icon?: React.ReactNode;
|
|
@@ -6,6 +12,11 @@ interface MenuItem {
|
|
|
6
12
|
className?: string;
|
|
7
13
|
title?: boolean;
|
|
8
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Group of items rendered inside the user dropdown. A section with
|
|
17
|
+
* `separator: true` renders as a divider; otherwise `items` (if any) is
|
|
18
|
+
* rendered under `label`.
|
|
19
|
+
*/
|
|
9
20
|
interface UserMenuSection {
|
|
10
21
|
label?: string;
|
|
11
22
|
separator?: boolean;
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single menu entry rendered by {@link SimpleLayout}. Either `link` (for
|
|
3
|
+
* navigation) or `action` (for callbacks) should be supplied; `link` wins
|
|
4
|
+
* when both are present. `title: true` hides the entry on mobile widths and
|
|
5
|
+
* surfaces it as a section title in the mobile menu instead.
|
|
6
|
+
*/
|
|
1
7
|
interface MenuItem {
|
|
2
8
|
label: string;
|
|
3
9
|
icon?: React.ReactNode;
|
|
@@ -6,6 +12,11 @@ interface MenuItem {
|
|
|
6
12
|
className?: string;
|
|
7
13
|
title?: boolean;
|
|
8
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Group of items rendered inside the user dropdown. A section with
|
|
17
|
+
* `separator: true` renders as a divider; otherwise `items` (if any) is
|
|
18
|
+
* rendered under `label`.
|
|
19
|
+
*/
|
|
9
20
|
interface UserMenuSection {
|
|
10
21
|
label?: string;
|
|
11
22
|
separator?: boolean;
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
6
|
-
require('../../chunk-
|
|
7
|
-
require('../../chunk-
|
|
5
|
+
var _chunkBM53W77Tjs = require('../../chunk-BM53W77T.js');
|
|
6
|
+
require('../../chunk-XWASPFJ7.js');
|
|
7
|
+
require('../../chunk-NBQEF4JD.js');
|
|
8
8
|
require('../../chunk-2NMEKWO5.js');
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
exports.UserMenus =
|
|
11
|
+
exports.UserMenus = _chunkBM53W77Tjs.UserMenus;
|
|
12
12
|
//# sourceMappingURL=user-menu.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
UserMenus
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
6
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-MBDPHX4P.mjs";
|
|
5
|
+
import "../../chunk-7S5XDE3W.mjs";
|
|
6
|
+
import "../../chunk-KKCJ2GMO.mjs";
|
|
7
7
|
import "../../chunk-YOSPWY5K.mjs";
|
|
8
8
|
export {
|
|
9
9
|
UserMenus
|
package/llms.txt
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# @egose/shadcn-theme
|
|
2
|
+
|
|
3
|
+
> shadcn/ui-style React component theme. Deep-import only — every module is its own subpath. All shipped modules are `"use client"`.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
npm i @egose/shadcn-theme react react-dom react-hook-form sonner
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Peers: react ^18.3.1 || ^19.0.0 · react-dom ^18.3.1 || ^19.0.0 · react-hook-form ^7.54.2 · sonner ^2.0.7 · tailwindcss v4 (consumer-side setup).
|
|
12
|
+
|
|
13
|
+
## Subpath map
|
|
14
|
+
|
|
15
|
+
### UI primitives — `@egose/shadcn-theme/components/ui/<name>`
|
|
16
|
+
|
|
17
|
+
`accordion` · `alert` · `alert-dialog` · `aspect-ratio` · `avatar` · `badge` · `basic-alert` · `breadcrumb` · `button` · `button-group` · `calendar` · `card` · `carousel` · `checkbox` · `collapsible` · `combobox` · `command` · `context-menu` · `copy-button` · `dialog` · `direction` · `drawer` · `dropdown-menu` · `empty` · `field` · `hover-card` · `input` · `input-group` · `input-otp` · `item` · `kbd` · `label` · `menubar` · `multi-select` · `native-select` · `navigation-menu` · `pagination` · `popover` · `progress` · `radio-group` · `resizable` · `scroll-area` · `select` · `separator` · `sheet` · `sidebar` · `skeleton` · `slider` · `sonner` · `spinner` · `switch` · `table` · `tabs` · `tag-picker` · `textarea` · `toggle` · `toggle-group` · `tooltip` · `unstyled-button` · `extension/file-input`
|
|
18
|
+
|
|
19
|
+
### Form fields (react-hook-form) — `@egose/shadcn-theme/components/form/<name>`
|
|
20
|
+
|
|
21
|
+
`checkbox` · `date-picker` · `date-range-picker` · `error` · `hook-checkbox` · `hook-date-picker` · `hook-multi-select` · `hook-native-select` · `hook-searchable-select` · `hook-select` · `hook-tag-picker` · `hook-text-input` · `hook-textarea` · `hook-time-input` · `multi-select` · `native-select` · `searchable-select` · `select` · `tag-picker` · `text-input` · `textarea` · `time-input` · `types`
|
|
22
|
+
|
|
23
|
+
### Widgets — `@egose/shadcn-theme/components/widgets/<name>`
|
|
24
|
+
|
|
25
|
+
- `dialog-manager` (and `dialog-manager/*`): `DialogProvider`, `useDialog`, `createTypedDialog`, `DialogContext`, `DialogProps`, `TypedDialogComponent`
|
|
26
|
+
|
|
27
|
+
### Hooks — `@egose/shadcn-theme/hooks/<name>`
|
|
28
|
+
|
|
29
|
+
- `use-clipboard` → `useClipboard({ timeout? })` → `{ copied, copy, error }`
|
|
30
|
+
- `use-mobile` → `useIsMobile()` → `boolean`
|
|
31
|
+
|
|
32
|
+
### Utils — `@egose/shadcn-theme/utils/<name>`
|
|
33
|
+
|
|
34
|
+
- `ui` → `cn(...inputs: ClassValue[])` (clsx + tailwind-merge)
|
|
35
|
+
- `date` → `isEqualDate`, `isEqualDates`
|
|
36
|
+
- `time` → `convertToHours(value, asNumber?)` (parses `90m`, `1.5h`, `3600s`, bare numbers)
|
|
37
|
+
|
|
38
|
+
### Layouts — `@egose/shadcn-theme/layouts/<name>`
|
|
39
|
+
|
|
40
|
+
- `simple` (and `simple/*`): `SimpleLayout` (default) · `MenuItem`, `UserMenuSection` (types)
|
|
41
|
+
- `sidebar1` (and `sidebar1/*`): `SidebarLayout` (default) · `setLayoutHeader`, `headerStore` · `ISidebarData`, `ISidebarContext`, `INavUser`, `INavUserMenuItem`, `INavMenu`, `IMenuItem`, `IMenuSubItem`, `INavContext` (types) · `AppSidebar`, `NavUser`, `NavMenus`, `ContextSwitcher`, `ThemeSwitcher`, `LinkPlaceholder`
|
|
42
|
+
|
|
43
|
+
## Canonical patterns
|
|
44
|
+
|
|
45
|
+
```tsx
|
|
46
|
+
"use client";
|
|
47
|
+
|
|
48
|
+
import { Button } from "@egose/shadcn-theme/components/ui/button";
|
|
49
|
+
import { FormTextInput } from "@egose/shadcn-theme/components/form/text-input";
|
|
50
|
+
import { useClipboard } from "@egose/shadcn-theme/hooks/use-clipboard";
|
|
51
|
+
import { cn } from "@egose/shadcn-theme/utils/ui";
|
|
52
|
+
import SimpleLayout from "@egose/shadcn-theme/layouts/simple";
|
|
53
|
+
|
|
54
|
+
export function Demo() {
|
|
55
|
+
const { copy, copied } = useClipboard();
|
|
56
|
+
return (
|
|
57
|
+
<SimpleLayout aslink={Link} left={{ menus: [{ label: "Home", link: "/" }] }}>
|
|
58
|
+
<Button variant="primary" loading={copied} onClick={() => copy("hi")}>
|
|
59
|
+
{copied ? "Copied" : "Copy"}
|
|
60
|
+
</Button>
|
|
61
|
+
<FormTextInput name="title" label="Title" required />
|
|
62
|
+
</SimpleLayout>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Promise-based dialog flow:
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
"use client";
|
|
71
|
+
import { DialogProvider, useDialog, createTypedDialog } from "@egose/shadcn-theme/components/widgets/dialog-manager";
|
|
72
|
+
import { Dialog, DialogContent, DialogFooter, Button } from "@egose/shadcn-theme/components/ui/dialog";
|
|
73
|
+
|
|
74
|
+
const ConfirmDialog = createTypedDialog<{ title: string }, boolean>(
|
|
75
|
+
({ open, args, onClose }) => (
|
|
76
|
+
<Dialog open={open} onOpenChange={(o) => !o && onClose(false)}>
|
|
77
|
+
<DialogContent>
|
|
78
|
+
{args.title}
|
|
79
|
+
<DialogFooter>
|
|
80
|
+
<Button variant="ghost" onClick={() => onClose(false)}>Cancel</Button>
|
|
81
|
+
<Button variant="danger" onClick={() => onClose(true)}>Confirm</Button>
|
|
82
|
+
</DialogFooter>
|
|
83
|
+
</DialogContent>
|
|
84
|
+
</Dialog>
|
|
85
|
+
),
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
// inside a component under <DialogProvider>:
|
|
89
|
+
// const ok = await openDialog(ConfirmDialog, { title: "Delete?" });
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Notable conventions
|
|
93
|
+
|
|
94
|
+
- All shipped modules start with `"use client";` — only import from client components / pages.
|
|
95
|
+
- `Button` accepts `variant`, `size`, `appearance`, `loading`, `icon`, `iconPosition`; see `buttonVariants` for the resolved class string.
|
|
96
|
+
- Form-field wrappers (`components/form/text-input`, `select`, `checkbox`, `date-picker`, `textarea`, …) compose with `react-hook-form` via `inputProps={{ ...register('name', rules) }}`. `HookFormRules<T>` (in `components/form/types`) is the safe `RegisterOptions` subset.
|
|
97
|
+
- Layout `aslink` prop is required — pass your router's `Link` (works for both `to=` and `href=` APIs).
|
|
98
|
+
- `cn` is the single point for class composition; pass `classNames` slots on layouts/form-fields to extend (never override) defaults.
|
|
99
|
+
|
|
100
|
+
## License
|
|
101
|
+
|
|
102
|
+
MIT. See https://github.com/egose/shadcn-theme.
|