@shellui/core 0.0.12 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/{CookiePreferencesView-CIXBJWNt.js → CookiePreferencesView-Bb3hFqw1.js} +3 -3
  2. package/dist/{CookiePreferencesView-CIXBJWNt.js.map → CookiePreferencesView-Bb3hFqw1.js.map} +1 -1
  3. package/dist/{DefaultLayout-Bztmv2c_.js → DefaultLayout-D3IpgS4j.js} +4 -4
  4. package/dist/{DefaultLayout-Bztmv2c_.js.map → DefaultLayout-D3IpgS4j.js.map} +1 -1
  5. package/dist/{FullscreenLayout-DiX6dbkf.js → FullscreenLayout-Do9vAfl8.js} +3 -3
  6. package/dist/{FullscreenLayout-DiX6dbkf.js.map → FullscreenLayout-Do9vAfl8.js.map} +1 -1
  7. package/dist/{HomeView-C610YU6V.js → HomeView-DwckTuxz.js} +2 -2
  8. package/dist/{HomeView-C610YU6V.js.map → HomeView-DwckTuxz.js.map} +1 -1
  9. package/dist/{NotFoundView-D00gYlq-.js → NotFoundView-DD7azhz-.js} +2 -2
  10. package/dist/{NotFoundView-D00gYlq-.js.map → NotFoundView-DD7azhz-.js.map} +1 -1
  11. package/dist/{OverlayShell-CGjN4rTu.js → OverlayShell-kDY56DaN.js} +2 -2
  12. package/dist/{OverlayShell-CGjN4rTu.js.map → OverlayShell-kDY56DaN.js.map} +1 -1
  13. package/dist/{SettingsView-2QMtfS71.js → SettingsView-Bt4I-KDT.js} +4 -4
  14. package/dist/{SettingsView-2QMtfS71.js.map → SettingsView-Bt4I-KDT.js.map} +1 -1
  15. package/dist/{WindowsLayout-DkSNQDSb.js → WindowsLayout-CEqkRKyk.js} +3 -3
  16. package/dist/{WindowsLayout-DkSNQDSb.js.map → WindowsLayout-CEqkRKyk.js.map} +1 -1
  17. package/dist/components/ui/button.d.ts +1 -1
  18. package/dist/features/config/ConfigProvider.d.ts.map +1 -1
  19. package/dist/features/config/useConfig.d.ts.map +1 -1
  20. package/dist/{index-PsePV0Ng.js → index-CfvdAI_Y.js} +130 -122
  21. package/dist/index-CfvdAI_Y.js.map +1 -0
  22. package/dist/index.js +1 -1
  23. package/dist/{sidebar-Cvm_uv4l.js → sidebar-Dt-gibIZ.js} +2 -2
  24. package/dist/{sidebar-Cvm_uv4l.js.map → sidebar-Dt-gibIZ.js.map} +1 -1
  25. package/dist/{switch-BjkiJBIa.js → switch-CuKXfl3x.js} +2 -2
  26. package/dist/{switch-BjkiJBIa.js.map → switch-CuKXfl3x.js.map} +1 -1
  27. package/package.json +2 -2
  28. package/src/features/config/ConfigProvider.ts +20 -5
  29. package/src/features/config/useConfig.ts +14 -1
  30. package/dist/index-PsePV0Ng.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-Cvm_uv4l.js","sources":["../src/components/ui/sidebar.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useState,\n useCallback,\n forwardRef,\n type ReactNode,\n type HTMLAttributes,\n type ButtonHTMLAttributes,\n type AnchorHTMLAttributes,\n} from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport { Z_INDEX } from '@/lib/z-index';\n\ntype SidebarContextValue = {\n isCollapsed: boolean;\n toggle: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextValue | undefined>(undefined);\n\nconst 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\nconst SidebarProvider = ({ children }: { children: ReactNode }) => {\n const [isCollapsed, setIsCollapsed] = useState(false);\n\n const toggle = useCallback(() => {\n setIsCollapsed((prev) => !prev);\n }, []);\n\n return (\n <SidebarContext.Provider value={{ isCollapsed, toggle }}>{children}</SidebarContext.Provider>\n );\n};\n\nconst Sidebar = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { isCollapsed } = useSidebar();\n\n return (\n <div\n ref={ref}\n data-sidebar=\"sidebar\"\n data-collapsed={isCollapsed}\n className={cn(\n 'flex h-full flex-col gap-2 border-r bg-sidebar-background p-2 text-sidebar-foreground transition-all duration-300 ease-in-out overflow-hidden',\n isCollapsed ? 'w-0 border-r-0 p-0' : 'w-64',\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebar.displayName = 'Sidebar';\n\n/** Inline SVG: panel-left-open (expand sidebar) */\nconst PanelLeftOpenIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-5 w-5 transition-transform duration-300\"\n aria-hidden\n >\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M9 3v18\" />\n <path d=\"m14 9 3 3-3 3\" />\n </svg>\n);\n\n/** Inline SVG: panel-left-close (collapse sidebar) */\nconst PanelLeftCloseIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-5 w-5 transition-transform duration-300\"\n aria-hidden\n >\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M9 3v18\" />\n <path d=\"m16 15-3-3 3-3\" />\n </svg>\n);\n\nconst SidebarTrigger = forwardRef<HTMLButtonElement, ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className, ...props }, ref) => {\n const { toggle, isCollapsed } = useSidebar();\n\n return (\n <button\n ref={ref}\n onClick={toggle}\n className={cn(\n 'relative flex items-center justify-center rounded-md p-2 text-foreground transition-colors hover:opacity-90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring shadow-lg backdrop-blur-md cursor-pointer bg-background/95 border border-border',\n className,\n )}\n aria-label={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n style={{ zIndex: Z_INDEX.SIDEBAR_TRIGGER }}\n {...props}\n >\n {isCollapsed ? <PanelLeftOpenIcon /> : <PanelLeftCloseIcon />}\n </button>\n );\n },\n);\nSidebarTrigger.displayName = 'SidebarTrigger';\n\nconst SidebarHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n },\n);\nSidebarHeader.displayName = 'SidebarHeader';\n\nconst SidebarContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex flex-1 flex-col gap-2 overflow-auto', className)}\n {...props}\n />\n );\n },\n);\nSidebarContent.displayName = 'SidebarContent';\n\nconst SidebarFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n },\n);\nSidebarFooter.displayName = 'SidebarFooter';\n\nconst SidebarGroup = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('group/sidebar-group', className)}\n {...props}\n />\n );\n },\n);\nSidebarGroup.displayName = 'SidebarGroup';\n\nconst SidebarGroupLabel = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opa] ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n className,\n )}\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n {...props}\n />\n );\n },\n);\nSidebarGroupLabel.displayName = 'SidebarGroupLabel';\n\nconst SidebarGroupAction = forwardRef<\n HTMLButtonElement,\n ButtonHTMLAttributes<HTMLButtonElement> & {\n asChild?: boolean;\n }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n ref={ref}\n className={cn(\n 'absolute right-2 top-1/2 -translate-y-1/2 rounded-md p-1.5 text-sidebar-foreground outline-none ring-sidebar-ring transition-opacity hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:opacity-100 focus-visible:ring-2 group-hover/sidebar-group:opacity-100 peer-data-[size=sm]/sidebar-group-action:opacity-0 [&>svg]:size-4 [&>svg]:shrink-0',\n className,\n )}\n {...props}\n />\n );\n});\nSidebarGroupAction.displayName = 'SidebarGroupAction';\n\nconst SidebarGroupContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('w-full text-sm', className)}\n {...props}\n />\n );\n },\n);\nSidebarGroupContent.displayName = 'SidebarGroupContent';\n\nconst sidebarMenuButtonVariants = cva(\n 'flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:bg-sidebar-accent focus-visible:text-sidebar-accent-foreground focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-ring))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-base',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nconst SidebarMenuButton = forwardRef<\n HTMLButtonElement,\n ButtonHTMLAttributes<HTMLButtonElement> &\n VariantProps<typeof sidebarMenuButtonVariants> & {\n asChild?: boolean;\n isActive?: boolean;\n }\n>(({ className, variant, size, asChild = false, isActive, children, ...props }, ref) => {\n const { isCollapsed } = useSidebar();\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={ref}\n data-active={isActive}\n data-collapsed={isCollapsed}\n className={cn(\n sidebarMenuButtonVariants({ variant, size }),\n isCollapsed && 'justify-center',\n className,\n )}\n {...props}\n >\n {children}\n </Comp>\n );\n});\nSidebarMenuButton.displayName = 'SidebarMenuButton';\n\nconst SidebarMenu = forwardRef<HTMLUListElement, HTMLAttributes<HTMLUListElement>>(\n ({ className, ...props }, ref) => {\n return (\n <ul\n ref={ref}\n className={cn('flex w-full min-w-0 flex-col gap-1', className)}\n {...props}\n />\n );\n },\n);\nSidebarMenu.displayName = 'SidebarMenu';\n\nconst SidebarMenuItem = forwardRef<HTMLLIElement, HTMLAttributes<HTMLLIElement>>(\n ({ className, ...props }, ref) => {\n return (\n <li\n ref={ref}\n className={cn('group/menu-item relative', className)}\n {...props}\n />\n );\n },\n);\nSidebarMenuItem.displayName = 'SidebarMenuItem';\n\nconst SidebarMenuAction = forwardRef<\n HTMLButtonElement,\n ButtonHTMLAttributes<HTMLButtonElement> & {\n asChild?: boolean;\n }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n ref={ref}\n className={cn(\n 'absolute right-2 top-1/2 flex -translate-y-1/2 items-center justify-center rounded-md p-1 text-sidebar-foreground opacity-0 transition-opacity group-hover/menu-item:opacity-100 group-focus/menu-item:opacity-100 [&:has(~:hover)]:opacity-100 [&:has(~:focus)]:opacity-100',\n className,\n )}\n {...props}\n />\n );\n});\nSidebarMenuAction.displayName = 'SidebarMenuAction';\n\nconst SidebarMenuBadge = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'absolute right-2 top-1/2 flex -translate-y-1/2 items-center justify-center rounded-md px-1.5 py-0.5 text-xs font-medium tabular-nums text-sidebar-foreground',\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarMenuBadge.displayName = 'SidebarMenuBadge';\n\nconst SidebarMenuSkeleton = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement> & {\n showIcon?: boolean;\n }\n>(({ className, showIcon = false, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex items-center gap-2 px-2 py-1.5', className)}\n {...props}\n >\n {showIcon && <div className=\"flex h-4 w-4 rounded-md bg-sidebar-primary/10\" />}\n <div className=\"flex flex-1 flex-col gap-1.5\">\n <div className=\"h-2.5 w-16 rounded-md bg-sidebar-primary/10\" />\n <div className=\"h-2.5 w-24 rounded-md bg-sidebar-primary/10\" />\n </div>\n </div>\n );\n});\nSidebarMenuSkeleton.displayName = 'SidebarMenuSkeleton';\n\nconst SidebarMenuSub = forwardRef<HTMLUListElement, HTMLAttributes<HTMLUListElement>>(\n ({ className, ...props }, ref) => {\n return (\n <ul\n ref={ref}\n className={cn(\n 'ml-4 mt-1 flex min-w-0 flex-col gap-0.5 border-l border-sidebar-border pl-2.5',\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarMenuSub.displayName = 'SidebarMenuSub';\n\nconst SidebarMenuSubButton = forwardRef<\n HTMLAnchorElement,\n AnchorHTMLAttributes<HTMLAnchorElement> & {\n asChild?: boolean;\n size?: 'sm' | 'md' | 'lg';\n isActive?: boolean;\n }\n>(({ className, asChild = false, size = 'md', isActive, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n return (\n <Comp\n ref={ref}\n data-size={size}\n data-active={isActive}\n className={cn(\n 'flex min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md p-2 text-sidebar-foreground outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n size === 'lg' && 'text-base',\n className,\n )}\n {...props}\n />\n );\n});\nSidebarMenuSubButton.displayName = 'SidebarMenuSubButton';\n\nconst SidebarMenuSubItem = forwardRef<HTMLLIElement, HTMLAttributes<HTMLLIElement>>(\n ({ className, ...props }, ref) => {\n return (\n <li\n ref={ref}\n className={cn('group/menu-sub-item relative', className)}\n {...props}\n />\n );\n },\n);\nSidebarMenuSubItem.displayName = 'SidebarMenuSubItem';\n\nexport {\n Sidebar,\n SidebarProvider,\n SidebarTrigger,\n SidebarHeader,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n useSidebar,\n};\n"],"names":["SidebarContext","createContext","useSidebar","context","useContext","SidebarProvider","children","isCollapsed","setIsCollapsed","useState","toggle","useCallback","prev","jsx","Sidebar","forwardRef","className","props","ref","cn","PanelLeftOpenIcon","jsxs","PanelLeftCloseIcon","SidebarTrigger","Z_INDEX","SidebarHeader","SidebarContent","SidebarFooter","SidebarGroup","SidebarGroupLabel","SidebarGroupAction","asChild","Slot","SidebarGroupContent","sidebarMenuButtonVariants","cva","SidebarMenuButton","variant","size","isActive","SidebarMenu","SidebarMenuItem","SidebarMenuAction","SidebarMenuBadge","SidebarMenuSkeleton","showIcon","SidebarMenuSub","SidebarMenuSubButton","SidebarMenuSubItem"],"mappings":";;;;;AAqBA,MAAMA,IAAiBC,EAA+C,MAAS,GAEzEC,IAAa,MAAM;AACvB,QAAMC,IAAUC,EAAWJ,CAAc;AACzC,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,kDAAkD;AAEpE,SAAOA;AACT,GAEME,IAAkB,CAAC,EAAE,UAAAC,QAAwC;AACjE,QAAM,CAACC,GAAaC,CAAc,IAAIC,EAAS,EAAK,GAE9CC,IAASC,EAAY,MAAM;AAC/B,IAAAH,EAAe,CAACI,MAAS,CAACA,CAAI;AAAA,EAChC,GAAG,CAAA,CAAE;AAEL,SACE,gBAAAC,EAACb,EAAe,UAAf,EAAwB,OAAO,EAAE,aAAAO,GAAa,QAAAG,KAAW,UAAAJ,GAAS;AAEvE,GAEMQ,IAAUC;AAAA,EACd,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAAQ;AAChC,UAAM,EAAE,aAAAX,EAAA,IAAgBL,EAAA;AAExB,WACE,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAK;AAAA,QACA,gBAAa;AAAA,QACb,kBAAgBX;AAAA,QAChB,WAAWY;AAAA,UACT;AAAA,UACAZ,IAAc,uBAAuB;AAAA,UACrCS;AAAA,QAAA;AAAA,QAED,GAAGC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AACAH,EAAQ,cAAc;AAGtB,MAAMM,IAAoB,MACxB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,QAAO;AAAA,IACP,aAAY;AAAA,IACZ,eAAc;AAAA,IACd,gBAAe;AAAA,IACf,WAAU;AAAA,IACV,eAAW;AAAA,IAEX,UAAA;AAAA,MAAA,gBAAAR,EAAC,QAAA,EAAK,OAAM,MAAK,QAAO,MAAK,GAAE,KAAI,GAAE,KAAI,IAAG,IAAA,CAAI;AAAA,MAChD,gBAAAA,EAAC,QAAA,EAAK,GAAE,UAAA,CAAU;AAAA,MAClB,gBAAAA,EAAC,QAAA,EAAK,GAAE,gBAAA,CAAgB;AAAA,IAAA;AAAA,EAAA;AAC1B,GAIIS,IAAqB,MACzB,gBAAAD;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,QAAO;AAAA,IACP,aAAY;AAAA,IACZ,eAAc;AAAA,IACd,gBAAe;AAAA,IACf,WAAU;AAAA,IACV,eAAW;AAAA,IAEX,UAAA;AAAA,MAAA,gBAAAR,EAAC,QAAA,EAAK,OAAM,MAAK,QAAO,MAAK,GAAE,KAAI,GAAE,KAAI,IAAG,IAAA,CAAI;AAAA,MAChD,gBAAAA,EAAC,QAAA,EAAK,GAAE,UAAA,CAAU;AAAA,MAClB,gBAAAA,EAAC,QAAA,EAAK,GAAE,iBAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AAC3B,GAGIU,IAAiBR;AAAA,EACrB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAAQ;AAChC,UAAM,EAAE,QAAAR,GAAQ,aAAAH,EAAA,IAAgBL,EAAA;AAEhC,WACE,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAK;AAAA,QACA,SAASR;AAAA,QACT,WAAWS;AAAA,UACT;AAAA,UACAH;AAAA,QAAA;AAAA,QAEF,cAAYT,IAAc,mBAAmB;AAAA,QAC7C,OAAO,EAAE,QAAQiB,EAAQ,gBAAA;AAAA,QACxB,GAAGP;AAAA,QAEH,UAAAV,IAAc,gBAAAM,EAACO,GAAA,CAAA,CAAkB,sBAAME,GAAA,CAAA,CAAmB;AAAA,MAAA;AAAA,IAAA;AAAA,EAGjE;AACF;AACAC,EAAe,cAAc;AAE7B,MAAME,IAAgBV;AAAA,EACpB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAK;AAAA,MACA,WAAWC,EAAG,2BAA2BH,CAAS;AAAA,MACjD,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAQ,EAAc,cAAc;AAE5B,MAAMC,IAAiBX;AAAA,EACrB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAK;AAAA,MACA,WAAWC,EAAG,4CAA4CH,CAAS;AAAA,MAClE,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAS,EAAe,cAAc;AAE7B,MAAMC,IAAgBZ;AAAA,EACpB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAK;AAAA,MACA,WAAWC,EAAG,2BAA2BH,CAAS;AAAA,MACjD,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAU,EAAc,cAAc;AAE5B,MAAMC,IAAeb;AAAA,EACnB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAK;AAAA,MACA,WAAWC,EAAG,uBAAuBH,CAAS;AAAA,MAC7C,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAW,EAAa,cAAc;AAE3B,MAAMC,IAAoBd;AAAA,EACxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAK;AAAA,MACA,WAAWC;AAAA,QACT;AAAA,QACAH;AAAA,MAAA;AAAA,MAEF,OAAO,EAAE,YAAY,sCAAA;AAAA,MACpB,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAY,EAAkB,cAAc;AAEhC,MAAMC,IAAqBf,EAKzB,CAAC,EAAE,WAAAC,GAAW,SAAAe,IAAU,IAAO,GAAGd,EAAA,GAASC,MAGzC,gBAAAL;AAAA,EAFWkB,IAAUC,IAAO;AAAA,EAE3B;AAAA,IACC,KAAAd;AAAA,IACA,WAAWC;AAAA,MACT;AAAA,MACAH;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AAAA,CAGT;AACDa,EAAmB,cAAc;AAEjC,MAAMG,IAAsBlB;AAAA,EAC1B,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAK;AAAA,MACA,WAAWC,EAAG,kBAAkBH,CAAS;AAAA,MACxC,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAgB,EAAoB,cAAc;AAElC,MAAMC,IAA4BC;AAAA,EAChC;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SACE;AAAA,MAAA;AAAA,MAEJ,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAEMC,IAAoBrB,EAOxB,CAAC,EAAE,WAAAC,GAAW,SAAAqB,GAAS,MAAAC,GAAM,SAAAP,IAAU,IAAO,UAAAQ,GAAU,UAAAjC,GAAU,GAAGW,EAAA,GAASC,MAAQ;AACtF,QAAM,EAAE,aAAAX,EAAA,IAAgBL,EAAA;AAGxB,SACE,gBAAAW;AAAA,IAHWkB,IAAUC,IAAO;AAAA,IAG3B;AAAA,MACC,KAAAd;AAAA,MACA,eAAaqB;AAAA,MACb,kBAAgBhC;AAAA,MAChB,WAAWY;AAAA,QACTe,EAA0B,EAAE,SAAAG,GAAS,MAAAC,GAAM;AAAA,QAC3C/B,KAAe;AAAA,QACfS;AAAA,MAAA;AAAA,MAED,GAAGC;AAAA,MAEH,UAAAX;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AACD8B,EAAkB,cAAc;AAEhC,MAAMI,IAAczB;AAAA,EAClB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAK;AAAA,MACA,WAAWC,EAAG,sCAAsCH,CAAS;AAAA,MAC5D,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAuB,EAAY,cAAc;AAE1B,MAAMC,IAAkB1B;AAAA,EACtB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAK;AAAA,MACA,WAAWC,EAAG,4BAA4BH,CAAS;AAAA,MAClD,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAwB,EAAgB,cAAc;AAE9B,MAAMC,IAAoB3B,EAKxB,CAAC,EAAE,WAAAC,GAAW,SAAAe,IAAU,IAAO,GAAGd,EAAA,GAASC,MAGzC,gBAAAL;AAAA,EAFWkB,IAAUC,IAAO;AAAA,EAE3B;AAAA,IACC,KAAAd;AAAA,IACA,WAAWC;AAAA,MACT;AAAA,MACAH;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AAAA,CAGT;AACDyB,EAAkB,cAAc;AAEhC,MAAMC,IAAmB5B;AAAA,EACvB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAK;AAAA,MACA,WAAWC;AAAA,QACT;AAAA,QACAH;AAAA,MAAA;AAAA,MAED,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACA0B,EAAiB,cAAc;AAE/B,MAAMC,IAAsB7B,EAK1B,CAAC,EAAE,WAAAC,GAAW,UAAA6B,IAAW,IAAO,GAAG5B,EAAA,GAASC,MAE1C,gBAAAG;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAH;AAAA,IACA,WAAWC,EAAG,uCAAuCH,CAAS;AAAA,IAC7D,GAAGC;AAAA,IAEH,UAAA;AAAA,MAAA4B,KAAY,gBAAAhC,EAAC,OAAA,EAAI,WAAU,gDAAA,CAAgD;AAAA,MAC5E,gBAAAQ,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,QAAA,gBAAAR,EAAC,OAAA,EAAI,WAAU,8CAAA,CAA8C;AAAA,QAC7D,gBAAAA,EAAC,OAAA,EAAI,WAAU,8CAAA,CAA8C;AAAA,MAAA,EAAA,CAC/D;AAAA,IAAA;AAAA,EAAA;AAAA,CAGL;AACD+B,EAAoB,cAAc;AAElC,MAAME,IAAiB/B;AAAA,EACrB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAK;AAAA,MACA,WAAWC;AAAA,QACT;AAAA,QACAH;AAAA,MAAA;AAAA,MAED,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACA6B,EAAe,cAAc;AAE7B,MAAMC,IAAuBhC,EAO3B,CAAC,EAAE,WAAAC,GAAW,SAAAe,IAAU,IAAO,MAAAO,IAAO,MAAM,UAAAC,GAAU,GAAGtB,EAAA,GAASC,MAGhE,gBAAAL;AAAA,EAFWkB,IAAUC,IAAO;AAAA,EAE3B;AAAA,IACC,KAAAd;AAAA,IACA,aAAWoB;AAAA,IACX,eAAaC;AAAA,IACb,WAAWpB;AAAA,MACT;AAAA,MACAmB,MAAS,QAAQ;AAAA,MACjBA,MAAS,QAAQ;AAAA,MACjBA,MAAS,QAAQ;AAAA,MACjBtB;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AAAA,CAGT;AACD8B,EAAqB,cAAc;AAEnC,MAAMC,IAAqBjC;AAAA,EACzB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAK;AAAA,MACA,WAAWC,EAAG,gCAAgCH,CAAS;AAAA,MACtD,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACA+B,EAAmB,cAAc;"}
