@customafk/lunas-ui 0.2.29 → 0.2.30
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/dist/{alert-6_f_JgU-.cjs → alert-4rfsFtN6.cjs} +1 -1
- package/dist/{alert-6_f_JgU-.cjs.map → alert-4rfsFtN6.cjs.map} +1 -1
- package/dist/{alert-CoqYPXj9.d.mts → alert-B7978FZb.d.mts} +5 -5
- package/dist/{alert-BSAtkBnX.mjs → alert-BC5Nss8t.mjs} +1 -1
- package/dist/{alert-BSAtkBnX.mjs.map → alert-BC5Nss8t.mjs.map} +1 -1
- package/dist/{alert-Dd7Y-D3i.d.cts → alert-DOsSwv1-.d.cts} +7 -7
- package/dist/{badge-Dl868_wL.d.cts → badge-Bt62wY4t.d.cts} +5 -5
- package/dist/{badge-sImNCIvF.d.mts → badge-DXiJn9XY.d.mts} +5 -5
- package/dist/{button-z2O6bEzH.d.cts → button-BHCmEoty.d.cts} +3 -3
- package/dist/{button-DWkaxRDs.d.mts → button-CPYKtYVF.d.mts} +3 -3
- package/dist/{calendar-ChaYPTJO.cjs → calendar-Bt0rlJ89.cjs} +1 -1
- package/dist/{calendar-ChaYPTJO.cjs.map → calendar-Bt0rlJ89.cjs.map} +1 -1
- package/dist/{calendar-CHVujBHK.mjs → calendar-D8aRFw_F.mjs} +1 -1
- package/dist/{calendar-CHVujBHK.mjs.map → calendar-D8aRFw_F.mjs.map} +1 -1
- package/dist/{cms-layout-COfACv3M.cjs → cms-layout-DDs0pHWh.cjs} +1 -1
- package/dist/{cms-layout-COfACv3M.cjs.map → cms-layout-DDs0pHWh.cjs.map} +1 -1
- package/dist/{cms-layout--NUD8VVh.mjs → cms-layout-DHzRHAoI.mjs} +1 -1
- package/dist/{cms-layout--NUD8VVh.mjs.map → cms-layout-DHzRHAoI.mjs.map} +1 -1
- package/dist/data-display/country.d.mts +1 -1
- package/dist/data-display/role-badge.d.mts +1 -1
- package/dist/data-display/statistic.d.cts +5 -5
- package/dist/{dialog-D2c7yEsc.d.cts → dialog-CEaSFdY9.d.cts} +12 -12
- package/dist/{dialog-AbuDG2Gq.d.mts → dialog-DWWtnPg0.d.mts} +12 -12
- package/dist/dialogs/detail-dialog/components/sidebar.d.cts +24 -24
- package/dist/dialogs/detail-dialog/components/sidebar.d.mts +24 -24
- package/dist/drawer-C3o6IEeq.cjs +2 -0
- package/dist/drawer-C3o6IEeq.cjs.map +1 -0
- package/dist/drawer-j9wcVE50.mjs +2 -0
- package/dist/drawer-j9wcVE50.mjs.map +1 -0
- package/dist/features/descriptions/index.d.cts +6 -6
- package/dist/features/descriptions/index.d.mts +4 -4
- package/dist/features/search-modal/index.d.cts +2 -2
- package/dist/features/tables/index.d.cts +1 -1
- package/dist/features/tables/index.d.mts +2 -2
- package/dist/features/tanstack-form/index.cjs +1 -1
- package/dist/features/tanstack-form/index.d.cts +1 -1
- package/dist/features/tanstack-form/index.d.mts +1 -1
- package/dist/features/tanstack-form/index.mjs +1 -1
- package/dist/features/text-editor/index.cjs +1 -1
- package/dist/features/text-editor/index.d.cts +1 -1
- package/dist/features/text-editor/index.d.mts +1 -1
- package/dist/features/text-editor/index.mjs +1 -1
- package/dist/{field-Bh7Hq4Lo.mjs → field-B8RhxRCu.mjs} +1 -1
- package/dist/{field-Bh7Hq4Lo.mjs.map → field-B8RhxRCu.mjs.map} +1 -1
- package/dist/{field-DTGEedKl.cjs → field-BxFpcOV1.cjs} +1 -1
- package/dist/{field-DTGEedKl.cjs.map → field-BxFpcOV1.cjs.map} +1 -1
- package/dist/{index-CtKNb2-t.d.cts → index-BJiTJozG.d.cts} +546 -312
- package/dist/{index-C3dXDjdR.d.mts → index-Cotq70wL.d.cts} +6 -6
- package/dist/{index-Bz9af9gx.d.mts → index-D6UbdtXa.d.mts} +546 -312
- package/dist/{index-rE1M5FGs.d.mts → index-DDYTIEq3.d.mts} +28 -28
- package/dist/{index-Lok5xVt2.d.cts → index-DpqGxieY.d.cts} +27 -27
- package/dist/{index-DMUr1T2A.d.cts → index-TvuUzBSW.d.mts} +6 -6
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +8 -8
- package/dist/index.d.mts +8 -8
- package/dist/index.mjs +1 -1
- package/dist/{input-ZL65yvYU.d.mts → input-B4ZV1tKO.d.cts} +6 -6
- package/dist/{input-DtUFTR6j.d.cts → input-Che86SWz.d.mts} +6 -6
- package/dist/layouts/cms-layout/index.cjs +1 -1
- package/dist/layouts/cms-layout/index.mjs +1 -1
- package/dist/layouts/flex.d.cts +5 -5
- package/dist/layouts/payment-layout/index.cjs +1 -1
- package/dist/layouts/payment-layout/index.mjs +1 -1
- package/dist/pages/FeatureDeveloping.d.cts +2 -2
- package/dist/pages/FeatureDeveloping.d.mts +2 -2
- package/dist/pages/FeatureFixing.d.cts +2 -2
- package/dist/pages/FeatureFixing.d.mts +2 -2
- package/dist/pages/LoginPage.cjs +1 -1
- package/dist/pages/LoginPage.d.cts +2 -2
- package/dist/pages/LoginPage.d.mts +2 -2
- package/dist/pages/LoginPage.mjs +1 -1
- package/dist/pages/NotAuthorized.d.cts +2 -2
- package/dist/pages/NotAuthorized.d.mts +2 -2
- package/dist/pages/NotFound.d.cts +2 -2
- package/dist/pages/NotFound.d.mts +2 -2
- package/dist/pages/RegisterPage.cjs +1 -1
- package/dist/pages/RegisterPage.d.cts +2 -2
- package/dist/pages/RegisterPage.d.mts +2 -2
- package/dist/pages/RegisterPage.mjs +1 -1
- package/dist/pages/VerifyEmailPage.cjs +1 -1
- package/dist/pages/VerifyEmailPage.d.cts +2 -2
- package/dist/pages/VerifyEmailPage.d.mts +2 -2
- package/dist/pages/VerifyEmailPage.mjs +1 -1
- package/dist/{payment-layout-8rRJJa0f.cjs → payment-layout-BkSC6JkI.cjs} +1 -1
- package/dist/{payment-layout-8rRJJa0f.cjs.map → payment-layout-BkSC6JkI.cjs.map} +1 -1
- package/dist/{payment-layout-BdGZbGO-.mjs → payment-layout-CafCw6lS.mjs} +1 -1
- package/dist/{payment-layout-BdGZbGO-.mjs.map → payment-layout-CafCw6lS.mjs.map} +1 -1
- package/dist/{radio-group-KMvVXCIk.cjs → radio-group-Bv6w2woK.cjs} +1 -1
- package/dist/{radio-group-KMvVXCIk.cjs.map → radio-group-Bv6w2woK.cjs.map} +1 -1
- package/dist/{radio-group-CsmpBZTK.mjs → radio-group-KR6Ck-B9.mjs} +1 -1
- package/dist/{radio-group-CsmpBZTK.mjs.map → radio-group-KR6Ck-B9.mjs.map} +1 -1
- package/dist/switch-0-9Zt33o.cjs +2 -0
- package/dist/switch-0-9Zt33o.cjs.map +1 -0
- package/dist/switch-DHsjxnFP.mjs +2 -0
- package/dist/switch-DHsjxnFP.mjs.map +1 -0
- package/dist/tables-BQ-QiA1V.mjs.map +1 -1
- package/dist/tables-LRWPOv2a.cjs.map +1 -1
- package/dist/tanstack-form-B9CugNS5.cjs +2 -0
- package/dist/tanstack-form-B9CugNS5.cjs.map +1 -0
- package/dist/tanstack-form-DJ90sBFl.mjs +2 -0
- package/dist/tanstack-form-DJ90sBFl.mjs.map +1 -0
- package/dist/{text-editor-Dy3_hyNw.cjs → text-editor-CE_GkI7o.cjs} +1 -1
- package/dist/{text-editor-Dy3_hyNw.cjs.map → text-editor-CE_GkI7o.cjs.map} +1 -1
- package/dist/{text-editor-D182J9Y5.mjs → text-editor-CqC44BkO.mjs} +1 -1
- package/dist/{text-editor-D182J9Y5.mjs.map → text-editor-CqC44BkO.mjs.map} +1 -1
- package/dist/{textarea-SPXNe-iZ.cjs → textarea-BB2WynyM.cjs} +1 -1
- package/dist/{textarea-SPXNe-iZ.cjs.map → textarea-BB2WynyM.cjs.map} +1 -1
- package/dist/{textarea-Cvdq7UAn.mjs → textarea-D0-Gltw6.mjs} +1 -1
- package/dist/{textarea-Cvdq7UAn.mjs.map → textarea-D0-Gltw6.mjs.map} +1 -1
- package/dist/{types-wApFGHmV.d.mts → types-B2PQbMJL.d.mts} +1 -1
- package/dist/typography/paragraph.d.cts +4 -4
- package/dist/typography/paragraph.d.mts +2 -2
- package/dist/ui/alert-dialog.d.cts +12 -12
- package/dist/ui/alert-dialog.d.mts +12 -12
- package/dist/ui/alert.cjs +1 -1
- package/dist/ui/alert.d.cts +1 -1
- package/dist/ui/alert.d.mts +1 -1
- package/dist/ui/alert.mjs +1 -1
- package/dist/ui/aspect-ratio.d.cts +2 -2
- package/dist/ui/aspect-ratio.d.mts +2 -2
- package/dist/ui/avatar.d.cts +4 -4
- package/dist/ui/avatar.d.mts +4 -4
- package/dist/ui/badge.d.cts +1 -1
- package/dist/ui/badge.d.mts +1 -1
- package/dist/ui/breadcrumb.d.cts +8 -8
- package/dist/ui/breadcrumb.d.mts +8 -8
- package/dist/ui/button-group.d.cts +2 -2
- package/dist/ui/button-group.d.mts +6 -6
- package/dist/ui/button.d.cts +1 -1
- package/dist/ui/button.d.mts +1 -1
- package/dist/ui/calendar.cjs +1 -1
- package/dist/ui/calendar.d.cts +4 -4
- package/dist/ui/calendar.d.mts +4 -4
- package/dist/ui/calendar.mjs +1 -1
- package/dist/ui/card.d.cts +8 -8
- package/dist/ui/card.d.mts +8 -8
- package/dist/ui/carousel.d.cts +7 -7
- package/dist/ui/carousel.d.mts +7 -7
- package/dist/ui/checkbox.d.cts +2 -2
- package/dist/ui/checkbox.d.mts +2 -2
- package/dist/ui/collapsible.d.cts +4 -4
- package/dist/ui/collapsible.d.mts +4 -4
- package/dist/ui/command.d.cts +11 -11
- package/dist/ui/command.d.mts +11 -11
- package/dist/ui/context-menu.d.cts +16 -16
- package/dist/ui/context-menu.d.mts +16 -16
- package/dist/ui/dialog.d.cts +1 -1
- package/dist/ui/dialog.d.mts +1 -1
- package/dist/ui/drawer.cjs +1 -2
- package/dist/ui/drawer.d.cts +11 -11
- package/dist/ui/drawer.d.mts +11 -11
- package/dist/ui/drawer.mjs +1 -2
- package/dist/ui/dropdown-menu.d.cts +16 -16
- package/dist/ui/dropdown-menu.d.mts +16 -16
- package/dist/ui/empty.d.cts +9 -9
- package/dist/ui/empty.d.mts +7 -7
- package/dist/ui/field.cjs +1 -1
- package/dist/ui/field.d.cts +23 -23
- package/dist/ui/field.d.mts +21 -21
- package/dist/ui/field.mjs +1 -1
- package/dist/ui/file-uploader.d.cts +2 -2
- package/dist/ui/file-uploader.d.mts +2 -2
- package/dist/ui/form.cjs +1 -1
- package/dist/ui/form.d.cts +10 -10
- package/dist/ui/form.d.mts +10 -10
- package/dist/ui/form.mjs +1 -1
- package/dist/ui/hover-card.d.cts +4 -4
- package/dist/ui/hover-card.d.mts +4 -4
- package/dist/ui/input-otp.d.cts +5 -5
- package/dist/ui/input-otp.d.mts +5 -5
- package/dist/ui/input.d.cts +1 -1
- package/dist/ui/input.d.mts +1 -1
- package/dist/ui/inputs/search-input.d.cts +1 -1
- package/dist/ui/inputs/search-input.d.mts +3 -3
- package/dist/ui/item.d.cts +14 -14
- package/dist/ui/item.d.mts +14 -14
- package/dist/ui/label.d.cts +2 -2
- package/dist/ui/label.d.mts +2 -2
- package/dist/ui/menubar.d.cts +17 -17
- package/dist/ui/menubar.d.mts +17 -17
- package/dist/ui/multi-select.d.cts +2 -2
- package/dist/ui/multi-select.d.mts +3 -3
- package/dist/ui/navigation-menu.d.cts +11 -11
- package/dist/ui/navigation-menu.d.mts +9 -9
- package/dist/ui/pagination.d.cts +9 -9
- package/dist/ui/pagination.d.mts +9 -9
- package/dist/ui/popover.d.cts +6 -6
- package/dist/ui/popover.d.mts +6 -6
- package/dist/ui/progress.d.cts +2 -2
- package/dist/ui/progress.d.mts +2 -2
- package/dist/ui/radio-group.cjs +1 -1
- package/dist/ui/radio-group.d.cts +3 -3
- package/dist/ui/radio-group.d.mts +3 -3
- package/dist/ui/radio-group.mjs +1 -1
- package/dist/ui/resizable.d.cts +9 -9
- package/dist/ui/resizable.d.mts +9 -9
- package/dist/ui/scroll-area.d.cts +5 -5
- package/dist/ui/scroll-area.d.mts +5 -5
- package/dist/ui/select.d.cts +9 -9
- package/dist/ui/separator.d.cts +2 -2
- package/dist/ui/sheet.d.cts +9 -9
- package/dist/ui/sheet.d.mts +9 -9
- package/dist/ui/sidebar.cjs +1 -1
- package/dist/ui/sidebar.cjs.map +1 -1
- package/dist/ui/sidebar.d.cts +28 -28
- package/dist/ui/sidebar.d.mts +26 -26
- package/dist/ui/sidebar.mjs +1 -1
- package/dist/ui/sidebar.mjs.map +1 -1
- package/dist/ui/skeleton.d.cts +2 -2
- package/dist/ui/skeleton.d.mts +2 -2
- package/dist/ui/slider.d.cts +2 -2
- package/dist/ui/slider.d.mts +2 -2
- package/dist/ui/sonner.d.cts +2 -2
- package/dist/ui/sonner.d.mts +2 -2
- package/dist/ui/spinner.d.cts +2 -2
- package/dist/ui/spinner.d.mts +2 -2
- package/dist/ui/switch.cjs +1 -2
- package/dist/ui/switch.d.cts +2 -2
- package/dist/ui/switch.d.mts +2 -2
- package/dist/ui/switch.mjs +1 -2
- package/dist/ui/table.d.cts +17 -17
- package/dist/ui/table.d.mts +17 -17
- package/dist/ui/tabs.d.cts +5 -5
- package/dist/ui/tabs.d.mts +5 -5
- package/dist/ui/textarea.cjs +1 -1
- package/dist/ui/textarea.d.cts +2 -2
- package/dist/ui/textarea.d.mts +2 -2
- package/dist/ui/textarea.mjs +1 -1
- package/dist/ui/toggle-group.d.cts +3 -3
- package/dist/ui/toggle-group.d.mts +3 -3
- package/dist/ui/toggle.d.cts +4 -4
- package/dist/ui/toggle.d.mts +2 -2
- package/dist/ui/tooltip.d.cts +5 -5
- package/dist/ui/tooltip.d.mts +5 -5
- package/package.json +1 -1
- package/dist/tanstack-form-DKcuB2zr.cjs +0 -2
- package/dist/tanstack-form-DKcuB2zr.cjs.map +0 -1
- package/dist/tanstack-form-Dez1xwl5.mjs +0 -2
- package/dist/tanstack-form-Dez1xwl5.mjs.map +0 -1
- package/dist/ui/drawer.cjs.map +0 -1
- package/dist/ui/drawer.mjs.map +0 -1
- package/dist/ui/switch.cjs.map +0 -1
- package/dist/ui/switch.mjs.map +0 -1
package/dist/ui/sidebar.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";const e=require(`../chunk-Bmb41Sf3.cjs`);require(`../button.variants-tnhb123u.cjs`);const t=require(`../button-Bu4ejNOW.cjs`),n=require(`../skeleton-CHympz8k.cjs`),r=require(`../tooltip-DC6i1A25.cjs`),i=require(`../separator-jytY1CPq.cjs`),a=require(`../input-1ceJxxFI.cjs`),o=require(`./drawer.cjs`);let s=require(`lucide-react`),c=require(`react`),l=require(`@customafk/react-toolkit/utils`),u=require(`class-variance-authority`),d=require(`react/jsx-runtime`),f=require(`radix-ui`),p=require(`@customafk/react-toolkit/hooks/useMobile`);const m=`sidebar_state`,h=3600*24*7,g=`16rem`,_=`18rem`,v=`3rem`,y=`b`,b=(0,c.createContext)(null);function x(){let e=(0,c.use)(b);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function S({defaultOpen:e=!0,open:t,onOpenChange:n,className:i,style:a,children:o,...s}){let u=(0,p.useIsMobile)(),[f,m]=(0,c.useState)(!1),[h,g]=(0,c.useState)(e),_=t??h,v=(0,c.useCallback)(e=>{let t=typeof e==`function`?e(_):e;n?n(t):g(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[n,_]),y=(0,c.useCallback)(()=>u?m(e=>!e):v(e=>!e),[u,v,m]);(0,c.useEffect)(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),y())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[y]);let x=_?`expanded`:`collapsed`,S=(0,c.useMemo)(()=>({state:x,isMobile:u,toggleSidebar:y,open:_,setOpen:v,openMobile:f,setOpenMobile:m}),[x,_,v,u,f,m,y]);return(0,d.jsx)(b.Provider,{value:S,children:(0,d.jsx)(r.r,{delayDuration:0,children:(0,d.jsx)(`div`,{"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:(0,l.cn)(`group/sidebar-wrapper`,`has-data-[variant=inset]:bg-sidebar`,`flex h-dvh w-full`,i),...s,children:o})})})}function C({side:e=`left`,variant:t=`sidebar`,collapsible:n=`offcanvas`,className:r,children:i,...a}){let{isMobile:s,state:c,openMobile:u,setOpenMobile:f}=x();return n===`none`?(0,d.jsx)(`aside`,{"data-slot":`sidebar`,className:(0,l.cn)(`bg-sidebar`,`text-sidebar-foreground`,`flex h-full w-(--sidebar-width) flex-col`,`border-r`,r),...a,children:i}):s?(0,d.jsx)(o.Drawer,{open:u,onOpenChange:f,direction:`left`,children:(0,d.jsxs)(o.DrawerContent,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,className:`bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden`,style:{"--sidebar-width":`18rem`},children:[(0,d.jsxs)(o.DrawerHeader,{className:`sr-only`,children:[(0,d.jsx)(o.DrawerContent,{children:`Sidebar`}),(0,d.jsx)(o.DrawerDescription,{children:`Displays the mobile sidebar.`})]}),(0,d.jsx)(`div`,{className:`flex h-full w-full flex-col`,children:i})]})}):(0,d.jsxs)(`aside`,{className:`group peer text-sidebar-foreground bg-card hidden md:block`,"data-state":c,"data-collapsible":c===`collapsed`?n:``,"data-variant":t,"data-side":e,"data-slot":`sidebar`,children:[(0,d.jsx)(`div`,{"data-slot":`sidebar-gap`,className:(0,l.cn)(`relative`,`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-14 w-(--sidebar-width)`,`group-data-[collapsible=offcanvas]:w-0`,`group-data-[side=right]:rotate-180`,t===`floating`||t===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`)}),(0,d.jsx)(`div`,{"data-slot":`sidebar-container`,className:(0,l.cn)(`hidden md:flex`,`fixed inset-y-0 top-14 z-10`,`h-[calc(100dvh-3.5rem)] w-(--sidebar-width)`,`border-r`,`transition-[left,right,width] duration-200 ease-linear`,e===`left`&&`left-0`,e===`left`&&`group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`,e===`right`&&`right-0`,e===`right`&&`group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]`,t===`floating`||t===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,r),...a,children:(0,d.jsx)(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:(0,l.cn)(`flex size-full flex-col`,`group-data-[variant=floating]:rounded-lg`,`group-data-[variant=floating]:border`,`group-data-[variant=floating]:border-sidebar-border`,`group-data-[variant=floating]:shadow-sm`),children:i})})]})}function w({className:e,onClick:n,...r}){let{toggleSidebar:i}=x();return(0,d.jsxs)(t.t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,size:`icon`,className:(0,l.cn)(`size-10 rounded-full`,e),onClick:e=>{n?.(e),i()},...r,children:[(0,d.jsx)(s.MenuIcon,{className:`!size-6`}),(0,d.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]})}function T({className:e,...t}){let{toggleSidebar:n}=x();return(0,d.jsx)(`button`,{"data-sidebar":`rail`,"data-slot":`sidebar-rail`,"aria-label":`Toggle Sidebar`,tabIndex:-1,onClick:n,title:`Toggle Sidebar`,className:(0,l.cn)(`absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex`,`after:absolute`,`after:inset-y-0`,`after:left-1/2`,`after:w-0.5`,`group-data-[side=left]:-right-4`,`group-data-[side=right]:left-0`,`in-data-[side=left]:cursor-w-resize`,`in-data-[side=right]:cursor-e-resize`,`[[data-side=left][data-state=collapsed]_&]:cursor-e-resize`,`[[data-side=right][data-state=collapsed]_&]:cursor-w-resize`,`hover:after:bg-sidebar-border`,`hover:group-data-[collapsible=offcanvas]:bg-sidebar`,`group-data-[collapsible=offcanvas]:translate-x-0`,`group-data-[collapsible=offcanvas]:after:left-full`,`[[data-side=left][data-collapsible=offcanvas]_&]:-right-2`,`[[data-side=right][data-collapsible=offcanvas]_&]:-left-2`,e),...t})}function E({className:e,children:t,...n}){return(0,d.jsxs)(`main`,{"data-slot":`sidebar-inset`,className:(0,l.cn)(`w-full`,`relative`,`flex flex-1 flex-col`,e),...n,children:[(0,d.jsx)(`div`,{className:`h-14 w-full`}),(0,d.jsx)(`div`,{className:(0,l.cn)(`flex-1 inset-shadow-sm`),children:t})]})}function D({className:e,...t}){return(0,d.jsx)(a.t,{"data-slot":`sidebar-input`,"data-sidebar":`input`,className:(0,l.cn)(`bg-background h-8 w-full shadow-none`,e),...t})}function O({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,className:(0,l.cn)(`flex flex-col gap-2 p-2`,e),...t})}function k({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:(0,l.cn)(`flex flex-col gap-2 p-2`,e),...t})}function A({className:e,...t}){return(0,d.jsx)(i.t,{"data-slot":`sidebar-separator`,"data-sidebar":`separator`,className:(0,l.cn)(`bg-sidebar-border mx-2 w-auto`,e),...t})}function j({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:(0,l.cn)(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t})}function M({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:(0,l.cn)(`relative flex w-full min-w-0 flex-col p-2`,e),...t})}function N({className:e,asChild:t=!1,...n}){return(0,d.jsx)(t?f.Slot.Slot:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:(0,l.cn)(`text-sidebar-foreground/70`,`ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear`,`focus-visible:ring-2`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`group-data-[collapsible=icon]:-mt-8`,`group-data-[collapsible=icon]:opacity-0`,e),...n})}function P({className:e,asChild:t=!1,...n}){return(0,d.jsx)(t?f.Slot.Slot:`button`,{"data-slot":`sidebar-group-action`,"data-sidebar":`group-action`,className:(0,l.cn)(`text-sidebar-foreground ring-sidebar-ring`,`absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform`,`focus-visible:ring-2`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`after:absolute after:-inset-2 md:after:hidden`,`group-data-[collapsible=icon]:hidden`,e),...n})}function F({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:(0,l.cn)(`w-full text-sm`,e),...t})}function I({className:e,...t}){return(0,d.jsx)(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:(0,l.cn)(`flex w-full min-w-0 flex-col gap-1`,e),...t})}function L({className:e,...t}){return(0,d.jsx)(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:(0,l.cn)(`group/menu-item relative`,e),...t})}const R=(0,u.cva)([`peer/menu-button cursor-pointer flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding]`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`focus-visible:ring-2`,`active:bg-sidebar-accent`,`active:text-sidebar-accent-foreground`,`disabled:pointer-events-none`,`disabled:opacity-50`,`group-has-data-[sidebar=menu-action]/menu-item:pr-8`,`aria-disabled:pointer-events-none`,`aria-disabled:opacity-50`,`data-[active=true]:bg-sidebar-accent`,`data-[active=true]:font-medium`,`data-[active=true]:text-sidebar-accent-foreground`,`data-[state=open]:hover:bg-sidebar-accent`,`data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-8!`,`group-data-[collapsible=icon]:p-2!`,`[&>span:last-child]:truncate`,`[&>svg]:size-4`,`[&>svg]:shrink-0`],{variants:{variant:{default:`hover:bg-sidebar-accent hover:text-sidebar-accent-foreground`,outline:`bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]`},size:{default:`h-8 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function z({asChild:e=!1,isActive:t=!1,variant:n=`default`,size:i=`default`,tooltip:a,className:o,...s}){let c=e?f.Slot.Slot:`button`,{isMobile:u,state:p}=x(),m=(0,d.jsx)(c,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":i,"data-active":t,className:(0,l.cn)(R({variant:n,size:i}),o),...s});return a?(typeof a==`string`&&(a={children:a}),(0,d.jsxs)(r.t,{children:[(0,d.jsx)(r.i,{asChild:!0,children:m}),(0,d.jsx)(r.n,{side:`right`,align:`center`,hidden:p!==`collapsed`||u,...a})]})):m}function B({className:e,asChild:t=!1,showOnHover:n=!1,...r}){return(0,d.jsx)(t?f.Slot.Slot:`button`,{"data-slot":`sidebar-menu-action`,"data-sidebar":`menu-action`,className:(0,l.cn)(`text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform`,`focus-visible:ring-2`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`after:absolute after:-inset-2 md:after:hidden`,`peer-data-[size=sm]/menu-button:top-1`,`peer-data-[size=default]/menu-button:top-1.5`,`peer-data-[size=lg]/menu-button:top-2.5`,`group-data-[collapsible=icon]:hidden`,n&&`peer-data-[active=true]/menu-button:text-sidebar-accent-foreground`,n&&`group-focus-within/menu-item:opacity-100`,n&&`group-hover/menu-item:opacity-100`,n&&`data-[state=open]:opacity-100 md:opacity-0`,e),...r})}function V({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-menu-badge`,"data-sidebar":`menu-badge`,className:(0,l.cn)(`text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none`,`peer-hover/menu-button:text-sidebar-accent-foreground`,`peer-data-[active=true]/menu-button:text-sidebar-accent-foreground`,`peer-data-[size=sm]/menu-button:top-1`,`peer-data-[size=default]/menu-button:top-1.5`,`peer-data-[size=lg]/menu-button:top-2.5`,`group-data-[collapsible=icon]:hidden`,e),...t})}function H({className:e,showIcon:t=!1,...r}){let i=(0,c.useMemo)(()=>`${Math.floor(Math.random()*40)+50}%`,[]);return(0,d.jsxs)(`div`,{"data-slot":`sidebar-menu-skeleton`,"data-sidebar":`menu-skeleton`,className:(0,l.cn)(`flex h-8 items-center gap-2 rounded-md px-2`,e),...r,children:[t&&(0,d.jsx)(n.t,{className:`size-4 rounded-md`,"data-sidebar":`menu-skeleton-icon`}),(0,d.jsx)(n.t,{className:`h-4 max-w-(--skeleton-width) flex-1`,"data-sidebar":`menu-skeleton-text`,style:{"--skeleton-width":i}})]})}function U({className:e,...t}){return(0,d.jsx)(`ul`,{"data-slot":`sidebar-menu-sub`,"data-sidebar":`menu-sub`,className:(0,l.cn)(`border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5`,`group-data-[collapsible=icon]:hidden`,e),...t})}function W({className:e,...t}){return(0,d.jsx)(`li`,{"data-slot":`sidebar-menu-sub-item`,"data-sidebar":`menu-sub-item`,className:(0,l.cn)(`group/menu-sub-item relative`,e),...t})}function G({asChild:e=!1,size:t=`md`,isActive:n=!1,className:r,...i}){return(0,d.jsx)(e?f.Slot.Slot:`a`,{"data-slot":`sidebar-menu-sub-button`,"data-sidebar":`menu-sub-button`,"data-size":t,"data-active":n,className:(0,l.cn)(`text-sidebar-foreground ring-sidebar-ring`,`flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`active:bg-sidebar-accent`,`active:text-sidebar-accent-foreground`,`focus-visible:ring-2`,`disabled:pointer-events-none`,`disabled:opacity-50`,`aria-disabled:pointer-events-none`,`aria-disabled:opacity-50`,`[&>span:last-child]:truncate`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`[&>svg]:text-sidebar-accent-foreground`,`data-[active=true]:bg-sidebar-accent`,`data-[active=true]:text-sidebar-accent-foreground`,t===`sm`&&`text-xs`,t===`md`&&`text-sm`,`group-data-[collapsible=icon]:hidden`,r),...i})}exports.Sidebar=C,exports.SidebarContent=j,exports.SidebarFooter=k,exports.SidebarGroup=M,exports.SidebarGroupAction=P,exports.SidebarGroupContent=F,exports.SidebarGroupLabel=N,exports.SidebarHeader=O,exports.SidebarInput=D,exports.SidebarInset=E,exports.SidebarMenu=I,exports.SidebarMenuAction=B,exports.SidebarMenuBadge=V,exports.SidebarMenuButton=z,exports.SidebarMenuItem=L,exports.SidebarMenuSkeleton=H,exports.SidebarMenuSub=U,exports.SidebarMenuSubButton=G,exports.SidebarMenuSubItem=W,exports.SidebarProvider=S,exports.SidebarRail=T,exports.SidebarSeparator=A,exports.SidebarTrigger=w,exports.useSidebar=x;
|
|
1
|
+
"use client";const e=require(`../chunk-Bmb41Sf3.cjs`);require(`../button.variants-tnhb123u.cjs`);const t=require(`../button-Bu4ejNOW.cjs`),n=require(`../skeleton-CHympz8k.cjs`),r=require(`../tooltip-DC6i1A25.cjs`),i=require(`../separator-jytY1CPq.cjs`),a=require(`../input-1ceJxxFI.cjs`),o=require(`../drawer-C3o6IEeq.cjs`);let s=require(`lucide-react`),c=require(`react`),l=require(`@customafk/react-toolkit/utils`),u=require(`class-variance-authority`),d=require(`react/jsx-runtime`),f=require(`radix-ui`),p=require(`@customafk/react-toolkit/hooks/useMobile`);const m=`sidebar_state`,h=3600*24*7,g=`16rem`,_=`18rem`,v=`3rem`,y=`b`,b=(0,c.createContext)(null);function x(){let e=(0,c.use)(b);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function S({defaultOpen:e=!0,open:t,onOpenChange:n,className:i,style:a,children:o,...s}){let u=(0,p.useIsMobile)(),[f,m]=(0,c.useState)(!1),[h,g]=(0,c.useState)(e),_=t??h,v=(0,c.useCallback)(e=>{let t=typeof e==`function`?e(_):e;n?n(t):g(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[n,_]),y=(0,c.useCallback)(()=>u?m(e=>!e):v(e=>!e),[u,v,m]);(0,c.useEffect)(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),y())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[y]);let x=_?`expanded`:`collapsed`,S=(0,c.useMemo)(()=>({state:x,isMobile:u,toggleSidebar:y,open:_,setOpen:v,openMobile:f,setOpenMobile:m}),[x,_,v,u,f,m,y]);return(0,d.jsx)(b.Provider,{value:S,children:(0,d.jsx)(r.r,{delayDuration:0,children:(0,d.jsx)(`div`,{"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:(0,l.cn)(`group/sidebar-wrapper`,`has-data-[variant=inset]:bg-sidebar`,`flex h-dvh w-full`,i),...s,children:o})})})}function C({side:e=`left`,variant:t=`sidebar`,collapsible:n=`offcanvas`,className:r,children:i,...a}){let{isMobile:s,state:c,openMobile:u,setOpenMobile:f}=x();return n===`none`?(0,d.jsx)(`aside`,{"data-slot":`sidebar`,className:(0,l.cn)(`bg-sidebar`,`text-sidebar-foreground`,`flex h-full w-(--sidebar-width) flex-col`,`border-r`,r),...a,children:i}):s?(0,d.jsx)(o.t,{open:u,onOpenChange:f,direction:`left`,children:(0,d.jsxs)(o.r,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,className:`bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden`,style:{"--sidebar-width":`18rem`},children:[(0,d.jsxs)(o.o,{className:`sr-only`,children:[(0,d.jsx)(o.r,{children:`Sidebar`}),(0,d.jsx)(o.i,{children:`Displays the mobile sidebar.`})]}),(0,d.jsx)(`div`,{className:`flex h-full w-full flex-col`,children:i})]})}):(0,d.jsxs)(`aside`,{className:`group peer text-sidebar-foreground bg-card hidden md:block`,"data-state":c,"data-collapsible":c===`collapsed`?n:``,"data-variant":t,"data-side":e,"data-slot":`sidebar`,children:[(0,d.jsx)(`div`,{"data-slot":`sidebar-gap`,className:(0,l.cn)(`relative`,`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-14 w-(--sidebar-width)`,`group-data-[collapsible=offcanvas]:w-0`,`group-data-[side=right]:rotate-180`,t===`floating`||t===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`)}),(0,d.jsx)(`div`,{"data-slot":`sidebar-container`,className:(0,l.cn)(`hidden md:flex`,`fixed inset-y-0 top-14 z-10`,`h-[calc(100dvh-3.5rem)] w-(--sidebar-width)`,`border-r`,`transition-[left,right,width] duration-200 ease-linear`,e===`left`&&`left-0`,e===`left`&&`group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`,e===`right`&&`right-0`,e===`right`&&`group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]`,t===`floating`||t===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,r),...a,children:(0,d.jsx)(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:(0,l.cn)(`flex size-full flex-col`,`group-data-[variant=floating]:rounded-lg`,`group-data-[variant=floating]:border`,`group-data-[variant=floating]:border-sidebar-border`,`group-data-[variant=floating]:shadow-sm`),children:i})})]})}function w({className:e,onClick:n,...r}){let{toggleSidebar:i}=x();return(0,d.jsxs)(t.t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,size:`icon`,className:(0,l.cn)(`size-10 rounded-full`,e),onClick:e=>{n?.(e),i()},...r,children:[(0,d.jsx)(s.MenuIcon,{className:`!size-6`}),(0,d.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]})}function T({className:e,...t}){let{toggleSidebar:n}=x();return(0,d.jsx)(`button`,{"data-sidebar":`rail`,"data-slot":`sidebar-rail`,"aria-label":`Toggle Sidebar`,tabIndex:-1,onClick:n,title:`Toggle Sidebar`,className:(0,l.cn)(`absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex`,`after:absolute`,`after:inset-y-0`,`after:left-1/2`,`after:w-0.5`,`group-data-[side=left]:-right-4`,`group-data-[side=right]:left-0`,`in-data-[side=left]:cursor-w-resize`,`in-data-[side=right]:cursor-e-resize`,`[[data-side=left][data-state=collapsed]_&]:cursor-e-resize`,`[[data-side=right][data-state=collapsed]_&]:cursor-w-resize`,`hover:after:bg-sidebar-border`,`hover:group-data-[collapsible=offcanvas]:bg-sidebar`,`group-data-[collapsible=offcanvas]:translate-x-0`,`group-data-[collapsible=offcanvas]:after:left-full`,`[[data-side=left][data-collapsible=offcanvas]_&]:-right-2`,`[[data-side=right][data-collapsible=offcanvas]_&]:-left-2`,e),...t})}function E({className:e,children:t,...n}){return(0,d.jsxs)(`main`,{"data-slot":`sidebar-inset`,className:(0,l.cn)(`w-full`,`relative`,`flex flex-1 flex-col`,e),...n,children:[(0,d.jsx)(`div`,{className:`h-14 w-full`}),(0,d.jsx)(`div`,{className:(0,l.cn)(`flex-1 inset-shadow-sm`),children:t})]})}function D({className:e,...t}){return(0,d.jsx)(a.t,{"data-slot":`sidebar-input`,"data-sidebar":`input`,className:(0,l.cn)(`bg-background h-8 w-full shadow-none`,e),...t})}function O({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,className:(0,l.cn)(`flex flex-col gap-2 p-2`,e),...t})}function k({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:(0,l.cn)(`flex flex-col gap-2 p-2`,e),...t})}function A({className:e,...t}){return(0,d.jsx)(i.t,{"data-slot":`sidebar-separator`,"data-sidebar":`separator`,className:(0,l.cn)(`bg-sidebar-border mx-2 w-auto`,e),...t})}function j({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:(0,l.cn)(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t})}function M({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:(0,l.cn)(`relative flex w-full min-w-0 flex-col p-2`,e),...t})}function N({className:e,asChild:t=!1,...n}){return(0,d.jsx)(t?f.Slot.Slot:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:(0,l.cn)(`text-sidebar-foreground/70`,`ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear`,`focus-visible:ring-2`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`group-data-[collapsible=icon]:-mt-8`,`group-data-[collapsible=icon]:opacity-0`,e),...n})}function P({className:e,asChild:t=!1,...n}){return(0,d.jsx)(t?f.Slot.Slot:`button`,{"data-slot":`sidebar-group-action`,"data-sidebar":`group-action`,className:(0,l.cn)(`text-sidebar-foreground ring-sidebar-ring`,`absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform`,`focus-visible:ring-2`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`after:absolute after:-inset-2 md:after:hidden`,`group-data-[collapsible=icon]:hidden`,e),...n})}function F({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:(0,l.cn)(`w-full text-sm`,e),...t})}function I({className:e,...t}){return(0,d.jsx)(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:(0,l.cn)(`flex w-full min-w-0 flex-col gap-1`,e),...t})}function L({className:e,...t}){return(0,d.jsx)(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:(0,l.cn)(`group/menu-item relative`,e),...t})}const R=(0,u.cva)([`peer/menu-button cursor-pointer flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding]`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`focus-visible:ring-2`,`active:bg-sidebar-accent`,`active:text-sidebar-accent-foreground`,`disabled:pointer-events-none`,`disabled:opacity-50`,`group-has-data-[sidebar=menu-action]/menu-item:pr-8`,`aria-disabled:pointer-events-none`,`aria-disabled:opacity-50`,`data-[active=true]:bg-sidebar-accent`,`data-[active=true]:font-medium`,`data-[active=true]:text-sidebar-accent-foreground`,`data-[state=open]:hover:bg-sidebar-accent`,`data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-8!`,`group-data-[collapsible=icon]:p-2!`,`[&>span:last-child]:truncate`,`[&>svg]:size-4`,`[&>svg]:shrink-0`],{variants:{variant:{default:`hover:bg-sidebar-accent hover:text-sidebar-accent-foreground`,outline:`bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]`},size:{default:`h-8 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function z({asChild:e=!1,isActive:t=!1,variant:n=`default`,size:i=`default`,tooltip:a,className:o,...s}){let c=e?f.Slot.Slot:`button`,{isMobile:u,state:p}=x(),m=(0,d.jsx)(c,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":i,"data-active":t,className:(0,l.cn)(R({variant:n,size:i}),o),...s});return a?(typeof a==`string`&&(a={children:a}),(0,d.jsxs)(r.t,{children:[(0,d.jsx)(r.i,{asChild:!0,children:m}),(0,d.jsx)(r.n,{side:`right`,align:`center`,hidden:p!==`collapsed`||u,...a})]})):m}function B({className:e,asChild:t=!1,showOnHover:n=!1,...r}){return(0,d.jsx)(t?f.Slot.Slot:`button`,{"data-slot":`sidebar-menu-action`,"data-sidebar":`menu-action`,className:(0,l.cn)(`text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform`,`focus-visible:ring-2`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`after:absolute after:-inset-2 md:after:hidden`,`peer-data-[size=sm]/menu-button:top-1`,`peer-data-[size=default]/menu-button:top-1.5`,`peer-data-[size=lg]/menu-button:top-2.5`,`group-data-[collapsible=icon]:hidden`,n&&`peer-data-[active=true]/menu-button:text-sidebar-accent-foreground`,n&&`group-focus-within/menu-item:opacity-100`,n&&`group-hover/menu-item:opacity-100`,n&&`data-[state=open]:opacity-100 md:opacity-0`,e),...r})}function V({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-menu-badge`,"data-sidebar":`menu-badge`,className:(0,l.cn)(`text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none`,`peer-hover/menu-button:text-sidebar-accent-foreground`,`peer-data-[active=true]/menu-button:text-sidebar-accent-foreground`,`peer-data-[size=sm]/menu-button:top-1`,`peer-data-[size=default]/menu-button:top-1.5`,`peer-data-[size=lg]/menu-button:top-2.5`,`group-data-[collapsible=icon]:hidden`,e),...t})}function H({className:e,showIcon:t=!1,...r}){let i=(0,c.useMemo)(()=>`${Math.floor(Math.random()*40)+50}%`,[]);return(0,d.jsxs)(`div`,{"data-slot":`sidebar-menu-skeleton`,"data-sidebar":`menu-skeleton`,className:(0,l.cn)(`flex h-8 items-center gap-2 rounded-md px-2`,e),...r,children:[t&&(0,d.jsx)(n.t,{className:`size-4 rounded-md`,"data-sidebar":`menu-skeleton-icon`}),(0,d.jsx)(n.t,{className:`h-4 max-w-(--skeleton-width) flex-1`,"data-sidebar":`menu-skeleton-text`,style:{"--skeleton-width":i}})]})}function U({className:e,...t}){return(0,d.jsx)(`ul`,{"data-slot":`sidebar-menu-sub`,"data-sidebar":`menu-sub`,className:(0,l.cn)(`border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5`,`group-data-[collapsible=icon]:hidden`,e),...t})}function W({className:e,...t}){return(0,d.jsx)(`li`,{"data-slot":`sidebar-menu-sub-item`,"data-sidebar":`menu-sub-item`,className:(0,l.cn)(`group/menu-sub-item relative`,e),...t})}function G({asChild:e=!1,size:t=`md`,isActive:n=!1,className:r,...i}){return(0,d.jsx)(e?f.Slot.Slot:`a`,{"data-slot":`sidebar-menu-sub-button`,"data-sidebar":`menu-sub-button`,"data-size":t,"data-active":n,className:(0,l.cn)(`text-sidebar-foreground ring-sidebar-ring`,`flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`active:bg-sidebar-accent`,`active:text-sidebar-accent-foreground`,`focus-visible:ring-2`,`disabled:pointer-events-none`,`disabled:opacity-50`,`aria-disabled:pointer-events-none`,`aria-disabled:opacity-50`,`[&>span:last-child]:truncate`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`[&>svg]:text-sidebar-accent-foreground`,`data-[active=true]:bg-sidebar-accent`,`data-[active=true]:text-sidebar-accent-foreground`,t===`sm`&&`text-xs`,t===`md`&&`text-sm`,`group-data-[collapsible=icon]:hidden`,r),...i})}exports.Sidebar=C,exports.SidebarContent=j,exports.SidebarFooter=k,exports.SidebarGroup=M,exports.SidebarGroupAction=P,exports.SidebarGroupContent=F,exports.SidebarGroupLabel=N,exports.SidebarHeader=O,exports.SidebarInput=D,exports.SidebarInset=E,exports.SidebarMenu=I,exports.SidebarMenuAction=B,exports.SidebarMenuBadge=V,exports.SidebarMenuButton=z,exports.SidebarMenuItem=L,exports.SidebarMenuSkeleton=H,exports.SidebarMenuSub=U,exports.SidebarMenuSubButton=G,exports.SidebarMenuSubItem=W,exports.SidebarProvider=S,exports.SidebarRail=T,exports.SidebarSeparator=A,exports.SidebarTrigger=w,exports.useSidebar=x;
|
|
2
2
|
//# sourceMappingURL=sidebar.cjs.map
|
package/dist/ui/sidebar.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.cjs","names":["open","TooltipProvider","Drawer","DrawerContent","DrawerHeader","DrawerDescription","Button","MenuIcon","Input","Separator","SlotPrimitive","Tooltip","TooltipTrigger","TooltipContent","Skeleton"],"sources":["../../packages/components/ui/sidebar.tsx"],"sourcesContent":["'use client';\nimport { createContext, use, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { MenuIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot as SlotPrimitive } from 'radix-ui';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader } from './drawer';\n\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null);\n\n/**\n * Hook that returns the current sidebar state and control methods from the nearest SidebarProvider.\n * Must be used within a `<SidebarProvider>`.\n */\nfunction useSidebar() {\n const context = use(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\n/**\n * Context provider that manages sidebar open/collapsed state, mobile drawer, keyboard shortcut (Ctrl+B), and CSS variables for all child Sidebar components.\n *\n * @example\n * ```tsx\n * import {\n * SidebarProvider, Sidebar, SidebarHeader, SidebarContent,\n * SidebarMenu, SidebarMenuItem, SidebarMenuButton,\n * SidebarInset, SidebarTrigger,\n * } from '@customafk/lunas-ui/ui/sidebar';\n *\n * <SidebarProvider>\n * <Sidebar>\n * <SidebarHeader>Logo</SidebarHeader>\n * <SidebarContent>\n * <SidebarMenu>\n * <SidebarMenuItem>\n * <SidebarMenuButton asChild isActive>\n * <a href=\"/dashboard\">Dashboard</a>\n * </SidebarMenuButton>\n * </SidebarMenuItem>\n * </SidebarMenu>\n * </SidebarContent>\n * </Sidebar>\n * <SidebarInset>\n * <SidebarTrigger />\n * <main>Page content</main>\n * </SidebarInset>\n * </SidebarProvider>\n * ```\n */\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Whether the sidebar starts expanded. @default true */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Callback fired when the open state changes. */\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n isMobile,\n\n toggleSidebar,\n\n open,\n setOpen,\n\n openMobile,\n setOpenMobile,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper', 'has-data-[variant=inset]:bg-sidebar', 'flex h-dvh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\n/**\n * The main sidebar panel; renders as a Drawer on mobile and a fixed `<aside>` on desktop with optional collapse behavior.\n *\n * @param side - Which edge of the viewport the sidebar attaches to. @default `'left'`\n * @param variant - Visual style: `'sidebar'` (default), `'floating'`, or `'inset'`.\n * @param collapsible - Collapse mode: `'offcanvas'` (slides out), `'icon'` (icon-only), or `'none'` (always visible).\n */\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <aside\n data-slot=\"sidebar\"\n className={cn('bg-sidebar', 'text-sidebar-foreground', 'flex h-full w-(--sidebar-width) flex-col', 'border-r', className)}\n {...props}\n >\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Drawer open={openMobile} onOpenChange={setOpenMobile} direction=\"left\">\n <DrawerContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n // side={side}\n >\n <DrawerHeader className=\"sr-only\">\n <DrawerContent>Sidebar</DrawerContent>\n <DrawerDescription>Displays the mobile sidebar.</DrawerDescription>\n </DrawerHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </DrawerContent>\n </Drawer>\n );\n }\n\n return (\n <aside\n className=\"group peer text-sidebar-foreground bg-card hidden md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative',\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-14 w-(--sidebar-width)',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'hidden md:flex',\n 'fixed inset-y-0 top-14 z-10',\n 'h-[calc(100dvh-3.5rem)] w-(--sidebar-width)',\n 'border-r',\n 'transition-[left,right,width] duration-200 ease-linear',\n side === 'left' && 'left-0',\n side === 'left' && 'group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]',\n side === 'right' && 'right-0',\n side === 'right' && 'group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n // Adjust the padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className={cn(\n 'flex size-full flex-col',\n 'group-data-[variant=floating]:rounded-lg',\n 'group-data-[variant=floating]:border',\n 'group-data-[variant=floating]:border-sidebar-border',\n 'group-data-[variant=floating]:shadow-sm'\n )}\n >\n {children}\n </div>\n </div>\n </aside>\n );\n}\n\n/** Icon button that toggles the sidebar open/collapsed state. */\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('size-10 rounded-full', className)}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <MenuIcon className=\"!size-6\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\n/** Invisible drag-rail along the sidebar edge that toggles collapse on click. */\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex',\n 'after:absolute',\n 'after:inset-y-0',\n 'after:left-1/2',\n 'after:w-0.5',\n 'group-data-[side=left]:-right-4',\n 'group-data-[side=right]:left-0',\n 'in-data-[side=left]:cursor-w-resize',\n 'in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize',\n '[[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:after:bg-sidebar-border',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar',\n 'group-data-[collapsible=offcanvas]:translate-x-0',\n 'group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className\n )}\n {...props}\n />\n );\n}\n\n/** The main content area that sits beside the Sidebar; expands to fill the remaining viewport width. */\nfunction SidebarInset({ className, children, ...props }: React.ComponentProps<'main'>) {\n return (\n <main data-slot=\"sidebar-inset\" className={cn('w-full', 'relative', 'flex flex-1 flex-col', className)} {...props}>\n <div className=\"h-14 w-full\" />\n <div className={cn('flex-1 inset-shadow-sm')}>{children}</div>\n </main>\n );\n}\n\n/** A compact search input styled for use inside a sidebar header. */\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return <Input data-slot=\"sidebar-input\" data-sidebar=\"input\" className={cn('bg-background h-8 w-full shadow-none', className)} {...props} />;\n}\n\n/** Sticky top section of the Sidebar, typically holding a logo or workspace switcher. */\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-header\" data-sidebar=\"header\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\n/** Sticky bottom section of the Sidebar, typically holding user account info or settings. */\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\n/** A horizontal Separator styled for use between sections inside a Sidebar. */\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('bg-sidebar-border mx-2 w-auto', className)} {...props} />;\n}\n\n/** Scrollable middle section of the Sidebar that grows to fill available space. */\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n}\n\n/** A logical section within SidebarContent, grouping related SidebarMenu items. */\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full min-w-0 flex-col p-2', className)} {...props} />;\n}\n\n/**\n * Small all-caps heading label at the top of a SidebarGroup; hidden automatically in icon-only collapse mode.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n */\nfunction SidebarGroupLabel({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70',\n 'ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8',\n 'group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Action button (e.g. \"Add\") positioned absolutely at the top-right of a SidebarGroup label.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n */\nfunction SidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring',\n 'absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',\n 'focus-visible:ring-2',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/** The content area of a SidebarGroup, typically wrapping a SidebarMenu. */\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group-content\" data-sidebar=\"group-content\" className={cn('w-full text-sm', className)} {...props} />;\n}\n\n/** Vertical list `<ul>` that holds SidebarMenuItems. */\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return <ul data-slot=\"sidebar-menu\" data-sidebar=\"menu\" className={cn('flex w-full min-w-0 flex-col gap-1', className)} {...props} />;\n}\n\n/** A single `<li>` entry in a SidebarMenu that may include a button, action, and badge. */\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-item\" data-sidebar=\"menu-item\" className={cn('group/menu-item relative', className)} {...props} />;\n}\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'peer/menu-button cursor-pointer flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding]',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'focus-visible:ring-2',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-accent',\n 'data-[active=true]:font-medium',\n 'data-[active=true]:text-sidebar-accent-foreground',\n 'data-[state=open]:hover:bg-sidebar-accent',\n 'data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-8!',\n 'group-data-[collapsible=icon]:p-2!',\n '[&>span:last-child]:truncate',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\n/**\n * The primary clickable button within a SidebarMenuItem; collapses to an icon-only view when the sidebar is in icon-collapse mode and optionally shows a tooltip.\n *\n * @param asChild - When true, renders as the child element via Radix Slot (useful for router links).\n * @param isActive - Marks the button as the currently active route.\n * @param tooltip - A string or TooltipContent props shown when the sidebar is collapsed to icon-only mode.\n * @param variant - `'default'` or `'outline'`.\n * @param size - `'default'`, `'sm'`, or `'lg'`.\n */\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n );\n}\n\n/**\n * An icon action button (e.g. more-options) positioned at the right of a SidebarMenuButton.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n * @param showOnHover - When true, the action is only visible on hover or when the menu item is focused.\n */\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover && 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n showOnHover && 'group-focus-within/menu-item:opacity-100',\n showOnHover && 'group-hover/menu-item:opacity-100',\n showOnHover && 'data-[state=open]:opacity-100 md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Small numeric or text badge rendered at the right of a SidebarMenuButton (e.g. unread count). */\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Placeholder skeleton row rendered in place of a SidebarMenuButton while menu items are loading.\n *\n * @param showIcon - When true, also renders a small square skeleton for the icon slot.\n */\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div data-slot=\"sidebar-menu-skeleton\" data-sidebar=\"menu-skeleton\" className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)} {...props}>\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\n/** Indented nested list of SidebarMenuSubItems rendered below a parent SidebarMenuItem. */\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/** A single `<li>` entry inside a SidebarMenuSub. */\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-sub-item\" data-sidebar=\"menu-sub-item\" className={cn('group/menu-sub-item relative', className)} {...props} />;\n}\n\n/**\n * The clickable link/button for a nested sub-menu entry inside a SidebarMenuSub.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n * @param size - `'sm'` for smaller text, `'md'` for normal text.\n * @param isActive - Highlights the button as the currently active sub-route.\n */\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring',\n 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'focus-visible:ring-2',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n '[&>span:last-child]:truncate',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n '[&>svg]:text-sidebar-accent-foreground',\n 'data-[active=true]:bg-sidebar-accent',\n 'data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n // eslint-disable-next-line react-refresh/only-export-components\n useSidebar,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sidebar.cjs","names":["open","TooltipProvider","Drawer","DrawerContent","DrawerHeader","DrawerDescription","Button","MenuIcon","Input","Separator","SlotPrimitive","Tooltip","TooltipTrigger","TooltipContent","Skeleton"],"sources":["../../packages/components/ui/sidebar.tsx"],"sourcesContent":["'use client';\nimport { createContext, use, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { MenuIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot as SlotPrimitive } from 'radix-ui';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader } from './drawer';\n\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null);\n\n/**\n * Hook that returns the current sidebar state and control methods from the nearest SidebarProvider.\n * Must be used within a `<SidebarProvider>`.\n */\nfunction useSidebar() {\n const context = use(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\n/**\n * Context provider that manages sidebar open/collapsed state, mobile drawer, keyboard shortcut (Ctrl+B), and CSS variables for all child Sidebar components.\n *\n * @example\n * ```tsx\n * import {\n * SidebarProvider, Sidebar, SidebarHeader, SidebarContent,\n * SidebarMenu, SidebarMenuItem, SidebarMenuButton,\n * SidebarInset, SidebarTrigger,\n * } from '@customafk/lunas-ui/ui/sidebar';\n *\n * <SidebarProvider>\n * <Sidebar>\n * <SidebarHeader>Logo</SidebarHeader>\n * <SidebarContent>\n * <SidebarMenu>\n * <SidebarMenuItem>\n * <SidebarMenuButton asChild isActive>\n * <a href=\"/dashboard\">Dashboard</a>\n * </SidebarMenuButton>\n * </SidebarMenuItem>\n * </SidebarMenu>\n * </SidebarContent>\n * </Sidebar>\n * <SidebarInset>\n * <SidebarTrigger />\n * <main>Page content</main>\n * </SidebarInset>\n * </SidebarProvider>\n * ```\n */\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Whether the sidebar starts expanded. @default true */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Callback fired when the open state changes. */\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n isMobile,\n\n toggleSidebar,\n\n open,\n setOpen,\n\n openMobile,\n setOpenMobile,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper', 'has-data-[variant=inset]:bg-sidebar', 'flex h-dvh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\n/**\n * The main sidebar panel; renders as a Drawer on mobile and a fixed `<aside>` on desktop with optional collapse behavior.\n *\n * @param side - Which edge of the viewport the sidebar attaches to. @default `'left'`\n * @param variant - Visual style: `'sidebar'` (default), `'floating'`, or `'inset'`.\n * @param collapsible - Collapse mode: `'offcanvas'` (slides out), `'icon'` (icon-only), or `'none'` (always visible).\n */\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <aside\n data-slot=\"sidebar\"\n className={cn('bg-sidebar', 'text-sidebar-foreground', 'flex h-full w-(--sidebar-width) flex-col', 'border-r', className)}\n {...props}\n >\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Drawer open={openMobile} onOpenChange={setOpenMobile} direction=\"left\">\n <DrawerContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n // side={side}\n >\n <DrawerHeader className=\"sr-only\">\n <DrawerContent>Sidebar</DrawerContent>\n <DrawerDescription>Displays the mobile sidebar.</DrawerDescription>\n </DrawerHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </DrawerContent>\n </Drawer>\n );\n }\n\n return (\n <aside\n className=\"group peer text-sidebar-foreground bg-card hidden md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative',\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-14 w-(--sidebar-width)',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'hidden md:flex',\n 'fixed inset-y-0 top-14 z-10',\n 'h-[calc(100dvh-3.5rem)] w-(--sidebar-width)',\n 'border-r',\n 'transition-[left,right,width] duration-200 ease-linear',\n side === 'left' && 'left-0',\n side === 'left' && 'group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]',\n side === 'right' && 'right-0',\n side === 'right' && 'group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n // Adjust the padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className={cn(\n 'flex size-full flex-col',\n 'group-data-[variant=floating]:rounded-lg',\n 'group-data-[variant=floating]:border',\n 'group-data-[variant=floating]:border-sidebar-border',\n 'group-data-[variant=floating]:shadow-sm'\n )}\n >\n {children}\n </div>\n </div>\n </aside>\n );\n}\n\n/** Icon button that toggles the sidebar open/collapsed state. */\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('size-10 rounded-full', className)}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <MenuIcon className=\"!size-6\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\n/** Invisible drag-rail along the sidebar edge that toggles collapse on click. */\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex',\n 'after:absolute',\n 'after:inset-y-0',\n 'after:left-1/2',\n 'after:w-0.5',\n 'group-data-[side=left]:-right-4',\n 'group-data-[side=right]:left-0',\n 'in-data-[side=left]:cursor-w-resize',\n 'in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize',\n '[[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:after:bg-sidebar-border',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar',\n 'group-data-[collapsible=offcanvas]:translate-x-0',\n 'group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className\n )}\n {...props}\n />\n );\n}\n\n/** The main content area that sits beside the Sidebar; expands to fill the remaining viewport width. */\nfunction SidebarInset({ className, children, ...props }: React.ComponentProps<'main'>) {\n return (\n <main data-slot=\"sidebar-inset\" className={cn('w-full', 'relative', 'flex flex-1 flex-col', className)} {...props}>\n <div className=\"h-14 w-full\" />\n <div className={cn('flex-1 inset-shadow-sm')}>{children}</div>\n </main>\n );\n}\n\n/** A compact search input styled for use inside a sidebar header. */\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return <Input data-slot=\"sidebar-input\" data-sidebar=\"input\" className={cn('bg-background h-8 w-full shadow-none', className)} {...props} />;\n}\n\n/** Sticky top section of the Sidebar, typically holding a logo or workspace switcher. */\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-header\" data-sidebar=\"header\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\n/** Sticky bottom section of the Sidebar, typically holding user account info or settings. */\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\n/** A horizontal Separator styled for use between sections inside a Sidebar. */\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('bg-sidebar-border mx-2 w-auto', className)} {...props} />;\n}\n\n/** Scrollable middle section of the Sidebar that grows to fill available space. */\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n}\n\n/** A logical section within SidebarContent, grouping related SidebarMenu items. */\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full min-w-0 flex-col p-2', className)} {...props} />;\n}\n\n/**\n * Small all-caps heading label at the top of a SidebarGroup; hidden automatically in icon-only collapse mode.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n */\nfunction SidebarGroupLabel({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70',\n 'ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8',\n 'group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Action button (e.g. \"Add\") positioned absolutely at the top-right of a SidebarGroup label.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n */\nfunction SidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring',\n 'absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',\n 'focus-visible:ring-2',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/** The content area of a SidebarGroup, typically wrapping a SidebarMenu. */\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group-content\" data-sidebar=\"group-content\" className={cn('w-full text-sm', className)} {...props} />;\n}\n\n/** Vertical list `<ul>` that holds SidebarMenuItems. */\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return <ul data-slot=\"sidebar-menu\" data-sidebar=\"menu\" className={cn('flex w-full min-w-0 flex-col gap-1', className)} {...props} />;\n}\n\n/** A single `<li>` entry in a SidebarMenu that may include a button, action, and badge. */\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-item\" data-sidebar=\"menu-item\" className={cn('group/menu-item relative', className)} {...props} />;\n}\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'peer/menu-button cursor-pointer flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding]',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'focus-visible:ring-2',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-accent',\n 'data-[active=true]:font-medium',\n 'data-[active=true]:text-sidebar-accent-foreground',\n 'data-[state=open]:hover:bg-sidebar-accent',\n 'data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-8!',\n 'group-data-[collapsible=icon]:p-2!',\n '[&>span:last-child]:truncate',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\n/**\n * The primary clickable button within a SidebarMenuItem; collapses to an icon-only view when the sidebar is in icon-collapse mode and optionally shows a tooltip.\n *\n * @param asChild - When true, renders as the child element via Radix Slot (useful for router links).\n * @param isActive - Marks the button as the currently active route.\n * @param tooltip - A string or TooltipContent props shown when the sidebar is collapsed to icon-only mode.\n * @param variant - `'default'` or `'outline'`.\n * @param size - `'default'`, `'sm'`, or `'lg'`.\n */\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n );\n}\n\n/**\n * An icon action button (e.g. more-options) positioned at the right of a SidebarMenuButton.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n * @param showOnHover - When true, the action is only visible on hover or when the menu item is focused.\n */\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover && 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n showOnHover && 'group-focus-within/menu-item:opacity-100',\n showOnHover && 'group-hover/menu-item:opacity-100',\n showOnHover && 'data-[state=open]:opacity-100 md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Small numeric or text badge rendered at the right of a SidebarMenuButton (e.g. unread count). */\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Placeholder skeleton row rendered in place of a SidebarMenuButton while menu items are loading.\n *\n * @param showIcon - When true, also renders a small square skeleton for the icon slot.\n */\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div data-slot=\"sidebar-menu-skeleton\" data-sidebar=\"menu-skeleton\" className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)} {...props}>\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\n/** Indented nested list of SidebarMenuSubItems rendered below a parent SidebarMenuItem. */\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/** A single `<li>` entry inside a SidebarMenuSub. */\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-sub-item\" data-sidebar=\"menu-sub-item\" className={cn('group/menu-sub-item relative', className)} {...props} />;\n}\n\n/**\n * The clickable link/button for a nested sub-menu entry inside a SidebarMenuSub.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n * @param size - `'sm'` for smaller text, `'md'` for normal text.\n * @param isActive - Highlights the button as the currently active sub-route.\n */\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring',\n 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'focus-visible:ring-2',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n '[&>span:last-child]:truncate',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n '[&>svg]:text-sidebar-accent-foreground',\n 'data-[active=true]:bg-sidebar-accent',\n 'data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n // eslint-disable-next-line react-refresh/only-export-components\n useSidebar,\n};\n"],"mappings":"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"}
|
package/dist/ui/sidebar.d.cts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { t as Button } from "../button-
|
|
1
|
+
import { t as Button } from "../button-BHCmEoty.cjs";
|
|
2
2
|
import { Separator } from "./separator.cjs";
|
|
3
3
|
import { TooltipContent } from "./tooltip.cjs";
|
|
4
|
-
import { t as Input } from "../input-
|
|
5
|
-
import * as
|
|
6
|
-
import * as
|
|
4
|
+
import { t as Input } from "../input-B4ZV1tKO.cjs";
|
|
5
|
+
import * as react273 from "react";
|
|
6
|
+
import * as class_variance_authority_types11 from "class-variance-authority/types";
|
|
7
7
|
import { VariantProps } from "class-variance-authority";
|
|
8
8
|
|
|
9
9
|
//#region packages/components/ui/sidebar.d.ts
|
|
@@ -67,7 +67,7 @@ declare function SidebarProvider({
|
|
|
67
67
|
open?: boolean;
|
|
68
68
|
/** Callback fired when the open state changes. */
|
|
69
69
|
onOpenChange?: (open: boolean) => void;
|
|
70
|
-
}):
|
|
70
|
+
}): react273.JSX.Element;
|
|
71
71
|
/**
|
|
72
72
|
* The main sidebar panel; renders as a Drawer on mobile and a fixed `<aside>` on desktop with optional collapse behavior.
|
|
73
73
|
*
|
|
@@ -86,54 +86,54 @@ declare function Sidebar({
|
|
|
86
86
|
side?: 'left' | 'right';
|
|
87
87
|
variant?: 'sidebar' | 'floating' | 'inset';
|
|
88
88
|
collapsible?: 'offcanvas' | 'icon' | 'none';
|
|
89
|
-
}):
|
|
89
|
+
}): react273.JSX.Element;
|
|
90
90
|
/** Icon button that toggles the sidebar open/collapsed state. */
|
|
91
91
|
declare function SidebarTrigger({
|
|
92
92
|
className,
|
|
93
93
|
onClick,
|
|
94
94
|
...props
|
|
95
|
-
}: React.ComponentProps<typeof Button>):
|
|
95
|
+
}: React.ComponentProps<typeof Button>): react273.JSX.Element;
|
|
96
96
|
/** Invisible drag-rail along the sidebar edge that toggles collapse on click. */
|
|
97
97
|
declare function SidebarRail({
|
|
98
98
|
className,
|
|
99
99
|
...props
|
|
100
|
-
}: React.ComponentProps<'button'>):
|
|
100
|
+
}: React.ComponentProps<'button'>): react273.JSX.Element;
|
|
101
101
|
/** The main content area that sits beside the Sidebar; expands to fill the remaining viewport width. */
|
|
102
102
|
declare function SidebarInset({
|
|
103
103
|
className,
|
|
104
104
|
children,
|
|
105
105
|
...props
|
|
106
|
-
}: React.ComponentProps<'main'>):
|
|
106
|
+
}: React.ComponentProps<'main'>): react273.JSX.Element;
|
|
107
107
|
/** A compact search input styled for use inside a sidebar header. */
|
|
108
108
|
declare function SidebarInput({
|
|
109
109
|
className,
|
|
110
110
|
...props
|
|
111
|
-
}: React.ComponentProps<typeof Input>):
|
|
111
|
+
}: React.ComponentProps<typeof Input>): react273.JSX.Element;
|
|
112
112
|
/** Sticky top section of the Sidebar, typically holding a logo or workspace switcher. */
|
|
113
113
|
declare function SidebarHeader({
|
|
114
114
|
className,
|
|
115
115
|
...props
|
|
116
|
-
}: React.ComponentProps<'div'>):
|
|
116
|
+
}: React.ComponentProps<'div'>): react273.JSX.Element;
|
|
117
117
|
/** Sticky bottom section of the Sidebar, typically holding user account info or settings. */
|
|
118
118
|
declare function SidebarFooter({
|
|
119
119
|
className,
|
|
120
120
|
...props
|
|
121
|
-
}: React.ComponentProps<'div'>):
|
|
121
|
+
}: React.ComponentProps<'div'>): react273.JSX.Element;
|
|
122
122
|
/** A horizontal Separator styled for use between sections inside a Sidebar. */
|
|
123
123
|
declare function SidebarSeparator({
|
|
124
124
|
className,
|
|
125
125
|
...props
|
|
126
|
-
}: React.ComponentProps<typeof Separator>):
|
|
126
|
+
}: React.ComponentProps<typeof Separator>): react273.JSX.Element;
|
|
127
127
|
/** Scrollable middle section of the Sidebar that grows to fill available space. */
|
|
128
128
|
declare function SidebarContent({
|
|
129
129
|
className,
|
|
130
130
|
...props
|
|
131
|
-
}: React.ComponentProps<'div'>):
|
|
131
|
+
}: React.ComponentProps<'div'>): react273.JSX.Element;
|
|
132
132
|
/** A logical section within SidebarContent, grouping related SidebarMenu items. */
|
|
133
133
|
declare function SidebarGroup({
|
|
134
134
|
className,
|
|
135
135
|
...props
|
|
136
|
-
}: React.ComponentProps<'div'>):
|
|
136
|
+
}: React.ComponentProps<'div'>): react273.JSX.Element;
|
|
137
137
|
/**
|
|
138
138
|
* Small all-caps heading label at the top of a SidebarGroup; hidden automatically in icon-only collapse mode.
|
|
139
139
|
*
|
|
@@ -145,7 +145,7 @@ declare function SidebarGroupLabel({
|
|
|
145
145
|
...props
|
|
146
146
|
}: React.ComponentProps<'div'> & {
|
|
147
147
|
asChild?: boolean;
|
|
148
|
-
}):
|
|
148
|
+
}): react273.JSX.Element;
|
|
149
149
|
/**
|
|
150
150
|
* Action button (e.g. "Add") positioned absolutely at the top-right of a SidebarGroup label.
|
|
151
151
|
*
|
|
@@ -157,26 +157,26 @@ declare function SidebarGroupAction({
|
|
|
157
157
|
...props
|
|
158
158
|
}: React.ComponentProps<'button'> & {
|
|
159
159
|
asChild?: boolean;
|
|
160
|
-
}):
|
|
160
|
+
}): react273.JSX.Element;
|
|
161
161
|
/** The content area of a SidebarGroup, typically wrapping a SidebarMenu. */
|
|
162
162
|
declare function SidebarGroupContent({
|
|
163
163
|
className,
|
|
164
164
|
...props
|
|
165
|
-
}: React.ComponentProps<'div'>):
|
|
165
|
+
}: React.ComponentProps<'div'>): react273.JSX.Element;
|
|
166
166
|
/** Vertical list `<ul>` that holds SidebarMenuItems. */
|
|
167
167
|
declare function SidebarMenu({
|
|
168
168
|
className,
|
|
169
169
|
...props
|
|
170
|
-
}: React.ComponentProps<'ul'>):
|
|
170
|
+
}: React.ComponentProps<'ul'>): react273.JSX.Element;
|
|
171
171
|
/** A single `<li>` entry in a SidebarMenu that may include a button, action, and badge. */
|
|
172
172
|
declare function SidebarMenuItem({
|
|
173
173
|
className,
|
|
174
174
|
...props
|
|
175
|
-
}: React.ComponentProps<'li'>):
|
|
175
|
+
}: React.ComponentProps<'li'>): react273.JSX.Element;
|
|
176
176
|
declare const sidebarMenuButtonVariants: (props?: ({
|
|
177
177
|
variant?: "default" | "outline" | null | undefined;
|
|
178
178
|
size?: "sm" | "lg" | "default" | null | undefined;
|
|
179
|
-
} &
|
|
179
|
+
} & class_variance_authority_types11.ClassProp) | undefined) => string;
|
|
180
180
|
/**
|
|
181
181
|
* The primary clickable button within a SidebarMenuItem; collapses to an icon-only view when the sidebar is in icon-collapse mode and optionally shows a tooltip.
|
|
182
182
|
*
|
|
@@ -198,7 +198,7 @@ declare function SidebarMenuButton({
|
|
|
198
198
|
asChild?: boolean;
|
|
199
199
|
isActive?: boolean;
|
|
200
200
|
tooltip?: string | React.ComponentProps<typeof TooltipContent>;
|
|
201
|
-
} & VariantProps<typeof sidebarMenuButtonVariants>):
|
|
201
|
+
} & VariantProps<typeof sidebarMenuButtonVariants>): react273.JSX.Element;
|
|
202
202
|
/**
|
|
203
203
|
* An icon action button (e.g. more-options) positioned at the right of a SidebarMenuButton.
|
|
204
204
|
*
|
|
@@ -213,12 +213,12 @@ declare function SidebarMenuAction({
|
|
|
213
213
|
}: React.ComponentProps<'button'> & {
|
|
214
214
|
asChild?: boolean;
|
|
215
215
|
showOnHover?: boolean;
|
|
216
|
-
}):
|
|
216
|
+
}): react273.JSX.Element;
|
|
217
217
|
/** Small numeric or text badge rendered at the right of a SidebarMenuButton (e.g. unread count). */
|
|
218
218
|
declare function SidebarMenuBadge({
|
|
219
219
|
className,
|
|
220
220
|
...props
|
|
221
|
-
}: React.ComponentProps<'div'>):
|
|
221
|
+
}: React.ComponentProps<'div'>): react273.JSX.Element;
|
|
222
222
|
/**
|
|
223
223
|
* Placeholder skeleton row rendered in place of a SidebarMenuButton while menu items are loading.
|
|
224
224
|
*
|
|
@@ -230,17 +230,17 @@ declare function SidebarMenuSkeleton({
|
|
|
230
230
|
...props
|
|
231
231
|
}: React.ComponentProps<'div'> & {
|
|
232
232
|
showIcon?: boolean;
|
|
233
|
-
}):
|
|
233
|
+
}): react273.JSX.Element;
|
|
234
234
|
/** Indented nested list of SidebarMenuSubItems rendered below a parent SidebarMenuItem. */
|
|
235
235
|
declare function SidebarMenuSub({
|
|
236
236
|
className,
|
|
237
237
|
...props
|
|
238
|
-
}: React.ComponentProps<'ul'>):
|
|
238
|
+
}: React.ComponentProps<'ul'>): react273.JSX.Element;
|
|
239
239
|
/** A single `<li>` entry inside a SidebarMenuSub. */
|
|
240
240
|
declare function SidebarMenuSubItem({
|
|
241
241
|
className,
|
|
242
242
|
...props
|
|
243
|
-
}: React.ComponentProps<'li'>):
|
|
243
|
+
}: React.ComponentProps<'li'>): react273.JSX.Element;
|
|
244
244
|
/**
|
|
245
245
|
* The clickable link/button for a nested sub-menu entry inside a SidebarMenuSub.
|
|
246
246
|
*
|
|
@@ -258,7 +258,7 @@ declare function SidebarMenuSubButton({
|
|
|
258
258
|
asChild?: boolean;
|
|
259
259
|
size?: 'sm' | 'md';
|
|
260
260
|
isActive?: boolean;
|
|
261
|
-
}):
|
|
261
|
+
}): react273.JSX.Element;
|
|
262
262
|
//#endregion
|
|
263
263
|
export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar };
|
|
264
264
|
//# sourceMappingURL=sidebar.d.cts.map
|
package/dist/ui/sidebar.d.mts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as Button } from "../button-
|
|
1
|
+
import { t as Button } from "../button-CPYKtYVF.mjs";
|
|
2
2
|
import { Separator } from "./separator.mjs";
|
|
3
3
|
import { TooltipContent } from "./tooltip.mjs";
|
|
4
|
-
import { t as Input } from "../input-
|
|
5
|
-
import * as
|
|
4
|
+
import { t as Input } from "../input-Che86SWz.mjs";
|
|
5
|
+
import * as react290 from "react";
|
|
6
6
|
import { VariantProps } from "class-variance-authority";
|
|
7
7
|
import * as class_variance_authority_types11 from "class-variance-authority/types";
|
|
8
8
|
|
|
@@ -67,7 +67,7 @@ declare function SidebarProvider({
|
|
|
67
67
|
open?: boolean;
|
|
68
68
|
/** Callback fired when the open state changes. */
|
|
69
69
|
onOpenChange?: (open: boolean) => void;
|
|
70
|
-
}):
|
|
70
|
+
}): react290.JSX.Element;
|
|
71
71
|
/**
|
|
72
72
|
* The main sidebar panel; renders as a Drawer on mobile and a fixed `<aside>` on desktop with optional collapse behavior.
|
|
73
73
|
*
|
|
@@ -86,54 +86,54 @@ declare function Sidebar({
|
|
|
86
86
|
side?: 'left' | 'right';
|
|
87
87
|
variant?: 'sidebar' | 'floating' | 'inset';
|
|
88
88
|
collapsible?: 'offcanvas' | 'icon' | 'none';
|
|
89
|
-
}):
|
|
89
|
+
}): react290.JSX.Element;
|
|
90
90
|
/** Icon button that toggles the sidebar open/collapsed state. */
|
|
91
91
|
declare function SidebarTrigger({
|
|
92
92
|
className,
|
|
93
93
|
onClick,
|
|
94
94
|
...props
|
|
95
|
-
}: React.ComponentProps<typeof Button>):
|
|
95
|
+
}: React.ComponentProps<typeof Button>): react290.JSX.Element;
|
|
96
96
|
/** Invisible drag-rail along the sidebar edge that toggles collapse on click. */
|
|
97
97
|
declare function SidebarRail({
|
|
98
98
|
className,
|
|
99
99
|
...props
|
|
100
|
-
}: React.ComponentProps<'button'>):
|
|
100
|
+
}: React.ComponentProps<'button'>): react290.JSX.Element;
|
|
101
101
|
/** The main content area that sits beside the Sidebar; expands to fill the remaining viewport width. */
|
|
102
102
|
declare function SidebarInset({
|
|
103
103
|
className,
|
|
104
104
|
children,
|
|
105
105
|
...props
|
|
106
|
-
}: React.ComponentProps<'main'>):
|
|
106
|
+
}: React.ComponentProps<'main'>): react290.JSX.Element;
|
|
107
107
|
/** A compact search input styled for use inside a sidebar header. */
|
|
108
108
|
declare function SidebarInput({
|
|
109
109
|
className,
|
|
110
110
|
...props
|
|
111
|
-
}: React.ComponentProps<typeof Input>):
|
|
111
|
+
}: React.ComponentProps<typeof Input>): react290.JSX.Element;
|
|
112
112
|
/** Sticky top section of the Sidebar, typically holding a logo or workspace switcher. */
|
|
113
113
|
declare function SidebarHeader({
|
|
114
114
|
className,
|
|
115
115
|
...props
|
|
116
|
-
}: React.ComponentProps<'div'>):
|
|
116
|
+
}: React.ComponentProps<'div'>): react290.JSX.Element;
|
|
117
117
|
/** Sticky bottom section of the Sidebar, typically holding user account info or settings. */
|
|
118
118
|
declare function SidebarFooter({
|
|
119
119
|
className,
|
|
120
120
|
...props
|
|
121
|
-
}: React.ComponentProps<'div'>):
|
|
121
|
+
}: React.ComponentProps<'div'>): react290.JSX.Element;
|
|
122
122
|
/** A horizontal Separator styled for use between sections inside a Sidebar. */
|
|
123
123
|
declare function SidebarSeparator({
|
|
124
124
|
className,
|
|
125
125
|
...props
|
|
126
|
-
}: React.ComponentProps<typeof Separator>):
|
|
126
|
+
}: React.ComponentProps<typeof Separator>): react290.JSX.Element;
|
|
127
127
|
/** Scrollable middle section of the Sidebar that grows to fill available space. */
|
|
128
128
|
declare function SidebarContent({
|
|
129
129
|
className,
|
|
130
130
|
...props
|
|
131
|
-
}: React.ComponentProps<'div'>):
|
|
131
|
+
}: React.ComponentProps<'div'>): react290.JSX.Element;
|
|
132
132
|
/** A logical section within SidebarContent, grouping related SidebarMenu items. */
|
|
133
133
|
declare function SidebarGroup({
|
|
134
134
|
className,
|
|
135
135
|
...props
|
|
136
|
-
}: React.ComponentProps<'div'>):
|
|
136
|
+
}: React.ComponentProps<'div'>): react290.JSX.Element;
|
|
137
137
|
/**
|
|
138
138
|
* Small all-caps heading label at the top of a SidebarGroup; hidden automatically in icon-only collapse mode.
|
|
139
139
|
*
|
|
@@ -145,7 +145,7 @@ declare function SidebarGroupLabel({
|
|
|
145
145
|
...props
|
|
146
146
|
}: React.ComponentProps<'div'> & {
|
|
147
147
|
asChild?: boolean;
|
|
148
|
-
}):
|
|
148
|
+
}): react290.JSX.Element;
|
|
149
149
|
/**
|
|
150
150
|
* Action button (e.g. "Add") positioned absolutely at the top-right of a SidebarGroup label.
|
|
151
151
|
*
|
|
@@ -157,22 +157,22 @@ declare function SidebarGroupAction({
|
|
|
157
157
|
...props
|
|
158
158
|
}: React.ComponentProps<'button'> & {
|
|
159
159
|
asChild?: boolean;
|
|
160
|
-
}):
|
|
160
|
+
}): react290.JSX.Element;
|
|
161
161
|
/** The content area of a SidebarGroup, typically wrapping a SidebarMenu. */
|
|
162
162
|
declare function SidebarGroupContent({
|
|
163
163
|
className,
|
|
164
164
|
...props
|
|
165
|
-
}: React.ComponentProps<'div'>):
|
|
165
|
+
}: React.ComponentProps<'div'>): react290.JSX.Element;
|
|
166
166
|
/** Vertical list `<ul>` that holds SidebarMenuItems. */
|
|
167
167
|
declare function SidebarMenu({
|
|
168
168
|
className,
|
|
169
169
|
...props
|
|
170
|
-
}: React.ComponentProps<'ul'>):
|
|
170
|
+
}: React.ComponentProps<'ul'>): react290.JSX.Element;
|
|
171
171
|
/** A single `<li>` entry in a SidebarMenu that may include a button, action, and badge. */
|
|
172
172
|
declare function SidebarMenuItem({
|
|
173
173
|
className,
|
|
174
174
|
...props
|
|
175
|
-
}: React.ComponentProps<'li'>):
|
|
175
|
+
}: React.ComponentProps<'li'>): react290.JSX.Element;
|
|
176
176
|
declare const sidebarMenuButtonVariants: (props?: ({
|
|
177
177
|
variant?: "default" | "outline" | null | undefined;
|
|
178
178
|
size?: "sm" | "lg" | "default" | null | undefined;
|
|
@@ -198,7 +198,7 @@ declare function SidebarMenuButton({
|
|
|
198
198
|
asChild?: boolean;
|
|
199
199
|
isActive?: boolean;
|
|
200
200
|
tooltip?: string | React.ComponentProps<typeof TooltipContent>;
|
|
201
|
-
} & VariantProps<typeof sidebarMenuButtonVariants>):
|
|
201
|
+
} & VariantProps<typeof sidebarMenuButtonVariants>): react290.JSX.Element;
|
|
202
202
|
/**
|
|
203
203
|
* An icon action button (e.g. more-options) positioned at the right of a SidebarMenuButton.
|
|
204
204
|
*
|
|
@@ -213,12 +213,12 @@ declare function SidebarMenuAction({
|
|
|
213
213
|
}: React.ComponentProps<'button'> & {
|
|
214
214
|
asChild?: boolean;
|
|
215
215
|
showOnHover?: boolean;
|
|
216
|
-
}):
|
|
216
|
+
}): react290.JSX.Element;
|
|
217
217
|
/** Small numeric or text badge rendered at the right of a SidebarMenuButton (e.g. unread count). */
|
|
218
218
|
declare function SidebarMenuBadge({
|
|
219
219
|
className,
|
|
220
220
|
...props
|
|
221
|
-
}: React.ComponentProps<'div'>):
|
|
221
|
+
}: React.ComponentProps<'div'>): react290.JSX.Element;
|
|
222
222
|
/**
|
|
223
223
|
* Placeholder skeleton row rendered in place of a SidebarMenuButton while menu items are loading.
|
|
224
224
|
*
|
|
@@ -230,17 +230,17 @@ declare function SidebarMenuSkeleton({
|
|
|
230
230
|
...props
|
|
231
231
|
}: React.ComponentProps<'div'> & {
|
|
232
232
|
showIcon?: boolean;
|
|
233
|
-
}):
|
|
233
|
+
}): react290.JSX.Element;
|
|
234
234
|
/** Indented nested list of SidebarMenuSubItems rendered below a parent SidebarMenuItem. */
|
|
235
235
|
declare function SidebarMenuSub({
|
|
236
236
|
className,
|
|
237
237
|
...props
|
|
238
|
-
}: React.ComponentProps<'ul'>):
|
|
238
|
+
}: React.ComponentProps<'ul'>): react290.JSX.Element;
|
|
239
239
|
/** A single `<li>` entry inside a SidebarMenuSub. */
|
|
240
240
|
declare function SidebarMenuSubItem({
|
|
241
241
|
className,
|
|
242
242
|
...props
|
|
243
|
-
}: React.ComponentProps<'li'>):
|
|
243
|
+
}: React.ComponentProps<'li'>): react290.JSX.Element;
|
|
244
244
|
/**
|
|
245
245
|
* The clickable link/button for a nested sub-menu entry inside a SidebarMenuSub.
|
|
246
246
|
*
|
|
@@ -258,7 +258,7 @@ declare function SidebarMenuSubButton({
|
|
|
258
258
|
asChild?: boolean;
|
|
259
259
|
size?: 'sm' | 'md';
|
|
260
260
|
isActive?: boolean;
|
|
261
|
-
}):
|
|
261
|
+
}): react290.JSX.Element;
|
|
262
262
|
//#endregion
|
|
263
263
|
export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar };
|
|
264
264
|
//# sourceMappingURL=sidebar.d.mts.map
|