@customafk/lunas-ui 0.2.61 → 0.2.62
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/{cms-layout-BeU_CkJl.mjs → cms-layout-CuF5ahpj.mjs} +2 -2
- package/dist/{cms-layout-BeU_CkJl.mjs.map → cms-layout-CuF5ahpj.mjs.map} +1 -1
- package/dist/{cms-layout-hLiQbkXR.cjs → cms-layout-SubgSF72.cjs} +2 -2
- package/dist/{cms-layout-hLiQbkXR.cjs.map → cms-layout-SubgSF72.cjs.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/layouts/cms-layout/index.cjs +1 -1
- package/dist/layouts/cms-layout/index.mjs +1 -1
- package/dist/{resizable-CFCYn9e_.d.cts → resizable-CNIYTd7k.d.cts} +2 -2
- package/dist/{resizable-CFCYn9e_.d.mts → resizable-CNIYTd7k.d.mts} +2 -2
- package/dist/ui/resizable.d.cts +1 -1
- package/dist/ui/resizable.d.mts +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./dist-CtTonIm8.mjs";import{Button as t}from"./ui/button.mjs";import"./ui/skeleton.mjs";import{Tooltip as n,TooltipContent as r,TooltipProvider as i,TooltipTrigger as a}from"./ui/tooltip.mjs";import{Avatar as o,AvatarFallback as s,AvatarImage as c}from"./ui/avatar.mjs";import{LunasLogo as l}from"./features/logo/index.mjs";import{Separator as u}from"./ui/separator.mjs";import{Sheet as d,SheetContent as f,SheetDescription as p,SheetHeader as m,SheetTitle as h}from"./ui/sheet.mjs";import{DropdownMenu as g,DropdownMenuContent as _,DropdownMenuGroup as v,DropdownMenuItem as y,DropdownMenuSeparator as b,DropdownMenuTrigger as x}from"./ui/dropdown-menu.mjs";import{Input as S}from"./ui/input.mjs";import{EarthIcon as ee,LogOutIcon as C,MenuIcon as w,UserRoundIcon as T}from"lucide-react";import{createContext as te,memo as E,useCallback as D,useContext as O,useEffect as ne,useMemo as re,useState as k}from"react";import{cn as A}from"@customafk/react-toolkit/utils";import{cva as j}from"class-variance-authority";import{Fragment as M,jsx as N,jsxs as P}from"react/jsx-runtime";import{colorHashLight as F}from"@customafk/react-toolkit/color-hash";import{useIsMobile as I}from"@customafk/react-toolkit/hooks/useMobile";const L=te(null);function R(){let e=O(L);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function ie({defaultOpen:e=!0,open:t,onOpenChange:n,className:r,style:a,children:o,...s}){let c=I(),[l,u]=k(!1),[d,f]=k(e),p=t??d,m=D(e=>{let t=typeof e==`function`?e(p):e;n?n(t):f(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[n,p]),h=D(()=>c?u(e=>!e):m(e=>!e),[c,m]);ne(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),h())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[h]);let g=p?`expanded`:`collapsed`,_=re(()=>({state:g,open:p,setOpen:m,isMobile:c,openMobile:l,setOpenMobile:u,toggleSidebar:h}),[g,p,m,c,l,h]);return N(L.Provider,{value:_,children:N(i,{delayDuration:0,children:N(`section`,{"data-slot":`layout-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:A(`relative group/sidebar-wrapper flex h-dvh bg-sidebar`,r),...s,children:o})})})}const z=E(({side:e=`left`,variant:n=`sidebar`,collapsible:r=`offcanvas`,className:i,children:a,...o})=>{let{isMobile:s,state:c,openMobile:u,setOpenMobile:g,toggleSidebar:_}=R(),v=D(e=>{_(),e.preventDefault(),e.stopPropagation()},[_]);return r===`none`?N(`aside`,{"data-slot":`sidebar`,className:A(`flex w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,i),...o,children:a}):s?N(d,{open:u,onOpenChange:g,...o,children:P(f,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,style:{"--sidebar-width":`18rem`},side:e,className:`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden`,children:[P(m,{className:`sr-only`,children:[N(h,{children:`Sidebar`}),N(p,{children:`Displays the mobile sidebar.`})]}),P(`div`,{className:`flex size-full flex-col`,children:[P(`div`,{className:`flex flex-0 items-center gap-x-2 border-b border-border-weak p-2 pr-4`,children:[P(t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:A(`size-10 rounded-full`,i),onClick:v,children:[N(w,{className:`size-6!`}),N(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),N(l,{variant:`horizontal`,size:`xs`,className:`ml-2`})]}),N(`div`,{className:`flex flex-1 flex-col p-2`,children:a})]})]})}):P(`aside`,{className:`group peer hidden bg-card text-sidebar-foreground md:block`,"data-state":c,"data-collapsible":c===`collapsed`?r:``,"data-variant":n,"data-side":e,"data-slot":`sidebar`,children:[N(`div`,{"data-slot":`sidebar-gap`,className:A(`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]`,`w-(--sidebar-width)`,`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`)}),N(`div`,{"data-slot":`sidebar-container`,className:A(`hidden md:flex shadow-nav`,`fixed left-0 inset-y-0 p-2`,`top-[calc(var(--header-height)+0.5rem)] z-10`,`w-(--sidebar-width)`,`transition-all duration-200 ease-linear`,`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`,i),...o,children:N(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:`relative flex size-full flex-col`,children:a})})]})});z.displayName=`CMSLayoutSidebar`;const B=E(({className:e,children:t,...n})=>P(`main`,{"data-slot":`sidebar-inset`,className:A(`relative flex w-full flex-1 flex-col`,e),...n,children:[N(`div`,{className:`h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]`}),N(`div`,{className:`relative flex-1 size-full overflow-auto`,children:t})]}));B.displayName=`CMSLayoutMain`;const V=E(({className:e,...t})=>N(S,{"data-slot":`sidebar-input`,"data-sidebar":`input`,className:A(`h-8 w-full bg-background shadow-none`,e),...t}));V.displayName=`SidebarInput`;const H=E(({className:e,...t})=>N(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,className:A(`flex flex-col gap-2 p-2`,e),...t}));H.displayName=`SidebarHeader`;const U=E(({className:e,...t})=>N(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:A(`flex flex-col gap-2`,e),...t}));U.displayName=`SidebarFooter`;const W=E(({className:e,...t})=>N(u,{"data-slot":`sidebar-separator`,"data-sidebar":`separator`,className:A(`mx-2 w-auto bg-sidebar-border`,e),...t}));W.displayName=`SidebarSeparator`;const G=E(({className:e,...t})=>N(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:A(`flex flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t}));G.displayName=`SidebarContent`;const K=E(({className:e,...t})=>N(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:A(`relative flex w-full flex-col`,e),...t}));K.displayName=`SidebarGroup`;const q=E(({className:t,asChild:n=!1,...r})=>N(n?e:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:A(`flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity,color] 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`,t),...r}));q.displayName=`SidebarGroupLabel`;const J=E(({className:e,...t})=>N(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:A(`w-full text-sm`,e),...t}));J.displayName=`SidebarGroupContent`;const Y=E(({className:e,...t})=>N(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:A(`flex w-full min-w-0 flex-col gap-1`,e),...t}));Y.displayName=`SidebarMenu`;const X=E(({className:e,...t})=>N(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:A(`group/menu-item relative`,e),...t}));X.displayName=`SidebarMenuItem`;const ae=j([`peer/menu-button`,`cursor-pointer`,`flex w-full items-center gap-2`,`overflow-hidden rounded-md p-2 outline-hidden`,`truncate text-left font-normal`,`transition-[color,background-color,width,height,padding]`,`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-primary-muted data-[active=true]:text-sidebar-primary`,`data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-12! group-data-[collapsible=icon]:p-3! group-data-[collapsible=icon]:gap-3!`,`[&>svg]:size-6 [&>svg]:shrink-0`,`[&>span:last-child]:truncate`],{variants:{variant:{default:`hover:bg-sidebar-accent/60 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-10 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}}),Z=E(({asChild:t=!1,isActive:i=!1,variant:o=`default`,size:s=`default`,tooltip:c,className:l,...u})=>{let d=t?e:`button`,{isMobile:f,state:p}=R(),m=N(d,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":s,"data-active":i,className:A(ae({variant:o,size:s}),l),...u});return c?(typeof c==`string`&&(c={children:c}),P(n,{children:[N(a,{asChild:!0,children:m}),N(r,{side:`right`,align:`center`,hidden:p!==`collapsed`||f,...c})]})):m});Z.displayName=`SidebarMenuButton`;const oe=({i18nText:e,onChangeToEnLocale:n,onChangeToViLocale:r,user:i,onLogout:a,logoutLabel:u=`Log out`,logo:d})=>{let{toggleSidebar:f}=R(),p=D(e=>{e.preventDefault(),e.stopPropagation(),f()},[f]),m=D(e=>{e.preventDefault(),e.stopPropagation(),n?.()},[n]),h=D(e=>{e.preventDefault(),e.stopPropagation(),r?.()},[r]),S=i?F.hex(i.name):void 0;return P(`header`,{"data-slot":`cms-layout-header`,className:A(`bg-card`,`h-(--header-height)`,`sm:h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6`,`absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5`,`flex items-center shadow-nav`,`transition-[height] ease-linear`),children:[P(t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:`size-10 rounded-full transition-all hover:text-text-positive`,onClick:p,children:[N(w,{className:`size-6!`}),N(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),N(`div`,{className:`flex flex-1 items-center sm:ml-2.5`,children:d??N(l,{variant:`horizontal`,size:`xs`})}),P(`div`,{className:`flex items-center gap-1`,children:[i&&P(g,{children:[N(x,{asChild:!0,children:P(t,{variant:`ghost`,color:`muted`,className:`h-9 gap-2.5 rounded-full px-2 transition-all`,children:[P(o,{className:`size-7 shrink-0`,children:[N(c,{src:i.avatarUrl,alt:i.name}),N(s,{style:{backgroundColor:S},children:N(T,{size:14,className:`text-white`})})]}),P(`div`,{className:`hidden flex-col items-start sm:flex`,children:[N(`span`,{className:`max-w-36 truncate text-xs font-semibold leading-tight text-text-positive`,children:i.name}),i.email&&N(`span`,{className:`max-w-36 truncate text-xs leading-tight text-text-positive-weak`,children:i.email})]})]})}),P(_,{align:`end`,className:`w-60`,children:[P(`div`,{className:`flex flex-col items-center gap-2 px-4 py-4 text-center`,children:[P(o,{className:`size-12`,children:[N(c,{src:i.avatarUrl,alt:i.name}),N(s,{style:{backgroundColor:S},children:N(T,{size:22,className:`text-white`})})]}),P(`div`,{className:`flex min-w-0 w-full flex-col items-center gap-0.5`,children:[N(`p`,{className:`truncate text-sm font-semibold text-text-positive`,children:i.name}),i.email&&N(`p`,{className:`truncate text-xs text-text-positive-weak`,children:i.email}),i.role&&N(`span`,{className:`mt-1 w-fit rounded-sm border border-border bg-secondary-muted px-2 py-0.5 text-xs font-medium text-text-positive-weak`,children:i.role})]})]}),a&&P(M,{children:[N(b,{}),N(v,{children:P(y,{className:`text-danger focus:text-danger`,onClick:a,children:[N(C,{className:`size-4`}),u]})})]})]})]}),i&&(n||r)&&N(`div`,{className:`mx-1 h-5 w-px bg-border`}),(n||r)&&P(g,{children:[N(x,{asChild:!0,children:P(t,{"data-slot":`locale-trigger`,variant:`ghost`,color:`muted`,className:`gap-x-1 rounded-full transition-all hover:text-text-positive`,children:[N(ee,{className:`size-6!`}),e]})}),N(_,{align:`end`,children:P(v,{children:[N(y,{onClick:m,children:`EN - English`}),N(y,{onClick:h,children:`VI - Vietnamese`})]})})]})]})]})},Q=E(({id:e,label:t,icon:n,activeNavItemId:r,onClick:i,renderAs:a})=>N(X,{children:a?N(Z,{asChild:!0,isActive:e===r,children:a({icon:n,label:t})}):P(Z,{isActive:e===r,onClick:i,children:[n,t]})}));Q.displayName=`SidebarContentGroupItem`;const $=E(({id:e,label:t,children:n})=>P(K,{children:[N(q,{children:t}),N(J,{children:N(Y,{children:n})})]}));$.displayName=`SidebarContentGroup`;const se=({i18nText:e,activeNavItemId:t,sidebar:n,children:r,onChangeToEnLocale:i,onChangeToViLocale:a,onLogout:o,logoutLabel:s=`Log out`,copyright:c=`Copyright © ${new Date().getFullYear()}, Lunas.`,user:l})=>{let u=n?.groupcontent??[];return P(ie,{children:[N(oe,{i18nText:e,onChangeToEnLocale:i,onChangeToViLocale:a,user:l,onLogout:o,logoutLabel:s}),P(z,{variant:`inset`,collapsible:`icon`,children:[N(G,{children:u.map(e=>N($,{id:e.id,label:e.label,children:e.items.map(e=>N(Q,{id:e.id,activeNavItemId:t,label:e.label,icon:e.icon,onClick:e.onClick},e.id))},e.id))}),N(U,{children:P(Y,{children:[N(X,{children:P(Z,{className:`border border-border`,onClick:o,children:[N(C,{className:`text-text-positive-weak`}),s]})}),N(X,{className:`mt-2 border-t border-t-border`,children:N(`p`,{className:`pt-2 text-center text-xs text-text-positive-subtle`,children:c})})]})})]}),N(B,{children:r})]})};export{se as t};
|
|
2
|
-
//# sourceMappingURL=cms-layout-
|
|
1
|
+
import{t as e}from"./dist-CtTonIm8.mjs";import{Button as t}from"./ui/button.mjs";import"./ui/skeleton.mjs";import{Tooltip as n,TooltipContent as r,TooltipProvider as i,TooltipTrigger as a}from"./ui/tooltip.mjs";import{Avatar as o,AvatarFallback as s,AvatarImage as c}from"./ui/avatar.mjs";import{LunasLogo as l}from"./features/logo/index.mjs";import{Separator as u}from"./ui/separator.mjs";import{Sheet as d,SheetContent as f,SheetDescription as p,SheetHeader as m,SheetTitle as h}from"./ui/sheet.mjs";import{DropdownMenu as g,DropdownMenuContent as _,DropdownMenuGroup as v,DropdownMenuItem as y,DropdownMenuSeparator as b,DropdownMenuTrigger as x}from"./ui/dropdown-menu.mjs";import{Input as S}from"./ui/input.mjs";import{EarthIcon as ee,LogOutIcon as C,MenuIcon as w,UserRoundIcon as T}from"lucide-react";import{createContext as te,memo as E,useCallback as D,useContext as O,useEffect as ne,useMemo as re,useState as k}from"react";import{cn as A}from"@customafk/react-toolkit/utils";import{cva as j}from"class-variance-authority";import{Fragment as M,jsx as N,jsxs as P}from"react/jsx-runtime";import{colorHashLight as F}from"@customafk/react-toolkit/color-hash";import{useIsMobile as I}from"@customafk/react-toolkit/hooks/useMobile";const L=te(null);function R(){let e=O(L);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function ie({defaultOpen:e=!0,open:t,onOpenChange:n,className:r,style:a,children:o,...s}){let c=I(),[l,u]=k(!1),[d,f]=k(e),p=t??d,m=D(e=>{let t=typeof e==`function`?e(p):e;n?n(t):f(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[n,p]),h=D(()=>c?u(e=>!e):m(e=>!e),[c,m]);ne(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),h())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[h]);let g=p?`expanded`:`collapsed`,_=re(()=>({state:g,open:p,setOpen:m,isMobile:c,openMobile:l,setOpenMobile:u,toggleSidebar:h}),[g,p,m,c,l,h]);return N(L.Provider,{value:_,children:N(i,{delayDuration:0,children:N(`section`,{"data-slot":`layout-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:A(`relative group/sidebar-wrapper flex h-dvh bg-sidebar`,r),...s,children:o})})})}const z=E(({side:e=`left`,variant:n=`sidebar`,collapsible:r=`offcanvas`,className:i,children:a,...o})=>{let{isMobile:s,state:c,openMobile:u,setOpenMobile:g,toggleSidebar:_}=R(),v=D(e=>{_(),e.preventDefault(),e.stopPropagation()},[_]);return r===`none`?N(`aside`,{"data-slot":`sidebar`,className:A(`flex w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,i),...o,children:a}):s?N(d,{open:u,onOpenChange:g,...o,children:P(f,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,style:{"--sidebar-width":`18rem`},side:e,className:`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden`,children:[P(m,{className:`sr-only`,children:[N(h,{children:`Sidebar`}),N(p,{children:`Displays the mobile sidebar.`})]}),P(`div`,{className:`flex size-full flex-col`,children:[P(`div`,{className:`flex flex-0 items-center gap-x-2 border-b border-border-weak p-2 pr-4`,children:[P(t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:A(`size-10 rounded-full`,i),onClick:v,children:[N(w,{className:`size-6!`}),N(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),N(l,{variant:`horizontal`,size:`xs`,className:`ml-2`})]}),N(`div`,{className:`flex flex-1 flex-col p-2`,children:a})]})]})}):P(`aside`,{className:`group peer hidden bg-card text-sidebar-foreground md:block`,"data-state":c,"data-collapsible":c===`collapsed`?r:``,"data-variant":n,"data-side":e,"data-slot":`sidebar`,children:[N(`div`,{"data-slot":`sidebar-gap`,className:A(`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]`,`w-(--sidebar-width)`,`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`)}),N(`div`,{"data-slot":`sidebar-container`,className:A(`hidden md:flex shadow-nav`,`fixed left-0 inset-y-0 p-2`,`top-[calc(var(--header-height)+0.5rem)] z-10`,`w-(--sidebar-width)`,`transition-all duration-200 ease-linear`,`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`,i),...o,children:N(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:`relative flex size-full flex-col`,children:a})})]})});z.displayName=`CMSLayoutSidebar`;const B=E(({className:e,children:t,...n})=>P(`main`,{"data-slot":`sidebar-inset`,className:A(`relative flex w-full flex-1 flex-col`,e),...n,children:[N(`div`,{className:`h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]`}),N(`div`,{className:`relative flex-1 size-full overflow-auto`,children:t})]}));B.displayName=`CMSLayoutMain`;const V=E(({className:e,...t})=>N(S,{"data-slot":`sidebar-input`,"data-sidebar":`input`,className:A(`h-8 w-full bg-background shadow-none`,e),...t}));V.displayName=`SidebarInput`;const H=E(({className:e,...t})=>N(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,className:A(`flex flex-col gap-2 p-2`,e),...t}));H.displayName=`SidebarHeader`;const U=E(({className:e,...t})=>N(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:A(`flex flex-col gap-2`,e),...t}));U.displayName=`SidebarFooter`;const W=E(({className:e,...t})=>N(u,{"data-slot":`sidebar-separator`,"data-sidebar":`separator`,className:A(`mx-2 w-auto bg-sidebar-border`,e),...t}));W.displayName=`SidebarSeparator`;const G=E(({className:e,...t})=>N(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:A(`flex flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t}));G.displayName=`SidebarContent`;const K=E(({className:e,...t})=>N(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:A(`relative flex w-full flex-col`,e),...t}));K.displayName=`SidebarGroup`;const q=E(({className:t,asChild:n=!1,...r})=>N(n?e:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:A(`flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity,color] 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`,t),...r}));q.displayName=`SidebarGroupLabel`;const J=E(({className:e,...t})=>N(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:A(`w-full text-sm`,e),...t}));J.displayName=`SidebarGroupContent`;const Y=E(({className:e,...t})=>N(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:A(`flex w-full min-w-0 flex-col gap-1`,e),...t}));Y.displayName=`SidebarMenu`;const X=E(({className:e,...t})=>N(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:A(`group/menu-item relative`,e),...t}));X.displayName=`SidebarMenuItem`;const ae=j([`peer/menu-button`,`cursor-pointer`,`flex w-full items-center gap-2`,`overflow-hidden rounded-md p-2 outline-hidden`,`truncate text-left font-normal`,`transition-[color,background-color,width,height,padding]`,`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-primary-muted data-[active=true]:text-sidebar-primary`,`data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-12! group-data-[collapsible=icon]:p-3! group-data-[collapsible=icon]:gap-3!`,`[&>svg]:size-6 [&>svg]:shrink-0`,`[&>span:last-child]:truncate`],{variants:{variant:{default:`hover:bg-sidebar-accent/60 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-10 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}}),Z=E(({asChild:t=!1,isActive:i=!1,variant:o=`default`,size:s=`default`,tooltip:c,className:l,...u})=>{let d=t?e:`button`,{isMobile:f,state:p}=R(),m=N(d,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":s,"data-active":i,className:A(ae({variant:o,size:s}),l),...u});return c?(typeof c==`string`&&(c={children:c}),P(n,{children:[N(a,{asChild:!0,children:m}),N(r,{side:`right`,align:`center`,hidden:p!==`collapsed`||f,...c})]})):m});Z.displayName=`SidebarMenuButton`;const oe=({i18nText:e,onChangeToEnLocale:n,onChangeToViLocale:r,user:i,onLogout:a,logoutLabel:u=`Log out`,logo:d})=>{let{toggleSidebar:f}=R(),p=D(e=>{e.preventDefault(),e.stopPropagation(),f()},[f]),m=D(e=>{e.preventDefault(),e.stopPropagation(),n?.()},[n]),h=D(e=>{e.preventDefault(),e.stopPropagation(),r?.()},[r]),S=i?F.hex(i.name):void 0;return P(`header`,{"data-slot":`cms-layout-header`,className:A(`bg-card`,`h-(--header-height)`,`sm:h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6`,`absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5`,`flex items-center shadow-nav`,`transition-[height] ease-linear`),children:[P(t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:`size-10 rounded-full transition-all hover:text-text-positive`,onClick:p,children:[N(w,{className:`size-6!`}),N(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),N(`div`,{className:`flex flex-1 items-center sm:ml-2.5`,children:d??N(l,{variant:`horizontal`,size:`xs`})}),P(`div`,{className:`flex items-center gap-1`,children:[i&&P(g,{children:[N(x,{asChild:!0,children:P(t,{variant:`ghost`,color:`muted`,className:`h-9 gap-2.5 rounded-full px-2 transition-all`,children:[P(o,{className:`size-7 shrink-0`,children:[N(c,{src:i.avatarUrl,alt:i.name}),N(s,{style:{backgroundColor:S},children:N(T,{size:14,className:`text-white`})})]}),P(`div`,{className:`hidden flex-col items-start sm:flex`,children:[N(`span`,{className:`max-w-36 truncate text-xs font-semibold leading-tight text-text-positive`,children:i.name}),i.email&&N(`span`,{className:`max-w-36 truncate text-xs leading-tight text-text-positive-weak`,children:i.email})]})]})}),P(_,{align:`end`,className:`w-60`,children:[P(`div`,{className:`flex flex-col items-center gap-2 px-4 py-4 text-center`,children:[P(o,{className:`size-12`,children:[N(c,{src:i.avatarUrl,alt:i.name}),N(s,{style:{backgroundColor:S},children:N(T,{size:22,className:`text-white`})})]}),P(`div`,{className:`flex min-w-0 w-full flex-col items-center gap-0.5`,children:[N(`p`,{className:`truncate text-sm font-semibold text-text-positive`,children:i.name}),i.email&&N(`p`,{className:`truncate text-xs text-text-positive-weak`,children:i.email}),i.role&&N(`span`,{className:`mt-1 w-fit rounded-sm border border-border bg-secondary-muted px-2 py-0.5 text-xs font-medium text-text-positive-weak`,children:i.role})]})]}),a&&P(M,{children:[N(b,{}),N(v,{children:P(y,{className:`text-danger focus:text-danger`,onClick:a,children:[N(C,{className:`size-4`}),u]})})]})]})]}),i&&(n||r)&&N(`div`,{className:`mx-1 h-5 w-px bg-border`}),(n||r)&&P(g,{children:[N(x,{asChild:!0,children:P(t,{"data-slot":`locale-trigger`,variant:`ghost`,color:`muted`,className:`gap-x-1 rounded-full transition-all hover:text-text-positive`,children:[N(ee,{className:`size-6!`}),e]})}),N(_,{align:`end`,children:P(v,{children:[N(y,{onClick:m,children:`EN - English`}),N(y,{onClick:h,children:`VI - Vietnamese`})]})})]})]})]})},Q=E(({id:e,label:t,icon:n,activeNavItemId:r,onClick:i,renderAs:a})=>N(X,{children:a?N(Z,{asChild:!0,isActive:e===r,children:a({icon:n,label:t})}):P(Z,{isActive:e===r,onClick:i,children:[n,t]})}));Q.displayName=`SidebarContentGroupItem`;const $=E(({id:e,label:t,children:n})=>P(K,{children:[N(q,{children:t}),N(J,{children:N(Y,{children:n})})]}));$.displayName=`SidebarContentGroup`;const se=({i18nText:e,activeNavItemId:t,sidebar:n,children:r,onChangeToEnLocale:i,onChangeToViLocale:a,onLogout:o,logoutLabel:s=`Log out`,copyright:c=`Copyright © ${new Date().getFullYear()}, Lunas.`,user:l})=>{let u=n?.groupcontent??[];return P(ie,{children:[N(oe,{i18nText:e,onChangeToEnLocale:i,onChangeToViLocale:a,user:l,onLogout:o,logoutLabel:s}),P(z,{variant:`inset`,collapsible:`icon`,children:[N(G,{children:u.map(e=>N($,{id:e.id,label:e.label,children:e.items.map(e=>N(Q,{id:e.id,activeNavItemId:t,label:e.label,icon:e.icon,renderAs:e.renderAs,onClick:e.onClick},e.id))},e.id))}),N(U,{children:P(Y,{children:[N(X,{children:P(Z,{className:`border border-border`,onClick:o,children:[N(C,{className:`text-text-positive-weak`}),s]})}),N(X,{className:`mt-2 border-t border-t-border`,children:N(`p`,{className:`pt-2 text-center text-xs text-text-positive-subtle`,children:c})})]})})]}),N(B,{children:r})]})};export{se as t};
|
|
2
|
+
//# sourceMappingURL=cms-layout-CuF5ahpj.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cms-layout-BeU_CkJl.mjs","names":[],"sources":["../packages/components/layouts/cms-layout/components/sidebar.tsx","../packages/components/layouts/cms-layout/components/header.tsx","../packages/components/layouts/cms-layout/index.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, memo, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { MenuIcon, PanelLeftIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { LunasLogo } from '@/components/features/logo';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\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\nfunction useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n return context;\n}\n\nfunction CMSLayoutProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\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 // biome-ignore lint/suspicious/noDocumentCookie: persists sidebar state across page loads\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen]);\n\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 window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({ state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <section\n data-slot=\"layout-wrapper\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH, '--sidebar-width-icon': SIDEBAR_WIDTH_ICON, ...style } as React.CSSProperties}\n className={cn('relative group/sidebar-wrapper flex h-dvh bg-sidebar', className)}\n {...props}\n >\n {children}\n </section>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nconst CMSLayoutSidebar = memo(\n ({\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, toggleSidebar } = useSidebar();\n\n const handleToggleSidebar = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n event => {\n toggleSidebar();\n event.preventDefault();\n event.stopPropagation();\n },\n [toggleSidebar]\n );\n\n if (collapsible === 'none') {\n return (\n <aside data-slot=\"sidebar\" className={cn('flex w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground', className)} {...props}>\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH_MOBILE } as React.CSSProperties}\n side={side}\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden\"\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex size-full flex-col\">\n <div className=\"flex flex-0 items-center gap-x-2 border-b border-border-weak p-2 pr-4\">\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className={cn('size-10 rounded-full', className)}\n onClick={handleToggleSidebar}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n <LunasLogo variant=\"horizontal\" size=\"xs\" className=\"ml-2\" />\n </div>\n <div className=\"flex flex-1 flex-col p-2\">{children}</div>\n </div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <aside\n className=\"group peer hidden bg-card text-sidebar-foreground 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 <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]',\n 'w-(--sidebar-width)',\n 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'hidden md:flex shadow-nav',\n 'fixed left-0 inset-y-0 p-2',\n 'top-[calc(var(--header-height)+0.5rem)] z-10',\n 'w-(--sidebar-width)',\n 'transition-all duration-200 ease-linear',\n 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]',\n className\n )}\n {...props}\n >\n <div data-sidebar=\"sidebar\" data-slot=\"sidebar-inner\" className=\"relative flex size-full flex-col\">\n {children}\n </div>\n </div>\n </aside>\n );\n }\n);\nCMSLayoutSidebar.displayName = 'CMSLayoutSidebar';\n\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-7', className)}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\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 after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'group-data-[collapsible=offcanvas]:translate-x-0 hover:group-data-[collapsible=offcanvas]:bg-sidebar 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\nconst CMSLayoutMain = memo(({ className, children, ...props }: React.ComponentProps<'main'>) => {\n return (\n <main data-slot=\"sidebar-inset\" className={cn('relative flex w-full flex-1 flex-col', className)} {...props}>\n <div className=\"h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]\" />\n <div className=\"relative flex-1 size-full overflow-auto\">{children}</div>\n </main>\n );\n});\nCMSLayoutMain.displayName = 'CMSLayoutMain';\n\nconst SidebarInput = memo(({ className, ...props }: React.ComponentProps<typeof Input>) => {\n return <Input data-slot=\"sidebar-input\" data-sidebar=\"input\" className={cn('h-8 w-full bg-background shadow-none', className)} {...props} />;\n});\nSidebarInput.displayName = 'SidebarInput';\n\nconst SidebarHeader = memo(({ 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});\nSidebarHeader.displayName = 'SidebarHeader';\n\nconst SidebarFooter = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2', className)} {...props} />;\n});\nSidebarFooter.displayName = 'SidebarFooter';\n\nconst SidebarSeparator = memo(({ className, ...props }: React.ComponentProps<typeof Separator>) => {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('mx-2 w-auto bg-sidebar-border', className)} {...props} />;\n});\nSidebarSeparator.displayName = 'SidebarSeparator';\n\nconst SidebarContent = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n});\nSidebarContent.displayName = 'SidebarContent';\n\nconst SidebarGroup = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full flex-col', className)} {...props} />;\n});\nSidebarGroup.displayName = 'SidebarGroup';\n\nconst SidebarGroupLabel = memo(({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) => {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity,color] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n});\nSidebarGroupLabel.displayName = 'SidebarGroupLabel';\n\nfunction SidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-[background-color,color,transform] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2',\n '[&>svg]:size-4 [&>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\nconst SidebarGroupContent = memo(({ 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});\nSidebarGroupContent.displayName = 'SidebarGroupContent';\n\nconst SidebarMenu = memo(({ 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});\nSidebarMenu.displayName = 'SidebarMenu';\n\nconst SidebarMenuItem = memo(({ 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});\nSidebarMenuItem.displayName = 'SidebarMenuItem';\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'peer/menu-button',\n 'cursor-pointer',\n 'flex w-full items-center gap-2',\n 'overflow-hidden rounded-md p-2 outline-hidden',\n 'truncate text-left font-normal',\n 'transition-[color,background-color,width,height,padding]',\n 'active:bg-sidebar-accent active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-primary-muted data-[active=true]:text-sidebar-primary',\n 'data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-12! group-data-[collapsible=icon]:p-3! group-data-[collapsible=icon]:gap-3!',\n '[&>svg]:size-6 [&>svg]:shrink-0',\n '[&>span:last-child]:truncate',\n ],\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent/60 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-10 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\nconst SidebarMenuButton = memo(\n ({\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 ? 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) return button;\n\n if (typeof tooltip === 'string') {\n tooltip = { children: tooltip };\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);\nSidebarMenuButton.displayName = 'SidebarMenuButton';\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 ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-[background-color,color,opacity] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>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 &&\n 'group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\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 'pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 font-medium text-sidebar-foreground text-xs tabular-nums transition-colors',\n 'peer-hover/menu-button:text-sidebar-accent-foreground 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\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n const width = useMemo(() => `${Math.floor(Math.random() * 40) + 50}%`, []);\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={{ '--skeleton-width': width } as React.CSSProperties}\n />\n </div>\n );\n}\n\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 'mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\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\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 ? 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 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-[background-color,color] 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 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground',\n 'data-[active=true]:bg-sidebar-accent 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 CMSLayoutSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n CMSLayoutMain,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n CMSLayoutProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n // biome-ignore lint/style/useComponentExportOnlyModules: true\n useSidebar,\n};\n","'use client';\n\nimport { useCallback } from 'react';\n\nimport { EarthIcon, LogOutIcon, MenuIcon, UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';\nimport { LunasLogo } from '@/components/features/logo';\nimport { Button } from '@/components/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nimport { useSidebar } from './sidebar';\n\nexport type CMSLayoutUser = {\n /** Display name shown in the header and user dropdown. */\n name: string;\n /** Email address shown below the name in the dropdown. */\n email?: string;\n /** Role or position shown as a muted label in the dropdown. */\n role?: string;\n /** Optional avatar image URL; falls back to a color-hashed icon. */\n avatarUrl?: string;\n};\n\nexport const CMSLayoutHeader: React.FC<{\n i18nText?: string;\n onChangeToEnLocale?: () => void;\n onChangeToViLocale?: () => void;\n user?: CMSLayoutUser;\n onLogout?: () => void;\n logoutLabel?: string;\n logo?: React.ReactNode;\n}> = ({ i18nText, onChangeToEnLocale, onChangeToViLocale, user, onLogout, logoutLabel = 'Log out', logo }) => {\n const { toggleSidebar } = useSidebar();\n\n const handleToggleSidebar = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n toggleSidebar();\n },\n [toggleSidebar]\n );\n\n const handleEnLocale = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChangeToEnLocale?.();\n },\n [onChangeToEnLocale]\n );\n\n const handleViLocale = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChangeToViLocale?.();\n },\n [onChangeToViLocale]\n );\n\n const avatarBg = user ? colorHashLight.hex(user.name) : undefined;\n\n return (\n <header\n data-slot=\"cms-layout-header\"\n className={cn(\n 'bg-card',\n 'h-(--header-height)',\n 'sm:h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6',\n 'absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5',\n 'flex items-center shadow-nav',\n 'transition-[height] ease-linear'\n )}\n >\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className=\"size-10 rounded-full transition-all hover:text-text-positive\"\n onClick={handleToggleSidebar}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n\n <div className=\"flex flex-1 items-center sm:ml-2.5\">{logo ?? <LunasLogo variant=\"horizontal\" size=\"xs\" />}</div>\n\n <div className=\"flex items-center gap-1\">\n {user && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" color=\"muted\" className=\"h-9 gap-2.5 rounded-full px-2 transition-all\">\n <Avatar className=\"size-7 shrink-0\">\n <AvatarImage src={user.avatarUrl} alt={user.name} />\n <AvatarFallback style={{ backgroundColor: avatarBg }}>\n <UserRoundIcon size={14} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <div className=\"hidden flex-col items-start sm:flex\">\n <span className=\"max-w-36 truncate text-xs font-semibold leading-tight text-text-positive\">{user.name}</span>\n {user.email && <span className=\"max-w-36 truncate text-xs leading-tight text-text-positive-weak\">{user.email}</span>}\n </div>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-60\">\n <div className=\"flex flex-col items-center gap-2 px-4 py-4 text-center\">\n <Avatar className=\"size-12\">\n <AvatarImage src={user.avatarUrl} alt={user.name} />\n <AvatarFallback style={{ backgroundColor: avatarBg }}>\n <UserRoundIcon size={22} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <div className=\"flex min-w-0 w-full flex-col items-center gap-0.5\">\n <p className=\"truncate text-sm font-semibold text-text-positive\">{user.name}</p>\n {user.email && <p className=\"truncate text-xs text-text-positive-weak\">{user.email}</p>}\n {user.role && (\n <span className=\"mt-1 w-fit rounded-sm border border-border bg-secondary-muted px-2 py-0.5 text-xs font-medium text-text-positive-weak\">\n {user.role}\n </span>\n )}\n </div>\n </div>\n {onLogout && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem className=\"text-danger focus:text-danger\" onClick={onLogout}>\n <LogOutIcon className=\"size-4\" />\n {logoutLabel}\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {user && (onChangeToEnLocale || onChangeToViLocale) && <div className=\"mx-1 h-5 w-px bg-border\" />}\n\n {(onChangeToEnLocale || onChangeToViLocale) && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-slot=\"locale-trigger\" variant=\"ghost\" color=\"muted\" className=\"gap-x-1 rounded-full transition-all hover:text-text-positive\">\n <EarthIcon className=\"size-6!\" />\n {i18nText}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuGroup>\n <DropdownMenuItem onClick={handleEnLocale}>EN - English</DropdownMenuItem>\n <DropdownMenuItem onClick={handleViLocale}>VI - Vietnamese</DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </header>\n );\n};\n","'use client';\n\nimport { memo } from 'react';\n\nimport { LogOutIcon } from 'lucide-react';\n\nimport { CMSLayoutHeader, type CMSLayoutUser } from './components/header';\nimport {\n CMSLayoutSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n CMSLayoutMain,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n CMSLayoutProvider,\n} from './components/sidebar';\n\ntype NavItem = {\n /** Unique identifier for the nav item, used as React key and for active-state comparison. */\n id: string;\n /** Human-readable label rendered inside the sidebar button. */\n label: string;\n /** Optional icon element rendered to the left of the label. */\n icon?: React.ReactNode;\n /** Callback fired when the sidebar button is clicked. Use for simple programmatic navigation. */\n onClick?: () => void;\n /**\n * Renders the button as a custom element using the Radix Slot (asChild) pattern.\n * Return a single element (e.g. a TanStack Router `<Link>`) wrapping the icon + label content.\n *\n * @example\n * ```tsx\n * renderAs: ({ icon, label }) => <Link to=\"/dashboard\">{icon}{label}</Link>\n * ```\n */\n renderAs?: (content: { icon?: React.ReactNode; label: string }) => React.ReactElement;\n};\n\ntype NavGroup = {\n /** Unique identifier for the group, used as React key. */\n id: string;\n /** Optional section heading rendered above the group's items. */\n label?: string;\n /** Navigation items that belong to this group. */\n items: NavItem[];\n};\n\nexport type { CMSLayoutUser };\n\nexport type CMSLayoutProps = {\n /** Text label used by the header for language-toggle or i18n display. */\n i18nText?: string;\n /** ID of the currently active navigation item; matched against `NavItem.id` to highlight the active button. */\n activeNavItemId?: string;\n /** Sidebar navigation definition; omitting this prop renders an empty sidebar. */\n sidebar?: { groupcontent: NavGroup[] };\n /** Callback fired when the logout button is clicked. */\n onLogout?: () => void;\n /** Callback fired when the user switches the UI locale to English. */\n onChangeToEnLocale?: () => void;\n /** Callback fired when the user switches the UI locale to Vietnamese. */\n onChangeToViLocale?: () => void;\n /**\n * Label displayed on the logout button.\n * @default 'Log out'\n */\n logoutLabel?: string;\n /**\n * Copyright string shown at the bottom of the sidebar.\n * @default `Copyright © <current year>, Lunas.`\n */\n copyright?: string;\n /** Authenticated user shown in the header avatar dropdown. Omit to hide the user menu. */\n user?: CMSLayoutUser;\n};\n\nconst SidebarContentGroupItem = memo<NavItem & { activeNavItemId?: string }>(({ id, label, icon, activeNavItemId, onClick, renderAs }) => (\n <SidebarMenuItem>\n {renderAs ? (\n <SidebarMenuButton asChild isActive={id === activeNavItemId}>\n {renderAs({ icon, label })}\n </SidebarMenuButton>\n ) : (\n <SidebarMenuButton isActive={id === activeNavItemId} onClick={onClick}>\n {icon}\n {label}\n </SidebarMenuButton>\n )}\n </SidebarMenuItem>\n));\nSidebarContentGroupItem.displayName = 'SidebarContentGroupItem';\n\nconst SidebarContentGroup = memo<React.PropsWithChildren<Omit<NavGroup, 'items'>>>(({ id, label, children }) => (\n <SidebarGroup>\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu>{children}</SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n));\nSidebarContentGroup.displayName = 'SidebarContentGroup';\n\n/**\n * Full-page CMS application shell with a collapsible inset sidebar, header, and main content area.\n *\n * @example\n * ```tsx\n * import { CMSLayout } from '@customafk/lunas-ui/layouts/cms-layout';\n * import { LayoutDashboardIcon } from 'lucide-react';\n *\n * <CMSLayout\n * activeNavItemId=\"dashboard\"\n * sidebar={{\n * groupcontent: [\n * {\n * id: 'main',\n * label: 'Main',\n * items: [\n * {\n * id: 'dashboard',\n * label: 'Dashboard',\n * icon: <LayoutDashboardIcon />,\n * // Option A — TanStack Router Link (asChild/Slot pattern):\n * renderAs: ({ icon, label }) => <Link to=\"/\">{icon}{label}</Link>,\n * // Option B — simple click handler:\n * // onClick: () => router.navigate({ to: '/' }),\n * },\n * ],\n * },\n * ],\n * }}\n * onLogout={() => signOut()}\n * >\n * <DashboardPage />\n * </CMSLayout>\n * ```\n */\nexport const CMSLayout: React.FC<React.PropsWithChildren<CMSLayoutProps>> = ({\n i18nText,\n activeNavItemId,\n sidebar,\n children,\n onChangeToEnLocale,\n onChangeToViLocale,\n onLogout,\n logoutLabel = 'Log out',\n copyright = `Copyright © ${new Date().getFullYear()}, Lunas.`,\n user,\n}) => {\n const groups = sidebar?.groupcontent ?? [];\n\n return (\n <CMSLayoutProvider>\n <CMSLayoutHeader\n i18nText={i18nText}\n onChangeToEnLocale={onChangeToEnLocale}\n onChangeToViLocale={onChangeToViLocale}\n user={user}\n onLogout={onLogout}\n logoutLabel={logoutLabel}\n />\n <CMSLayoutSidebar variant=\"inset\" collapsible=\"icon\">\n <SidebarContent>\n {groups.map(group => (\n <SidebarContentGroup key={group.id} id={group.id} label={group.label}>\n {group.items.map(item => (\n <SidebarContentGroupItem\n key={item.id}\n id={item.id}\n activeNavItemId={activeNavItemId}\n label={item.label}\n icon={item.icon}\n onClick={item.onClick}\n />\n ))}\n </SidebarContentGroup>\n ))}\n </SidebarContent>\n <SidebarFooter>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton className=\"border border-border\" onClick={onLogout}>\n <LogOutIcon className=\"text-text-positive-weak\" />\n {logoutLabel}\n </SidebarMenuButton>\n </SidebarMenuItem>\n <SidebarMenuItem className=\"mt-2 border-t border-t-border\">\n <p className=\"pt-2 text-center text-xs text-text-positive-subtle\">{copyright}</p>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n </CMSLayoutSidebar>\n <CMSLayoutMain>{children}</CMSLayoutMain>\n </CMSLayoutProvider>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cms-layout-CuF5ahpj.mjs","names":[],"sources":["../packages/components/layouts/cms-layout/components/sidebar.tsx","../packages/components/layouts/cms-layout/components/header.tsx","../packages/components/layouts/cms-layout/index.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, memo, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { MenuIcon, PanelLeftIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { LunasLogo } from '@/components/features/logo';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\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\nfunction useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n return context;\n}\n\nfunction CMSLayoutProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\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 // biome-ignore lint/suspicious/noDocumentCookie: persists sidebar state across page loads\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen]);\n\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 window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({ state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <section\n data-slot=\"layout-wrapper\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH, '--sidebar-width-icon': SIDEBAR_WIDTH_ICON, ...style } as React.CSSProperties}\n className={cn('relative group/sidebar-wrapper flex h-dvh bg-sidebar', className)}\n {...props}\n >\n {children}\n </section>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nconst CMSLayoutSidebar = memo(\n ({\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, toggleSidebar } = useSidebar();\n\n const handleToggleSidebar = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n event => {\n toggleSidebar();\n event.preventDefault();\n event.stopPropagation();\n },\n [toggleSidebar]\n );\n\n if (collapsible === 'none') {\n return (\n <aside data-slot=\"sidebar\" className={cn('flex w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground', className)} {...props}>\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH_MOBILE } as React.CSSProperties}\n side={side}\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden\"\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex size-full flex-col\">\n <div className=\"flex flex-0 items-center gap-x-2 border-b border-border-weak p-2 pr-4\">\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className={cn('size-10 rounded-full', className)}\n onClick={handleToggleSidebar}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n <LunasLogo variant=\"horizontal\" size=\"xs\" className=\"ml-2\" />\n </div>\n <div className=\"flex flex-1 flex-col p-2\">{children}</div>\n </div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <aside\n className=\"group peer hidden bg-card text-sidebar-foreground 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 <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]',\n 'w-(--sidebar-width)',\n 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'hidden md:flex shadow-nav',\n 'fixed left-0 inset-y-0 p-2',\n 'top-[calc(var(--header-height)+0.5rem)] z-10',\n 'w-(--sidebar-width)',\n 'transition-all duration-200 ease-linear',\n 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]',\n className\n )}\n {...props}\n >\n <div data-sidebar=\"sidebar\" data-slot=\"sidebar-inner\" className=\"relative flex size-full flex-col\">\n {children}\n </div>\n </div>\n </aside>\n );\n }\n);\nCMSLayoutSidebar.displayName = 'CMSLayoutSidebar';\n\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-7', className)}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\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 after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'group-data-[collapsible=offcanvas]:translate-x-0 hover:group-data-[collapsible=offcanvas]:bg-sidebar 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\nconst CMSLayoutMain = memo(({ className, children, ...props }: React.ComponentProps<'main'>) => {\n return (\n <main data-slot=\"sidebar-inset\" className={cn('relative flex w-full flex-1 flex-col', className)} {...props}>\n <div className=\"h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]\" />\n <div className=\"relative flex-1 size-full overflow-auto\">{children}</div>\n </main>\n );\n});\nCMSLayoutMain.displayName = 'CMSLayoutMain';\n\nconst SidebarInput = memo(({ className, ...props }: React.ComponentProps<typeof Input>) => {\n return <Input data-slot=\"sidebar-input\" data-sidebar=\"input\" className={cn('h-8 w-full bg-background shadow-none', className)} {...props} />;\n});\nSidebarInput.displayName = 'SidebarInput';\n\nconst SidebarHeader = memo(({ 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});\nSidebarHeader.displayName = 'SidebarHeader';\n\nconst SidebarFooter = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2', className)} {...props} />;\n});\nSidebarFooter.displayName = 'SidebarFooter';\n\nconst SidebarSeparator = memo(({ className, ...props }: React.ComponentProps<typeof Separator>) => {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('mx-2 w-auto bg-sidebar-border', className)} {...props} />;\n});\nSidebarSeparator.displayName = 'SidebarSeparator';\n\nconst SidebarContent = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n});\nSidebarContent.displayName = 'SidebarContent';\n\nconst SidebarGroup = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full flex-col', className)} {...props} />;\n});\nSidebarGroup.displayName = 'SidebarGroup';\n\nconst SidebarGroupLabel = memo(({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) => {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity,color] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n});\nSidebarGroupLabel.displayName = 'SidebarGroupLabel';\n\nfunction SidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-[background-color,color,transform] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2',\n '[&>svg]:size-4 [&>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\nconst SidebarGroupContent = memo(({ 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});\nSidebarGroupContent.displayName = 'SidebarGroupContent';\n\nconst SidebarMenu = memo(({ 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});\nSidebarMenu.displayName = 'SidebarMenu';\n\nconst SidebarMenuItem = memo(({ 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});\nSidebarMenuItem.displayName = 'SidebarMenuItem';\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'peer/menu-button',\n 'cursor-pointer',\n 'flex w-full items-center gap-2',\n 'overflow-hidden rounded-md p-2 outline-hidden',\n 'truncate text-left font-normal',\n 'transition-[color,background-color,width,height,padding]',\n 'active:bg-sidebar-accent active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-primary-muted data-[active=true]:text-sidebar-primary',\n 'data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-12! group-data-[collapsible=icon]:p-3! group-data-[collapsible=icon]:gap-3!',\n '[&>svg]:size-6 [&>svg]:shrink-0',\n '[&>span:last-child]:truncate',\n ],\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent/60 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-10 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\nconst SidebarMenuButton = memo(\n ({\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 ? 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) return button;\n\n if (typeof tooltip === 'string') {\n tooltip = { children: tooltip };\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);\nSidebarMenuButton.displayName = 'SidebarMenuButton';\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 ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-[background-color,color,opacity] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>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 &&\n 'group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\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 'pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 font-medium text-sidebar-foreground text-xs tabular-nums transition-colors',\n 'peer-hover/menu-button:text-sidebar-accent-foreground 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\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n const width = useMemo(() => `${Math.floor(Math.random() * 40) + 50}%`, []);\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={{ '--skeleton-width': width } as React.CSSProperties}\n />\n </div>\n );\n}\n\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 'mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\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\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 ? 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 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-[background-color,color] 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 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground',\n 'data-[active=true]:bg-sidebar-accent 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 CMSLayoutSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n CMSLayoutMain,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n CMSLayoutProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n // biome-ignore lint/style/useComponentExportOnlyModules: true\n useSidebar,\n};\n","'use client';\n\nimport { useCallback } from 'react';\n\nimport { EarthIcon, LogOutIcon, MenuIcon, UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';\nimport { LunasLogo } from '@/components/features/logo';\nimport { Button } from '@/components/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nimport { useSidebar } from './sidebar';\n\nexport type CMSLayoutUser = {\n /** Display name shown in the header and user dropdown. */\n name: string;\n /** Email address shown below the name in the dropdown. */\n email?: string;\n /** Role or position shown as a muted label in the dropdown. */\n role?: string;\n /** Optional avatar image URL; falls back to a color-hashed icon. */\n avatarUrl?: string;\n};\n\nexport const CMSLayoutHeader: React.FC<{\n i18nText?: string;\n onChangeToEnLocale?: () => void;\n onChangeToViLocale?: () => void;\n user?: CMSLayoutUser;\n onLogout?: () => void;\n logoutLabel?: string;\n logo?: React.ReactNode;\n}> = ({ i18nText, onChangeToEnLocale, onChangeToViLocale, user, onLogout, logoutLabel = 'Log out', logo }) => {\n const { toggleSidebar } = useSidebar();\n\n const handleToggleSidebar = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n toggleSidebar();\n },\n [toggleSidebar]\n );\n\n const handleEnLocale = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChangeToEnLocale?.();\n },\n [onChangeToEnLocale]\n );\n\n const handleViLocale = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChangeToViLocale?.();\n },\n [onChangeToViLocale]\n );\n\n const avatarBg = user ? colorHashLight.hex(user.name) : undefined;\n\n return (\n <header\n data-slot=\"cms-layout-header\"\n className={cn(\n 'bg-card',\n 'h-(--header-height)',\n 'sm:h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6',\n 'absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5',\n 'flex items-center shadow-nav',\n 'transition-[height] ease-linear'\n )}\n >\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className=\"size-10 rounded-full transition-all hover:text-text-positive\"\n onClick={handleToggleSidebar}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n\n <div className=\"flex flex-1 items-center sm:ml-2.5\">{logo ?? <LunasLogo variant=\"horizontal\" size=\"xs\" />}</div>\n\n <div className=\"flex items-center gap-1\">\n {user && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" color=\"muted\" className=\"h-9 gap-2.5 rounded-full px-2 transition-all\">\n <Avatar className=\"size-7 shrink-0\">\n <AvatarImage src={user.avatarUrl} alt={user.name} />\n <AvatarFallback style={{ backgroundColor: avatarBg }}>\n <UserRoundIcon size={14} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <div className=\"hidden flex-col items-start sm:flex\">\n <span className=\"max-w-36 truncate text-xs font-semibold leading-tight text-text-positive\">{user.name}</span>\n {user.email && <span className=\"max-w-36 truncate text-xs leading-tight text-text-positive-weak\">{user.email}</span>}\n </div>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-60\">\n <div className=\"flex flex-col items-center gap-2 px-4 py-4 text-center\">\n <Avatar className=\"size-12\">\n <AvatarImage src={user.avatarUrl} alt={user.name} />\n <AvatarFallback style={{ backgroundColor: avatarBg }}>\n <UserRoundIcon size={22} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <div className=\"flex min-w-0 w-full flex-col items-center gap-0.5\">\n <p className=\"truncate text-sm font-semibold text-text-positive\">{user.name}</p>\n {user.email && <p className=\"truncate text-xs text-text-positive-weak\">{user.email}</p>}\n {user.role && (\n <span className=\"mt-1 w-fit rounded-sm border border-border bg-secondary-muted px-2 py-0.5 text-xs font-medium text-text-positive-weak\">\n {user.role}\n </span>\n )}\n </div>\n </div>\n {onLogout && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem className=\"text-danger focus:text-danger\" onClick={onLogout}>\n <LogOutIcon className=\"size-4\" />\n {logoutLabel}\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {user && (onChangeToEnLocale || onChangeToViLocale) && <div className=\"mx-1 h-5 w-px bg-border\" />}\n\n {(onChangeToEnLocale || onChangeToViLocale) && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-slot=\"locale-trigger\" variant=\"ghost\" color=\"muted\" className=\"gap-x-1 rounded-full transition-all hover:text-text-positive\">\n <EarthIcon className=\"size-6!\" />\n {i18nText}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuGroup>\n <DropdownMenuItem onClick={handleEnLocale}>EN - English</DropdownMenuItem>\n <DropdownMenuItem onClick={handleViLocale}>VI - Vietnamese</DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </header>\n );\n};\n","'use client';\n\nimport { memo } from 'react';\n\nimport { LogOutIcon } from 'lucide-react';\n\nimport { CMSLayoutHeader, type CMSLayoutUser } from './components/header';\nimport {\n CMSLayoutSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n CMSLayoutMain,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n CMSLayoutProvider,\n} from './components/sidebar';\n\ntype NavItem = {\n /** Unique identifier for the nav item, used as React key and for active-state comparison. */\n id: string;\n /** Human-readable label rendered inside the sidebar button. */\n label: string;\n /** Optional icon element rendered to the left of the label. */\n icon?: React.ReactNode;\n /** Callback fired when the sidebar button is clicked. Use for simple programmatic navigation. */\n onClick?: () => void;\n /**\n * Renders the button as a custom element using the Radix Slot (asChild) pattern.\n * Return a single element (e.g. a TanStack Router `<Link>`) wrapping the icon + label content.\n *\n * @example\n * ```tsx\n * renderAs: ({ icon, label }) => <Link to=\"/dashboard\">{icon}{label}</Link>\n * ```\n */\n renderAs?: (content: { icon?: React.ReactNode; label: string }) => React.ReactElement;\n};\n\ntype NavGroup = {\n /** Unique identifier for the group, used as React key. */\n id: string;\n /** Optional section heading rendered above the group's items. */\n label?: string;\n /** Navigation items that belong to this group. */\n items: NavItem[];\n};\n\nexport type { CMSLayoutUser };\n\nexport type CMSLayoutProps = {\n /** Text label used by the header for language-toggle or i18n display. */\n i18nText?: string;\n /** ID of the currently active navigation item; matched against `NavItem.id` to highlight the active button. */\n activeNavItemId?: string;\n /** Sidebar navigation definition; omitting this prop renders an empty sidebar. */\n sidebar?: { groupcontent: NavGroup[] };\n /** Callback fired when the logout button is clicked. */\n onLogout?: () => void;\n /** Callback fired when the user switches the UI locale to English. */\n onChangeToEnLocale?: () => void;\n /** Callback fired when the user switches the UI locale to Vietnamese. */\n onChangeToViLocale?: () => void;\n /**\n * Label displayed on the logout button.\n * @default 'Log out'\n */\n logoutLabel?: string;\n /**\n * Copyright string shown at the bottom of the sidebar.\n * @default `Copyright © <current year>, Lunas.`\n */\n copyright?: string;\n /** Authenticated user shown in the header avatar dropdown. Omit to hide the user menu. */\n user?: CMSLayoutUser;\n};\n\nconst SidebarContentGroupItem = memo<NavItem & { activeNavItemId?: string }>(({ id, label, icon, activeNavItemId, onClick, renderAs }) => (\n <SidebarMenuItem>\n {renderAs ? (\n <SidebarMenuButton asChild isActive={id === activeNavItemId}>\n {renderAs({ icon, label })}\n </SidebarMenuButton>\n ) : (\n <SidebarMenuButton isActive={id === activeNavItemId} onClick={onClick}>\n {icon}\n {label}\n </SidebarMenuButton>\n )}\n </SidebarMenuItem>\n));\nSidebarContentGroupItem.displayName = 'SidebarContentGroupItem';\n\nconst SidebarContentGroup = memo<React.PropsWithChildren<Omit<NavGroup, 'items'>>>(({ id, label, children }) => (\n <SidebarGroup>\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu>{children}</SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n));\nSidebarContentGroup.displayName = 'SidebarContentGroup';\n\n/**\n * Full-page CMS application shell with a collapsible inset sidebar, header, and main content area.\n *\n * @example\n * ```tsx\n * import { CMSLayout } from '@customafk/lunas-ui/layouts/cms-layout';\n * import { LayoutDashboardIcon } from 'lucide-react';\n *\n * <CMSLayout\n * activeNavItemId=\"dashboard\"\n * sidebar={{\n * groupcontent: [\n * {\n * id: 'main',\n * label: 'Main',\n * items: [\n * {\n * id: 'dashboard',\n * label: 'Dashboard',\n * icon: <LayoutDashboardIcon />,\n * // Option A — TanStack Router Link (asChild/Slot pattern):\n * renderAs: ({ icon, label }) => <Link to=\"/\">{icon}{label}</Link>,\n * // Option B — simple click handler:\n * // onClick: () => router.navigate({ to: '/' }),\n * },\n * ],\n * },\n * ],\n * }}\n * onLogout={() => signOut()}\n * >\n * <DashboardPage />\n * </CMSLayout>\n * ```\n */\nexport const CMSLayout: React.FC<React.PropsWithChildren<CMSLayoutProps>> = ({\n i18nText,\n activeNavItemId,\n sidebar,\n children,\n onChangeToEnLocale,\n onChangeToViLocale,\n onLogout,\n logoutLabel = 'Log out',\n copyright = `Copyright © ${new Date().getFullYear()}, Lunas.`,\n user,\n}) => {\n const groups = sidebar?.groupcontent ?? [];\n\n return (\n <CMSLayoutProvider>\n <CMSLayoutHeader\n i18nText={i18nText}\n onChangeToEnLocale={onChangeToEnLocale}\n onChangeToViLocale={onChangeToViLocale}\n user={user}\n onLogout={onLogout}\n logoutLabel={logoutLabel}\n />\n <CMSLayoutSidebar variant=\"inset\" collapsible=\"icon\">\n <SidebarContent>\n {groups.map(group => (\n <SidebarContentGroup key={group.id} id={group.id} label={group.label}>\n {group.items.map(item => (\n <SidebarContentGroupItem\n key={item.id}\n id={item.id}\n activeNavItemId={activeNavItemId}\n label={item.label}\n icon={item.icon}\n renderAs={item.renderAs}\n onClick={item.onClick}\n />\n ))}\n </SidebarContentGroup>\n ))}\n </SidebarContent>\n <SidebarFooter>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton className=\"border border-border\" onClick={onLogout}>\n <LogOutIcon className=\"text-text-positive-weak\" />\n {logoutLabel}\n </SidebarMenuButton>\n </SidebarMenuItem>\n <SidebarMenuItem className=\"mt-2 border-t border-t-border\">\n <p className=\"pt-2 text-center text-xs text-text-positive-subtle\">{copyright}</p>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n </CMSLayoutSidebar>\n <CMSLayoutMain>{children}</CMSLayoutMain>\n </CMSLayoutProvider>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./dist-DzA--RwW.cjs"),t=require("./ui/button.cjs");require("./ui/skeleton.cjs");const n=require("./ui/tooltip.cjs"),r=require("./ui/avatar.cjs"),i=require("./features/logo/index.cjs"),a=require("./ui/separator.cjs"),o=require("./ui/sheet.cjs"),s=require("./ui/dropdown-menu.cjs"),c=require("./ui/input.cjs");let l=require("lucide-react"),u=require("react"),d=require("@customafk/react-toolkit/utils"),f=require("class-variance-authority"),p=require("react/jsx-runtime"),m=require("@customafk/react-toolkit/color-hash"),h=require("@customafk/react-toolkit/hooks/useMobile");const g=(0,u.createContext)(null);function _(){let e=(0,u.useContext)(g);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function v({defaultOpen:e=!0,open:t,onOpenChange:r,className:i,style:a,children:o,...s}){let c=(0,h.useIsMobile)(),[l,f]=(0,u.useState)(!1),[m,_]=(0,u.useState)(e),v=t??m,y=(0,u.useCallback)(e=>{let t=typeof e==`function`?e(v):e;r?r(t):_(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[r,v]),b=(0,u.useCallback)(()=>c?f(e=>!e):y(e=>!e),[c,y]);(0,u.useEffect)(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),b())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[b]);let x=v?`expanded`:`collapsed`,S=(0,u.useMemo)(()=>({state:x,open:v,setOpen:y,isMobile:c,openMobile:l,setOpenMobile:f,toggleSidebar:b}),[x,v,y,c,l,b]);return(0,p.jsx)(g.Provider,{value:S,children:(0,p.jsx)(n.TooltipProvider,{delayDuration:0,children:(0,p.jsx)(`section`,{"data-slot":`layout-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:(0,d.cn)(`relative group/sidebar-wrapper flex h-dvh bg-sidebar`,i),...s,children:o})})})}const y=(0,u.memo)(({side:e=`left`,variant:n=`sidebar`,collapsible:r=`offcanvas`,className:a,children:s,...c})=>{let{isMobile:f,state:m,openMobile:h,setOpenMobile:g,toggleSidebar:v}=_(),y=(0,u.useCallback)(e=>{v(),e.preventDefault(),e.stopPropagation()},[v]);return r===`none`?(0,p.jsx)(`aside`,{"data-slot":`sidebar`,className:(0,d.cn)(`flex w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,a),...c,children:s}):f?(0,p.jsx)(o.Sheet,{open:h,onOpenChange:g,...c,children:(0,p.jsxs)(o.SheetContent,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,style:{"--sidebar-width":`18rem`},side:e,className:`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden`,children:[(0,p.jsxs)(o.SheetHeader,{className:`sr-only`,children:[(0,p.jsx)(o.SheetTitle,{children:`Sidebar`}),(0,p.jsx)(o.SheetDescription,{children:`Displays the mobile sidebar.`})]}),(0,p.jsxs)(`div`,{className:`flex size-full flex-col`,children:[(0,p.jsxs)(`div`,{className:`flex flex-0 items-center gap-x-2 border-b border-border-weak p-2 pr-4`,children:[(0,p.jsxs)(t.Button,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:(0,d.cn)(`size-10 rounded-full`,a),onClick:y,children:[(0,p.jsx)(l.MenuIcon,{className:`size-6!`}),(0,p.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),(0,p.jsx)(i.LunasLogo,{variant:`horizontal`,size:`xs`,className:`ml-2`})]}),(0,p.jsx)(`div`,{className:`flex flex-1 flex-col p-2`,children:s})]})]})}):(0,p.jsxs)(`aside`,{className:`group peer hidden bg-card text-sidebar-foreground md:block`,"data-state":m,"data-collapsible":m===`collapsed`?r:``,"data-variant":n,"data-side":e,"data-slot":`sidebar`,children:[(0,p.jsx)(`div`,{"data-slot":`sidebar-gap`,className:(0,d.cn)(`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]`,`w-(--sidebar-width)`,`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`)}),(0,p.jsx)(`div`,{"data-slot":`sidebar-container`,className:(0,d.cn)(`hidden md:flex shadow-nav`,`fixed left-0 inset-y-0 p-2`,`top-[calc(var(--header-height)+0.5rem)] z-10`,`w-(--sidebar-width)`,`transition-all duration-200 ease-linear`,`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`,a),...c,children:(0,p.jsx)(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:`relative flex size-full flex-col`,children:s})})]})});y.displayName=`CMSLayoutSidebar`;const b=(0,u.memo)(({className:e,children:t,...n})=>(0,p.jsxs)(`main`,{"data-slot":`sidebar-inset`,className:(0,d.cn)(`relative flex w-full flex-1 flex-col`,e),...n,children:[(0,p.jsx)(`div`,{className:`h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]`}),(0,p.jsx)(`div`,{className:`relative flex-1 size-full overflow-auto`,children:t})]}));b.displayName=`CMSLayoutMain`;const x=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(c.Input,{"data-slot":`sidebar-input`,"data-sidebar":`input`,className:(0,d.cn)(`h-8 w-full bg-background shadow-none`,e),...t}));x.displayName=`SidebarInput`;const S=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,className:(0,d.cn)(`flex flex-col gap-2 p-2`,e),...t}));S.displayName=`SidebarHeader`;const C=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:(0,d.cn)(`flex flex-col gap-2`,e),...t}));C.displayName=`SidebarFooter`;const w=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(a.Separator,{"data-slot":`sidebar-separator`,"data-sidebar":`separator`,className:(0,d.cn)(`mx-2 w-auto bg-sidebar-border`,e),...t}));w.displayName=`SidebarSeparator`;const T=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:(0,d.cn)(`flex flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t}));T.displayName=`SidebarContent`;const E=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:(0,d.cn)(`relative flex w-full flex-col`,e),...t}));E.displayName=`SidebarGroup`;const D=(0,u.memo)(({className:t,asChild:n=!1,...r})=>(0,p.jsx)(n?e.t:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:(0,d.cn)(`flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity,color] 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`,t),...r}));D.displayName=`SidebarGroupLabel`;const O=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:(0,d.cn)(`w-full text-sm`,e),...t}));O.displayName=`SidebarGroupContent`;const k=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:(0,d.cn)(`flex w-full min-w-0 flex-col gap-1`,e),...t}));k.displayName=`SidebarMenu`;const A=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:(0,d.cn)(`group/menu-item relative`,e),...t}));A.displayName=`SidebarMenuItem`;const j=(0,f.cva)([`peer/menu-button`,`cursor-pointer`,`flex w-full items-center gap-2`,`overflow-hidden rounded-md p-2 outline-hidden`,`truncate text-left font-normal`,`transition-[color,background-color,width,height,padding]`,`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-primary-muted data-[active=true]:text-sidebar-primary`,`data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-12! group-data-[collapsible=icon]:p-3! group-data-[collapsible=icon]:gap-3!`,`[&>svg]:size-6 [&>svg]:shrink-0`,`[&>span:last-child]:truncate`],{variants:{variant:{default:`hover:bg-sidebar-accent/60 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-10 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}}),M=(0,u.memo)(({asChild:t=!1,isActive:r=!1,variant:i=`default`,size:a=`default`,tooltip:o,className:s,...c})=>{let l=t?e.t:`button`,{isMobile:u,state:f}=_(),m=(0,p.jsx)(l,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":a,"data-active":r,className:(0,d.cn)(j({variant:i,size:a}),s),...c});return o?(typeof o==`string`&&(o={children:o}),(0,p.jsxs)(n.Tooltip,{children:[(0,p.jsx)(n.TooltipTrigger,{asChild:!0,children:m}),(0,p.jsx)(n.TooltipContent,{side:`right`,align:`center`,hidden:f!==`collapsed`||u,...o})]})):m});M.displayName=`SidebarMenuButton`;const N=({i18nText:e,onChangeToEnLocale:n,onChangeToViLocale:a,user:o,onLogout:c,logoutLabel:f=`Log out`,logo:h})=>{let{toggleSidebar:g}=_(),v=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),g()},[g]),y=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),n?.()},[n]),b=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),a?.()},[a]),x=o?m.colorHashLight.hex(o.name):void 0;return(0,p.jsxs)(`header`,{"data-slot":`cms-layout-header`,className:(0,d.cn)(`bg-card`,`h-(--header-height)`,`sm:h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6`,`absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5`,`flex items-center shadow-nav`,`transition-[height] ease-linear`),children:[(0,p.jsxs)(t.Button,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:`size-10 rounded-full transition-all hover:text-text-positive`,onClick:v,children:[(0,p.jsx)(l.MenuIcon,{className:`size-6!`}),(0,p.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),(0,p.jsx)(`div`,{className:`flex flex-1 items-center sm:ml-2.5`,children:h??(0,p.jsx)(i.LunasLogo,{variant:`horizontal`,size:`xs`})}),(0,p.jsxs)(`div`,{className:`flex items-center gap-1`,children:[o&&(0,p.jsxs)(s.DropdownMenu,{children:[(0,p.jsx)(s.DropdownMenuTrigger,{asChild:!0,children:(0,p.jsxs)(t.Button,{variant:`ghost`,color:`muted`,className:`h-9 gap-2.5 rounded-full px-2 transition-all`,children:[(0,p.jsxs)(r.Avatar,{className:`size-7 shrink-0`,children:[(0,p.jsx)(r.AvatarImage,{src:o.avatarUrl,alt:o.name}),(0,p.jsx)(r.AvatarFallback,{style:{backgroundColor:x},children:(0,p.jsx)(l.UserRoundIcon,{size:14,className:`text-white`})})]}),(0,p.jsxs)(`div`,{className:`hidden flex-col items-start sm:flex`,children:[(0,p.jsx)(`span`,{className:`max-w-36 truncate text-xs font-semibold leading-tight text-text-positive`,children:o.name}),o.email&&(0,p.jsx)(`span`,{className:`max-w-36 truncate text-xs leading-tight text-text-positive-weak`,children:o.email})]})]})}),(0,p.jsxs)(s.DropdownMenuContent,{align:`end`,className:`w-60`,children:[(0,p.jsxs)(`div`,{className:`flex flex-col items-center gap-2 px-4 py-4 text-center`,children:[(0,p.jsxs)(r.Avatar,{className:`size-12`,children:[(0,p.jsx)(r.AvatarImage,{src:o.avatarUrl,alt:o.name}),(0,p.jsx)(r.AvatarFallback,{style:{backgroundColor:x},children:(0,p.jsx)(l.UserRoundIcon,{size:22,className:`text-white`})})]}),(0,p.jsxs)(`div`,{className:`flex min-w-0 w-full flex-col items-center gap-0.5`,children:[(0,p.jsx)(`p`,{className:`truncate text-sm font-semibold text-text-positive`,children:o.name}),o.email&&(0,p.jsx)(`p`,{className:`truncate text-xs text-text-positive-weak`,children:o.email}),o.role&&(0,p.jsx)(`span`,{className:`mt-1 w-fit rounded-sm border border-border bg-secondary-muted px-2 py-0.5 text-xs font-medium text-text-positive-weak`,children:o.role})]})]}),c&&(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(s.DropdownMenuSeparator,{}),(0,p.jsx)(s.DropdownMenuGroup,{children:(0,p.jsxs)(s.DropdownMenuItem,{className:`text-danger focus:text-danger`,onClick:c,children:[(0,p.jsx)(l.LogOutIcon,{className:`size-4`}),f]})})]})]})]}),o&&(n||a)&&(0,p.jsx)(`div`,{className:`mx-1 h-5 w-px bg-border`}),(n||a)&&(0,p.jsxs)(s.DropdownMenu,{children:[(0,p.jsx)(s.DropdownMenuTrigger,{asChild:!0,children:(0,p.jsxs)(t.Button,{"data-slot":`locale-trigger`,variant:`ghost`,color:`muted`,className:`gap-x-1 rounded-full transition-all hover:text-text-positive`,children:[(0,p.jsx)(l.EarthIcon,{className:`size-6!`}),e]})}),(0,p.jsx)(s.DropdownMenuContent,{align:`end`,children:(0,p.jsxs)(s.DropdownMenuGroup,{children:[(0,p.jsx)(s.DropdownMenuItem,{onClick:y,children:`EN - English`}),(0,p.jsx)(s.DropdownMenuItem,{onClick:b,children:`VI - Vietnamese`})]})})]})]})]})},P=(0,u.memo)(({id:e,label:t,icon:n,activeNavItemId:r,onClick:i,renderAs:a})=>(0,p.jsx)(A,{children:a?(0,p.jsx)(M,{asChild:!0,isActive:e===r,children:a({icon:n,label:t})}):(0,p.jsxs)(M,{isActive:e===r,onClick:i,children:[n,t]})}));P.displayName=`SidebarContentGroupItem`;const F=(0,u.memo)(({id:e,label:t,children:n})=>(0,p.jsxs)(E,{children:[(0,p.jsx)(D,{children:t}),(0,p.jsx)(O,{children:(0,p.jsx)(k,{children:n})})]}));F.displayName=`SidebarContentGroup`;const I=({i18nText:e,activeNavItemId:t,sidebar:n,children:r,onChangeToEnLocale:i,onChangeToViLocale:a,onLogout:o,logoutLabel:s=`Log out`,copyright:c=`Copyright © ${new Date().getFullYear()}, Lunas.`,user:u})=>{let d=n?.groupcontent??[];return(0,p.jsxs)(v,{children:[(0,p.jsx)(N,{i18nText:e,onChangeToEnLocale:i,onChangeToViLocale:a,user:u,onLogout:o,logoutLabel:s}),(0,p.jsxs)(y,{variant:`inset`,collapsible:`icon`,children:[(0,p.jsx)(T,{children:d.map(e=>(0,p.jsx)(F,{id:e.id,label:e.label,children:e.items.map(e=>(0,p.jsx)(P,{id:e.id,activeNavItemId:t,label:e.label,icon:e.icon,onClick:e.onClick},e.id))},e.id))}),(0,p.jsx)(C,{children:(0,p.jsxs)(k,{children:[(0,p.jsx)(A,{children:(0,p.jsxs)(M,{className:`border border-border`,onClick:o,children:[(0,p.jsx)(l.LogOutIcon,{className:`text-text-positive-weak`}),s]})}),(0,p.jsx)(A,{className:`mt-2 border-t border-t-border`,children:(0,p.jsx)(`p`,{className:`pt-2 text-center text-xs text-text-positive-subtle`,children:c})})]})})]}),(0,p.jsx)(b,{children:r})]})};Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return I}});
|
|
2
|
-
//# sourceMappingURL=cms-layout-
|
|
1
|
+
const e=require("./dist-DzA--RwW.cjs"),t=require("./ui/button.cjs");require("./ui/skeleton.cjs");const n=require("./ui/tooltip.cjs"),r=require("./ui/avatar.cjs"),i=require("./features/logo/index.cjs"),a=require("./ui/separator.cjs"),o=require("./ui/sheet.cjs"),s=require("./ui/dropdown-menu.cjs"),c=require("./ui/input.cjs");let l=require("lucide-react"),u=require("react"),d=require("@customafk/react-toolkit/utils"),f=require("class-variance-authority"),p=require("react/jsx-runtime"),m=require("@customafk/react-toolkit/color-hash"),h=require("@customafk/react-toolkit/hooks/useMobile");const g=(0,u.createContext)(null);function _(){let e=(0,u.useContext)(g);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function v({defaultOpen:e=!0,open:t,onOpenChange:r,className:i,style:a,children:o,...s}){let c=(0,h.useIsMobile)(),[l,f]=(0,u.useState)(!1),[m,_]=(0,u.useState)(e),v=t??m,y=(0,u.useCallback)(e=>{let t=typeof e==`function`?e(v):e;r?r(t):_(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[r,v]),b=(0,u.useCallback)(()=>c?f(e=>!e):y(e=>!e),[c,y]);(0,u.useEffect)(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),b())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[b]);let x=v?`expanded`:`collapsed`,S=(0,u.useMemo)(()=>({state:x,open:v,setOpen:y,isMobile:c,openMobile:l,setOpenMobile:f,toggleSidebar:b}),[x,v,y,c,l,b]);return(0,p.jsx)(g.Provider,{value:S,children:(0,p.jsx)(n.TooltipProvider,{delayDuration:0,children:(0,p.jsx)(`section`,{"data-slot":`layout-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:(0,d.cn)(`relative group/sidebar-wrapper flex h-dvh bg-sidebar`,i),...s,children:o})})})}const y=(0,u.memo)(({side:e=`left`,variant:n=`sidebar`,collapsible:r=`offcanvas`,className:a,children:s,...c})=>{let{isMobile:f,state:m,openMobile:h,setOpenMobile:g,toggleSidebar:v}=_(),y=(0,u.useCallback)(e=>{v(),e.preventDefault(),e.stopPropagation()},[v]);return r===`none`?(0,p.jsx)(`aside`,{"data-slot":`sidebar`,className:(0,d.cn)(`flex w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,a),...c,children:s}):f?(0,p.jsx)(o.Sheet,{open:h,onOpenChange:g,...c,children:(0,p.jsxs)(o.SheetContent,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,style:{"--sidebar-width":`18rem`},side:e,className:`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden`,children:[(0,p.jsxs)(o.SheetHeader,{className:`sr-only`,children:[(0,p.jsx)(o.SheetTitle,{children:`Sidebar`}),(0,p.jsx)(o.SheetDescription,{children:`Displays the mobile sidebar.`})]}),(0,p.jsxs)(`div`,{className:`flex size-full flex-col`,children:[(0,p.jsxs)(`div`,{className:`flex flex-0 items-center gap-x-2 border-b border-border-weak p-2 pr-4`,children:[(0,p.jsxs)(t.Button,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:(0,d.cn)(`size-10 rounded-full`,a),onClick:y,children:[(0,p.jsx)(l.MenuIcon,{className:`size-6!`}),(0,p.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),(0,p.jsx)(i.LunasLogo,{variant:`horizontal`,size:`xs`,className:`ml-2`})]}),(0,p.jsx)(`div`,{className:`flex flex-1 flex-col p-2`,children:s})]})]})}):(0,p.jsxs)(`aside`,{className:`group peer hidden bg-card text-sidebar-foreground md:block`,"data-state":m,"data-collapsible":m===`collapsed`?r:``,"data-variant":n,"data-side":e,"data-slot":`sidebar`,children:[(0,p.jsx)(`div`,{"data-slot":`sidebar-gap`,className:(0,d.cn)(`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]`,`w-(--sidebar-width)`,`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`)}),(0,p.jsx)(`div`,{"data-slot":`sidebar-container`,className:(0,d.cn)(`hidden md:flex shadow-nav`,`fixed left-0 inset-y-0 p-2`,`top-[calc(var(--header-height)+0.5rem)] z-10`,`w-(--sidebar-width)`,`transition-all duration-200 ease-linear`,`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`,a),...c,children:(0,p.jsx)(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:`relative flex size-full flex-col`,children:s})})]})});y.displayName=`CMSLayoutSidebar`;const b=(0,u.memo)(({className:e,children:t,...n})=>(0,p.jsxs)(`main`,{"data-slot":`sidebar-inset`,className:(0,d.cn)(`relative flex w-full flex-1 flex-col`,e),...n,children:[(0,p.jsx)(`div`,{className:`h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]`}),(0,p.jsx)(`div`,{className:`relative flex-1 size-full overflow-auto`,children:t})]}));b.displayName=`CMSLayoutMain`;const x=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(c.Input,{"data-slot":`sidebar-input`,"data-sidebar":`input`,className:(0,d.cn)(`h-8 w-full bg-background shadow-none`,e),...t}));x.displayName=`SidebarInput`;const S=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,className:(0,d.cn)(`flex flex-col gap-2 p-2`,e),...t}));S.displayName=`SidebarHeader`;const C=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:(0,d.cn)(`flex flex-col gap-2`,e),...t}));C.displayName=`SidebarFooter`;const w=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(a.Separator,{"data-slot":`sidebar-separator`,"data-sidebar":`separator`,className:(0,d.cn)(`mx-2 w-auto bg-sidebar-border`,e),...t}));w.displayName=`SidebarSeparator`;const T=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:(0,d.cn)(`flex flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t}));T.displayName=`SidebarContent`;const E=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:(0,d.cn)(`relative flex w-full flex-col`,e),...t}));E.displayName=`SidebarGroup`;const D=(0,u.memo)(({className:t,asChild:n=!1,...r})=>(0,p.jsx)(n?e.t:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:(0,d.cn)(`flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity,color] 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`,t),...r}));D.displayName=`SidebarGroupLabel`;const O=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:(0,d.cn)(`w-full text-sm`,e),...t}));O.displayName=`SidebarGroupContent`;const k=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:(0,d.cn)(`flex w-full min-w-0 flex-col gap-1`,e),...t}));k.displayName=`SidebarMenu`;const A=(0,u.memo)(({className:e,...t})=>(0,p.jsx)(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:(0,d.cn)(`group/menu-item relative`,e),...t}));A.displayName=`SidebarMenuItem`;const j=(0,f.cva)([`peer/menu-button`,`cursor-pointer`,`flex w-full items-center gap-2`,`overflow-hidden rounded-md p-2 outline-hidden`,`truncate text-left font-normal`,`transition-[color,background-color,width,height,padding]`,`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-primary-muted data-[active=true]:text-sidebar-primary`,`data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-12! group-data-[collapsible=icon]:p-3! group-data-[collapsible=icon]:gap-3!`,`[&>svg]:size-6 [&>svg]:shrink-0`,`[&>span:last-child]:truncate`],{variants:{variant:{default:`hover:bg-sidebar-accent/60 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-10 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}}),M=(0,u.memo)(({asChild:t=!1,isActive:r=!1,variant:i=`default`,size:a=`default`,tooltip:o,className:s,...c})=>{let l=t?e.t:`button`,{isMobile:u,state:f}=_(),m=(0,p.jsx)(l,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":a,"data-active":r,className:(0,d.cn)(j({variant:i,size:a}),s),...c});return o?(typeof o==`string`&&(o={children:o}),(0,p.jsxs)(n.Tooltip,{children:[(0,p.jsx)(n.TooltipTrigger,{asChild:!0,children:m}),(0,p.jsx)(n.TooltipContent,{side:`right`,align:`center`,hidden:f!==`collapsed`||u,...o})]})):m});M.displayName=`SidebarMenuButton`;const N=({i18nText:e,onChangeToEnLocale:n,onChangeToViLocale:a,user:o,onLogout:c,logoutLabel:f=`Log out`,logo:h})=>{let{toggleSidebar:g}=_(),v=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),g()},[g]),y=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),n?.()},[n]),b=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),a?.()},[a]),x=o?m.colorHashLight.hex(o.name):void 0;return(0,p.jsxs)(`header`,{"data-slot":`cms-layout-header`,className:(0,d.cn)(`bg-card`,`h-(--header-height)`,`sm:h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6`,`absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5`,`flex items-center shadow-nav`,`transition-[height] ease-linear`),children:[(0,p.jsxs)(t.Button,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:`size-10 rounded-full transition-all hover:text-text-positive`,onClick:v,children:[(0,p.jsx)(l.MenuIcon,{className:`size-6!`}),(0,p.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),(0,p.jsx)(`div`,{className:`flex flex-1 items-center sm:ml-2.5`,children:h??(0,p.jsx)(i.LunasLogo,{variant:`horizontal`,size:`xs`})}),(0,p.jsxs)(`div`,{className:`flex items-center gap-1`,children:[o&&(0,p.jsxs)(s.DropdownMenu,{children:[(0,p.jsx)(s.DropdownMenuTrigger,{asChild:!0,children:(0,p.jsxs)(t.Button,{variant:`ghost`,color:`muted`,className:`h-9 gap-2.5 rounded-full px-2 transition-all`,children:[(0,p.jsxs)(r.Avatar,{className:`size-7 shrink-0`,children:[(0,p.jsx)(r.AvatarImage,{src:o.avatarUrl,alt:o.name}),(0,p.jsx)(r.AvatarFallback,{style:{backgroundColor:x},children:(0,p.jsx)(l.UserRoundIcon,{size:14,className:`text-white`})})]}),(0,p.jsxs)(`div`,{className:`hidden flex-col items-start sm:flex`,children:[(0,p.jsx)(`span`,{className:`max-w-36 truncate text-xs font-semibold leading-tight text-text-positive`,children:o.name}),o.email&&(0,p.jsx)(`span`,{className:`max-w-36 truncate text-xs leading-tight text-text-positive-weak`,children:o.email})]})]})}),(0,p.jsxs)(s.DropdownMenuContent,{align:`end`,className:`w-60`,children:[(0,p.jsxs)(`div`,{className:`flex flex-col items-center gap-2 px-4 py-4 text-center`,children:[(0,p.jsxs)(r.Avatar,{className:`size-12`,children:[(0,p.jsx)(r.AvatarImage,{src:o.avatarUrl,alt:o.name}),(0,p.jsx)(r.AvatarFallback,{style:{backgroundColor:x},children:(0,p.jsx)(l.UserRoundIcon,{size:22,className:`text-white`})})]}),(0,p.jsxs)(`div`,{className:`flex min-w-0 w-full flex-col items-center gap-0.5`,children:[(0,p.jsx)(`p`,{className:`truncate text-sm font-semibold text-text-positive`,children:o.name}),o.email&&(0,p.jsx)(`p`,{className:`truncate text-xs text-text-positive-weak`,children:o.email}),o.role&&(0,p.jsx)(`span`,{className:`mt-1 w-fit rounded-sm border border-border bg-secondary-muted px-2 py-0.5 text-xs font-medium text-text-positive-weak`,children:o.role})]})]}),c&&(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(s.DropdownMenuSeparator,{}),(0,p.jsx)(s.DropdownMenuGroup,{children:(0,p.jsxs)(s.DropdownMenuItem,{className:`text-danger focus:text-danger`,onClick:c,children:[(0,p.jsx)(l.LogOutIcon,{className:`size-4`}),f]})})]})]})]}),o&&(n||a)&&(0,p.jsx)(`div`,{className:`mx-1 h-5 w-px bg-border`}),(n||a)&&(0,p.jsxs)(s.DropdownMenu,{children:[(0,p.jsx)(s.DropdownMenuTrigger,{asChild:!0,children:(0,p.jsxs)(t.Button,{"data-slot":`locale-trigger`,variant:`ghost`,color:`muted`,className:`gap-x-1 rounded-full transition-all hover:text-text-positive`,children:[(0,p.jsx)(l.EarthIcon,{className:`size-6!`}),e]})}),(0,p.jsx)(s.DropdownMenuContent,{align:`end`,children:(0,p.jsxs)(s.DropdownMenuGroup,{children:[(0,p.jsx)(s.DropdownMenuItem,{onClick:y,children:`EN - English`}),(0,p.jsx)(s.DropdownMenuItem,{onClick:b,children:`VI - Vietnamese`})]})})]})]})]})},P=(0,u.memo)(({id:e,label:t,icon:n,activeNavItemId:r,onClick:i,renderAs:a})=>(0,p.jsx)(A,{children:a?(0,p.jsx)(M,{asChild:!0,isActive:e===r,children:a({icon:n,label:t})}):(0,p.jsxs)(M,{isActive:e===r,onClick:i,children:[n,t]})}));P.displayName=`SidebarContentGroupItem`;const F=(0,u.memo)(({id:e,label:t,children:n})=>(0,p.jsxs)(E,{children:[(0,p.jsx)(D,{children:t}),(0,p.jsx)(O,{children:(0,p.jsx)(k,{children:n})})]}));F.displayName=`SidebarContentGroup`;const I=({i18nText:e,activeNavItemId:t,sidebar:n,children:r,onChangeToEnLocale:i,onChangeToViLocale:a,onLogout:o,logoutLabel:s=`Log out`,copyright:c=`Copyright © ${new Date().getFullYear()}, Lunas.`,user:u})=>{let d=n?.groupcontent??[];return(0,p.jsxs)(v,{children:[(0,p.jsx)(N,{i18nText:e,onChangeToEnLocale:i,onChangeToViLocale:a,user:u,onLogout:o,logoutLabel:s}),(0,p.jsxs)(y,{variant:`inset`,collapsible:`icon`,children:[(0,p.jsx)(T,{children:d.map(e=>(0,p.jsx)(F,{id:e.id,label:e.label,children:e.items.map(e=>(0,p.jsx)(P,{id:e.id,activeNavItemId:t,label:e.label,icon:e.icon,renderAs:e.renderAs,onClick:e.onClick},e.id))},e.id))}),(0,p.jsx)(C,{children:(0,p.jsxs)(k,{children:[(0,p.jsx)(A,{children:(0,p.jsxs)(M,{className:`border border-border`,onClick:o,children:[(0,p.jsx)(l.LogOutIcon,{className:`text-text-positive-weak`}),s]})}),(0,p.jsx)(A,{className:`mt-2 border-t border-t-border`,children:(0,p.jsx)(`p`,{className:`pt-2 text-center text-xs text-text-positive-subtle`,children:c})})]})})]}),(0,p.jsx)(b,{children:r})]})};Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return I}});
|
|
2
|
+
//# sourceMappingURL=cms-layout-SubgSF72.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cms-layout-hLiQbkXR.cjs","names":["TooltipProvider","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","Button","MenuIcon","LunasLogo","Input","Separator","Slot","Tooltip","TooltipTrigger","TooltipContent","colorHashLight","Button","MenuIcon","LunasLogo","DropdownMenu","DropdownMenuTrigger","Avatar","AvatarImage","AvatarFallback","UserRoundIcon","DropdownMenuContent","DropdownMenuSeparator","DropdownMenuGroup","DropdownMenuItem","LogOutIcon","EarthIcon","LogOutIcon"],"sources":["../packages/components/layouts/cms-layout/components/sidebar.tsx","../packages/components/layouts/cms-layout/components/header.tsx","../packages/components/layouts/cms-layout/index.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, memo, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { MenuIcon, PanelLeftIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { LunasLogo } from '@/components/features/logo';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\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\nfunction useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n return context;\n}\n\nfunction CMSLayoutProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\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 // biome-ignore lint/suspicious/noDocumentCookie: persists sidebar state across page loads\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen]);\n\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 window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({ state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <section\n data-slot=\"layout-wrapper\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH, '--sidebar-width-icon': SIDEBAR_WIDTH_ICON, ...style } as React.CSSProperties}\n className={cn('relative group/sidebar-wrapper flex h-dvh bg-sidebar', className)}\n {...props}\n >\n {children}\n </section>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nconst CMSLayoutSidebar = memo(\n ({\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, toggleSidebar } = useSidebar();\n\n const handleToggleSidebar = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n event => {\n toggleSidebar();\n event.preventDefault();\n event.stopPropagation();\n },\n [toggleSidebar]\n );\n\n if (collapsible === 'none') {\n return (\n <aside data-slot=\"sidebar\" className={cn('flex w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground', className)} {...props}>\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH_MOBILE } as React.CSSProperties}\n side={side}\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden\"\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex size-full flex-col\">\n <div className=\"flex flex-0 items-center gap-x-2 border-b border-border-weak p-2 pr-4\">\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className={cn('size-10 rounded-full', className)}\n onClick={handleToggleSidebar}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n <LunasLogo variant=\"horizontal\" size=\"xs\" className=\"ml-2\" />\n </div>\n <div className=\"flex flex-1 flex-col p-2\">{children}</div>\n </div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <aside\n className=\"group peer hidden bg-card text-sidebar-foreground 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 <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]',\n 'w-(--sidebar-width)',\n 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'hidden md:flex shadow-nav',\n 'fixed left-0 inset-y-0 p-2',\n 'top-[calc(var(--header-height)+0.5rem)] z-10',\n 'w-(--sidebar-width)',\n 'transition-all duration-200 ease-linear',\n 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]',\n className\n )}\n {...props}\n >\n <div data-sidebar=\"sidebar\" data-slot=\"sidebar-inner\" className=\"relative flex size-full flex-col\">\n {children}\n </div>\n </div>\n </aside>\n );\n }\n);\nCMSLayoutSidebar.displayName = 'CMSLayoutSidebar';\n\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-7', className)}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\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 after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'group-data-[collapsible=offcanvas]:translate-x-0 hover:group-data-[collapsible=offcanvas]:bg-sidebar 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\nconst CMSLayoutMain = memo(({ className, children, ...props }: React.ComponentProps<'main'>) => {\n return (\n <main data-slot=\"sidebar-inset\" className={cn('relative flex w-full flex-1 flex-col', className)} {...props}>\n <div className=\"h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]\" />\n <div className=\"relative flex-1 size-full overflow-auto\">{children}</div>\n </main>\n );\n});\nCMSLayoutMain.displayName = 'CMSLayoutMain';\n\nconst SidebarInput = memo(({ className, ...props }: React.ComponentProps<typeof Input>) => {\n return <Input data-slot=\"sidebar-input\" data-sidebar=\"input\" className={cn('h-8 w-full bg-background shadow-none', className)} {...props} />;\n});\nSidebarInput.displayName = 'SidebarInput';\n\nconst SidebarHeader = memo(({ 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});\nSidebarHeader.displayName = 'SidebarHeader';\n\nconst SidebarFooter = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2', className)} {...props} />;\n});\nSidebarFooter.displayName = 'SidebarFooter';\n\nconst SidebarSeparator = memo(({ className, ...props }: React.ComponentProps<typeof Separator>) => {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('mx-2 w-auto bg-sidebar-border', className)} {...props} />;\n});\nSidebarSeparator.displayName = 'SidebarSeparator';\n\nconst SidebarContent = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n});\nSidebarContent.displayName = 'SidebarContent';\n\nconst SidebarGroup = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full flex-col', className)} {...props} />;\n});\nSidebarGroup.displayName = 'SidebarGroup';\n\nconst SidebarGroupLabel = memo(({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) => {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity,color] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n});\nSidebarGroupLabel.displayName = 'SidebarGroupLabel';\n\nfunction SidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-[background-color,color,transform] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2',\n '[&>svg]:size-4 [&>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\nconst SidebarGroupContent = memo(({ 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});\nSidebarGroupContent.displayName = 'SidebarGroupContent';\n\nconst SidebarMenu = memo(({ 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});\nSidebarMenu.displayName = 'SidebarMenu';\n\nconst SidebarMenuItem = memo(({ 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});\nSidebarMenuItem.displayName = 'SidebarMenuItem';\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'peer/menu-button',\n 'cursor-pointer',\n 'flex w-full items-center gap-2',\n 'overflow-hidden rounded-md p-2 outline-hidden',\n 'truncate text-left font-normal',\n 'transition-[color,background-color,width,height,padding]',\n 'active:bg-sidebar-accent active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-primary-muted data-[active=true]:text-sidebar-primary',\n 'data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-12! group-data-[collapsible=icon]:p-3! group-data-[collapsible=icon]:gap-3!',\n '[&>svg]:size-6 [&>svg]:shrink-0',\n '[&>span:last-child]:truncate',\n ],\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent/60 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-10 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\nconst SidebarMenuButton = memo(\n ({\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 ? 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) return button;\n\n if (typeof tooltip === 'string') {\n tooltip = { children: tooltip };\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);\nSidebarMenuButton.displayName = 'SidebarMenuButton';\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 ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-[background-color,color,opacity] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>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 &&\n 'group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\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 'pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 font-medium text-sidebar-foreground text-xs tabular-nums transition-colors',\n 'peer-hover/menu-button:text-sidebar-accent-foreground 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\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n const width = useMemo(() => `${Math.floor(Math.random() * 40) + 50}%`, []);\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={{ '--skeleton-width': width } as React.CSSProperties}\n />\n </div>\n );\n}\n\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 'mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\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\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 ? 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 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-[background-color,color] 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 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground',\n 'data-[active=true]:bg-sidebar-accent 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 CMSLayoutSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n CMSLayoutMain,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n CMSLayoutProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n // biome-ignore lint/style/useComponentExportOnlyModules: true\n useSidebar,\n};\n","'use client';\n\nimport { useCallback } from 'react';\n\nimport { EarthIcon, LogOutIcon, MenuIcon, UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';\nimport { LunasLogo } from '@/components/features/logo';\nimport { Button } from '@/components/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nimport { useSidebar } from './sidebar';\n\nexport type CMSLayoutUser = {\n /** Display name shown in the header and user dropdown. */\n name: string;\n /** Email address shown below the name in the dropdown. */\n email?: string;\n /** Role or position shown as a muted label in the dropdown. */\n role?: string;\n /** Optional avatar image URL; falls back to a color-hashed icon. */\n avatarUrl?: string;\n};\n\nexport const CMSLayoutHeader: React.FC<{\n i18nText?: string;\n onChangeToEnLocale?: () => void;\n onChangeToViLocale?: () => void;\n user?: CMSLayoutUser;\n onLogout?: () => void;\n logoutLabel?: string;\n logo?: React.ReactNode;\n}> = ({ i18nText, onChangeToEnLocale, onChangeToViLocale, user, onLogout, logoutLabel = 'Log out', logo }) => {\n const { toggleSidebar } = useSidebar();\n\n const handleToggleSidebar = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n toggleSidebar();\n },\n [toggleSidebar]\n );\n\n const handleEnLocale = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChangeToEnLocale?.();\n },\n [onChangeToEnLocale]\n );\n\n const handleViLocale = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChangeToViLocale?.();\n },\n [onChangeToViLocale]\n );\n\n const avatarBg = user ? colorHashLight.hex(user.name) : undefined;\n\n return (\n <header\n data-slot=\"cms-layout-header\"\n className={cn(\n 'bg-card',\n 'h-(--header-height)',\n 'sm:h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6',\n 'absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5',\n 'flex items-center shadow-nav',\n 'transition-[height] ease-linear'\n )}\n >\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className=\"size-10 rounded-full transition-all hover:text-text-positive\"\n onClick={handleToggleSidebar}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n\n <div className=\"flex flex-1 items-center sm:ml-2.5\">{logo ?? <LunasLogo variant=\"horizontal\" size=\"xs\" />}</div>\n\n <div className=\"flex items-center gap-1\">\n {user && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" color=\"muted\" className=\"h-9 gap-2.5 rounded-full px-2 transition-all\">\n <Avatar className=\"size-7 shrink-0\">\n <AvatarImage src={user.avatarUrl} alt={user.name} />\n <AvatarFallback style={{ backgroundColor: avatarBg }}>\n <UserRoundIcon size={14} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <div className=\"hidden flex-col items-start sm:flex\">\n <span className=\"max-w-36 truncate text-xs font-semibold leading-tight text-text-positive\">{user.name}</span>\n {user.email && <span className=\"max-w-36 truncate text-xs leading-tight text-text-positive-weak\">{user.email}</span>}\n </div>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-60\">\n <div className=\"flex flex-col items-center gap-2 px-4 py-4 text-center\">\n <Avatar className=\"size-12\">\n <AvatarImage src={user.avatarUrl} alt={user.name} />\n <AvatarFallback style={{ backgroundColor: avatarBg }}>\n <UserRoundIcon size={22} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <div className=\"flex min-w-0 w-full flex-col items-center gap-0.5\">\n <p className=\"truncate text-sm font-semibold text-text-positive\">{user.name}</p>\n {user.email && <p className=\"truncate text-xs text-text-positive-weak\">{user.email}</p>}\n {user.role && (\n <span className=\"mt-1 w-fit rounded-sm border border-border bg-secondary-muted px-2 py-0.5 text-xs font-medium text-text-positive-weak\">\n {user.role}\n </span>\n )}\n </div>\n </div>\n {onLogout && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem className=\"text-danger focus:text-danger\" onClick={onLogout}>\n <LogOutIcon className=\"size-4\" />\n {logoutLabel}\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {user && (onChangeToEnLocale || onChangeToViLocale) && <div className=\"mx-1 h-5 w-px bg-border\" />}\n\n {(onChangeToEnLocale || onChangeToViLocale) && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-slot=\"locale-trigger\" variant=\"ghost\" color=\"muted\" className=\"gap-x-1 rounded-full transition-all hover:text-text-positive\">\n <EarthIcon className=\"size-6!\" />\n {i18nText}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuGroup>\n <DropdownMenuItem onClick={handleEnLocale}>EN - English</DropdownMenuItem>\n <DropdownMenuItem onClick={handleViLocale}>VI - Vietnamese</DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </header>\n );\n};\n","'use client';\n\nimport { memo } from 'react';\n\nimport { LogOutIcon } from 'lucide-react';\n\nimport { CMSLayoutHeader, type CMSLayoutUser } from './components/header';\nimport {\n CMSLayoutSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n CMSLayoutMain,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n CMSLayoutProvider,\n} from './components/sidebar';\n\ntype NavItem = {\n /** Unique identifier for the nav item, used as React key and for active-state comparison. */\n id: string;\n /** Human-readable label rendered inside the sidebar button. */\n label: string;\n /** Optional icon element rendered to the left of the label. */\n icon?: React.ReactNode;\n /** Callback fired when the sidebar button is clicked. Use for simple programmatic navigation. */\n onClick?: () => void;\n /**\n * Renders the button as a custom element using the Radix Slot (asChild) pattern.\n * Return a single element (e.g. a TanStack Router `<Link>`) wrapping the icon + label content.\n *\n * @example\n * ```tsx\n * renderAs: ({ icon, label }) => <Link to=\"/dashboard\">{icon}{label}</Link>\n * ```\n */\n renderAs?: (content: { icon?: React.ReactNode; label: string }) => React.ReactElement;\n};\n\ntype NavGroup = {\n /** Unique identifier for the group, used as React key. */\n id: string;\n /** Optional section heading rendered above the group's items. */\n label?: string;\n /** Navigation items that belong to this group. */\n items: NavItem[];\n};\n\nexport type { CMSLayoutUser };\n\nexport type CMSLayoutProps = {\n /** Text label used by the header for language-toggle or i18n display. */\n i18nText?: string;\n /** ID of the currently active navigation item; matched against `NavItem.id` to highlight the active button. */\n activeNavItemId?: string;\n /** Sidebar navigation definition; omitting this prop renders an empty sidebar. */\n sidebar?: { groupcontent: NavGroup[] };\n /** Callback fired when the logout button is clicked. */\n onLogout?: () => void;\n /** Callback fired when the user switches the UI locale to English. */\n onChangeToEnLocale?: () => void;\n /** Callback fired when the user switches the UI locale to Vietnamese. */\n onChangeToViLocale?: () => void;\n /**\n * Label displayed on the logout button.\n * @default 'Log out'\n */\n logoutLabel?: string;\n /**\n * Copyright string shown at the bottom of the sidebar.\n * @default `Copyright © <current year>, Lunas.`\n */\n copyright?: string;\n /** Authenticated user shown in the header avatar dropdown. Omit to hide the user menu. */\n user?: CMSLayoutUser;\n};\n\nconst SidebarContentGroupItem = memo<NavItem & { activeNavItemId?: string }>(({ id, label, icon, activeNavItemId, onClick, renderAs }) => (\n <SidebarMenuItem>\n {renderAs ? (\n <SidebarMenuButton asChild isActive={id === activeNavItemId}>\n {renderAs({ icon, label })}\n </SidebarMenuButton>\n ) : (\n <SidebarMenuButton isActive={id === activeNavItemId} onClick={onClick}>\n {icon}\n {label}\n </SidebarMenuButton>\n )}\n </SidebarMenuItem>\n));\nSidebarContentGroupItem.displayName = 'SidebarContentGroupItem';\n\nconst SidebarContentGroup = memo<React.PropsWithChildren<Omit<NavGroup, 'items'>>>(({ id, label, children }) => (\n <SidebarGroup>\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu>{children}</SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n));\nSidebarContentGroup.displayName = 'SidebarContentGroup';\n\n/**\n * Full-page CMS application shell with a collapsible inset sidebar, header, and main content area.\n *\n * @example\n * ```tsx\n * import { CMSLayout } from '@customafk/lunas-ui/layouts/cms-layout';\n * import { LayoutDashboardIcon } from 'lucide-react';\n *\n * <CMSLayout\n * activeNavItemId=\"dashboard\"\n * sidebar={{\n * groupcontent: [\n * {\n * id: 'main',\n * label: 'Main',\n * items: [\n * {\n * id: 'dashboard',\n * label: 'Dashboard',\n * icon: <LayoutDashboardIcon />,\n * // Option A — TanStack Router Link (asChild/Slot pattern):\n * renderAs: ({ icon, label }) => <Link to=\"/\">{icon}{label}</Link>,\n * // Option B — simple click handler:\n * // onClick: () => router.navigate({ to: '/' }),\n * },\n * ],\n * },\n * ],\n * }}\n * onLogout={() => signOut()}\n * >\n * <DashboardPage />\n * </CMSLayout>\n * ```\n */\nexport const CMSLayout: React.FC<React.PropsWithChildren<CMSLayoutProps>> = ({\n i18nText,\n activeNavItemId,\n sidebar,\n children,\n onChangeToEnLocale,\n onChangeToViLocale,\n onLogout,\n logoutLabel = 'Log out',\n copyright = `Copyright © ${new Date().getFullYear()}, Lunas.`,\n user,\n}) => {\n const groups = sidebar?.groupcontent ?? [];\n\n return (\n <CMSLayoutProvider>\n <CMSLayoutHeader\n i18nText={i18nText}\n onChangeToEnLocale={onChangeToEnLocale}\n onChangeToViLocale={onChangeToViLocale}\n user={user}\n onLogout={onLogout}\n logoutLabel={logoutLabel}\n />\n <CMSLayoutSidebar variant=\"inset\" collapsible=\"icon\">\n <SidebarContent>\n {groups.map(group => (\n <SidebarContentGroup key={group.id} id={group.id} label={group.label}>\n {group.items.map(item => (\n <SidebarContentGroupItem\n key={item.id}\n id={item.id}\n activeNavItemId={activeNavItemId}\n label={item.label}\n icon={item.icon}\n onClick={item.onClick}\n />\n ))}\n </SidebarContentGroup>\n ))}\n </SidebarContent>\n <SidebarFooter>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton className=\"border border-border\" onClick={onLogout}>\n <LogOutIcon className=\"text-text-positive-weak\" />\n {logoutLabel}\n </SidebarMenuButton>\n </SidebarMenuItem>\n <SidebarMenuItem className=\"mt-2 border-t border-t-border\">\n <p className=\"pt-2 text-center text-xs text-text-positive-subtle\">{copyright}</p>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n </CMSLayoutSidebar>\n <CMSLayoutMain>{children}</CMSLayoutMain>\n </CMSLayoutProvider>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cms-layout-SubgSF72.cjs","names":["TooltipProvider","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","Button","MenuIcon","LunasLogo","Input","Separator","Slot","Tooltip","TooltipTrigger","TooltipContent","colorHashLight","Button","MenuIcon","LunasLogo","DropdownMenu","DropdownMenuTrigger","Avatar","AvatarImage","AvatarFallback","UserRoundIcon","DropdownMenuContent","DropdownMenuSeparator","DropdownMenuGroup","DropdownMenuItem","LogOutIcon","EarthIcon","LogOutIcon"],"sources":["../packages/components/layouts/cms-layout/components/sidebar.tsx","../packages/components/layouts/cms-layout/components/header.tsx","../packages/components/layouts/cms-layout/index.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, memo, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { MenuIcon, PanelLeftIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { LunasLogo } from '@/components/features/logo';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\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\nfunction useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n return context;\n}\n\nfunction CMSLayoutProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\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 // biome-ignore lint/suspicious/noDocumentCookie: persists sidebar state across page loads\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen]);\n\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 window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({ state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <section\n data-slot=\"layout-wrapper\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH, '--sidebar-width-icon': SIDEBAR_WIDTH_ICON, ...style } as React.CSSProperties}\n className={cn('relative group/sidebar-wrapper flex h-dvh bg-sidebar', className)}\n {...props}\n >\n {children}\n </section>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nconst CMSLayoutSidebar = memo(\n ({\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, toggleSidebar } = useSidebar();\n\n const handleToggleSidebar = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n event => {\n toggleSidebar();\n event.preventDefault();\n event.stopPropagation();\n },\n [toggleSidebar]\n );\n\n if (collapsible === 'none') {\n return (\n <aside data-slot=\"sidebar\" className={cn('flex w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground', className)} {...props}>\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH_MOBILE } as React.CSSProperties}\n side={side}\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden\"\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex size-full flex-col\">\n <div className=\"flex flex-0 items-center gap-x-2 border-b border-border-weak p-2 pr-4\">\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className={cn('size-10 rounded-full', className)}\n onClick={handleToggleSidebar}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n <LunasLogo variant=\"horizontal\" size=\"xs\" className=\"ml-2\" />\n </div>\n <div className=\"flex flex-1 flex-col p-2\">{children}</div>\n </div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <aside\n className=\"group peer hidden bg-card text-sidebar-foreground 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 <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]',\n 'w-(--sidebar-width)',\n 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'hidden md:flex shadow-nav',\n 'fixed left-0 inset-y-0 p-2',\n 'top-[calc(var(--header-height)+0.5rem)] z-10',\n 'w-(--sidebar-width)',\n 'transition-all duration-200 ease-linear',\n 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]',\n className\n )}\n {...props}\n >\n <div data-sidebar=\"sidebar\" data-slot=\"sidebar-inner\" className=\"relative flex size-full flex-col\">\n {children}\n </div>\n </div>\n </aside>\n );\n }\n);\nCMSLayoutSidebar.displayName = 'CMSLayoutSidebar';\n\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-7', className)}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\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 after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'group-data-[collapsible=offcanvas]:translate-x-0 hover:group-data-[collapsible=offcanvas]:bg-sidebar 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\nconst CMSLayoutMain = memo(({ className, children, ...props }: React.ComponentProps<'main'>) => {\n return (\n <main data-slot=\"sidebar-inset\" className={cn('relative flex w-full flex-1 flex-col', className)} {...props}>\n <div className=\"h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]\" />\n <div className=\"relative flex-1 size-full overflow-auto\">{children}</div>\n </main>\n );\n});\nCMSLayoutMain.displayName = 'CMSLayoutMain';\n\nconst SidebarInput = memo(({ className, ...props }: React.ComponentProps<typeof Input>) => {\n return <Input data-slot=\"sidebar-input\" data-sidebar=\"input\" className={cn('h-8 w-full bg-background shadow-none', className)} {...props} />;\n});\nSidebarInput.displayName = 'SidebarInput';\n\nconst SidebarHeader = memo(({ 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});\nSidebarHeader.displayName = 'SidebarHeader';\n\nconst SidebarFooter = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2', className)} {...props} />;\n});\nSidebarFooter.displayName = 'SidebarFooter';\n\nconst SidebarSeparator = memo(({ className, ...props }: React.ComponentProps<typeof Separator>) => {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('mx-2 w-auto bg-sidebar-border', className)} {...props} />;\n});\nSidebarSeparator.displayName = 'SidebarSeparator';\n\nconst SidebarContent = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n});\nSidebarContent.displayName = 'SidebarContent';\n\nconst SidebarGroup = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full flex-col', className)} {...props} />;\n});\nSidebarGroup.displayName = 'SidebarGroup';\n\nconst SidebarGroupLabel = memo(({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) => {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity,color] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n});\nSidebarGroupLabel.displayName = 'SidebarGroupLabel';\n\nfunction SidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-[background-color,color,transform] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2',\n '[&>svg]:size-4 [&>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\nconst SidebarGroupContent = memo(({ 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});\nSidebarGroupContent.displayName = 'SidebarGroupContent';\n\nconst SidebarMenu = memo(({ 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});\nSidebarMenu.displayName = 'SidebarMenu';\n\nconst SidebarMenuItem = memo(({ 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});\nSidebarMenuItem.displayName = 'SidebarMenuItem';\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'peer/menu-button',\n 'cursor-pointer',\n 'flex w-full items-center gap-2',\n 'overflow-hidden rounded-md p-2 outline-hidden',\n 'truncate text-left font-normal',\n 'transition-[color,background-color,width,height,padding]',\n 'active:bg-sidebar-accent active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-primary-muted data-[active=true]:text-sidebar-primary',\n 'data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-12! group-data-[collapsible=icon]:p-3! group-data-[collapsible=icon]:gap-3!',\n '[&>svg]:size-6 [&>svg]:shrink-0',\n '[&>span:last-child]:truncate',\n ],\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent/60 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-10 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\nconst SidebarMenuButton = memo(\n ({\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 ? 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) return button;\n\n if (typeof tooltip === 'string') {\n tooltip = { children: tooltip };\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);\nSidebarMenuButton.displayName = 'SidebarMenuButton';\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 ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-[background-color,color,opacity] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>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 &&\n 'group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\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 'pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 font-medium text-sidebar-foreground text-xs tabular-nums transition-colors',\n 'peer-hover/menu-button:text-sidebar-accent-foreground 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\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n const width = useMemo(() => `${Math.floor(Math.random() * 40) + 50}%`, []);\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={{ '--skeleton-width': width } as React.CSSProperties}\n />\n </div>\n );\n}\n\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 'mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\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\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 ? 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 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-[background-color,color] 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 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground',\n 'data-[active=true]:bg-sidebar-accent 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 CMSLayoutSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n CMSLayoutMain,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n CMSLayoutProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n // biome-ignore lint/style/useComponentExportOnlyModules: true\n useSidebar,\n};\n","'use client';\n\nimport { useCallback } from 'react';\n\nimport { EarthIcon, LogOutIcon, MenuIcon, UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';\nimport { LunasLogo } from '@/components/features/logo';\nimport { Button } from '@/components/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nimport { useSidebar } from './sidebar';\n\nexport type CMSLayoutUser = {\n /** Display name shown in the header and user dropdown. */\n name: string;\n /** Email address shown below the name in the dropdown. */\n email?: string;\n /** Role or position shown as a muted label in the dropdown. */\n role?: string;\n /** Optional avatar image URL; falls back to a color-hashed icon. */\n avatarUrl?: string;\n};\n\nexport const CMSLayoutHeader: React.FC<{\n i18nText?: string;\n onChangeToEnLocale?: () => void;\n onChangeToViLocale?: () => void;\n user?: CMSLayoutUser;\n onLogout?: () => void;\n logoutLabel?: string;\n logo?: React.ReactNode;\n}> = ({ i18nText, onChangeToEnLocale, onChangeToViLocale, user, onLogout, logoutLabel = 'Log out', logo }) => {\n const { toggleSidebar } = useSidebar();\n\n const handleToggleSidebar = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n toggleSidebar();\n },\n [toggleSidebar]\n );\n\n const handleEnLocale = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChangeToEnLocale?.();\n },\n [onChangeToEnLocale]\n );\n\n const handleViLocale = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChangeToViLocale?.();\n },\n [onChangeToViLocale]\n );\n\n const avatarBg = user ? colorHashLight.hex(user.name) : undefined;\n\n return (\n <header\n data-slot=\"cms-layout-header\"\n className={cn(\n 'bg-card',\n 'h-(--header-height)',\n 'sm:h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6',\n 'absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5',\n 'flex items-center shadow-nav',\n 'transition-[height] ease-linear'\n )}\n >\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className=\"size-10 rounded-full transition-all hover:text-text-positive\"\n onClick={handleToggleSidebar}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n\n <div className=\"flex flex-1 items-center sm:ml-2.5\">{logo ?? <LunasLogo variant=\"horizontal\" size=\"xs\" />}</div>\n\n <div className=\"flex items-center gap-1\">\n {user && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" color=\"muted\" className=\"h-9 gap-2.5 rounded-full px-2 transition-all\">\n <Avatar className=\"size-7 shrink-0\">\n <AvatarImage src={user.avatarUrl} alt={user.name} />\n <AvatarFallback style={{ backgroundColor: avatarBg }}>\n <UserRoundIcon size={14} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <div className=\"hidden flex-col items-start sm:flex\">\n <span className=\"max-w-36 truncate text-xs font-semibold leading-tight text-text-positive\">{user.name}</span>\n {user.email && <span className=\"max-w-36 truncate text-xs leading-tight text-text-positive-weak\">{user.email}</span>}\n </div>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-60\">\n <div className=\"flex flex-col items-center gap-2 px-4 py-4 text-center\">\n <Avatar className=\"size-12\">\n <AvatarImage src={user.avatarUrl} alt={user.name} />\n <AvatarFallback style={{ backgroundColor: avatarBg }}>\n <UserRoundIcon size={22} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <div className=\"flex min-w-0 w-full flex-col items-center gap-0.5\">\n <p className=\"truncate text-sm font-semibold text-text-positive\">{user.name}</p>\n {user.email && <p className=\"truncate text-xs text-text-positive-weak\">{user.email}</p>}\n {user.role && (\n <span className=\"mt-1 w-fit rounded-sm border border-border bg-secondary-muted px-2 py-0.5 text-xs font-medium text-text-positive-weak\">\n {user.role}\n </span>\n )}\n </div>\n </div>\n {onLogout && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem className=\"text-danger focus:text-danger\" onClick={onLogout}>\n <LogOutIcon className=\"size-4\" />\n {logoutLabel}\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {user && (onChangeToEnLocale || onChangeToViLocale) && <div className=\"mx-1 h-5 w-px bg-border\" />}\n\n {(onChangeToEnLocale || onChangeToViLocale) && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-slot=\"locale-trigger\" variant=\"ghost\" color=\"muted\" className=\"gap-x-1 rounded-full transition-all hover:text-text-positive\">\n <EarthIcon className=\"size-6!\" />\n {i18nText}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuGroup>\n <DropdownMenuItem onClick={handleEnLocale}>EN - English</DropdownMenuItem>\n <DropdownMenuItem onClick={handleViLocale}>VI - Vietnamese</DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </header>\n );\n};\n","'use client';\n\nimport { memo } from 'react';\n\nimport { LogOutIcon } from 'lucide-react';\n\nimport { CMSLayoutHeader, type CMSLayoutUser } from './components/header';\nimport {\n CMSLayoutSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n CMSLayoutMain,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n CMSLayoutProvider,\n} from './components/sidebar';\n\ntype NavItem = {\n /** Unique identifier for the nav item, used as React key and for active-state comparison. */\n id: string;\n /** Human-readable label rendered inside the sidebar button. */\n label: string;\n /** Optional icon element rendered to the left of the label. */\n icon?: React.ReactNode;\n /** Callback fired when the sidebar button is clicked. Use for simple programmatic navigation. */\n onClick?: () => void;\n /**\n * Renders the button as a custom element using the Radix Slot (asChild) pattern.\n * Return a single element (e.g. a TanStack Router `<Link>`) wrapping the icon + label content.\n *\n * @example\n * ```tsx\n * renderAs: ({ icon, label }) => <Link to=\"/dashboard\">{icon}{label}</Link>\n * ```\n */\n renderAs?: (content: { icon?: React.ReactNode; label: string }) => React.ReactElement;\n};\n\ntype NavGroup = {\n /** Unique identifier for the group, used as React key. */\n id: string;\n /** Optional section heading rendered above the group's items. */\n label?: string;\n /** Navigation items that belong to this group. */\n items: NavItem[];\n};\n\nexport type { CMSLayoutUser };\n\nexport type CMSLayoutProps = {\n /** Text label used by the header for language-toggle or i18n display. */\n i18nText?: string;\n /** ID of the currently active navigation item; matched against `NavItem.id` to highlight the active button. */\n activeNavItemId?: string;\n /** Sidebar navigation definition; omitting this prop renders an empty sidebar. */\n sidebar?: { groupcontent: NavGroup[] };\n /** Callback fired when the logout button is clicked. */\n onLogout?: () => void;\n /** Callback fired when the user switches the UI locale to English. */\n onChangeToEnLocale?: () => void;\n /** Callback fired when the user switches the UI locale to Vietnamese. */\n onChangeToViLocale?: () => void;\n /**\n * Label displayed on the logout button.\n * @default 'Log out'\n */\n logoutLabel?: string;\n /**\n * Copyright string shown at the bottom of the sidebar.\n * @default `Copyright © <current year>, Lunas.`\n */\n copyright?: string;\n /** Authenticated user shown in the header avatar dropdown. Omit to hide the user menu. */\n user?: CMSLayoutUser;\n};\n\nconst SidebarContentGroupItem = memo<NavItem & { activeNavItemId?: string }>(({ id, label, icon, activeNavItemId, onClick, renderAs }) => (\n <SidebarMenuItem>\n {renderAs ? (\n <SidebarMenuButton asChild isActive={id === activeNavItemId}>\n {renderAs({ icon, label })}\n </SidebarMenuButton>\n ) : (\n <SidebarMenuButton isActive={id === activeNavItemId} onClick={onClick}>\n {icon}\n {label}\n </SidebarMenuButton>\n )}\n </SidebarMenuItem>\n));\nSidebarContentGroupItem.displayName = 'SidebarContentGroupItem';\n\nconst SidebarContentGroup = memo<React.PropsWithChildren<Omit<NavGroup, 'items'>>>(({ id, label, children }) => (\n <SidebarGroup>\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu>{children}</SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n));\nSidebarContentGroup.displayName = 'SidebarContentGroup';\n\n/**\n * Full-page CMS application shell with a collapsible inset sidebar, header, and main content area.\n *\n * @example\n * ```tsx\n * import { CMSLayout } from '@customafk/lunas-ui/layouts/cms-layout';\n * import { LayoutDashboardIcon } from 'lucide-react';\n *\n * <CMSLayout\n * activeNavItemId=\"dashboard\"\n * sidebar={{\n * groupcontent: [\n * {\n * id: 'main',\n * label: 'Main',\n * items: [\n * {\n * id: 'dashboard',\n * label: 'Dashboard',\n * icon: <LayoutDashboardIcon />,\n * // Option A — TanStack Router Link (asChild/Slot pattern):\n * renderAs: ({ icon, label }) => <Link to=\"/\">{icon}{label}</Link>,\n * // Option B — simple click handler:\n * // onClick: () => router.navigate({ to: '/' }),\n * },\n * ],\n * },\n * ],\n * }}\n * onLogout={() => signOut()}\n * >\n * <DashboardPage />\n * </CMSLayout>\n * ```\n */\nexport const CMSLayout: React.FC<React.PropsWithChildren<CMSLayoutProps>> = ({\n i18nText,\n activeNavItemId,\n sidebar,\n children,\n onChangeToEnLocale,\n onChangeToViLocale,\n onLogout,\n logoutLabel = 'Log out',\n copyright = `Copyright © ${new Date().getFullYear()}, Lunas.`,\n user,\n}) => {\n const groups = sidebar?.groupcontent ?? [];\n\n return (\n <CMSLayoutProvider>\n <CMSLayoutHeader\n i18nText={i18nText}\n onChangeToEnLocale={onChangeToEnLocale}\n onChangeToViLocale={onChangeToViLocale}\n user={user}\n onLogout={onLogout}\n logoutLabel={logoutLabel}\n />\n <CMSLayoutSidebar variant=\"inset\" collapsible=\"icon\">\n <SidebarContent>\n {groups.map(group => (\n <SidebarContentGroup key={group.id} id={group.id} label={group.label}>\n {group.items.map(item => (\n <SidebarContentGroupItem\n key={item.id}\n id={item.id}\n activeNavItemId={activeNavItemId}\n label={item.label}\n icon={item.icon}\n renderAs={item.renderAs}\n onClick={item.onClick}\n />\n ))}\n </SidebarContentGroup>\n ))}\n </SidebarContent>\n <SidebarFooter>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton className=\"border border-border\" onClick={onLogout}>\n <LogOutIcon className=\"text-text-positive-weak\" />\n {logoutLabel}\n </SidebarMenuButton>\n </SidebarMenuItem>\n <SidebarMenuItem className=\"mt-2 border-t border-t-border\">\n <p className=\"pt-2 text-center text-xs text-text-positive-subtle\">{copyright}</p>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n </CMSLayoutSidebar>\n <CMSLayoutMain>{children}</CMSLayoutMain>\n </CMSLayoutProvider>\n );\n};\n"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./ui/button.cjs"),t=require("./typography/paragraph.cjs"),n=require("./ui/card.cjs"),r=require("./ui/skeleton.cjs"),ee=require("./ui/image.cjs"),te=require("./cards/grid-product-card.cjs"),ne=require("./cards/product-card.cjs"),re=require("./cards/simple-card.cjs"),ie=require("./layouts/flex.cjs"),ae=require("./data-display/country.cjs"),i=require("./data-display/data-list.cjs"),oe=require("./date-B3cozmfV.cjs"),a=require("./ui/badge.cjs"),o=require("./ui/tooltip.cjs"),s=require("./data-display/date-tooltip.cjs"),c=require("./data-display/empty.cjs"),l=require("./data-display/name.cjs"),se=require("./data-display/phone-number.cjs"),ce=require("./data-display/role-badge.cjs"),le=require("./data-display/statistic.cjs"),u=require("./ui/avatar.cjs"),ue=require("./data-display/user.cjs"),d=require("./ui/alert-dialog.cjs"),de=require("./dialogs/confirm-dialog.cjs"),fe=require("./typography/title.cjs"),pe=require("./ui/separator.cjs"),f=require("./ui/sheet.cjs"),me=require("./dialogs/detail-dialog/index.cjs"),p=require("./dialogs/error-dialog.cjs"),m=require("./ui/dialog.cjs"),he=require("./dialogs/loading-dialog.cjs"),h=require("./features/descriptions/index.cjs"),g=require("./ui/command.cjs"),ge=require("./search-modal-CMhsIxae.cjs"),_=require("./tables-B0Jl8Osc.cjs"),v=require("./ui/dropdown-menu.cjs"),y=require("./ui/progress.cjs"),b=require("./ui/switch.cjs"),_e=require("./ui/checkbox.cjs"),ve=require("./ui/spinner.cjs"),x=require("./ui/resizable.cjs"),ye=require("./ui/input.cjs"),be=require("./ui/label.cjs"),S=require("./ui/popover.cjs"),C=require("./ui/select.cjs"),w=require("./tanstack-form-BMVn8ai_.cjs"),T=require("./ui/drawer.cjs"),E=require("./ui/calendar.cjs"),D=require("./ui/radio-group.cjs"),O=require("./ui/textarea.cjs"),k=require("./text-editor-DJYQXXtP.cjs"),A=require("./cms-layout-hLiQbkXR.cjs"),j=require("./payment-layout-BLrXT-oc.cjs"),M=require("./layouts/grid.cjs"),N=require("./pages/FeatureDeveloping.cjs"),xe=require("./pages/FeatureFixing.cjs"),Se=require("./pages/NotAuthorized.cjs"),Ce=require("./pages/NotFound.cjs"),P=require("./alert-D31c6DLq.cjs"),we=require("./pages/LoginPage.cjs"),Te=require("./pages/RegisterPage.cjs"),F=require("./ui/input-otp.cjs"),Ee=require("./pages/VerifyEmailPage.cjs"),De=require("./systems/google.cjs"),Oe=require("./ui/buttons/add-new.cjs"),ke=require("./ui/buttons/edit.cjs"),Ae=require("./ui/buttons/refresh.cjs"),je=require("./ui/buttons/trash.cjs"),Me=require("./ui/buttons/upload-image.cjs"),Ne=require("./ui/inputs/search-input.cjs"),Pe=require("./ui/aspect-ratio.cjs"),I=require("./ui/breadcrumb.cjs"),L=require("./ui/button-group.cjs"),R=require("./ui/carousel.cjs"),z=require("./ui/collapsible.cjs"),B=require("./ui/context-menu.cjs"),V=require("./ui/empty.cjs"),Fe=require("./ui/file-uploader.cjs"),H=require("./ui/form.cjs"),U=require("./ui/hover-card.cjs"),W=require("./ui/item.cjs"),G=require("./ui/menubar.cjs"),K=require("./ui/multi-select.cjs"),q=require("./ui/navigation-menu.cjs"),J=require("./ui/pagination.cjs"),Y=require("./ui/scroll-area.cjs"),Ie=require("./ui/slider.cjs"),Le=require("./ui/sonner.cjs"),X=require("./ui/table.cjs"),Z=require("./ui/tabs.cjs"),Q=require("./ui/toggle.cjs"),$=require("./ui/toggle-group.cjs");let Re=require("sonner");exports.AddNewBtn=Oe.AddNewBtn,exports.Alert=P.t,exports.AlertDescription=P.n,exports.AlertDialog=d.AlertDialog,exports.AlertDialogAction=d.AlertDialogAction,exports.AlertDialogCancel=d.AlertDialogCancel,exports.AlertDialogContent=d.AlertDialogContent,exports.AlertDialogDescription=d.AlertDialogDescription,exports.AlertDialogFooter=d.AlertDialogFooter,exports.AlertDialogHeader=d.AlertDialogHeader,exports.AlertDialogOverlay=d.AlertDialogOverlay,exports.AlertDialogPortal=d.AlertDialogPortal,exports.AlertDialogTitle=d.AlertDialogTitle,exports.AlertDialogTrigger=d.AlertDialogTrigger,exports.AlertTitle=P.r,exports.ArrayCol=w.W,exports.ArrayHeaderRow=w.G,exports.AspectRatio=Pe.AspectRatio,exports.Avatar=u.Avatar,exports.AvatarFallback=u.AvatarFallback,exports.AvatarImage=u.AvatarImage,exports.Badge=a.Badge,exports.Breadcrumb=I.Breadcrumb,exports.BreadcrumbEllipsis=I.BreadcrumbEllipsis,exports.BreadcrumbItem=I.BreadcrumbItem,exports.BreadcrumbLink=I.BreadcrumbLink,exports.BreadcrumbList=I.BreadcrumbList,exports.BreadcrumbPage=I.BreadcrumbPage,exports.BreadcrumbSeparator=I.BreadcrumbSeparator,exports.Button=e.Button,exports.ButtonGroup=L.ButtonGroup,exports.ButtonGroupSeparator=L.ButtonGroupSeparator,exports.ButtonGroupText=L.ButtonGroupText,exports.CMSLayout=A.t,exports.Calendar=E.Calendar,exports.CalendarDayButton=E.CalendarDayButton,exports.Card=n.Card,exports.CardAction=n.CardAction,exports.CardContent=n.CardContent,exports.CardDescription=n.CardDescription,exports.CardFooter=n.CardFooter,exports.CardHeader=n.CardHeader,exports.CardTitle=n.CardTitle,exports.Carousel=R.Carousel,exports.CarouselContent=R.CarouselContent,exports.CarouselItem=R.CarouselItem,exports.CarouselNext=R.CarouselNext,exports.CarouselPrevious=R.CarouselPrevious,exports.Checkbox=_e.Checkbox,exports.CheckboxField=w.E,exports.Collapsible=z.Collapsible,exports.CollapsibleContent=z.CollapsibleContent,exports.CollapsibleTrigger=z.CollapsibleTrigger,exports.ComboboxField=w.T,exports.Command=g.Command,exports.CommandDialog=g.CommandDialog,exports.CommandEmpty=g.CommandEmpty,exports.CommandGroup=g.CommandGroup,exports.CommandInput=g.CommandInput,exports.CommandItem=g.CommandItem,exports.CommandList=g.CommandList,exports.CommandSeparator=g.CommandSeparator,exports.CommandShortcut=g.CommandShortcut,exports.ConfirmDialog=de.ConfirmDialog,exports.ContextMenu=B.ContextMenu,exports.ContextMenuCheckboxItem=B.ContextMenuCheckboxItem,exports.ContextMenuContent=B.ContextMenuContent,exports.ContextMenuGroup=B.ContextMenuGroup,exports.ContextMenuItem=B.ContextMenuItem,exports.ContextMenuLabel=B.ContextMenuLabel,exports.ContextMenuPortal=B.ContextMenuPortal,exports.ContextMenuRadioGroup=B.ContextMenuRadioGroup,exports.ContextMenuRadioItem=B.ContextMenuRadioItem,exports.ContextMenuSeparator=B.ContextMenuSeparator,exports.ContextMenuShortcut=B.ContextMenuShortcut,exports.ContextMenuSub=B.ContextMenuSub,exports.ContextMenuSubContent=B.ContextMenuSubContent,exports.ContextMenuSubTrigger=B.ContextMenuSubTrigger,exports.ContextMenuTrigger=B.ContextMenuTrigger,exports.CountryDisplay=ae.CountryDisplay,exports.DataList=i.DataList,exports.DataListItem=i.DataListItem,exports.DateDisplay=oe.t,exports.DateField=w.w,exports.DateTooltip=s.DateTooltip,exports.Description=h.Description,exports.DescriptionBadge=h.DescriptionBadge,exports.DescriptionBoolean=h.DescriptionBoolean,exports.DescriptionCopy=h.DescriptionCopy,exports.DescriptionDate=h.DescriptionDate,exports.DescriptionEmpty=h.DescriptionEmpty,exports.DescriptionHeader=h.DescriptionHeader,exports.DescriptionImages=h.DescriptionImages,exports.DescriptionItem=h.DescriptionItem,exports.DescriptionLink=h.DescriptionLink,exports.DescriptionLongText=h.DescriptionLongText,exports.DescriptionName=h.DescriptionName,exports.DescriptionNumberPhone=h.DescriptionNumberPhone,exports.DescriptionSection=h.DescriptionSection,exports.DescriptionStatistic=h.DescriptionStatistic,exports.DescriptionStatus=h.DescriptionStatus,exports.DescriptionTagList=h.DescriptionTagList,exports.DescriptionUser=h.DescriptionUser,exports.DetailDialog=me.DetailDialog,exports.Dialog=m.Dialog,exports.DialogClose=m.DialogClose,exports.DialogContent=m.DialogContent,exports.DialogDescription=m.DialogDescription,exports.DialogFooter=m.DialogFooter,exports.DialogHeader=m.DialogHeader,exports.DialogOverlay=m.DialogOverlay,exports.DialogPortal=m.DialogPortal,exports.DialogTitle=m.DialogTitle,exports.DialogTrigger=m.DialogTrigger,exports.Drawer=T.Drawer,exports.DrawerClose=T.DrawerClose,exports.DrawerContent=T.DrawerContent,exports.DrawerDescription=T.DrawerDescription,exports.DrawerFooter=T.DrawerFooter,exports.DrawerHeader=T.DrawerHeader,exports.DrawerOverlay=T.DrawerOverlay,exports.DrawerPortal=T.DrawerPortal,exports.DrawerTitle=T.DrawerTitle,exports.DrawerTrigger=T.DrawerTrigger,exports.DropdownMenu=v.DropdownMenu,exports.DropdownMenuCheckboxItem=v.DropdownMenuCheckboxItem,exports.DropdownMenuContent=v.DropdownMenuContent,exports.DropdownMenuGroup=v.DropdownMenuGroup,exports.DropdownMenuItem=v.DropdownMenuItem,exports.DropdownMenuLabel=v.DropdownMenuLabel,exports.DropdownMenuPortal=v.DropdownMenuPortal,exports.DropdownMenuRadioGroup=v.DropdownMenuRadioGroup,exports.DropdownMenuRadioItem=v.DropdownMenuRadioItem,exports.DropdownMenuSeparator=v.DropdownMenuSeparator,exports.DropdownMenuShortcut=v.DropdownMenuShortcut,exports.DropdownMenuSub=v.DropdownMenuSub,exports.DropdownMenuSubContent=v.DropdownMenuSubContent,exports.DropdownMenuSubTrigger=v.DropdownMenuSubTrigger,exports.DropdownMenuTrigger=v.DropdownMenuTrigger,exports.EditBtn=ke.EditBtn,exports.EmailField=w.C,exports.Empty=V.Empty,exports.EmptyContent=V.EmptyContent,exports.EmptyDescription=V.EmptyDescription,exports.EmptyDisplay=c.EmptyDisplay,exports.EmptyHeader=V.EmptyHeader,exports.EmptyMedia=V.EmptyMedia,exports.EmptyTitle=V.EmptyTitle,exports.ErrorDialog=p.ErrorDialog,exports.FeatureDeveloping=N.FeatureDeveloping,exports.FeatureFixing=xe.FeatureFixing,exports.Field=w.L,exports.FieldContent=w.R,exports.FieldContentMain=w.z,exports.FieldError=w.B,exports.FieldGroup=w.V,exports.FieldLabel=w.H,exports.FieldSeparator=w.U,exports.FileUploader=Fe.FileUploader,exports.Flex=ie.Flex,exports.Form=H.Form,exports.FormControl=H.FormControl,exports.FormDescription=H.FormDescription,exports.FormField=H.FormField,exports.FormItem=H.FormItem,exports.FormLabel=H.FormLabel,exports.FormMessage=H.FormMessage,exports.Google=De.Google,exports.Grid=M.Grid,exports.GridProductCard=te.GridProductCard,exports.HoverCard=U.HoverCard,exports.HoverCardContent=U.HoverCardContent,exports.HoverCardTrigger=U.HoverCardTrigger,exports.Image=ee.Image,exports.Input=ye.Input,exports.InputOTP=F.InputOTP,exports.InputOTPGroup=F.InputOTPGroup,exports.InputOTPSeparator=F.InputOTPSeparator,exports.InputOTPSlot=F.InputOTPSlot,exports.Item=W.Item,exports.ItemActions=W.ItemActions,exports.ItemContent=W.ItemContent,exports.ItemDescription=W.ItemDescription,exports.ItemFooter=W.ItemFooter,exports.ItemGroup=W.ItemGroup,exports.ItemHeader=W.ItemHeader,exports.ItemMedia=W.ItemMedia,exports.ItemSeparator=W.ItemSeparator,exports.ItemTitle=W.ItemTitle,exports.Label=be.Label,exports.LoadingDialog=he.LoadingDialog,exports.LoginPage=we.LoginPage,exports.Menubar=G.Menubar,exports.MenubarCheckboxItem=G.MenubarCheckboxItem,exports.MenubarContent=G.MenubarContent,exports.MenubarGroup=G.MenubarGroup,exports.MenubarItem=G.MenubarItem,exports.MenubarLabel=G.MenubarLabel,exports.MenubarMenu=G.MenubarMenu,exports.MenubarPortal=G.MenubarPortal,exports.MenubarRadioGroup=G.MenubarRadioGroup,exports.MenubarRadioItem=G.MenubarRadioItem,exports.MenubarSeparator=G.MenubarSeparator,exports.MenubarShortcut=G.MenubarShortcut,exports.MenubarSub=G.MenubarSub,exports.MenubarSubContent=G.MenubarSubContent,exports.MenubarSubTrigger=G.MenubarSubTrigger,exports.MenubarTrigger=G.MenubarTrigger,exports.MultipleSelector=K.MultipleSelector,exports.NameDisplay=l.NameDisplay,exports.NavigationMenu=q.NavigationMenu,exports.NavigationMenuContent=q.NavigationMenuContent,exports.NavigationMenuIndicator=q.NavigationMenuIndicator,exports.NavigationMenuItem=q.NavigationMenuItem,exports.NavigationMenuLink=q.NavigationMenuLink,exports.NavigationMenuList=q.NavigationMenuList,exports.NavigationMenuTrigger=q.NavigationMenuTrigger,exports.NavigationMenuViewport=q.NavigationMenuViewport,exports.NotAuthorized=Se.NotAuthorized,exports.NotFound=Ce.NotFound,exports.NumberField=w.S,exports.Pagination=J.Pagination,exports.PaginationContent=J.PaginationContent,exports.PaginationEllipsis=J.PaginationEllipsis,exports.PaginationItem=J.PaginationItem,exports.PaginationLink=J.PaginationLink,exports.PaginationNext=J.PaginationNext,exports.PaginationPrevious=J.PaginationPrevious,exports.Paragraph=t.Paragraph,exports.PasswordField=w.x,exports.PaymentLayout=j.t,exports.PhoneNumberDisplay=se.PhoneNumberDisplay,exports.Popover=S.Popover,exports.PopoverAnchor=S.PopoverAnchor,exports.PopoverClose=S.PopoverClose,exports.PopoverContent=S.PopoverContent,exports.PopoverTrigger=S.PopoverTrigger,exports.ProductCard=ne.ProductCard,exports.Progress=y.Progress,exports.RadioGroup=D.RadioGroup,exports.RadioGroupField=w.b,exports.RadioGroupItem=D.RadioGroupItem,exports.RefreshBtn=Ae.RefreshBtn,exports.RegisterPage=Te.RegisterPage,exports.ResizableHandle=x.ResizableHandle,exports.ResizablePanel=x.ResizablePanel,exports.ResizablePanelGroup=x.ResizablePanelGroup,exports.RoleBadge=ce.RoleBadge,exports.ScrollArea=Y.ScrollArea,exports.ScrollBar=Y.ScrollBar,exports.SearchInput=Ne.SearchInput,exports.SearchModal=ge.t,exports.Select=C.Select,exports.SelectContent=C.SelectContent,exports.SelectField=w.y,exports.SelectGroup=C.SelectGroup,exports.SelectItem=C.SelectItem,exports.SelectLabel=C.SelectLabel,exports.SelectSeparator=C.SelectSeparator,exports.SelectTrigger=C.SelectTrigger,exports.SelectValue=C.SelectValue,exports.Separator=pe.Separator,exports.Sheet=f.Sheet,exports.SheetClose=f.SheetClose,exports.SheetContent=f.SheetContent,exports.SheetDescription=f.SheetDescription,exports.SheetFooter=f.SheetFooter,exports.SheetHeader=f.SheetHeader,exports.SheetTitle=f.SheetTitle,exports.SheetTrigger=f.SheetTrigger,exports.SimpleArrayField=w.K,exports.SimpleBooleanField=w.I,exports.SimpleCard=re.SimpleCard,exports.SimpleComboboxField=w.F,exports.SimpleDateField=w.P,exports.SimpleEmailField=w.M,exports.SimpleNumberField=w.j,exports.SimplePasswordField=w.A,exports.SimpleRadioGroupField=w.N,exports.SimpleSelectField=w.k,exports.SimpleTextField=w.D,exports.SimpleTextareaField=w.O,exports.Skeleton=r.Skeleton,exports.Slider=Ie.Slider,exports.Spinner=ve.Spinner,exports.Statistic=le.Statistic,exports.Switch=b.Switch,exports.SwitchField=w.v,exports.Table=X.Table,exports.TableBody=X.TableBody,exports.TableCaption=X.TableCaption,exports.TableCell=X.TableCell,exports.TableFooter=X.TableFooter,exports.TableHead=X.TableHead,exports.TableHeader=X.TableHeader,exports.TableRow=X.TableRow,exports.Tabs=Z.Tabs,exports.TabsContent=Z.TabsContent,exports.TabsList=Z.TabsList,exports.TabsTrigger=Z.TabsTrigger,exports.TanStackActionSubmit=w.m,exports.TanStackActionsForm=w.p,exports.TanStackCardForm=w.f,exports.TanStackContainerForm=w.d,exports.TanStackDialogForm=w.u,exports.TanStackFieldGroup=w.l,exports.TanStackPopoverForm=w.c,exports.TanStackSectionForm=w.s,exports.TanStackTitleField=w.o,exports.TextEditor=k.t,exports.TextEditorField=w.h,exports.TextEditorToolbar=k.n,exports.TextField=w._,exports.Textarea=O.Textarea,exports.TextareaField=w.g,exports.Title=fe.Title,exports.Toaster=Le.Toaster,exports.Toggle=Q.Toggle,exports.ToggleGroup=$.ToggleGroup,exports.ToggleGroupItem=$.ToggleGroupItem,exports.Tooltip=o.Tooltip,exports.TooltipContent=o.TooltipContent,exports.TooltipProvider=o.TooltipProvider,exports.TooltipTrigger=o.TooltipTrigger,exports.TrashBtn=je.TrashBtn,exports.UITableAnalysisPanel=_.s,exports.UITableAvatarNameDisplay=_.W,exports.UITableBadgeDisplay=_.U,exports.UITableBody=_.T,exports.UITableBooleanDisplay=_.H,exports.UITableCell=_.w,exports.UITableCellActions=_.C,exports.UITableCellSelect=_.S,exports.UITableContainer=_.c,exports.UITableCurrencyDisplay=_.V,exports.UITableDateDisplay=_.B,exports.UITableDescriptionDisplay=_.z,exports.UITableEditButton=_.R,exports.UITableEmailDisplay=_.L,exports.UITableEmptyDisplay=_.x,exports.UITableFilter=_.o,exports.UITableFooter=_.b,exports.UITableFooterRow=_.y,exports.UITableHead=_.v,exports.UITableHeadCell=_.g,exports.UITableHeadCellOption=_._,exports.UITableHeadCellSelect=_.h,exports.UITableHeadRow=_.m,exports.UITableInnerTable=_.p,exports.UITableInnerWrapper=_.f,exports.UITableListDisplay=_.I,exports.UITableLoadMore=_.d,exports.UITableMoreButton=_.F,exports.UITableNameDisplay=_.P,exports.UITablePermalink=_.N,exports.UITablePhoneNumberDisplay=_.M,exports.UITableProgressDisplay=_.j,exports.UITableProvider=_.a,exports.UITableRemoveButton=_.A,exports.UITableRow=_.u,exports.UITableStatisticDisplay=_.k,exports.UITableStatusDisplay=_.O,exports.UITableSummaryBar=_.i,exports.UITableToggleButton=_.D,exports.UITableTooltip=_.t,exports.UITableTooltipActions=_.n,exports.UITableTooltipFilter=_.r,exports.UITableUserDataDisplay=_.E,exports.UITableWrapper=_.l,exports.UploadImageBtn=Me.UploadImageBtn,exports.UserDataDisplay=ue.UserDataDisplay,exports.VerifyEmailPage=Ee.VerifyEmailPage,exports.badgeVariants=a.badgeVariants,exports.buttonGroupVariants=L.buttonGroupVariants,exports.navigationMenuTriggerStyle=q.navigationMenuTriggerStyle,exports.paragraphVariants=t.paragraphVariants,exports.toast=Re.toast,exports.toggleVariants=Q.toggleVariants,exports.useDebounce=K.useDebounce,exports.useFormField=H.useFormField,exports.useTanStackFieldContext=w.t,exports.useTanStackForm=w.n,exports.useTanStackFormContext=w.r,exports.withTanStackFieldGroup=w.i,exports.withTanStackForm=w.a;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./ui/button.cjs"),t=require("./typography/paragraph.cjs"),n=require("./ui/card.cjs"),r=require("./ui/skeleton.cjs"),ee=require("./ui/image.cjs"),te=require("./cards/grid-product-card.cjs"),ne=require("./cards/product-card.cjs"),re=require("./cards/simple-card.cjs"),ie=require("./layouts/flex.cjs"),ae=require("./data-display/country.cjs"),i=require("./data-display/data-list.cjs"),oe=require("./date-B3cozmfV.cjs"),a=require("./ui/badge.cjs"),o=require("./ui/tooltip.cjs"),s=require("./data-display/date-tooltip.cjs"),c=require("./data-display/empty.cjs"),l=require("./data-display/name.cjs"),se=require("./data-display/phone-number.cjs"),ce=require("./data-display/role-badge.cjs"),le=require("./data-display/statistic.cjs"),u=require("./ui/avatar.cjs"),ue=require("./data-display/user.cjs"),d=require("./ui/alert-dialog.cjs"),de=require("./dialogs/confirm-dialog.cjs"),fe=require("./typography/title.cjs"),pe=require("./ui/separator.cjs"),f=require("./ui/sheet.cjs"),me=require("./dialogs/detail-dialog/index.cjs"),p=require("./dialogs/error-dialog.cjs"),m=require("./ui/dialog.cjs"),he=require("./dialogs/loading-dialog.cjs"),h=require("./features/descriptions/index.cjs"),g=require("./ui/command.cjs"),ge=require("./search-modal-CMhsIxae.cjs"),_=require("./tables-B0Jl8Osc.cjs"),v=require("./ui/dropdown-menu.cjs"),y=require("./ui/progress.cjs"),b=require("./ui/switch.cjs"),_e=require("./ui/checkbox.cjs"),ve=require("./ui/spinner.cjs"),x=require("./ui/resizable.cjs"),ye=require("./ui/input.cjs"),be=require("./ui/label.cjs"),S=require("./ui/popover.cjs"),C=require("./ui/select.cjs"),w=require("./tanstack-form-BMVn8ai_.cjs"),T=require("./ui/drawer.cjs"),E=require("./ui/calendar.cjs"),D=require("./ui/radio-group.cjs"),O=require("./ui/textarea.cjs"),k=require("./text-editor-DJYQXXtP.cjs"),A=require("./cms-layout-SubgSF72.cjs"),j=require("./payment-layout-BLrXT-oc.cjs"),M=require("./layouts/grid.cjs"),N=require("./pages/FeatureDeveloping.cjs"),xe=require("./pages/FeatureFixing.cjs"),Se=require("./pages/NotAuthorized.cjs"),Ce=require("./pages/NotFound.cjs"),P=require("./alert-D31c6DLq.cjs"),we=require("./pages/LoginPage.cjs"),Te=require("./pages/RegisterPage.cjs"),F=require("./ui/input-otp.cjs"),Ee=require("./pages/VerifyEmailPage.cjs"),De=require("./systems/google.cjs"),Oe=require("./ui/buttons/add-new.cjs"),ke=require("./ui/buttons/edit.cjs"),Ae=require("./ui/buttons/refresh.cjs"),je=require("./ui/buttons/trash.cjs"),Me=require("./ui/buttons/upload-image.cjs"),Ne=require("./ui/inputs/search-input.cjs"),Pe=require("./ui/aspect-ratio.cjs"),I=require("./ui/breadcrumb.cjs"),L=require("./ui/button-group.cjs"),R=require("./ui/carousel.cjs"),z=require("./ui/collapsible.cjs"),B=require("./ui/context-menu.cjs"),V=require("./ui/empty.cjs"),Fe=require("./ui/file-uploader.cjs"),H=require("./ui/form.cjs"),U=require("./ui/hover-card.cjs"),W=require("./ui/item.cjs"),G=require("./ui/menubar.cjs"),K=require("./ui/multi-select.cjs"),q=require("./ui/navigation-menu.cjs"),J=require("./ui/pagination.cjs"),Y=require("./ui/scroll-area.cjs"),Ie=require("./ui/slider.cjs"),Le=require("./ui/sonner.cjs"),X=require("./ui/table.cjs"),Z=require("./ui/tabs.cjs"),Q=require("./ui/toggle.cjs"),$=require("./ui/toggle-group.cjs");let Re=require("sonner");exports.AddNewBtn=Oe.AddNewBtn,exports.Alert=P.t,exports.AlertDescription=P.n,exports.AlertDialog=d.AlertDialog,exports.AlertDialogAction=d.AlertDialogAction,exports.AlertDialogCancel=d.AlertDialogCancel,exports.AlertDialogContent=d.AlertDialogContent,exports.AlertDialogDescription=d.AlertDialogDescription,exports.AlertDialogFooter=d.AlertDialogFooter,exports.AlertDialogHeader=d.AlertDialogHeader,exports.AlertDialogOverlay=d.AlertDialogOverlay,exports.AlertDialogPortal=d.AlertDialogPortal,exports.AlertDialogTitle=d.AlertDialogTitle,exports.AlertDialogTrigger=d.AlertDialogTrigger,exports.AlertTitle=P.r,exports.ArrayCol=w.W,exports.ArrayHeaderRow=w.G,exports.AspectRatio=Pe.AspectRatio,exports.Avatar=u.Avatar,exports.AvatarFallback=u.AvatarFallback,exports.AvatarImage=u.AvatarImage,exports.Badge=a.Badge,exports.Breadcrumb=I.Breadcrumb,exports.BreadcrumbEllipsis=I.BreadcrumbEllipsis,exports.BreadcrumbItem=I.BreadcrumbItem,exports.BreadcrumbLink=I.BreadcrumbLink,exports.BreadcrumbList=I.BreadcrumbList,exports.BreadcrumbPage=I.BreadcrumbPage,exports.BreadcrumbSeparator=I.BreadcrumbSeparator,exports.Button=e.Button,exports.ButtonGroup=L.ButtonGroup,exports.ButtonGroupSeparator=L.ButtonGroupSeparator,exports.ButtonGroupText=L.ButtonGroupText,exports.CMSLayout=A.t,exports.Calendar=E.Calendar,exports.CalendarDayButton=E.CalendarDayButton,exports.Card=n.Card,exports.CardAction=n.CardAction,exports.CardContent=n.CardContent,exports.CardDescription=n.CardDescription,exports.CardFooter=n.CardFooter,exports.CardHeader=n.CardHeader,exports.CardTitle=n.CardTitle,exports.Carousel=R.Carousel,exports.CarouselContent=R.CarouselContent,exports.CarouselItem=R.CarouselItem,exports.CarouselNext=R.CarouselNext,exports.CarouselPrevious=R.CarouselPrevious,exports.Checkbox=_e.Checkbox,exports.CheckboxField=w.E,exports.Collapsible=z.Collapsible,exports.CollapsibleContent=z.CollapsibleContent,exports.CollapsibleTrigger=z.CollapsibleTrigger,exports.ComboboxField=w.T,exports.Command=g.Command,exports.CommandDialog=g.CommandDialog,exports.CommandEmpty=g.CommandEmpty,exports.CommandGroup=g.CommandGroup,exports.CommandInput=g.CommandInput,exports.CommandItem=g.CommandItem,exports.CommandList=g.CommandList,exports.CommandSeparator=g.CommandSeparator,exports.CommandShortcut=g.CommandShortcut,exports.ConfirmDialog=de.ConfirmDialog,exports.ContextMenu=B.ContextMenu,exports.ContextMenuCheckboxItem=B.ContextMenuCheckboxItem,exports.ContextMenuContent=B.ContextMenuContent,exports.ContextMenuGroup=B.ContextMenuGroup,exports.ContextMenuItem=B.ContextMenuItem,exports.ContextMenuLabel=B.ContextMenuLabel,exports.ContextMenuPortal=B.ContextMenuPortal,exports.ContextMenuRadioGroup=B.ContextMenuRadioGroup,exports.ContextMenuRadioItem=B.ContextMenuRadioItem,exports.ContextMenuSeparator=B.ContextMenuSeparator,exports.ContextMenuShortcut=B.ContextMenuShortcut,exports.ContextMenuSub=B.ContextMenuSub,exports.ContextMenuSubContent=B.ContextMenuSubContent,exports.ContextMenuSubTrigger=B.ContextMenuSubTrigger,exports.ContextMenuTrigger=B.ContextMenuTrigger,exports.CountryDisplay=ae.CountryDisplay,exports.DataList=i.DataList,exports.DataListItem=i.DataListItem,exports.DateDisplay=oe.t,exports.DateField=w.w,exports.DateTooltip=s.DateTooltip,exports.Description=h.Description,exports.DescriptionBadge=h.DescriptionBadge,exports.DescriptionBoolean=h.DescriptionBoolean,exports.DescriptionCopy=h.DescriptionCopy,exports.DescriptionDate=h.DescriptionDate,exports.DescriptionEmpty=h.DescriptionEmpty,exports.DescriptionHeader=h.DescriptionHeader,exports.DescriptionImages=h.DescriptionImages,exports.DescriptionItem=h.DescriptionItem,exports.DescriptionLink=h.DescriptionLink,exports.DescriptionLongText=h.DescriptionLongText,exports.DescriptionName=h.DescriptionName,exports.DescriptionNumberPhone=h.DescriptionNumberPhone,exports.DescriptionSection=h.DescriptionSection,exports.DescriptionStatistic=h.DescriptionStatistic,exports.DescriptionStatus=h.DescriptionStatus,exports.DescriptionTagList=h.DescriptionTagList,exports.DescriptionUser=h.DescriptionUser,exports.DetailDialog=me.DetailDialog,exports.Dialog=m.Dialog,exports.DialogClose=m.DialogClose,exports.DialogContent=m.DialogContent,exports.DialogDescription=m.DialogDescription,exports.DialogFooter=m.DialogFooter,exports.DialogHeader=m.DialogHeader,exports.DialogOverlay=m.DialogOverlay,exports.DialogPortal=m.DialogPortal,exports.DialogTitle=m.DialogTitle,exports.DialogTrigger=m.DialogTrigger,exports.Drawer=T.Drawer,exports.DrawerClose=T.DrawerClose,exports.DrawerContent=T.DrawerContent,exports.DrawerDescription=T.DrawerDescription,exports.DrawerFooter=T.DrawerFooter,exports.DrawerHeader=T.DrawerHeader,exports.DrawerOverlay=T.DrawerOverlay,exports.DrawerPortal=T.DrawerPortal,exports.DrawerTitle=T.DrawerTitle,exports.DrawerTrigger=T.DrawerTrigger,exports.DropdownMenu=v.DropdownMenu,exports.DropdownMenuCheckboxItem=v.DropdownMenuCheckboxItem,exports.DropdownMenuContent=v.DropdownMenuContent,exports.DropdownMenuGroup=v.DropdownMenuGroup,exports.DropdownMenuItem=v.DropdownMenuItem,exports.DropdownMenuLabel=v.DropdownMenuLabel,exports.DropdownMenuPortal=v.DropdownMenuPortal,exports.DropdownMenuRadioGroup=v.DropdownMenuRadioGroup,exports.DropdownMenuRadioItem=v.DropdownMenuRadioItem,exports.DropdownMenuSeparator=v.DropdownMenuSeparator,exports.DropdownMenuShortcut=v.DropdownMenuShortcut,exports.DropdownMenuSub=v.DropdownMenuSub,exports.DropdownMenuSubContent=v.DropdownMenuSubContent,exports.DropdownMenuSubTrigger=v.DropdownMenuSubTrigger,exports.DropdownMenuTrigger=v.DropdownMenuTrigger,exports.EditBtn=ke.EditBtn,exports.EmailField=w.C,exports.Empty=V.Empty,exports.EmptyContent=V.EmptyContent,exports.EmptyDescription=V.EmptyDescription,exports.EmptyDisplay=c.EmptyDisplay,exports.EmptyHeader=V.EmptyHeader,exports.EmptyMedia=V.EmptyMedia,exports.EmptyTitle=V.EmptyTitle,exports.ErrorDialog=p.ErrorDialog,exports.FeatureDeveloping=N.FeatureDeveloping,exports.FeatureFixing=xe.FeatureFixing,exports.Field=w.L,exports.FieldContent=w.R,exports.FieldContentMain=w.z,exports.FieldError=w.B,exports.FieldGroup=w.V,exports.FieldLabel=w.H,exports.FieldSeparator=w.U,exports.FileUploader=Fe.FileUploader,exports.Flex=ie.Flex,exports.Form=H.Form,exports.FormControl=H.FormControl,exports.FormDescription=H.FormDescription,exports.FormField=H.FormField,exports.FormItem=H.FormItem,exports.FormLabel=H.FormLabel,exports.FormMessage=H.FormMessage,exports.Google=De.Google,exports.Grid=M.Grid,exports.GridProductCard=te.GridProductCard,exports.HoverCard=U.HoverCard,exports.HoverCardContent=U.HoverCardContent,exports.HoverCardTrigger=U.HoverCardTrigger,exports.Image=ee.Image,exports.Input=ye.Input,exports.InputOTP=F.InputOTP,exports.InputOTPGroup=F.InputOTPGroup,exports.InputOTPSeparator=F.InputOTPSeparator,exports.InputOTPSlot=F.InputOTPSlot,exports.Item=W.Item,exports.ItemActions=W.ItemActions,exports.ItemContent=W.ItemContent,exports.ItemDescription=W.ItemDescription,exports.ItemFooter=W.ItemFooter,exports.ItemGroup=W.ItemGroup,exports.ItemHeader=W.ItemHeader,exports.ItemMedia=W.ItemMedia,exports.ItemSeparator=W.ItemSeparator,exports.ItemTitle=W.ItemTitle,exports.Label=be.Label,exports.LoadingDialog=he.LoadingDialog,exports.LoginPage=we.LoginPage,exports.Menubar=G.Menubar,exports.MenubarCheckboxItem=G.MenubarCheckboxItem,exports.MenubarContent=G.MenubarContent,exports.MenubarGroup=G.MenubarGroup,exports.MenubarItem=G.MenubarItem,exports.MenubarLabel=G.MenubarLabel,exports.MenubarMenu=G.MenubarMenu,exports.MenubarPortal=G.MenubarPortal,exports.MenubarRadioGroup=G.MenubarRadioGroup,exports.MenubarRadioItem=G.MenubarRadioItem,exports.MenubarSeparator=G.MenubarSeparator,exports.MenubarShortcut=G.MenubarShortcut,exports.MenubarSub=G.MenubarSub,exports.MenubarSubContent=G.MenubarSubContent,exports.MenubarSubTrigger=G.MenubarSubTrigger,exports.MenubarTrigger=G.MenubarTrigger,exports.MultipleSelector=K.MultipleSelector,exports.NameDisplay=l.NameDisplay,exports.NavigationMenu=q.NavigationMenu,exports.NavigationMenuContent=q.NavigationMenuContent,exports.NavigationMenuIndicator=q.NavigationMenuIndicator,exports.NavigationMenuItem=q.NavigationMenuItem,exports.NavigationMenuLink=q.NavigationMenuLink,exports.NavigationMenuList=q.NavigationMenuList,exports.NavigationMenuTrigger=q.NavigationMenuTrigger,exports.NavigationMenuViewport=q.NavigationMenuViewport,exports.NotAuthorized=Se.NotAuthorized,exports.NotFound=Ce.NotFound,exports.NumberField=w.S,exports.Pagination=J.Pagination,exports.PaginationContent=J.PaginationContent,exports.PaginationEllipsis=J.PaginationEllipsis,exports.PaginationItem=J.PaginationItem,exports.PaginationLink=J.PaginationLink,exports.PaginationNext=J.PaginationNext,exports.PaginationPrevious=J.PaginationPrevious,exports.Paragraph=t.Paragraph,exports.PasswordField=w.x,exports.PaymentLayout=j.t,exports.PhoneNumberDisplay=se.PhoneNumberDisplay,exports.Popover=S.Popover,exports.PopoverAnchor=S.PopoverAnchor,exports.PopoverClose=S.PopoverClose,exports.PopoverContent=S.PopoverContent,exports.PopoverTrigger=S.PopoverTrigger,exports.ProductCard=ne.ProductCard,exports.Progress=y.Progress,exports.RadioGroup=D.RadioGroup,exports.RadioGroupField=w.b,exports.RadioGroupItem=D.RadioGroupItem,exports.RefreshBtn=Ae.RefreshBtn,exports.RegisterPage=Te.RegisterPage,exports.ResizableHandle=x.ResizableHandle,exports.ResizablePanel=x.ResizablePanel,exports.ResizablePanelGroup=x.ResizablePanelGroup,exports.RoleBadge=ce.RoleBadge,exports.ScrollArea=Y.ScrollArea,exports.ScrollBar=Y.ScrollBar,exports.SearchInput=Ne.SearchInput,exports.SearchModal=ge.t,exports.Select=C.Select,exports.SelectContent=C.SelectContent,exports.SelectField=w.y,exports.SelectGroup=C.SelectGroup,exports.SelectItem=C.SelectItem,exports.SelectLabel=C.SelectLabel,exports.SelectSeparator=C.SelectSeparator,exports.SelectTrigger=C.SelectTrigger,exports.SelectValue=C.SelectValue,exports.Separator=pe.Separator,exports.Sheet=f.Sheet,exports.SheetClose=f.SheetClose,exports.SheetContent=f.SheetContent,exports.SheetDescription=f.SheetDescription,exports.SheetFooter=f.SheetFooter,exports.SheetHeader=f.SheetHeader,exports.SheetTitle=f.SheetTitle,exports.SheetTrigger=f.SheetTrigger,exports.SimpleArrayField=w.K,exports.SimpleBooleanField=w.I,exports.SimpleCard=re.SimpleCard,exports.SimpleComboboxField=w.F,exports.SimpleDateField=w.P,exports.SimpleEmailField=w.M,exports.SimpleNumberField=w.j,exports.SimplePasswordField=w.A,exports.SimpleRadioGroupField=w.N,exports.SimpleSelectField=w.k,exports.SimpleTextField=w.D,exports.SimpleTextareaField=w.O,exports.Skeleton=r.Skeleton,exports.Slider=Ie.Slider,exports.Spinner=ve.Spinner,exports.Statistic=le.Statistic,exports.Switch=b.Switch,exports.SwitchField=w.v,exports.Table=X.Table,exports.TableBody=X.TableBody,exports.TableCaption=X.TableCaption,exports.TableCell=X.TableCell,exports.TableFooter=X.TableFooter,exports.TableHead=X.TableHead,exports.TableHeader=X.TableHeader,exports.TableRow=X.TableRow,exports.Tabs=Z.Tabs,exports.TabsContent=Z.TabsContent,exports.TabsList=Z.TabsList,exports.TabsTrigger=Z.TabsTrigger,exports.TanStackActionSubmit=w.m,exports.TanStackActionsForm=w.p,exports.TanStackCardForm=w.f,exports.TanStackContainerForm=w.d,exports.TanStackDialogForm=w.u,exports.TanStackFieldGroup=w.l,exports.TanStackPopoverForm=w.c,exports.TanStackSectionForm=w.s,exports.TanStackTitleField=w.o,exports.TextEditor=k.t,exports.TextEditorField=w.h,exports.TextEditorToolbar=k.n,exports.TextField=w._,exports.Textarea=O.Textarea,exports.TextareaField=w.g,exports.Title=fe.Title,exports.Toaster=Le.Toaster,exports.Toggle=Q.Toggle,exports.ToggleGroup=$.ToggleGroup,exports.ToggleGroupItem=$.ToggleGroupItem,exports.Tooltip=o.Tooltip,exports.TooltipContent=o.TooltipContent,exports.TooltipProvider=o.TooltipProvider,exports.TooltipTrigger=o.TooltipTrigger,exports.TrashBtn=je.TrashBtn,exports.UITableAnalysisPanel=_.s,exports.UITableAvatarNameDisplay=_.W,exports.UITableBadgeDisplay=_.U,exports.UITableBody=_.T,exports.UITableBooleanDisplay=_.H,exports.UITableCell=_.w,exports.UITableCellActions=_.C,exports.UITableCellSelect=_.S,exports.UITableContainer=_.c,exports.UITableCurrencyDisplay=_.V,exports.UITableDateDisplay=_.B,exports.UITableDescriptionDisplay=_.z,exports.UITableEditButton=_.R,exports.UITableEmailDisplay=_.L,exports.UITableEmptyDisplay=_.x,exports.UITableFilter=_.o,exports.UITableFooter=_.b,exports.UITableFooterRow=_.y,exports.UITableHead=_.v,exports.UITableHeadCell=_.g,exports.UITableHeadCellOption=_._,exports.UITableHeadCellSelect=_.h,exports.UITableHeadRow=_.m,exports.UITableInnerTable=_.p,exports.UITableInnerWrapper=_.f,exports.UITableListDisplay=_.I,exports.UITableLoadMore=_.d,exports.UITableMoreButton=_.F,exports.UITableNameDisplay=_.P,exports.UITablePermalink=_.N,exports.UITablePhoneNumberDisplay=_.M,exports.UITableProgressDisplay=_.j,exports.UITableProvider=_.a,exports.UITableRemoveButton=_.A,exports.UITableRow=_.u,exports.UITableStatisticDisplay=_.k,exports.UITableStatusDisplay=_.O,exports.UITableSummaryBar=_.i,exports.UITableToggleButton=_.D,exports.UITableTooltip=_.t,exports.UITableTooltipActions=_.n,exports.UITableTooltipFilter=_.r,exports.UITableUserDataDisplay=_.E,exports.UITableWrapper=_.l,exports.UploadImageBtn=Me.UploadImageBtn,exports.UserDataDisplay=ue.UserDataDisplay,exports.VerifyEmailPage=Ee.VerifyEmailPage,exports.badgeVariants=a.badgeVariants,exports.buttonGroupVariants=L.buttonGroupVariants,exports.navigationMenuTriggerStyle=q.navigationMenuTriggerStyle,exports.paragraphVariants=t.paragraphVariants,exports.toast=Re.toast,exports.toggleVariants=Q.toggleVariants,exports.useDebounce=K.useDebounce,exports.useFormField=H.useFormField,exports.useTanStackFieldContext=w.t,exports.useTanStackForm=w.n,exports.useTanStackFormContext=w.r,exports.withTanStackFieldGroup=w.i,exports.withTanStackForm=w.a;
|
package/dist/index.d.cts
CHANGED
|
@@ -76,7 +76,7 @@ import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, Pagi
|
|
|
76
76
|
import { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } from "./ui/popover.cjs";
|
|
77
77
|
import { Progress } from "./ui/progress.cjs";
|
|
78
78
|
import { RadioGroup, RadioGroupItem } from "./ui/radio-group.cjs";
|
|
79
|
-
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "./resizable-
|
|
79
|
+
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "./resizable-CNIYTd7k.cjs";
|
|
80
80
|
import { ScrollArea, ScrollBar } from "./ui/scroll-area.cjs";
|
|
81
81
|
import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue } from "./ui/select.cjs";
|
|
82
82
|
import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from "./ui/sheet.cjs";
|
package/dist/index.d.mts
CHANGED
|
@@ -76,7 +76,7 @@ import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, Pagi
|
|
|
76
76
|
import { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } from "./ui/popover.mjs";
|
|
77
77
|
import { Progress } from "./ui/progress.mjs";
|
|
78
78
|
import { RadioGroup, RadioGroupItem } from "./ui/radio-group.mjs";
|
|
79
|
-
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "./resizable-
|
|
79
|
+
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "./resizable-CNIYTd7k.mjs";
|
|
80
80
|
import { ScrollArea, ScrollBar } from "./ui/scroll-area.mjs";
|
|
81
81
|
import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue } from "./ui/select.mjs";
|
|
82
82
|
import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from "./ui/sheet.mjs";
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Button as e}from"./ui/button.mjs";import{Paragraph as t,paragraphVariants as n}from"./typography/paragraph.mjs";import{Card as r,CardAction as i,CardContent as a,CardDescription as o,CardFooter as s,CardHeader as c,CardTitle as l}from"./ui/card.mjs";import{Skeleton as u}from"./ui/skeleton.mjs";import{Image as d}from"./ui/image.mjs";import{GridProductCard as f}from"./cards/grid-product-card.mjs";import{ProductCard as p}from"./cards/product-card.mjs";import{SimpleCard as m}from"./cards/simple-card.mjs";import{Flex as h}from"./layouts/flex.mjs";import{CountryDisplay as g}from"./data-display/country.mjs";import{DataList as _,DataListItem as v}from"./data-display/data-list.mjs";import{t as y}from"./date-Nsz0Pewe.mjs";import{Badge as b,badgeVariants as x}from"./ui/badge.mjs";import{Tooltip as S,TooltipContent as C,TooltipProvider as w,TooltipTrigger as T}from"./ui/tooltip.mjs";import{DateTooltip as E}from"./data-display/date-tooltip.mjs";import{EmptyDisplay as D}from"./data-display/empty.mjs";import{NameDisplay as O}from"./data-display/name.mjs";import{PhoneNumberDisplay as k}from"./data-display/phone-number.mjs";import{RoleBadge as A}from"./data-display/role-badge.mjs";import{Statistic as j}from"./data-display/statistic.mjs";import{Avatar as M,AvatarFallback as N,AvatarImage as P}from"./ui/avatar.mjs";import{UserDataDisplay as F}from"./data-display/user.mjs";import{AlertDialog as I,AlertDialogAction as L,AlertDialogCancel as R,AlertDialogContent as z,AlertDialogDescription as B,AlertDialogFooter as V,AlertDialogHeader as H,AlertDialogOverlay as U,AlertDialogPortal as W,AlertDialogTitle as G,AlertDialogTrigger as K}from"./ui/alert-dialog.mjs";import{ConfirmDialog as q}from"./dialogs/confirm-dialog.mjs";import{Title as J}from"./typography/title.mjs";import{Separator as Y}from"./ui/separator.mjs";import{Sheet as X,SheetClose as Z,SheetContent as Q,SheetDescription as $,SheetFooter as ee,SheetHeader as te,SheetTitle as ne,SheetTrigger as re}from"./ui/sheet.mjs";import{DetailDialog as ie}from"./dialogs/detail-dialog/index.mjs";import{ErrorDialog as ae}from"./dialogs/error-dialog.mjs";import{Dialog as oe,DialogClose as se,DialogContent as ce,DialogDescription as le,DialogFooter as ue,DialogHeader as de,DialogOverlay as fe,DialogPortal as pe,DialogTitle as me,DialogTrigger as he}from"./ui/dialog.mjs";import{LoadingDialog as ge}from"./dialogs/loading-dialog.mjs";import{Description as _e,DescriptionBadge as ve,DescriptionBoolean as ye,DescriptionCopy as be,DescriptionDate as xe,DescriptionEmpty as Se,DescriptionHeader as Ce,DescriptionImages as we,DescriptionItem as Te,DescriptionLink as Ee,DescriptionLongText as De,DescriptionName as Oe,DescriptionNumberPhone as ke,DescriptionSection as Ae,DescriptionStatistic as je,DescriptionStatus as Me,DescriptionTagList as Ne,DescriptionUser as Pe}from"./features/descriptions/index.mjs";import{Command as Fe,CommandDialog as Ie,CommandEmpty as Le,CommandGroup as Re,CommandInput as ze,CommandItem as Be,CommandList as Ve,CommandSeparator as He,CommandShortcut as Ue}from"./ui/command.mjs";import{t as We}from"./search-modal-Cdmi2iyV.mjs";import{A as Ge,B as Ke,C as qe,D as Je,E as Ye,F as Xe,H as Ze,I as Qe,L as $e,M as et,N as tt,O as nt,P as rt,R as it,S as at,T as ot,U as st,V as ct,W as lt,_ as ut,a as dt,b as ft,c as pt,d as mt,f as ht,g as gt,h as _t,i as vt,j as yt,k as bt,l as xt,m as St,n as Ct,o as wt,p as Tt,r as Et,s as Dt,t as Ot,u as kt,v as At,w as jt,x as Mt,y as Nt,z as Pt}from"./tables-Cylalxey.mjs";import{DropdownMenu as Ft,DropdownMenuCheckboxItem as It,DropdownMenuContent as Lt,DropdownMenuGroup as Rt,DropdownMenuItem as zt,DropdownMenuLabel as Bt,DropdownMenuPortal as Vt,DropdownMenuRadioGroup as Ht,DropdownMenuRadioItem as Ut,DropdownMenuSeparator as Wt,DropdownMenuShortcut as Gt,DropdownMenuSub as Kt,DropdownMenuSubContent as qt,DropdownMenuSubTrigger as Jt,DropdownMenuTrigger as Yt}from"./ui/dropdown-menu.mjs";import{Progress as Xt}from"./ui/progress.mjs";import{Switch as Zt}from"./ui/switch.mjs";import{Checkbox as Qt}from"./ui/checkbox.mjs";import{Spinner as $t}from"./ui/spinner.mjs";import{ResizableHandle as en,ResizablePanel as tn,ResizablePanelGroup as nn}from"./ui/resizable.mjs";import{Input as rn}from"./ui/input.mjs";import{Label as an}from"./ui/label.mjs";import{Popover as on,PopoverAnchor as sn,PopoverClose as cn,PopoverContent as ln,PopoverTrigger as un}from"./ui/popover.mjs";import{Select as dn,SelectContent as fn,SelectGroup as pn,SelectItem as mn,SelectLabel as hn,SelectSeparator as gn,SelectTrigger as _n,SelectValue as vn}from"./ui/select.mjs";import{A as yn,B as bn,C as xn,D as Sn,E as Cn,F as wn,G as Tn,H as En,I as Dn,K as On,L as kn,M as An,N as jn,O as Mn,P as Nn,R as Pn,S as Fn,T as In,U as Ln,V as Rn,W as zn,_ as Bn,a as Vn,b as Hn,c as Un,d as Wn,f as Gn,g as Kn,h as qn,i as Jn,j as Yn,k as Xn,l as Zn,m as Qn,n as $n,o as er,p as tr,r as nr,s as rr,t as ir,u as ar,v as or,w as sr,x as cr,y as lr,z as ur}from"./tanstack-form-DTCgWGCA.mjs";import{Drawer as dr,DrawerClose as fr,DrawerContent as pr,DrawerDescription as mr,DrawerFooter as hr,DrawerHeader as gr,DrawerOverlay as _r,DrawerPortal as vr,DrawerTitle as yr,DrawerTrigger as br}from"./ui/drawer.mjs";import{Calendar as xr,CalendarDayButton as Sr}from"./ui/calendar.mjs";import{RadioGroup as Cr,RadioGroupItem as wr}from"./ui/radio-group.mjs";import{Textarea as Tr}from"./ui/textarea.mjs";import{n as Er,t as Dr}from"./text-editor-BQtIXOpM.mjs";import{t as Or}from"./cms-layout-BeU_CkJl.mjs";import{t as kr}from"./payment-layout-Dsz6wYT1.mjs";import{Grid as Ar}from"./layouts/grid.mjs";import{FeatureDeveloping as jr}from"./pages/FeatureDeveloping.mjs";import{FeatureFixing as Mr}from"./pages/FeatureFixing.mjs";import{NotAuthorized as Nr}from"./pages/NotAuthorized.mjs";import{NotFound as Pr}from"./pages/NotFound.mjs";import{n as Fr,r as Ir,t as Lr}from"./alert-OD1KJTEV.mjs";import{LoginPage as Rr}from"./pages/LoginPage.mjs";import{RegisterPage as zr}from"./pages/RegisterPage.mjs";import{InputOTP as Br,InputOTPGroup as Vr,InputOTPSeparator as Hr,InputOTPSlot as Ur}from"./ui/input-otp.mjs";import{VerifyEmailPage as Wr}from"./pages/VerifyEmailPage.mjs";import{Google as Gr}from"./systems/google.mjs";import{AddNewBtn as Kr}from"./ui/buttons/add-new.mjs";import{EditBtn as qr}from"./ui/buttons/edit.mjs";import{RefreshBtn as Jr}from"./ui/buttons/refresh.mjs";import{TrashBtn as Yr}from"./ui/buttons/trash.mjs";import{UploadImageBtn as Xr}from"./ui/buttons/upload-image.mjs";import{SearchInput as Zr}from"./ui/inputs/search-input.mjs";import{AspectRatio as Qr}from"./ui/aspect-ratio.mjs";import{Breadcrumb as $r,BreadcrumbEllipsis as ei,BreadcrumbItem as ti,BreadcrumbLink as ni,BreadcrumbList as ri,BreadcrumbPage as ii,BreadcrumbSeparator as ai}from"./ui/breadcrumb.mjs";import{ButtonGroup as oi,ButtonGroupSeparator as si,ButtonGroupText as ci,buttonGroupVariants as li}from"./ui/button-group.mjs";import{Carousel as ui,CarouselContent as di,CarouselItem as fi,CarouselNext as pi,CarouselPrevious as mi}from"./ui/carousel.mjs";import{Collapsible as hi,CollapsibleContent as gi,CollapsibleTrigger as _i}from"./ui/collapsible.mjs";import{ContextMenu as vi,ContextMenuCheckboxItem as yi,ContextMenuContent as bi,ContextMenuGroup as xi,ContextMenuItem as Si,ContextMenuLabel as Ci,ContextMenuPortal as wi,ContextMenuRadioGroup as Ti,ContextMenuRadioItem as Ei,ContextMenuSeparator as Di,ContextMenuShortcut as Oi,ContextMenuSub as ki,ContextMenuSubContent as Ai,ContextMenuSubTrigger as ji,ContextMenuTrigger as Mi}from"./ui/context-menu.mjs";import{Empty as Ni,EmptyContent as Pi,EmptyDescription as Fi,EmptyHeader as Ii,EmptyMedia as Li,EmptyTitle as Ri}from"./ui/empty.mjs";import{FileUploader as zi}from"./ui/file-uploader.mjs";import{Form as Bi,FormControl as Vi,FormDescription as Hi,FormField as Ui,FormItem as Wi,FormLabel as Gi,FormMessage as Ki,useFormField as qi}from"./ui/form.mjs";import{HoverCard as Ji,HoverCardContent as Yi,HoverCardTrigger as Xi}from"./ui/hover-card.mjs";import{Item as Zi,ItemActions as Qi,ItemContent as $i,ItemDescription as ea,ItemFooter as ta,ItemGroup as na,ItemHeader as ra,ItemMedia as ia,ItemSeparator as aa,ItemTitle as oa}from"./ui/item.mjs";import{Menubar as sa,MenubarCheckboxItem as ca,MenubarContent as la,MenubarGroup as ua,MenubarItem as da,MenubarLabel as fa,MenubarMenu as pa,MenubarPortal as ma,MenubarRadioGroup as ha,MenubarRadioItem as ga,MenubarSeparator as _a,MenubarShortcut as va,MenubarSub as ya,MenubarSubContent as ba,MenubarSubTrigger as xa,MenubarTrigger as Sa}from"./ui/menubar.mjs";import{MultipleSelector as Ca,useDebounce as wa}from"./ui/multi-select.mjs";import{NavigationMenu as Ta,NavigationMenuContent as Ea,NavigationMenuIndicator as Da,NavigationMenuItem as Oa,NavigationMenuLink as ka,NavigationMenuList as Aa,NavigationMenuTrigger as ja,NavigationMenuViewport as Ma,navigationMenuTriggerStyle as Na}from"./ui/navigation-menu.mjs";import{Pagination as Pa,PaginationContent as Fa,PaginationEllipsis as Ia,PaginationItem as La,PaginationLink as Ra,PaginationNext as za,PaginationPrevious as Ba}from"./ui/pagination.mjs";import{ScrollArea as Va,ScrollBar as Ha}from"./ui/scroll-area.mjs";import{Slider as Ua}from"./ui/slider.mjs";import{Toaster as Wa,toast as Ga}from"./ui/sonner.mjs";import{Table as Ka,TableBody as qa,TableCaption as Ja,TableCell as Ya,TableFooter as Xa,TableHead as Za,TableHeader as Qa,TableRow as $a}from"./ui/table.mjs";import{Tabs as eo,TabsContent as to,TabsList as no,TabsTrigger as ro}from"./ui/tabs.mjs";import{Toggle as io,toggleVariants as ao}from"./ui/toggle.mjs";import{ToggleGroup as oo,ToggleGroupItem as so}from"./ui/toggle-group.mjs";export{Kr as AddNewBtn,Lr as Alert,Fr as AlertDescription,I as AlertDialog,L as AlertDialogAction,R as AlertDialogCancel,z as AlertDialogContent,B as AlertDialogDescription,V as AlertDialogFooter,H as AlertDialogHeader,U as AlertDialogOverlay,W as AlertDialogPortal,G as AlertDialogTitle,K as AlertDialogTrigger,Ir as AlertTitle,zn as ArrayCol,Tn as ArrayHeaderRow,Qr as AspectRatio,M as Avatar,N as AvatarFallback,P as AvatarImage,b as Badge,$r as Breadcrumb,ei as BreadcrumbEllipsis,ti as BreadcrumbItem,ni as BreadcrumbLink,ri as BreadcrumbList,ii as BreadcrumbPage,ai as BreadcrumbSeparator,e as Button,oi as ButtonGroup,si as ButtonGroupSeparator,ci as ButtonGroupText,Or as CMSLayout,xr as Calendar,Sr as CalendarDayButton,r as Card,i as CardAction,a as CardContent,o as CardDescription,s as CardFooter,c as CardHeader,l as CardTitle,ui as Carousel,di as CarouselContent,fi as CarouselItem,pi as CarouselNext,mi as CarouselPrevious,Qt as Checkbox,Cn as CheckboxField,hi as Collapsible,gi as CollapsibleContent,_i as CollapsibleTrigger,In as ComboboxField,Fe as Command,Ie as CommandDialog,Le as CommandEmpty,Re as CommandGroup,ze as CommandInput,Be as CommandItem,Ve as CommandList,He as CommandSeparator,Ue as CommandShortcut,q as ConfirmDialog,vi as ContextMenu,yi as ContextMenuCheckboxItem,bi as ContextMenuContent,xi as ContextMenuGroup,Si as ContextMenuItem,Ci as ContextMenuLabel,wi as ContextMenuPortal,Ti as ContextMenuRadioGroup,Ei as ContextMenuRadioItem,Di as ContextMenuSeparator,Oi as ContextMenuShortcut,ki as ContextMenuSub,Ai as ContextMenuSubContent,ji as ContextMenuSubTrigger,Mi as ContextMenuTrigger,g as CountryDisplay,_ as DataList,v as DataListItem,y as DateDisplay,sr as DateField,E as DateTooltip,_e as Description,ve as DescriptionBadge,ye as DescriptionBoolean,be as DescriptionCopy,xe as DescriptionDate,Se as DescriptionEmpty,Ce as DescriptionHeader,we as DescriptionImages,Te as DescriptionItem,Ee as DescriptionLink,De as DescriptionLongText,Oe as DescriptionName,ke as DescriptionNumberPhone,Ae as DescriptionSection,je as DescriptionStatistic,Me as DescriptionStatus,Ne as DescriptionTagList,Pe as DescriptionUser,ie as DetailDialog,oe as Dialog,se as DialogClose,ce as DialogContent,le as DialogDescription,ue as DialogFooter,de as DialogHeader,fe as DialogOverlay,pe as DialogPortal,me as DialogTitle,he as DialogTrigger,dr as Drawer,fr as DrawerClose,pr as DrawerContent,mr as DrawerDescription,hr as DrawerFooter,gr as DrawerHeader,_r as DrawerOverlay,vr as DrawerPortal,yr as DrawerTitle,br as DrawerTrigger,Ft as DropdownMenu,It as DropdownMenuCheckboxItem,Lt as DropdownMenuContent,Rt as DropdownMenuGroup,zt as DropdownMenuItem,Bt as DropdownMenuLabel,Vt as DropdownMenuPortal,Ht as DropdownMenuRadioGroup,Ut as DropdownMenuRadioItem,Wt as DropdownMenuSeparator,Gt as DropdownMenuShortcut,Kt as DropdownMenuSub,qt as DropdownMenuSubContent,Jt as DropdownMenuSubTrigger,Yt as DropdownMenuTrigger,qr as EditBtn,xn as EmailField,Ni as Empty,Pi as EmptyContent,Fi as EmptyDescription,D as EmptyDisplay,Ii as EmptyHeader,Li as EmptyMedia,Ri as EmptyTitle,ae as ErrorDialog,jr as FeatureDeveloping,Mr as FeatureFixing,kn as Field,Pn as FieldContent,ur as FieldContentMain,bn as FieldError,Rn as FieldGroup,En as FieldLabel,Ln as FieldSeparator,zi as FileUploader,h as Flex,Bi as Form,Vi as FormControl,Hi as FormDescription,Ui as FormField,Wi as FormItem,Gi as FormLabel,Ki as FormMessage,Gr as Google,Ar as Grid,f as GridProductCard,Ji as HoverCard,Yi as HoverCardContent,Xi as HoverCardTrigger,d as Image,rn as Input,Br as InputOTP,Vr as InputOTPGroup,Hr as InputOTPSeparator,Ur as InputOTPSlot,Zi as Item,Qi as ItemActions,$i as ItemContent,ea as ItemDescription,ta as ItemFooter,na as ItemGroup,ra as ItemHeader,ia as ItemMedia,aa as ItemSeparator,oa as ItemTitle,an as Label,ge as LoadingDialog,Rr as LoginPage,sa as Menubar,ca as MenubarCheckboxItem,la as MenubarContent,ua as MenubarGroup,da as MenubarItem,fa as MenubarLabel,pa as MenubarMenu,ma as MenubarPortal,ha as MenubarRadioGroup,ga as MenubarRadioItem,_a as MenubarSeparator,va as MenubarShortcut,ya as MenubarSub,ba as MenubarSubContent,xa as MenubarSubTrigger,Sa as MenubarTrigger,Ca as MultipleSelector,O as NameDisplay,Ta as NavigationMenu,Ea as NavigationMenuContent,Da as NavigationMenuIndicator,Oa as NavigationMenuItem,ka as NavigationMenuLink,Aa as NavigationMenuList,ja as NavigationMenuTrigger,Ma as NavigationMenuViewport,Nr as NotAuthorized,Pr as NotFound,Fn as NumberField,Pa as Pagination,Fa as PaginationContent,Ia as PaginationEllipsis,La as PaginationItem,Ra as PaginationLink,za as PaginationNext,Ba as PaginationPrevious,t as Paragraph,cr as PasswordField,kr as PaymentLayout,k as PhoneNumberDisplay,on as Popover,sn as PopoverAnchor,cn as PopoverClose,ln as PopoverContent,un as PopoverTrigger,p as ProductCard,Xt as Progress,Cr as RadioGroup,Hn as RadioGroupField,wr as RadioGroupItem,Jr as RefreshBtn,zr as RegisterPage,en as ResizableHandle,tn as ResizablePanel,nn as ResizablePanelGroup,A as RoleBadge,Va as ScrollArea,Ha as ScrollBar,Zr as SearchInput,We as SearchModal,dn as Select,fn as SelectContent,lr as SelectField,pn as SelectGroup,mn as SelectItem,hn as SelectLabel,gn as SelectSeparator,_n as SelectTrigger,vn as SelectValue,Y as Separator,X as Sheet,Z as SheetClose,Q as SheetContent,$ as SheetDescription,ee as SheetFooter,te as SheetHeader,ne as SheetTitle,re as SheetTrigger,On as SimpleArrayField,Dn as SimpleBooleanField,m as SimpleCard,wn as SimpleComboboxField,Nn as SimpleDateField,An as SimpleEmailField,Yn as SimpleNumberField,yn as SimplePasswordField,jn as SimpleRadioGroupField,Xn as SimpleSelectField,Sn as SimpleTextField,Mn as SimpleTextareaField,u as Skeleton,Ua as Slider,$t as Spinner,j as Statistic,Zt as Switch,or as SwitchField,Ka as Table,qa as TableBody,Ja as TableCaption,Ya as TableCell,Xa as TableFooter,Za as TableHead,Qa as TableHeader,$a as TableRow,eo as Tabs,to as TabsContent,no as TabsList,ro as TabsTrigger,Qn as TanStackActionSubmit,tr as TanStackActionsForm,Gn as TanStackCardForm,Wn as TanStackContainerForm,ar as TanStackDialogForm,Zn as TanStackFieldGroup,Un as TanStackPopoverForm,rr as TanStackSectionForm,er as TanStackTitleField,Dr as TextEditor,qn as TextEditorField,Er as TextEditorToolbar,Bn as TextField,Tr as Textarea,Kn as TextareaField,J as Title,Wa as Toaster,io as Toggle,oo as ToggleGroup,so as ToggleGroupItem,S as Tooltip,C as TooltipContent,w as TooltipProvider,T as TooltipTrigger,Yr as TrashBtn,Dt as UITableAnalysisPanel,lt as UITableAvatarNameDisplay,st as UITableBadgeDisplay,ot as UITableBody,Ze as UITableBooleanDisplay,jt as UITableCell,qe as UITableCellActions,at as UITableCellSelect,pt as UITableContainer,ct as UITableCurrencyDisplay,Ke as UITableDateDisplay,Pt as UITableDescriptionDisplay,it as UITableEditButton,$e as UITableEmailDisplay,Mt as UITableEmptyDisplay,wt as UITableFilter,ft as UITableFooter,Nt as UITableFooterRow,At as UITableHead,gt as UITableHeadCell,ut as UITableHeadCellOption,_t as UITableHeadCellSelect,St as UITableHeadRow,Tt as UITableInnerTable,ht as UITableInnerWrapper,Qe as UITableListDisplay,mt as UITableLoadMore,Xe as UITableMoreButton,rt as UITableNameDisplay,tt as UITablePermalink,et as UITablePhoneNumberDisplay,yt as UITableProgressDisplay,dt as UITableProvider,Ge as UITableRemoveButton,kt as UITableRow,bt as UITableStatisticDisplay,nt as UITableStatusDisplay,vt as UITableSummaryBar,Je as UITableToggleButton,Ot as UITableTooltip,Ct as UITableTooltipActions,Et as UITableTooltipFilter,Ye as UITableUserDataDisplay,xt as UITableWrapper,Xr as UploadImageBtn,F as UserDataDisplay,Wr as VerifyEmailPage,x as badgeVariants,li as buttonGroupVariants,Na as navigationMenuTriggerStyle,n as paragraphVariants,Ga as toast,ao as toggleVariants,wa as useDebounce,qi as useFormField,ir as useTanStackFieldContext,$n as useTanStackForm,nr as useTanStackFormContext,Jn as withTanStackFieldGroup,Vn as withTanStackForm};
|
|
1
|
+
import{Button as e}from"./ui/button.mjs";import{Paragraph as t,paragraphVariants as n}from"./typography/paragraph.mjs";import{Card as r,CardAction as i,CardContent as a,CardDescription as o,CardFooter as s,CardHeader as c,CardTitle as l}from"./ui/card.mjs";import{Skeleton as u}from"./ui/skeleton.mjs";import{Image as d}from"./ui/image.mjs";import{GridProductCard as f}from"./cards/grid-product-card.mjs";import{ProductCard as p}from"./cards/product-card.mjs";import{SimpleCard as m}from"./cards/simple-card.mjs";import{Flex as h}from"./layouts/flex.mjs";import{CountryDisplay as g}from"./data-display/country.mjs";import{DataList as _,DataListItem as v}from"./data-display/data-list.mjs";import{t as y}from"./date-Nsz0Pewe.mjs";import{Badge as b,badgeVariants as x}from"./ui/badge.mjs";import{Tooltip as S,TooltipContent as C,TooltipProvider as w,TooltipTrigger as T}from"./ui/tooltip.mjs";import{DateTooltip as E}from"./data-display/date-tooltip.mjs";import{EmptyDisplay as D}from"./data-display/empty.mjs";import{NameDisplay as O}from"./data-display/name.mjs";import{PhoneNumberDisplay as k}from"./data-display/phone-number.mjs";import{RoleBadge as A}from"./data-display/role-badge.mjs";import{Statistic as j}from"./data-display/statistic.mjs";import{Avatar as M,AvatarFallback as N,AvatarImage as P}from"./ui/avatar.mjs";import{UserDataDisplay as F}from"./data-display/user.mjs";import{AlertDialog as I,AlertDialogAction as L,AlertDialogCancel as R,AlertDialogContent as z,AlertDialogDescription as B,AlertDialogFooter as V,AlertDialogHeader as H,AlertDialogOverlay as U,AlertDialogPortal as W,AlertDialogTitle as G,AlertDialogTrigger as K}from"./ui/alert-dialog.mjs";import{ConfirmDialog as q}from"./dialogs/confirm-dialog.mjs";import{Title as J}from"./typography/title.mjs";import{Separator as Y}from"./ui/separator.mjs";import{Sheet as X,SheetClose as Z,SheetContent as Q,SheetDescription as $,SheetFooter as ee,SheetHeader as te,SheetTitle as ne,SheetTrigger as re}from"./ui/sheet.mjs";import{DetailDialog as ie}from"./dialogs/detail-dialog/index.mjs";import{ErrorDialog as ae}from"./dialogs/error-dialog.mjs";import{Dialog as oe,DialogClose as se,DialogContent as ce,DialogDescription as le,DialogFooter as ue,DialogHeader as de,DialogOverlay as fe,DialogPortal as pe,DialogTitle as me,DialogTrigger as he}from"./ui/dialog.mjs";import{LoadingDialog as ge}from"./dialogs/loading-dialog.mjs";import{Description as _e,DescriptionBadge as ve,DescriptionBoolean as ye,DescriptionCopy as be,DescriptionDate as xe,DescriptionEmpty as Se,DescriptionHeader as Ce,DescriptionImages as we,DescriptionItem as Te,DescriptionLink as Ee,DescriptionLongText as De,DescriptionName as Oe,DescriptionNumberPhone as ke,DescriptionSection as Ae,DescriptionStatistic as je,DescriptionStatus as Me,DescriptionTagList as Ne,DescriptionUser as Pe}from"./features/descriptions/index.mjs";import{Command as Fe,CommandDialog as Ie,CommandEmpty as Le,CommandGroup as Re,CommandInput as ze,CommandItem as Be,CommandList as Ve,CommandSeparator as He,CommandShortcut as Ue}from"./ui/command.mjs";import{t as We}from"./search-modal-Cdmi2iyV.mjs";import{A as Ge,B as Ke,C as qe,D as Je,E as Ye,F as Xe,H as Ze,I as Qe,L as $e,M as et,N as tt,O as nt,P as rt,R as it,S as at,T as ot,U as st,V as ct,W as lt,_ as ut,a as dt,b as ft,c as pt,d as mt,f as ht,g as gt,h as _t,i as vt,j as yt,k as bt,l as xt,m as St,n as Ct,o as wt,p as Tt,r as Et,s as Dt,t as Ot,u as kt,v as At,w as jt,x as Mt,y as Nt,z as Pt}from"./tables-Cylalxey.mjs";import{DropdownMenu as Ft,DropdownMenuCheckboxItem as It,DropdownMenuContent as Lt,DropdownMenuGroup as Rt,DropdownMenuItem as zt,DropdownMenuLabel as Bt,DropdownMenuPortal as Vt,DropdownMenuRadioGroup as Ht,DropdownMenuRadioItem as Ut,DropdownMenuSeparator as Wt,DropdownMenuShortcut as Gt,DropdownMenuSub as Kt,DropdownMenuSubContent as qt,DropdownMenuSubTrigger as Jt,DropdownMenuTrigger as Yt}from"./ui/dropdown-menu.mjs";import{Progress as Xt}from"./ui/progress.mjs";import{Switch as Zt}from"./ui/switch.mjs";import{Checkbox as Qt}from"./ui/checkbox.mjs";import{Spinner as $t}from"./ui/spinner.mjs";import{ResizableHandle as en,ResizablePanel as tn,ResizablePanelGroup as nn}from"./ui/resizable.mjs";import{Input as rn}from"./ui/input.mjs";import{Label as an}from"./ui/label.mjs";import{Popover as on,PopoverAnchor as sn,PopoverClose as cn,PopoverContent as ln,PopoverTrigger as un}from"./ui/popover.mjs";import{Select as dn,SelectContent as fn,SelectGroup as pn,SelectItem as mn,SelectLabel as hn,SelectSeparator as gn,SelectTrigger as _n,SelectValue as vn}from"./ui/select.mjs";import{A as yn,B as bn,C as xn,D as Sn,E as Cn,F as wn,G as Tn,H as En,I as Dn,K as On,L as kn,M as An,N as jn,O as Mn,P as Nn,R as Pn,S as Fn,T as In,U as Ln,V as Rn,W as zn,_ as Bn,a as Vn,b as Hn,c as Un,d as Wn,f as Gn,g as Kn,h as qn,i as Jn,j as Yn,k as Xn,l as Zn,m as Qn,n as $n,o as er,p as tr,r as nr,s as rr,t as ir,u as ar,v as or,w as sr,x as cr,y as lr,z as ur}from"./tanstack-form-DTCgWGCA.mjs";import{Drawer as dr,DrawerClose as fr,DrawerContent as pr,DrawerDescription as mr,DrawerFooter as hr,DrawerHeader as gr,DrawerOverlay as _r,DrawerPortal as vr,DrawerTitle as yr,DrawerTrigger as br}from"./ui/drawer.mjs";import{Calendar as xr,CalendarDayButton as Sr}from"./ui/calendar.mjs";import{RadioGroup as Cr,RadioGroupItem as wr}from"./ui/radio-group.mjs";import{Textarea as Tr}from"./ui/textarea.mjs";import{n as Er,t as Dr}from"./text-editor-BQtIXOpM.mjs";import{t as Or}from"./cms-layout-CuF5ahpj.mjs";import{t as kr}from"./payment-layout-Dsz6wYT1.mjs";import{Grid as Ar}from"./layouts/grid.mjs";import{FeatureDeveloping as jr}from"./pages/FeatureDeveloping.mjs";import{FeatureFixing as Mr}from"./pages/FeatureFixing.mjs";import{NotAuthorized as Nr}from"./pages/NotAuthorized.mjs";import{NotFound as Pr}from"./pages/NotFound.mjs";import{n as Fr,r as Ir,t as Lr}from"./alert-OD1KJTEV.mjs";import{LoginPage as Rr}from"./pages/LoginPage.mjs";import{RegisterPage as zr}from"./pages/RegisterPage.mjs";import{InputOTP as Br,InputOTPGroup as Vr,InputOTPSeparator as Hr,InputOTPSlot as Ur}from"./ui/input-otp.mjs";import{VerifyEmailPage as Wr}from"./pages/VerifyEmailPage.mjs";import{Google as Gr}from"./systems/google.mjs";import{AddNewBtn as Kr}from"./ui/buttons/add-new.mjs";import{EditBtn as qr}from"./ui/buttons/edit.mjs";import{RefreshBtn as Jr}from"./ui/buttons/refresh.mjs";import{TrashBtn as Yr}from"./ui/buttons/trash.mjs";import{UploadImageBtn as Xr}from"./ui/buttons/upload-image.mjs";import{SearchInput as Zr}from"./ui/inputs/search-input.mjs";import{AspectRatio as Qr}from"./ui/aspect-ratio.mjs";import{Breadcrumb as $r,BreadcrumbEllipsis as ei,BreadcrumbItem as ti,BreadcrumbLink as ni,BreadcrumbList as ri,BreadcrumbPage as ii,BreadcrumbSeparator as ai}from"./ui/breadcrumb.mjs";import{ButtonGroup as oi,ButtonGroupSeparator as si,ButtonGroupText as ci,buttonGroupVariants as li}from"./ui/button-group.mjs";import{Carousel as ui,CarouselContent as di,CarouselItem as fi,CarouselNext as pi,CarouselPrevious as mi}from"./ui/carousel.mjs";import{Collapsible as hi,CollapsibleContent as gi,CollapsibleTrigger as _i}from"./ui/collapsible.mjs";import{ContextMenu as vi,ContextMenuCheckboxItem as yi,ContextMenuContent as bi,ContextMenuGroup as xi,ContextMenuItem as Si,ContextMenuLabel as Ci,ContextMenuPortal as wi,ContextMenuRadioGroup as Ti,ContextMenuRadioItem as Ei,ContextMenuSeparator as Di,ContextMenuShortcut as Oi,ContextMenuSub as ki,ContextMenuSubContent as Ai,ContextMenuSubTrigger as ji,ContextMenuTrigger as Mi}from"./ui/context-menu.mjs";import{Empty as Ni,EmptyContent as Pi,EmptyDescription as Fi,EmptyHeader as Ii,EmptyMedia as Li,EmptyTitle as Ri}from"./ui/empty.mjs";import{FileUploader as zi}from"./ui/file-uploader.mjs";import{Form as Bi,FormControl as Vi,FormDescription as Hi,FormField as Ui,FormItem as Wi,FormLabel as Gi,FormMessage as Ki,useFormField as qi}from"./ui/form.mjs";import{HoverCard as Ji,HoverCardContent as Yi,HoverCardTrigger as Xi}from"./ui/hover-card.mjs";import{Item as Zi,ItemActions as Qi,ItemContent as $i,ItemDescription as ea,ItemFooter as ta,ItemGroup as na,ItemHeader as ra,ItemMedia as ia,ItemSeparator as aa,ItemTitle as oa}from"./ui/item.mjs";import{Menubar as sa,MenubarCheckboxItem as ca,MenubarContent as la,MenubarGroup as ua,MenubarItem as da,MenubarLabel as fa,MenubarMenu as pa,MenubarPortal as ma,MenubarRadioGroup as ha,MenubarRadioItem as ga,MenubarSeparator as _a,MenubarShortcut as va,MenubarSub as ya,MenubarSubContent as ba,MenubarSubTrigger as xa,MenubarTrigger as Sa}from"./ui/menubar.mjs";import{MultipleSelector as Ca,useDebounce as wa}from"./ui/multi-select.mjs";import{NavigationMenu as Ta,NavigationMenuContent as Ea,NavigationMenuIndicator as Da,NavigationMenuItem as Oa,NavigationMenuLink as ka,NavigationMenuList as Aa,NavigationMenuTrigger as ja,NavigationMenuViewport as Ma,navigationMenuTriggerStyle as Na}from"./ui/navigation-menu.mjs";import{Pagination as Pa,PaginationContent as Fa,PaginationEllipsis as Ia,PaginationItem as La,PaginationLink as Ra,PaginationNext as za,PaginationPrevious as Ba}from"./ui/pagination.mjs";import{ScrollArea as Va,ScrollBar as Ha}from"./ui/scroll-area.mjs";import{Slider as Ua}from"./ui/slider.mjs";import{Toaster as Wa,toast as Ga}from"./ui/sonner.mjs";import{Table as Ka,TableBody as qa,TableCaption as Ja,TableCell as Ya,TableFooter as Xa,TableHead as Za,TableHeader as Qa,TableRow as $a}from"./ui/table.mjs";import{Tabs as eo,TabsContent as to,TabsList as no,TabsTrigger as ro}from"./ui/tabs.mjs";import{Toggle as io,toggleVariants as ao}from"./ui/toggle.mjs";import{ToggleGroup as oo,ToggleGroupItem as so}from"./ui/toggle-group.mjs";export{Kr as AddNewBtn,Lr as Alert,Fr as AlertDescription,I as AlertDialog,L as AlertDialogAction,R as AlertDialogCancel,z as AlertDialogContent,B as AlertDialogDescription,V as AlertDialogFooter,H as AlertDialogHeader,U as AlertDialogOverlay,W as AlertDialogPortal,G as AlertDialogTitle,K as AlertDialogTrigger,Ir as AlertTitle,zn as ArrayCol,Tn as ArrayHeaderRow,Qr as AspectRatio,M as Avatar,N as AvatarFallback,P as AvatarImage,b as Badge,$r as Breadcrumb,ei as BreadcrumbEllipsis,ti as BreadcrumbItem,ni as BreadcrumbLink,ri as BreadcrumbList,ii as BreadcrumbPage,ai as BreadcrumbSeparator,e as Button,oi as ButtonGroup,si as ButtonGroupSeparator,ci as ButtonGroupText,Or as CMSLayout,xr as Calendar,Sr as CalendarDayButton,r as Card,i as CardAction,a as CardContent,o as CardDescription,s as CardFooter,c as CardHeader,l as CardTitle,ui as Carousel,di as CarouselContent,fi as CarouselItem,pi as CarouselNext,mi as CarouselPrevious,Qt as Checkbox,Cn as CheckboxField,hi as Collapsible,gi as CollapsibleContent,_i as CollapsibleTrigger,In as ComboboxField,Fe as Command,Ie as CommandDialog,Le as CommandEmpty,Re as CommandGroup,ze as CommandInput,Be as CommandItem,Ve as CommandList,He as CommandSeparator,Ue as CommandShortcut,q as ConfirmDialog,vi as ContextMenu,yi as ContextMenuCheckboxItem,bi as ContextMenuContent,xi as ContextMenuGroup,Si as ContextMenuItem,Ci as ContextMenuLabel,wi as ContextMenuPortal,Ti as ContextMenuRadioGroup,Ei as ContextMenuRadioItem,Di as ContextMenuSeparator,Oi as ContextMenuShortcut,ki as ContextMenuSub,Ai as ContextMenuSubContent,ji as ContextMenuSubTrigger,Mi as ContextMenuTrigger,g as CountryDisplay,_ as DataList,v as DataListItem,y as DateDisplay,sr as DateField,E as DateTooltip,_e as Description,ve as DescriptionBadge,ye as DescriptionBoolean,be as DescriptionCopy,xe as DescriptionDate,Se as DescriptionEmpty,Ce as DescriptionHeader,we as DescriptionImages,Te as DescriptionItem,Ee as DescriptionLink,De as DescriptionLongText,Oe as DescriptionName,ke as DescriptionNumberPhone,Ae as DescriptionSection,je as DescriptionStatistic,Me as DescriptionStatus,Ne as DescriptionTagList,Pe as DescriptionUser,ie as DetailDialog,oe as Dialog,se as DialogClose,ce as DialogContent,le as DialogDescription,ue as DialogFooter,de as DialogHeader,fe as DialogOverlay,pe as DialogPortal,me as DialogTitle,he as DialogTrigger,dr as Drawer,fr as DrawerClose,pr as DrawerContent,mr as DrawerDescription,hr as DrawerFooter,gr as DrawerHeader,_r as DrawerOverlay,vr as DrawerPortal,yr as DrawerTitle,br as DrawerTrigger,Ft as DropdownMenu,It as DropdownMenuCheckboxItem,Lt as DropdownMenuContent,Rt as DropdownMenuGroup,zt as DropdownMenuItem,Bt as DropdownMenuLabel,Vt as DropdownMenuPortal,Ht as DropdownMenuRadioGroup,Ut as DropdownMenuRadioItem,Wt as DropdownMenuSeparator,Gt as DropdownMenuShortcut,Kt as DropdownMenuSub,qt as DropdownMenuSubContent,Jt as DropdownMenuSubTrigger,Yt as DropdownMenuTrigger,qr as EditBtn,xn as EmailField,Ni as Empty,Pi as EmptyContent,Fi as EmptyDescription,D as EmptyDisplay,Ii as EmptyHeader,Li as EmptyMedia,Ri as EmptyTitle,ae as ErrorDialog,jr as FeatureDeveloping,Mr as FeatureFixing,kn as Field,Pn as FieldContent,ur as FieldContentMain,bn as FieldError,Rn as FieldGroup,En as FieldLabel,Ln as FieldSeparator,zi as FileUploader,h as Flex,Bi as Form,Vi as FormControl,Hi as FormDescription,Ui as FormField,Wi as FormItem,Gi as FormLabel,Ki as FormMessage,Gr as Google,Ar as Grid,f as GridProductCard,Ji as HoverCard,Yi as HoverCardContent,Xi as HoverCardTrigger,d as Image,rn as Input,Br as InputOTP,Vr as InputOTPGroup,Hr as InputOTPSeparator,Ur as InputOTPSlot,Zi as Item,Qi as ItemActions,$i as ItemContent,ea as ItemDescription,ta as ItemFooter,na as ItemGroup,ra as ItemHeader,ia as ItemMedia,aa as ItemSeparator,oa as ItemTitle,an as Label,ge as LoadingDialog,Rr as LoginPage,sa as Menubar,ca as MenubarCheckboxItem,la as MenubarContent,ua as MenubarGroup,da as MenubarItem,fa as MenubarLabel,pa as MenubarMenu,ma as MenubarPortal,ha as MenubarRadioGroup,ga as MenubarRadioItem,_a as MenubarSeparator,va as MenubarShortcut,ya as MenubarSub,ba as MenubarSubContent,xa as MenubarSubTrigger,Sa as MenubarTrigger,Ca as MultipleSelector,O as NameDisplay,Ta as NavigationMenu,Ea as NavigationMenuContent,Da as NavigationMenuIndicator,Oa as NavigationMenuItem,ka as NavigationMenuLink,Aa as NavigationMenuList,ja as NavigationMenuTrigger,Ma as NavigationMenuViewport,Nr as NotAuthorized,Pr as NotFound,Fn as NumberField,Pa as Pagination,Fa as PaginationContent,Ia as PaginationEllipsis,La as PaginationItem,Ra as PaginationLink,za as PaginationNext,Ba as PaginationPrevious,t as Paragraph,cr as PasswordField,kr as PaymentLayout,k as PhoneNumberDisplay,on as Popover,sn as PopoverAnchor,cn as PopoverClose,ln as PopoverContent,un as PopoverTrigger,p as ProductCard,Xt as Progress,Cr as RadioGroup,Hn as RadioGroupField,wr as RadioGroupItem,Jr as RefreshBtn,zr as RegisterPage,en as ResizableHandle,tn as ResizablePanel,nn as ResizablePanelGroup,A as RoleBadge,Va as ScrollArea,Ha as ScrollBar,Zr as SearchInput,We as SearchModal,dn as Select,fn as SelectContent,lr as SelectField,pn as SelectGroup,mn as SelectItem,hn as SelectLabel,gn as SelectSeparator,_n as SelectTrigger,vn as SelectValue,Y as Separator,X as Sheet,Z as SheetClose,Q as SheetContent,$ as SheetDescription,ee as SheetFooter,te as SheetHeader,ne as SheetTitle,re as SheetTrigger,On as SimpleArrayField,Dn as SimpleBooleanField,m as SimpleCard,wn as SimpleComboboxField,Nn as SimpleDateField,An as SimpleEmailField,Yn as SimpleNumberField,yn as SimplePasswordField,jn as SimpleRadioGroupField,Xn as SimpleSelectField,Sn as SimpleTextField,Mn as SimpleTextareaField,u as Skeleton,Ua as Slider,$t as Spinner,j as Statistic,Zt as Switch,or as SwitchField,Ka as Table,qa as TableBody,Ja as TableCaption,Ya as TableCell,Xa as TableFooter,Za as TableHead,Qa as TableHeader,$a as TableRow,eo as Tabs,to as TabsContent,no as TabsList,ro as TabsTrigger,Qn as TanStackActionSubmit,tr as TanStackActionsForm,Gn as TanStackCardForm,Wn as TanStackContainerForm,ar as TanStackDialogForm,Zn as TanStackFieldGroup,Un as TanStackPopoverForm,rr as TanStackSectionForm,er as TanStackTitleField,Dr as TextEditor,qn as TextEditorField,Er as TextEditorToolbar,Bn as TextField,Tr as Textarea,Kn as TextareaField,J as Title,Wa as Toaster,io as Toggle,oo as ToggleGroup,so as ToggleGroupItem,S as Tooltip,C as TooltipContent,w as TooltipProvider,T as TooltipTrigger,Yr as TrashBtn,Dt as UITableAnalysisPanel,lt as UITableAvatarNameDisplay,st as UITableBadgeDisplay,ot as UITableBody,Ze as UITableBooleanDisplay,jt as UITableCell,qe as UITableCellActions,at as UITableCellSelect,pt as UITableContainer,ct as UITableCurrencyDisplay,Ke as UITableDateDisplay,Pt as UITableDescriptionDisplay,it as UITableEditButton,$e as UITableEmailDisplay,Mt as UITableEmptyDisplay,wt as UITableFilter,ft as UITableFooter,Nt as UITableFooterRow,At as UITableHead,gt as UITableHeadCell,ut as UITableHeadCellOption,_t as UITableHeadCellSelect,St as UITableHeadRow,Tt as UITableInnerTable,ht as UITableInnerWrapper,Qe as UITableListDisplay,mt as UITableLoadMore,Xe as UITableMoreButton,rt as UITableNameDisplay,tt as UITablePermalink,et as UITablePhoneNumberDisplay,yt as UITableProgressDisplay,dt as UITableProvider,Ge as UITableRemoveButton,kt as UITableRow,bt as UITableStatisticDisplay,nt as UITableStatusDisplay,vt as UITableSummaryBar,Je as UITableToggleButton,Ot as UITableTooltip,Ct as UITableTooltipActions,Et as UITableTooltipFilter,Ye as UITableUserDataDisplay,xt as UITableWrapper,Xr as UploadImageBtn,F as UserDataDisplay,Wr as VerifyEmailPage,x as badgeVariants,li as buttonGroupVariants,Na as navigationMenuTriggerStyle,n as paragraphVariants,Ga as toast,ao as toggleVariants,wa as useDebounce,qi as useFormField,ir as useTanStackFieldContext,$n as useTanStackForm,nr as useTanStackFormContext,Jn as withTanStackFieldGroup,Vn as withTanStackForm};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../cms-layout-
|
|
1
|
+
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../cms-layout-SubgSF72.cjs");exports.CMSLayout=e.t;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{t as e}from"../../cms-layout-
|
|
1
|
+
"use client";import{t as e}from"../../cms-layout-CuF5ahpj.mjs";export{e as CMSLayout};
|
|
@@ -36,7 +36,7 @@ declare const ResizablePanelGroup: import("react").NamedExoticComponent<Omit<imp
|
|
|
36
36
|
children?: import("react").ReactNode | undefined;
|
|
37
37
|
} & import("react").RefAttributes<ResizablePrimitive.ImperativePanelGroupHandle>>;
|
|
38
38
|
/** An individual resizable panel within a ResizablePanelGroup. */
|
|
39
|
-
declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("react").HTMLAttributes<HTMLParagraphElement | HTMLElement | HTMLInputElement | HTMLButtonElement |
|
|
39
|
+
declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("react").HTMLAttributes<HTMLParagraphElement | HTMLElement | HTMLInputElement | HTMLButtonElement | HTMLFieldSetElement | HTMLLegendElement | HTMLDivElement | HTMLLabelElement | HTMLObjectElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableCaptionElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLEmbedElement | HTMLFormElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLLIElement | HTMLLinkElement | HTMLMapElement | HTMLMenuElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLPictureElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSlotElement | HTMLSourceElement | HTMLSpanElement | HTMLStyleElement | HTMLTableElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTemplateElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTitleElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement>, "id" | "onResize"> & {
|
|
40
40
|
className?: string;
|
|
41
41
|
collapsedSize?: number | undefined;
|
|
42
42
|
collapsible?: boolean | undefined;
|
|
@@ -61,4 +61,4 @@ declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("
|
|
|
61
61
|
declare const ResizableHandle: import("react").NamedExoticComponent<TResizableHandle>;
|
|
62
62
|
//#endregion
|
|
63
63
|
export { ResizablePanel as n, ResizablePanelGroup as r, ResizableHandle as t };
|
|
64
|
-
//# sourceMappingURL=resizable-
|
|
64
|
+
//# sourceMappingURL=resizable-CNIYTd7k.d.cts.map
|
|
@@ -36,7 +36,7 @@ declare const ResizablePanelGroup: import("react").NamedExoticComponent<Omit<imp
|
|
|
36
36
|
children?: import("react").ReactNode | undefined;
|
|
37
37
|
} & import("react").RefAttributes<ResizablePrimitive.ImperativePanelGroupHandle>>;
|
|
38
38
|
/** An individual resizable panel within a ResizablePanelGroup. */
|
|
39
|
-
declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("react").HTMLAttributes<HTMLParagraphElement | HTMLElement | HTMLInputElement | HTMLButtonElement |
|
|
39
|
+
declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("react").HTMLAttributes<HTMLParagraphElement | HTMLElement | HTMLInputElement | HTMLButtonElement | HTMLFieldSetElement | HTMLLegendElement | HTMLDivElement | HTMLLabelElement | HTMLObjectElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableCaptionElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLEmbedElement | HTMLFormElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLLIElement | HTMLLinkElement | HTMLMapElement | HTMLMenuElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLPictureElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSlotElement | HTMLSourceElement | HTMLSpanElement | HTMLStyleElement | HTMLTableElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTemplateElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTitleElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement>, "id" | "onResize"> & {
|
|
40
40
|
className?: string;
|
|
41
41
|
collapsedSize?: number | undefined;
|
|
42
42
|
collapsible?: boolean | undefined;
|
|
@@ -61,4 +61,4 @@ declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("
|
|
|
61
61
|
declare const ResizableHandle: import("react").NamedExoticComponent<TResizableHandle>;
|
|
62
62
|
//#endregion
|
|
63
63
|
export { ResizablePanel as n, ResizablePanelGroup as r, ResizableHandle as t };
|
|
64
|
-
//# sourceMappingURL=resizable-
|
|
64
|
+
//# sourceMappingURL=resizable-CNIYTd7k.d.mts.map
|
package/dist/ui/resizable.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "../resizable-
|
|
1
|
+
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "../resizable-CNIYTd7k.cjs";
|
|
2
2
|
export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
|
package/dist/ui/resizable.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "../resizable-
|
|
1
|
+
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "../resizable-CNIYTd7k.mjs";
|
|
2
2
|
export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
|