1
+ {"version":3,"file":"sidebar-Dt-gibIZ.js","sources":["../src/components/ui/sidebar.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useState,\n useCallback,\n forwardRef,\n type ReactNode,\n type HTMLAttributes,\n type ButtonHTMLAttributes,\n type AnchorHTMLAttributes,\n} from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport { Z_INDEX } from '@/lib/z-index';\n\ntype SidebarContextValue = {\n isCollapsed: boolean;\n toggle: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextValue | undefined>(undefined);\n\nconst 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\nconst SidebarProvider = ({ children }: { children: ReactNode }) => {\n const [isCollapsed, setIsCollapsed] = useState(false);\n\n const toggle = useCallback(() => {\n setIsCollapsed((prev) => !prev);\n }, []);\n\n return (\n <SidebarContext.Provider value={{ isCollapsed, toggle }}>{children}</SidebarContext.Provider>\n );\n};\n\nconst Sidebar = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { isCollapsed } = useSidebar();\n\n return (\n <div\n ref={ref}\n data-sidebar=\"sidebar\"\n data-collapsed={isCollapsed}\n className={cn(\n 'flex h-full flex-col gap-2 border-r bg-sidebar-background p-2 text-sidebar-foreground transition-all duration-300 ease-in-out overflow-hidden',\n isCollapsed ? 'w-0 border-r-0 p-0' : 'w-64',\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebar.displayName = 'Sidebar';\n\n/** Inline SVG: panel-left-open (expand sidebar) */\nconst PanelLeftOpenIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-5 w-5 transition-transform duration-300\"\n aria-hidden\n >\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M9 3v18\" />\n <path d=\"m14 9 3 3-3 3\" />\n </svg>\n);\n\n/** Inline SVG: panel-left-close (collapse sidebar) */\nconst PanelLeftCloseIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-5 w-5 transition-transform duration-300\"\n aria-hidden\n >\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M9 3v18\" />\n <path d=\"m16 15-3-3 3-3\" />\n </svg>\n);\n\nconst SidebarTrigger = forwardRef<HTMLButtonElement, ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className, ...props }, ref) => {\n const { toggle, isCollapsed } = useSidebar();\n\n return (\n <button\n ref={ref}\n onClick={toggle}\n className={cn(\n 'relative flex items-center justify-center rounded-md p-2 text-foreground transition-colors hover:opacity-90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring shadow-lg backdrop-blur-md cursor-pointer bg-background/95 border border-border',\n className,\n )}\n aria-label={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n style={{ zIndex: Z_INDEX.SIDEBAR_TRIGGER }}\n {...props}\n >\n {isCollapsed ? <PanelLeftOpenIcon /> : <PanelLeftCloseIcon />}\n </button>\n );\n },\n);\nSidebarTrigger.displayName = 'SidebarTrigger';\n\nconst SidebarHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n },\n);\nSidebarHeader.displayName = 'SidebarHeader';\n\nconst SidebarContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex flex-1 flex-col gap-2 overflow-auto', className)}\n {...props}\n />\n );\n },\n);\nSidebarContent.displayName = 'SidebarContent';\n\nconst SidebarFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n },\n);\nSidebarFooter.displayName = 'SidebarFooter';\n\nconst SidebarGroup = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('group/sidebar-group', className)}\n {...props}\n />\n );\n },\n);\nSidebarGroup.displayName = 'SidebarGroup';\n\nconst SidebarGroupLabel = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opa] ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n className,\n )}\n style={{ fontFamily: 'var(--heading-font-family, inherit)' }}\n {...props}\n />\n );\n },\n);\nSidebarGroupLabel.displayName = 'SidebarGroupLabel';\n\nconst SidebarGroupAction = forwardRef<\n HTMLButtonElement,\n ButtonHTMLAttributes<HTMLButtonElement> & {\n asChild?: boolean;\n }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n ref={ref}\n className={cn(\n 'absolute right-2 top-1/2 -translate-y-1/2 rounded-md p-1.5 text-sidebar-foreground outline-none ring-sidebar-ring transition-opacity hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:opacity-100 focus-visible:ring-2 group-hover/sidebar-group:opacity-100 peer-data-[size=sm]/sidebar-group-action:opacity-0 [&>svg]:size-4 [&>svg]:shrink-0',\n className,\n )}\n {...props}\n />\n );\n});\nSidebarGroupAction.displayName = 'SidebarGroupAction';\n\nconst SidebarGroupContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('w-full text-sm', className)}\n {...props}\n />\n );\n },\n);\nSidebarGroupContent.displayName = 'SidebarGroupContent';\n\nconst sidebarMenuButtonVariants = cva(\n 'flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:bg-sidebar-accent focus-visible:text-sidebar-accent-foreground focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-ring))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-base',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nconst SidebarMenuButton = forwardRef<\n HTMLButtonElement,\n ButtonHTMLAttributes<HTMLButtonElement> &\n VariantProps<typeof sidebarMenuButtonVariants> & {\n asChild?: boolean;\n isActive?: boolean;\n }\n>(({ className, variant, size, asChild = false, isActive, children, ...props }, ref) => {\n const { isCollapsed } = useSidebar();\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={ref}\n data-active={isActive}\n data-collapsed={isCollapsed}\n className={cn(\n sidebarMenuButtonVariants({ variant, size }),\n isCollapsed && 'justify-center',\n className,\n )}\n {...props}\n >\n {children}\n </Comp>\n );\n});\nSidebarMenuButton.displayName = 'SidebarMenuButton';\n\nconst SidebarMenu = forwardRef<HTMLUListElement, HTMLAttributes<HTMLUListElement>>(\n ({ className, ...props }, ref) => {\n return (\n <ul\n ref={ref}\n className={cn('flex w-full min-w-0 flex-col gap-1', className)}\n {...props}\n />\n );\n },\n);\nSidebarMenu.displayName = 'SidebarMenu';\n\nconst SidebarMenuItem = forwardRef<HTMLLIElement, HTMLAttributes<HTMLLIElement>>(\n ({ className, ...props }, ref) => {\n return (\n <li\n ref={ref}\n className={cn('group/menu-item relative', className)}\n {...props}\n />\n );\n },\n);\nSidebarMenuItem.displayName = 'SidebarMenuItem';\n\nconst SidebarMenuAction = forwardRef<\n HTMLButtonElement,\n ButtonHTMLAttributes<HTMLButtonElement> & {\n asChild?: boolean;\n }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n ref={ref}\n className={cn(\n 'absolute right-2 top-1/2 flex -translate-y-1/2 items-center justify-center rounded-md p-1 text-sidebar-foreground opacity-0 transition-opacity group-hover/menu-item:opacity-100 group-focus/menu-item:opacity-100 [&:has(~:hover)]:opacity-100 [&:has(~:focus)]:opacity-100',\n className,\n )}\n {...props}\n />\n );\n});\nSidebarMenuAction.displayName = 'SidebarMenuAction';\n\nconst SidebarMenuBadge = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'absolute right-2 top-1/2 flex -translate-y-1/2 items-center justify-center rounded-md px-1.5 py-0.5 text-xs font-medium tabular-nums text-sidebar-foreground',\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarMenuBadge.displayName = 'SidebarMenuBadge';\n\nconst SidebarMenuSkeleton = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement> & {\n showIcon?: boolean;\n }\n>(({ className, showIcon = false, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex items-center gap-2 px-2 py-1.5', className)}\n {...props}\n >\n {showIcon && <div className=\"flex h-4 w-4 rounded-md bg-sidebar-primary/10\" />}\n <div className=\"flex flex-1 flex-col gap-1.5\">\n <div className=\"h-2.5 w-16 rounded-md bg-sidebar-primary/10\" />\n <div className=\"h-2.5 w-24 rounded-md bg-sidebar-primary/10\" />\n </div>\n </div>\n );\n});\nSidebarMenuSkeleton.displayName = 'SidebarMenuSkeleton';\n\nconst SidebarMenuSub = forwardRef<HTMLUListElement, HTMLAttributes<HTMLUListElement>>(\n ({ className, ...props }, ref) => {\n return (\n <ul\n ref={ref}\n className={cn(\n 'ml-4 mt-1 flex min-w-0 flex-col gap-0.5 border-l border-sidebar-border pl-2.5',\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarMenuSub.displayName = 'SidebarMenuSub';\n\nconst SidebarMenuSubButton = forwardRef<\n HTMLAnchorElement,\n AnchorHTMLAttributes<HTMLAnchorElement> & {\n asChild?: boolean;\n size?: 'sm' | 'md' | 'lg';\n isActive?: boolean;\n }\n>(({ className, asChild = false, size = 'md', isActive, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n return (\n <Comp\n ref={ref}\n data-size={size}\n data-active={isActive}\n className={cn(\n 'flex min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md p-2 text-sidebar-foreground outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n size === 'lg' && 'text-base',\n className,\n )}\n {...props}\n />\n );\n});\nSidebarMenuSubButton.displayName = 'SidebarMenuSubButton';\n\nconst SidebarMenuSubItem = forwardRef<HTMLLIElement, HTMLAttributes<HTMLLIElement>>(\n ({ className, ...props }, ref) => {\n return (\n <li\n ref={ref}\n className={cn('group/menu-sub-item relative', className)}\n {...props}\n />\n );\n },\n);\nSidebarMenuSubItem.displayName = 'SidebarMenuSubItem';\n\nexport {\n Sidebar,\n SidebarProvider,\n SidebarTrigger,\n SidebarHeader,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n useSidebar,\n};\n"],"names":["SidebarContext","createContext","useSidebar","context","useContext","SidebarProvider","children","isCollapsed","setIsCollapsed","useState","toggle","useCallback","prev","jsx","Sidebar","forwardRef","className","props","ref","cn","PanelLeftOpenIcon","jsxs","PanelLeftCloseIcon","SidebarTrigger","Z_INDEX","SidebarHeader","SidebarContent","SidebarFooter","SidebarGroup","SidebarGroupLabel","SidebarGroupAction","asChild","Slot","SidebarGroupContent","sidebarMenuButtonVariants","cva","SidebarMenuButton","variant","size","isActive","SidebarMenu","SidebarMenuItem","SidebarMenuAction","SidebarMenuBadge","SidebarMenuSkeleton","showIcon","SidebarMenuSub","SidebarMenuSubButton","SidebarMenuSubItem"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs as l, jsx as e } from "react/jsx-runtime";
2
2
  import { forwardRef as c } from "react";
3
- import { c as n } from "./index-PsePV0Ng.js";
3
+ import { c as n } from "./index-CfvdAI_Y.js";
4
4
  const d = c(
5
5
  ({ className: o, checked: r, onCheckedChange: t, ...a }, i) => /* @__PURE__ */ l("label", { className: "inline-flex items-center cursor-pointer", children: [
6
6
  /* @__PURE__ */ e(
@@ -41,4 +41,4 @@ d.displayName = "Switch";
41
41
  export {
42
42
  d as S
43
43
  };
44
- //# sourceMappingURL=switch-BjkiJBIa.js.map
44
+ //# sourceMappingURL=switch-CuKXfl3x.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"switch-BjkiJBIa.js","sources":["../src/components/ui/switch.tsx"],"sourcesContent":["import { forwardRef, type InputHTMLAttributes, type ChangeEvent } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst Switch = forwardRef<HTMLInputElement, SwitchProps>(\n ({ className, checked, onCheckedChange, ...props }, ref) => {\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n onCheckedChange?.(e.target.checked);\n };\n\n return (\n <label className=\"inline-flex items-center cursor-pointer\">\n <input\n type=\"checkbox\"\n ref={ref}\n checked={checked}\n onChange={handleChange}\n className=\"sr-only\"\n {...props}\n />\n <div\n className={cn(\n 'relative w-11 h-6 rounded-full border border-border transition-colors focus-within:outline-none focus-within:ring-2 focus-within:ring-ring',\n checked ? 'bg-primary' : 'bg-muted',\n className,\n )}\n >\n <div\n className={cn(\n 'absolute top-[1px] left-[1px] h-5 w-5 bg-background border border-border rounded-full transition-transform',\n checked ? 'translate-x-5' : 'translate-x-0',\n )}\n />\n </div>\n </label>\n );\n },\n);\nSwitch.displayName = 'Switch';\n\nexport { Switch };\n"],"names":["Switch","forwardRef","className","checked","onCheckedChange","props","ref","jsxs","jsx","e","cn"],"mappings":";;;AAQA,MAAMA,IAASC;AAAA,EACb,CAAC,EAAE,WAAAC,GAAW,SAAAC,GAAS,iBAAAC,GAAiB,GAAGC,EAAA,GAASC,MAMhD,gBAAAC,EAAC,SAAA,EAAM,WAAU,2CACf,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,KAAAF;AAAA,QACA,SAAAH;AAAA,QACA,UAVe,CAACM,MAAqC;AACzD,UAAAL,IAAkBK,EAAE,OAAO,OAAO;AAAA,QACpC;AAAA,QASM,WAAU;AAAA,QACT,GAAGJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEN,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWE;AAAA,UACT;AAAA,UACAP,IAAU,eAAe;AAAA,UACzBD;AAAA,QAAA;AAAA,QAGF,UAAA,gBAAAM;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWE;AAAA,cACT;AAAA,cACAP,IAAU,kBAAkB;AAAA,YAAA;AAAA,UAC9B;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF,GACF;AAGN;AACAH,EAAO,cAAc;"}
1
+ {"version":3,"file":"switch-CuKXfl3x.js","sources":["../src/components/ui/switch.tsx"],"sourcesContent":["import { forwardRef, type InputHTMLAttributes, type ChangeEvent } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst Switch = forwardRef<HTMLInputElement, SwitchProps>(\n ({ className, checked, onCheckedChange, ...props }, ref) => {\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n onCheckedChange?.(e.target.checked);\n };\n\n return (\n <label className=\"inline-flex items-center cursor-pointer\">\n <input\n type=\"checkbox\"\n ref={ref}\n checked={checked}\n onChange={handleChange}\n className=\"sr-only\"\n {...props}\n />\n <div\n className={cn(\n 'relative w-11 h-6 rounded-full border border-border transition-colors focus-within:outline-none focus-within:ring-2 focus-within:ring-ring',\n checked ? 'bg-primary' : 'bg-muted',\n className,\n )}\n >\n <div\n className={cn(\n 'absolute top-[1px] left-[1px] h-5 w-5 bg-background border border-border rounded-full transition-transform',\n checked ? 'translate-x-5' : 'translate-x-0',\n )}\n />\n </div>\n </label>\n );\n },\n);\nSwitch.displayName = 'Switch';\n\nexport { Switch };\n"],"names":["Switch","forwardRef","className","checked","onCheckedChange","props","ref","jsxs","jsx","e","cn"],"mappings":";;;AAQA,MAAMA,IAASC;AAAA,EACb,CAAC,EAAE,WAAAC,GAAW,SAAAC,GAAS,iBAAAC,GAAiB,GAAGC,EAAA,GAASC,MAMhD,gBAAAC,EAAC,SAAA,EAAM,WAAU,2CACf,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,KAAAF;AAAA,QACA,SAAAH;AAAA,QACA,UAVe,CAACM,MAAqC;AACzD,UAAAL,IAAkBK,EAAE,OAAO,OAAO;AAAA,QACpC;AAAA,QASM,WAAU;AAAA,QACT,GAAGJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEN,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWE;AAAA,UACT;AAAA,UACAP,IAAU,eAAe;AAAA,UACzBD;AAAA,QAAA;AAAA,QAGF,UAAA,gBAAAM;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWE;AAAA,cACT;AAAA,cACAP,IAAU,kBAAkB;AAAA,YAAA;AAAA,UAC9B;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF,GACF;AAGN;AACAH,EAAO,cAAc;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shellui/core",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "ShellUI Core - Core React application runtime",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -64,7 +64,7 @@
64
64
  "workbox-strategies": "^7.1.0",
65
65
  "workbox-cacheable-response": "^7.1.0",
66
66
  "workbox-expiration": "^7.1.0",
67
- "@shellui/sdk": "0.0.12"
67
+ "@shellui/sdk": "0.0.14"
68
68
  },
69
69
  "peerDependencies": {
70
70
  "react": "^18.0.0 || ^19.0.0",
@@ -31,7 +31,17 @@ export function ConfigProvider(props: ConfigProviderProps): ReturnType<typeof cr
31
31
  // Vite's define inserts the string value directly, so we only need to parse once
32
32
  // Access it directly (no typeof check) so Vite can statically analyze and replace it
33
33
  // @ts-expect-error - __SHELLUI_CONFIG__ is injected by Vite at build time
34
- const configValue: unknown = __SHELLUI_CONFIG__;
34
+ let configValue: unknown = __SHELLUI_CONFIG__;
35
+
36
+ // In development, if __SHELLUI_CONFIG__ is undefined, it might not have been replaced by Vite
37
+ // This can happen if the Vite define configuration isn't working properly
38
+ if (configValue === undefined && typeof window !== 'undefined') {
39
+ // Try to get it from window (fallback for dev mode issues)
40
+ const g = window as unknown as { __SHELLUI_CONFIG__?: unknown };
41
+ if (g.__SHELLUI_CONFIG__ !== undefined) {
42
+ configValue = g.__SHELLUI_CONFIG__;
43
+ }
44
+ }
35
45
 
36
46
  // After Vite replacement, configValue will be a JSON string
37
47
  // Example: "{\"title\":\"shellui\"}" -> parse -> {title: "shellui"}
@@ -61,8 +71,9 @@ export function ConfigProvider(props: ConfigProviderProps): ReturnType<typeof cr
61
71
  }
62
72
 
63
73
  // Fallback: try to read from globalThis (for edge cases or if define didn't work)
74
+ // This handles cases where Vite's define didn't work or config needs to be injected at runtime
64
75
  const g = globalThis as unknown as { __SHELLUI_CONFIG__?: unknown };
65
- if (typeof g.__SHELLUI_CONFIG__ !== 'undefined') {
76
+ if (typeof g.__SHELLUI_CONFIG__ !== 'undefined' && configValue === undefined) {
66
77
  const fallbackValue = g.__SHELLUI_CONFIG__;
67
78
  const parsedConfig: ShellUIConfig =
68
79
  typeof fallbackValue === 'string'
@@ -80,9 +91,12 @@ export function ConfigProvider(props: ConfigProviderProps): ReturnType<typeof cr
80
91
  }
81
92
 
82
93
  // Return empty config if __SHELLUI_CONFIG__ is undefined (fallback for edge cases)
83
- logger.warn(
84
- 'Config not found. Using empty config. Make sure shellui.config.ts is properly loaded during build.',
85
- );
94
+ // This ensures the provider always provides a value, preventing "useConfig must be used within ConfigProvider" errors
95
+ if (process.env.NODE_ENV === 'development') {
96
+ logger.warn(
97
+ 'Config not found. Using empty config. Make sure shellui.config.ts is properly loaded and Vite define is configured correctly.',
98
+ );
99
+ }
86
100
  return {} as ShellUIConfig;
87
101
  } catch (err) {
88
102
  logger.error('Failed to load ShellUI config:', { error: err });
@@ -91,6 +105,7 @@ export function ConfigProvider(props: ConfigProviderProps): ReturnType<typeof cr
91
105
  }
92
106
  });
93
107
 
108
+ // Always provide a value - never null - to prevent "useConfig must be used within ConfigProvider" errors
94
109
  const value: ConfigContextValue = { config };
95
110
  return createElement(ConfigContext.Provider, { value }, props.children);
96
111
  }
@@ -9,7 +9,20 @@ import { ConfigContext, type ConfigContextValue } from './ConfigProvider';
9
9
  export function useConfig(): ConfigContextValue {
10
10
  const context = useContext(ConfigContext);
11
11
  if (context === null) {
12
- throw new Error('useConfig must be used within a ConfigProvider');
12
+ // This error should never happen if ConfigProvider is properly wrapping the app
13
+ // If you see this error, check that:
14
+ // 1. Your component is rendered inside a <ConfigProvider> tree
15
+ // 2. The ConfigProvider is mounted before components that use useConfig()
16
+ // 3. Vite's define configuration is working correctly (check __SHELLUI_CONFIG__)
17
+ const error = new Error(
18
+ 'useConfig must be used within a ConfigProvider. ' +
19
+ 'Make sure your app is wrapped with <ConfigProvider> and that Vite define is configured correctly.'
20
+ );
21
+ if (typeof window !== 'undefined' && process.env.NODE_ENV === 'development') {
22
+ console.error('[ShellUI] ConfigProvider error:', error);
23
+ console.error('[ShellUI] Check that __SHELLUI_CONFIG__ is defined:', typeof (window as any).__SHELLUI_CONFIG__);
24
+ }
25
+ throw error;
13
26
  }
14
27
  return context;
15
28
  }