@fluid-app/rep-core 0.1.16 → 0.1.18

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 (126) hide show
  1. package/dist/data-sources/DataAwareWidget.cjs.map +1 -1
  2. package/dist/data-sources/DataAwareWidget.d.cts +6 -20
  3. package/dist/data-sources/DataAwareWidget.d.cts.map +1 -1
  4. package/dist/data-sources/DataAwareWidget.d.mts +6 -20
  5. package/dist/data-sources/DataAwareWidget.d.mts.map +1 -1
  6. package/dist/data-sources/DataAwareWidget.mjs.map +1 -1
  7. package/dist/data-sources/ErrorState.cjs.map +1 -1
  8. package/dist/data-sources/ErrorState.d.cts +2 -2
  9. package/dist/data-sources/ErrorState.d.cts.map +1 -1
  10. package/dist/data-sources/ErrorState.d.mts +2 -2
  11. package/dist/data-sources/ErrorState.d.mts.map +1 -1
  12. package/dist/data-sources/ErrorState.mjs.map +1 -1
  13. package/dist/data-sources/context.cjs.map +1 -1
  14. package/dist/data-sources/context.d.cts +2 -3
  15. package/dist/data-sources/context.d.cts.map +1 -1
  16. package/dist/data-sources/context.d.mts +2 -3
  17. package/dist/data-sources/context.d.mts.map +1 -1
  18. package/dist/data-sources/context.mjs.map +1 -1
  19. package/dist/data-sources/fetchers/api.d.cts +3 -3
  20. package/dist/data-sources/fetchers/api.d.mts +3 -3
  21. package/dist/data-sources/fetchers/custom.d.cts +10 -10
  22. package/dist/data-sources/fetchers/custom.d.mts +10 -10
  23. package/dist/data-sources/fetchers/static.d.cts +20 -20
  24. package/dist/data-sources/fetchers/static.d.cts.map +1 -1
  25. package/dist/data-sources/fetchers/static.d.mts +20 -20
  26. package/dist/data-sources/fetchers/static.d.mts.map +1 -1
  27. package/dist/data-sources/preview-context.cjs.map +1 -1
  28. package/dist/data-sources/preview-context.d.cts +1 -3
  29. package/dist/data-sources/preview-context.d.cts.map +1 -1
  30. package/dist/data-sources/preview-context.d.mts +1 -3
  31. package/dist/data-sources/preview-context.d.mts.map +1 -1
  32. package/dist/data-sources/preview-context.mjs.map +1 -1
  33. package/dist/data-sources/registry-context.cjs.map +1 -1
  34. package/dist/data-sources/registry-context.d.cts +14 -15
  35. package/dist/data-sources/registry-context.d.cts.map +1 -1
  36. package/dist/data-sources/registry-context.d.mts +14 -15
  37. package/dist/data-sources/registry-context.d.mts.map +1 -1
  38. package/dist/data-sources/registry-context.mjs.map +1 -1
  39. package/dist/data-sources/registry.cjs.map +1 -1
  40. package/dist/data-sources/registry.d.cts +4 -4
  41. package/dist/data-sources/registry.d.cts.map +1 -1
  42. package/dist/data-sources/registry.d.mts +4 -4
  43. package/dist/data-sources/registry.d.mts.map +1 -1
  44. package/dist/data-sources/registry.mjs.map +1 -1
  45. package/dist/data-sources/transformers.d.cts +3 -3
  46. package/dist/data-sources/transformers.d.mts +3 -3
  47. package/dist/data-sources/types.d.cts +1 -1
  48. package/dist/data-sources/types.d.mts +1 -1
  49. package/dist/data-sources/use-widget-data.d.cts +4 -4
  50. package/dist/data-sources/use-widget-data.d.cts.map +1 -1
  51. package/dist/data-sources/use-widget-data.d.mts +4 -4
  52. package/dist/data-sources/use-widget-data.d.mts.map +1 -1
  53. package/dist/{index-Bxe_LIi8.d.cts → index-Bgv8HUpo.d.cts} +36 -77
  54. package/dist/index-Bgv8HUpo.d.cts.map +1 -0
  55. package/dist/{index-CCAu2n19.d.mts → index-Ka_HOwpb.d.mts} +36 -77
  56. package/dist/index-Ka_HOwpb.d.mts.map +1 -0
  57. package/dist/registries/index.cjs.map +1 -1
  58. package/dist/registries/index.d.cts +86 -86
  59. package/dist/registries/index.d.cts.map +1 -1
  60. package/dist/registries/index.d.mts +86 -86
  61. package/dist/registries/index.d.mts.map +1 -1
  62. package/dist/registries/index.mjs.map +1 -1
  63. package/dist/shell/AppShellLayout.cjs.map +1 -1
  64. package/dist/shell/AppShellLayout.d.cts +15 -16
  65. package/dist/shell/AppShellLayout.d.cts.map +1 -1
  66. package/dist/shell/AppShellLayout.d.mts +15 -16
  67. package/dist/shell/AppShellLayout.d.mts.map +1 -1
  68. package/dist/shell/AppShellLayout.mjs.map +1 -1
  69. package/dist/shell/ScreenHeader.cjs.map +1 -1
  70. package/dist/shell/ScreenHeader.d.cts +2 -2
  71. package/dist/shell/ScreenHeader.d.cts.map +1 -1
  72. package/dist/shell/ScreenHeader.d.mts +2 -2
  73. package/dist/shell/ScreenHeader.d.mts.map +1 -1
  74. package/dist/shell/ScreenHeader.mjs.map +1 -1
  75. package/dist/shell/ScreenHeaderContext.cjs.map +1 -1
  76. package/dist/shell/ScreenHeaderContext.d.cts +17 -18
  77. package/dist/shell/ScreenHeaderContext.d.cts.map +1 -1
  78. package/dist/shell/ScreenHeaderContext.d.mts +17 -18
  79. package/dist/shell/ScreenHeaderContext.d.mts.map +1 -1
  80. package/dist/shell/ScreenHeaderContext.mjs.map +1 -1
  81. package/dist/shell/ThemeModeContext.cjs.map +1 -1
  82. package/dist/shell/ThemeModeContext.d.cts +2 -3
  83. package/dist/shell/ThemeModeContext.d.cts.map +1 -1
  84. package/dist/shell/ThemeModeContext.d.mts +2 -3
  85. package/dist/shell/ThemeModeContext.d.mts.map +1 -1
  86. package/dist/shell/ThemeModeContext.mjs.map +1 -1
  87. package/dist/shell/sidebar.cjs.map +1 -1
  88. package/dist/shell/sidebar.d.cts +47 -37
  89. package/dist/shell/sidebar.d.cts.map +1 -1
  90. package/dist/shell/sidebar.d.mts +47 -37
  91. package/dist/shell/sidebar.d.mts.map +1 -1
  92. package/dist/shell/sidebar.mjs +32 -32
  93. package/dist/shell/sidebar.mjs.map +1 -1
  94. package/dist/shell/use-mobile.cjs.map +1 -1
  95. package/dist/shell/use-mobile.mjs.map +1 -1
  96. package/dist/theme/index.d.cts +54 -54
  97. package/dist/theme/index.d.cts.map +1 -1
  98. package/dist/theme/index.d.mts +54 -54
  99. package/dist/theme/index.d.mts.map +1 -1
  100. package/dist/types/index.d.cts +3 -3
  101. package/dist/types/index.d.mts +3 -3
  102. package/dist/{types-ByG6Xy3C.d.mts → types-27AHMek-.d.cts} +4 -4
  103. package/dist/{types-ByG6Xy3C.d.mts.map → types-27AHMek-.d.cts.map} +1 -1
  104. package/dist/types-BXFX9bXp.cjs.map +1 -1
  105. package/dist/types-Bjmd7Fdx.mjs.map +1 -1
  106. package/dist/{types-BIXtQlHB.d.cts → types-C5Zs5V3E.d.mts} +29 -29
  107. package/dist/types-C5Zs5V3E.d.mts.map +1 -0
  108. package/dist/{types-Ctu-Zio6.d.cts → types-CeCPKvOv.d.mts} +4 -4
  109. package/dist/{types-Ctu-Zio6.d.cts.map → types-CeCPKvOv.d.mts.map} +1 -1
  110. package/dist/{types-C5OFJy-O.d.mts → types-DrzvahW8.d.cts} +29 -29
  111. package/dist/types-DrzvahW8.d.cts.map +1 -0
  112. package/dist/{widget-schema--PY1uMWx.d.cts → widget-schema-BKZgsNG7.d.mts} +59 -59
  113. package/dist/widget-schema-BKZgsNG7.d.mts.map +1 -0
  114. package/dist/{widget-schema-YkD5p3v4.d.mts → widget-schema-BSX2fVhW.d.cts} +59 -59
  115. package/dist/widget-schema-BSX2fVhW.d.cts.map +1 -0
  116. package/dist/widget-utils/index.d.cts +20 -20
  117. package/dist/widget-utils/index.d.mts +20 -20
  118. package/package.json +2 -2
  119. package/src/styles/globals.css +1 -0
  120. package/dist/index-Bxe_LIi8.d.cts.map +0 -1
  121. package/dist/index-CCAu2n19.d.mts.map +0 -1
  122. package/dist/types-BIXtQlHB.d.cts.map +0 -1
  123. package/dist/types-C5OFJy-O.d.mts.map +0 -1
  124. package/dist/widget-schema--PY1uMWx.d.cts.map +0 -1
  125. package/dist/widget-schema-YkD5p3v4.d.mts.map +0 -1
  126. package/styles/globals.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.mjs","names":[],"sources":["../../src/shell/sidebar.tsx"],"sourcesContent":["\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport * as React from \"react\";\n\nimport { useIsMobile } from \"./use-mobile\";\n\n// ---------------------------------------------------------------------------\n// Inlined utilities (avoid importing from builder's UI kit)\n// ---------------------------------------------------------------------------\n\nfunction cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n ...props\n}: React.ComponentPropsWithRef<\"div\"> & {\n orientation?: \"horizontal\" | \"vertical\";\n decorative?: boolean;\n}) {\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(\n \"bg-border shrink-0\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"bg-muted animate-pulse rounded-md\", className)}\n {...props}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst SIDEBAR_WIDTH = \"13rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\n// ---------------------------------------------------------------------------\n// Sidebar Context\n// ---------------------------------------------------------------------------\n\ntype SidebarContextValue = {\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 isPreviewMode: boolean;\n useBottomNav: boolean;\n};\n\nexport const SidebarContext = React.createContext<SidebarContextValue | null>(\n null,\n);\n\nfunction useSidebar(): SidebarContextValue {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n }\n\n return context;\n}\n\n// ---------------------------------------------------------------------------\n// SidebarProvider\n// ---------------------------------------------------------------------------\n\nconst SidebarProvider = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n viewportWidth?: number;\n previewMode?: boolean;\n useBottomNav?: boolean;\n }\n>(\n (\n {\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n viewportWidth,\n previewMode,\n useBottomNav: useBottomNavProp = false,\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n const windowIsMobile = useIsMobile();\n // Use viewportWidth if provided, otherwise use actual window detection\n const isMobile =\n viewportWidth !== undefined ? viewportWidth < 768 : windowIsMobile;\n // Preview mode is active when viewportWidth is provided\n const isPreviewMode = viewportWidth !== undefined || !!previewMode;\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n },\n [setOpenProp, open],\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile\n ? setOpenMobile((open) => !open)\n : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n // check if composer is focused - if so, let the composer handle the shortcut\n const activeElement = document.activeElement;\n const isComposerFocused =\n activeElement?.closest(\".group\\\\/composer\") ||\n activeElement?.closest(\"[data-toolbar]\") ||\n activeElement?.classList.contains(\"ProseMirror\");\n\n if (isComposerFocused) {\n return; // let the composer handle the shortcut\n }\n\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextValue>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n isPreviewMode,\n useBottomNav: useBottomNavProp,\n }),\n [\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n isPreviewMode,\n useBottomNavProp,\n ],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper flex min-h-0 w-full flex-1\",\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n );\n },\n);\nSidebarProvider.displayName = \"SidebarProvider\";\n\n// ---------------------------------------------------------------------------\n// Sidebar\n// ---------------------------------------------------------------------------\n\nconst Sidebar = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n }\n>(\n (\n {\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const {\n isMobile,\n state,\n openMobile,\n setOpenMobile,\n isPreviewMode,\n useBottomNav,\n } = useSidebar();\n\n // Define CSS variables for expanded and collapsed sidebar widths\n const sidebarWidth =\n state === \"expanded\" ? SIDEBAR_WIDTH : SIDEBAR_WIDTH_ICON;\n\n // When bottom nav is active on mobile, hide the sidebar entirely\n if (useBottomNav && isMobile) {\n return null;\n }\n\n if (collapsible === \"none\") {\n return (\n <div\n className={cn(\n \"bg-sidebar text-sidebar-foreground flex w-(--sidebar-width) flex-col rounded-tl-lg\",\n isPreviewMode ? \"h-full\" : \"h-[97vh]\",\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n // For mobile, render a slide-out sidebar with overlay\n // Use absolute positioning in preview mode so it stays within the preview container\n const positionClass = isPreviewMode ? \"absolute\" : \"fixed\";\n return (\n <>\n {/* Overlay - only visible when sidebar is open */}\n {openMobile && (\n <div\n className={cn(positionClass, \"inset-0 z-40 bg-black/50\")}\n onClick={() => setOpenMobile(false)}\n aria-hidden=\"true\"\n />\n )}\n\n {/* Sidebar - slides in from left */}\n <div\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n className={cn(\n positionClass,\n \"bg-sidebar text-sidebar-foreground top-0 left-0 z-50 h-full w-[--sidebar-width] p-0 transition-transform duration-300 ease-in-out\",\n openMobile ? \"translate-x-0\" : \"-translate-x-full\",\n className,\n )}\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n ref={ref}\n {...props}\n >\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </div>\n </>\n );\n }\n\n return (\n <div\n ref={ref}\n className=\"group peer bg-sidebar text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n style={\n {\n \"--sidebar-width\": sidebarWidth,\n } as React.CSSProperties\n }\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n className={cn(\n \"relative bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n )}\n />\n <div\n className={cn(\n \"relative inset-y-0 z-[20] hidden w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n isPreviewMode ? \"h-full\" : \"h-svh\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=right]:border-l\",\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n className=\"group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n },\n);\nSidebar.displayName = \"Sidebar\";\n\n// ---------------------------------------------------------------------------\n// SidebarRail\n// ---------------------------------------------------------------------------\n\nconst SidebarRail = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\">\n>(({ className, ...props }, ref) => {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n ref={ref}\n data-sidebar=\"rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-[10] hidden w-4 -translate-x-full transition-all ease-linear group-data-[side=left]:-right-[1.375rem] group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] 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 \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 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});\nSidebarRail.displayName = \"SidebarRail\";\n\n// ---------------------------------------------------------------------------\n// SidebarInset\n// ---------------------------------------------------------------------------\n\nconst SidebarInset = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"main\">\n>(({ className, ...props }, ref) => {\n const { isPreviewMode } = useSidebar();\n return (\n <main\n ref={ref}\n className={cn(\n \"relative flex flex-1 flex-col\",\n isPreviewMode\n ? \"max-h-[calc(100svh-(--spacing(13)))]\"\n : \"min-h-svh peer-data-[variant=inset]:min-h-[calc(100svh-(--spacing(4)))]\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarInset.displayName = \"SidebarInset\";\n\n// ---------------------------------------------------------------------------\n// SidebarInput\n// ---------------------------------------------------------------------------\n\nconst SidebarInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<\"input\">\n>(({ className, ...props }, ref) => {\n return (\n <input\n ref={ref}\n data-sidebar=\"input\"\n className={cn(\n \"bg-background focus-visible:ring-sidebar-ring h-8 w-full rounded-md border px-3 text-sm shadow-none focus-visible:ring-2 focus-visible:outline-none\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarInput.displayName = \"SidebarInput\";\n\n// ---------------------------------------------------------------------------\n// SidebarHeader / Footer\n// ---------------------------------------------------------------------------\n\nconst SidebarHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n});\nSidebarHeader.displayName = \"SidebarHeader\";\n\nconst SidebarFooter = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n});\nSidebarFooter.displayName = \"SidebarFooter\";\n\n// ---------------------------------------------------------------------------\n// SidebarSeparator\n// ---------------------------------------------------------------------------\n\nconst SidebarSeparator = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n orientation?: \"horizontal\" | \"vertical\";\n }\n>(({ className, ...props }, ref) => {\n return (\n <Separator\n ref={ref}\n data-sidebar=\"separator\"\n className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n {...props}\n />\n );\n});\nSidebarSeparator.displayName = \"SidebarSeparator\";\n\n// ---------------------------------------------------------------------------\n// SidebarContent\n// ---------------------------------------------------------------------------\n\nconst SidebarContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"content\"\n className={cn(\n \"scrollbar-none flex min-h-0 flex-1 flex-col gap-2 overflow-auto rounded group-data-[collapsible=icon]:gap-0 group-data-[collapsible=icon]:overflow-hidden group-data-[collapsible=icon]:pt-3\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarContent.displayName = \"SidebarContent\";\n\n// ---------------------------------------------------------------------------\n// SidebarGroup\n// ---------------------------------------------------------------------------\n\nconst SidebarGroup = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn(\n \"relative flex w-full min-w-0 flex-col p-2 group-data-[collapsible=icon]:py-0 group-data-[collapsible=icon]:pt-4\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarGroup.displayName = \"SidebarGroup\";\n\nconst SidebarGroupLabel = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & { asChild?: boolean }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"div\";\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-label\"\n className={cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarGroupLabel.displayName = \"SidebarGroupLabel\";\n\nconst SidebarGroupAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & { asChild?: boolean }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>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});\nSidebarGroupAction.displayName = \"SidebarGroupAction\";\n\nconst SidebarGroupContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n));\nSidebarGroupContent.displayName = \"SidebarGroupContent\";\n\n// ---------------------------------------------------------------------------\n// SidebarMenu\n// ---------------------------------------------------------------------------\n\nconst SidebarMenu = React.forwardRef<\n HTMLUListElement,\n React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n));\nSidebarMenu.displayName = \"SidebarMenu\";\n\nconst SidebarMenuItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentProps<\"li\">\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n));\nSidebarMenuItem.displayName = \"SidebarMenuItem\";\n\n// ---------------------------------------------------------------------------\n// SidebarMenuButton\n// ---------------------------------------------------------------------------\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button ring-sidebar-ring hover:bg-sidebar-primary hover:text-sidebar-primary-foreground active:bg-sidebar-primary active:text-sidebar-primary-foreground data-[active=true]:bg-sidebar-primary data-[active=true]:text-sidebar-primary-foreground data-[state=open]:hover:bg-sidebar-primary data-[state=open]:hover:text-sidebar-primary-foreground flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:font-medium [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"hover:bg-sidebar-primary hover:text-sidebar-primary-foreground\",\n outline:\n \"hover:bg-sidebar-primary hover:text-sidebar-primary-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-primary))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nconst SidebarMenuButton = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n isActive?: boolean;\n } & VariantProps<typeof sidebarMenuButtonVariants>\n>(\n (\n {\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n className,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n\n const button = (\n <Comp\n ref={ref}\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 return button;\n },\n);\nSidebarMenuButton.displayName = \"SidebarMenuButton\";\n\n// ---------------------------------------------------------------------------\n// SidebarMenuAction / Badge / Skeleton\n// ---------------------------------------------------------------------------\n\nconst SidebarMenuAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n showOnHover?: boolean;\n }\n>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\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 \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarMenuAction.displayName = \"SidebarMenuAction\";\n\nconst SidebarMenuBadge = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"menu-badge\"\n className={cn(\n \"text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground 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));\nSidebarMenuBadge.displayName = \"SidebarMenuBadge\";\n\nconst SidebarMenuSkeleton = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n showIcon?: boolean;\n }\n>(({ className, showIcon = false, ...props }, ref) => {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n ref={ref}\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n});\nSidebarMenuSkeleton.displayName = \"SidebarMenuSkeleton\";\n\n// ---------------------------------------------------------------------------\n// SidebarMenuSub\n// ---------------------------------------------------------------------------\n\nconst SidebarMenuSub = React.forwardRef<\n HTMLUListElement,\n React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu-sub\"\n className={cn(\n \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n));\nSidebarMenuSub.displayName = \"SidebarMenuSub\";\n\nconst SidebarMenuSubItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentProps<\"li\">\n>(({ ...props }, ref) => <li ref={ref} {...props} />);\nSidebarMenuSubItem.displayName = \"SidebarMenuSubItem\";\n\nconst SidebarMenuSubButton = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n }\n>(({ asChild = false, size = \"md\", isActive, className, ...props }, ref) => {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\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});\nSidebarMenuSubButton.displayName = \"SidebarMenuSubButton\";\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n useSidebar,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"sidebar.mjs","names":["React"],"sources":["../../src/shell/sidebar.tsx"],"sourcesContent":["\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport * as React from \"react\";\n\nimport { useIsMobile } from \"./use-mobile\";\n\n// ---------------------------------------------------------------------------\n// Inlined utilities (avoid importing from builder's UI kit)\n// ---------------------------------------------------------------------------\n\nfunction cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n ...props\n}: React.ComponentPropsWithRef<\"div\"> & {\n orientation?: \"horizontal\" | \"vertical\";\n decorative?: boolean;\n}) {\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(\n \"bg-border shrink-0\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"bg-muted animate-pulse rounded-md\", className)}\n {...props}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst SIDEBAR_WIDTH = \"13rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\n// ---------------------------------------------------------------------------\n// Sidebar Context\n// ---------------------------------------------------------------------------\n\ntype SidebarContextValue = {\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 isPreviewMode: boolean;\n useBottomNav: boolean;\n};\n\nexport const SidebarContext: React.Context<SidebarContextValue | null> =\n React.createContext<SidebarContextValue | null>(null);\n\nfunction useSidebar(): SidebarContextValue {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n }\n\n return context;\n}\n\n// ---------------------------------------------------------------------------\n// SidebarProvider\n// ---------------------------------------------------------------------------\n\nconst SidebarProvider: React.ForwardRefExoticComponent<\n React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n viewportWidth?: number;\n previewMode?: boolean;\n useBottomNav?: boolean;\n } & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n viewportWidth?: number;\n previewMode?: boolean;\n useBottomNav?: boolean;\n }\n>(\n (\n {\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n viewportWidth,\n previewMode,\n useBottomNav: useBottomNavProp = false,\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n const windowIsMobile = useIsMobile();\n // Use viewportWidth if provided, otherwise use actual window detection\n const isMobile =\n viewportWidth !== undefined ? viewportWidth < 768 : windowIsMobile;\n // Preview mode is active when viewportWidth is provided\n const isPreviewMode = viewportWidth !== undefined || !!previewMode;\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n },\n [setOpenProp, open],\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile\n ? setOpenMobile((open) => !open)\n : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n // check if composer is focused - if so, let the composer handle the shortcut\n const activeElement = document.activeElement;\n const isComposerFocused =\n activeElement?.closest(\".group\\\\/composer\") ||\n activeElement?.closest(\"[data-toolbar]\") ||\n activeElement?.classList.contains(\"ProseMirror\");\n\n if (isComposerFocused) {\n return; // let the composer handle the shortcut\n }\n\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextValue>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n isPreviewMode,\n useBottomNav: useBottomNavProp,\n }),\n [\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n isPreviewMode,\n useBottomNavProp,\n ],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper flex min-h-0 w-full flex-1\",\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n );\n },\n);\nSidebarProvider.displayName = \"SidebarProvider\";\n\n// ---------------------------------------------------------------------------\n// Sidebar\n// ---------------------------------------------------------------------------\n\nconst Sidebar: React.ForwardRefExoticComponent<\n React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n } & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n }\n>(\n (\n {\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const {\n isMobile,\n state,\n openMobile,\n setOpenMobile,\n isPreviewMode,\n useBottomNav,\n } = useSidebar();\n\n // Define CSS variables for expanded and collapsed sidebar widths\n const sidebarWidth =\n state === \"expanded\" ? SIDEBAR_WIDTH : SIDEBAR_WIDTH_ICON;\n\n // When bottom nav is active on mobile, hide the sidebar entirely\n if (useBottomNav && isMobile) {\n return null;\n }\n\n if (collapsible === \"none\") {\n return (\n <div\n className={cn(\n \"bg-sidebar text-sidebar-foreground flex w-(--sidebar-width) flex-col rounded-tl-lg\",\n isPreviewMode ? \"h-full\" : \"h-[97vh]\",\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n // For mobile, render a slide-out sidebar with overlay\n // Use absolute positioning in preview mode so it stays within the preview container\n const positionClass = isPreviewMode ? \"absolute\" : \"fixed\";\n return (\n <>\n {/* Overlay - only visible when sidebar is open */}\n {openMobile && (\n <div\n className={cn(positionClass, \"inset-0 z-40 bg-black/50\")}\n onClick={() => setOpenMobile(false)}\n aria-hidden=\"true\"\n />\n )}\n\n {/* Sidebar - slides in from left */}\n <div\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n className={cn(\n positionClass,\n \"bg-sidebar text-sidebar-foreground top-0 left-0 z-50 h-full w-[--sidebar-width] p-0 transition-transform duration-300 ease-in-out\",\n openMobile ? \"translate-x-0\" : \"-translate-x-full\",\n className,\n )}\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n ref={ref}\n {...props}\n >\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </div>\n </>\n );\n }\n\n return (\n <div\n ref={ref}\n className=\"group peer bg-sidebar text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n style={\n {\n \"--sidebar-width\": sidebarWidth,\n } as React.CSSProperties\n }\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n className={cn(\n \"relative bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n )}\n />\n <div\n className={cn(\n \"relative inset-y-0 z-[20] hidden w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n isPreviewMode ? \"h-full\" : \"h-svh\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=right]:border-l\",\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n className=\"group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n },\n);\nSidebar.displayName = \"Sidebar\";\n\n// ---------------------------------------------------------------------------\n// SidebarRail\n// ---------------------------------------------------------------------------\n\nconst SidebarRail: React.ForwardRefExoticComponent<\n React.ComponentProps<\"button\"> & React.RefAttributes<HTMLButtonElement>\n> = React.forwardRef<HTMLButtonElement, React.ComponentProps<\"button\">>(\n ({ className, ...props }, ref) => {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n ref={ref}\n data-sidebar=\"rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-[10] hidden w-4 -translate-x-full transition-all ease-linear group-data-[side=left]:-right-[1.375rem] group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] 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 \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 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);\nSidebarRail.displayName = \"SidebarRail\";\n\n// ---------------------------------------------------------------------------\n// SidebarInset\n// ---------------------------------------------------------------------------\n\nconst SidebarInset: React.ForwardRefExoticComponent<\n React.ComponentProps<\"main\"> & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<HTMLDivElement, React.ComponentProps<\"main\">>(\n ({ className, ...props }, ref) => {\n const { isPreviewMode } = useSidebar();\n return (\n <main\n ref={ref}\n className={cn(\n \"relative flex flex-1 flex-col\",\n isPreviewMode\n ? \"max-h-[calc(100svh-(--spacing(13)))]\"\n : \"min-h-svh peer-data-[variant=inset]:min-h-[calc(100svh-(--spacing(4)))]\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarInset.displayName = \"SidebarInset\";\n\n// ---------------------------------------------------------------------------\n// SidebarInput\n// ---------------------------------------------------------------------------\n\nconst SidebarInput: React.ForwardRefExoticComponent<\n React.ComponentProps<\"input\"> & React.RefAttributes<HTMLInputElement>\n> = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, ...props }, ref) => {\n return (\n <input\n ref={ref}\n data-sidebar=\"input\"\n className={cn(\n \"bg-background focus-visible:ring-sidebar-ring h-8 w-full rounded-md border px-3 text-sm shadow-none focus-visible:ring-2 focus-visible:outline-none\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarInput.displayName = \"SidebarInput\";\n\n// ---------------------------------------------------------------------------\n// SidebarHeader / Footer\n// ---------------------------------------------------------------------------\n\nconst SidebarHeader: React.ForwardRefExoticComponent<\n React.ComponentProps<\"div\"> & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n },\n);\nSidebarHeader.displayName = \"SidebarHeader\";\n\nconst SidebarFooter: React.ForwardRefExoticComponent<\n React.ComponentProps<\"div\"> & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n },\n);\nSidebarFooter.displayName = \"SidebarFooter\";\n\n// ---------------------------------------------------------------------------\n// SidebarSeparator\n// ---------------------------------------------------------------------------\n\nconst SidebarSeparator: React.ForwardRefExoticComponent<\n React.ComponentProps<\"div\"> & {\n orientation?: \"horizontal\" | \"vertical\";\n } & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n orientation?: \"horizontal\" | \"vertical\";\n }\n>(({ className, ...props }, ref) => {\n return (\n <Separator\n ref={ref}\n data-sidebar=\"separator\"\n className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n {...props}\n />\n );\n});\nSidebarSeparator.displayName = \"SidebarSeparator\";\n\n// ---------------------------------------------------------------------------\n// SidebarContent\n// ---------------------------------------------------------------------------\n\nconst SidebarContent: React.ForwardRefExoticComponent<\n React.ComponentProps<\"div\"> & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"content\"\n className={cn(\n \"scrollbar-none flex min-h-0 flex-1 flex-col gap-2 overflow-auto rounded group-data-[collapsible=icon]:gap-0 group-data-[collapsible=icon]:overflow-hidden group-data-[collapsible=icon]:pt-3\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarContent.displayName = \"SidebarContent\";\n\n// ---------------------------------------------------------------------------\n// SidebarGroup\n// ---------------------------------------------------------------------------\n\nconst SidebarGroup: React.ForwardRefExoticComponent<\n React.ComponentProps<\"div\"> & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn(\n \"relative flex w-full min-w-0 flex-col p-2 group-data-[collapsible=icon]:py-0 group-data-[collapsible=icon]:pt-4\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarGroup.displayName = \"SidebarGroup\";\n\nconst SidebarGroupLabel: React.ForwardRefExoticComponent<\n React.ComponentProps<\"div\"> & {\n asChild?: boolean;\n } & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & { asChild?: boolean }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"div\";\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-label\"\n className={cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarGroupLabel.displayName = \"SidebarGroupLabel\";\n\nconst SidebarGroupAction: React.ForwardRefExoticComponent<\n React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n } & React.RefAttributes<HTMLButtonElement>\n> = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & { asChild?: boolean }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>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});\nSidebarGroupAction.displayName = \"SidebarGroupAction\";\n\nconst SidebarGroupContent: React.ForwardRefExoticComponent<\n React.ComponentProps<\"div\"> & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n ),\n);\nSidebarGroupContent.displayName = \"SidebarGroupContent\";\n\n// ---------------------------------------------------------------------------\n// SidebarMenu\n// ---------------------------------------------------------------------------\n\nconst SidebarMenu: React.ForwardRefExoticComponent<\n React.ComponentProps<\"ul\"> & React.RefAttributes<HTMLUListElement>\n> = React.forwardRef<HTMLUListElement, React.ComponentProps<\"ul\">>(\n ({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n ),\n);\nSidebarMenu.displayName = \"SidebarMenu\";\n\nconst SidebarMenuItem: React.ForwardRefExoticComponent<\n React.ComponentProps<\"li\"> & React.RefAttributes<HTMLLIElement>\n> = React.forwardRef<HTMLLIElement, React.ComponentProps<\"li\">>(\n ({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n ),\n);\nSidebarMenuItem.displayName = \"SidebarMenuItem\";\n\n// ---------------------------------------------------------------------------\n// SidebarMenuButton\n// ---------------------------------------------------------------------------\n\nconst sidebarMenuButtonVariants: (\n props?:\n | ({\n variant?: \"default\" | \"outline\" | null | undefined;\n size?: \"default\" | \"sm\" | \"lg\" | null | undefined;\n } & (\n | {\n class: ClassValue;\n className?: never;\n }\n | {\n class?: never;\n className: ClassValue;\n }\n | {\n class?: never;\n className?: never;\n }\n ))\n | undefined,\n) => string = cva(\n \"peer/menu-button ring-sidebar-ring hover:bg-sidebar-primary hover:text-sidebar-primary-foreground active:bg-sidebar-primary active:text-sidebar-primary-foreground data-[active=true]:bg-sidebar-primary data-[active=true]:text-sidebar-primary-foreground data-[state=open]:hover:bg-sidebar-primary data-[state=open]:hover:text-sidebar-primary-foreground flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:font-medium [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"hover:bg-sidebar-primary hover:text-sidebar-primary-foreground\",\n outline:\n \"hover:bg-sidebar-primary hover:text-sidebar-primary-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-primary))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nconst SidebarMenuButton: React.ForwardRefExoticComponent<\n React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n isActive?: boolean;\n } & VariantProps<typeof sidebarMenuButtonVariants> &\n React.RefAttributes<HTMLButtonElement>\n> = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n isActive?: boolean;\n } & VariantProps<typeof sidebarMenuButtonVariants>\n>(\n (\n {\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n className,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n\n const button = (\n <Comp\n ref={ref}\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 return button;\n },\n);\nSidebarMenuButton.displayName = \"SidebarMenuButton\";\n\n// ---------------------------------------------------------------------------\n// SidebarMenuAction / Badge / Skeleton\n// ---------------------------------------------------------------------------\n\nconst SidebarMenuAction: React.ForwardRefExoticComponent<\n React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n showOnHover?: boolean;\n } & React.RefAttributes<HTMLButtonElement>\n> = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n showOnHover?: boolean;\n }\n>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\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 \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarMenuAction.displayName = \"SidebarMenuAction\";\n\nconst SidebarMenuBadge: React.ForwardRefExoticComponent<\n React.ComponentProps<\"div\"> & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"menu-badge\"\n className={cn(\n \"text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground 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);\nSidebarMenuBadge.displayName = \"SidebarMenuBadge\";\n\nconst SidebarMenuSkeleton: React.ForwardRefExoticComponent<\n React.ComponentProps<\"div\"> & {\n showIcon?: boolean;\n } & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n showIcon?: boolean;\n }\n>(({ className, showIcon = false, ...props }, ref) => {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n ref={ref}\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n});\nSidebarMenuSkeleton.displayName = \"SidebarMenuSkeleton\";\n\n// ---------------------------------------------------------------------------\n// SidebarMenuSub\n// ---------------------------------------------------------------------------\n\nconst SidebarMenuSub: React.ForwardRefExoticComponent<\n React.ComponentProps<\"ul\"> & React.RefAttributes<HTMLUListElement>\n> = React.forwardRef<HTMLUListElement, React.ComponentProps<\"ul\">>(\n ({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu-sub\"\n className={cn(\n \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n ),\n);\nSidebarMenuSub.displayName = \"SidebarMenuSub\";\n\nconst SidebarMenuSubItem: React.ForwardRefExoticComponent<\n React.ComponentProps<\"li\"> & React.RefAttributes<HTMLLIElement>\n> = React.forwardRef<HTMLLIElement, React.ComponentProps<\"li\">>(\n ({ ...props }, ref) => <li ref={ref} {...props} />,\n);\nSidebarMenuSubItem.displayName = \"SidebarMenuSubItem\";\n\nconst SidebarMenuSubButton: React.ForwardRefExoticComponent<\n React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n } & React.RefAttributes<HTMLAnchorElement>\n> = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n }\n>(({ asChild = false, size = \"md\", isActive, className, ...props }, ref) => {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\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});\nSidebarMenuSubButton.displayName = \"SidebarMenuSubButton\";\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n useSidebar,\n};\n"],"mappings":";;;;;;;;;AAcA,SAAS,GAAG,GAAG,QAAsB;AACnC,QAAO,QAAQ,KAAK,OAAO,CAAC;;AAG9B,SAAS,UAAU,EACjB,WACA,cAAc,cACd,GAAG,SAIF;AACD,QACE,oBAAC,OAAD;EACE,MAAK;EACL,oBAAkB;EAClB,WAAW,GACT,sBACA,gBAAgB,eAAe,gBAAgB,eAC/C,UACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,SAAS,EAChB,WACA,GAAG,SACoC;AACvC,QACE,oBAAC,OAAD;EACE,WAAW,GAAG,qCAAqC,UAAU;EAC7D,GAAI;EACJ,CAAA;;AAQN,MAAM,gBAAgB;AACtB,MAAM,uBAAuB;AAC7B,MAAM,qBAAqB;AAC3B,MAAM,4BAA4B;AAkBlC,MAAa,iBACXA,QAAM,cAA0C,KAAK;AAEvD,SAAS,aAAkC;CACzC,MAAM,UAAUA,QAAM,WAAW,eAAe;AAChD,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,oDAAoD;AAGtE,QAAO;;AAOT,MAAM,kBASFA,QAAM,YAYN,EACE,cAAc,MACd,MAAM,UACN,cAAc,aACd,eACA,aACA,cAAc,mBAAmB,OACjC,WACA,OACA,UACA,GAAG,SAEL,QACG;CACH,MAAM,iBAAiB,aAAa;CAEpC,MAAM,WACJ,kBAAkB,KAAA,IAAY,gBAAgB,MAAM;CAEtD,MAAM,gBAAgB,kBAAkB,KAAA,KAAa,CAAC,CAAC;CACvD,MAAM,CAAC,YAAY,iBAAiBA,QAAM,SAAS,MAAM;CAIzD,MAAM,CAAC,OAAO,YAAYA,QAAM,SAAS,YAAY;CACrD,MAAM,OAAO,YAAY;CACzB,MAAM,UAAUA,QAAM,aACnB,UAAmD;EAClD,MAAM,YAAY,OAAO,UAAU,aAAa,MAAM,KAAK,GAAG;AAC9D,MAAI,YACF,aAAY,UAAU;MAEtB,UAAS,UAAU;IAGvB,CAAC,aAAa,KAAK,CACpB;CAGD,MAAM,gBAAgBA,QAAM,kBAAkB;AAC5C,SAAO,WACH,eAAe,SAAS,CAAC,KAAK,GAC9B,SAAS,SAAS,CAAC,KAAK;IAC3B;EAAC;EAAU;EAAS;EAAc,CAAC;AAGtC,SAAM,gBAAgB;EACpB,MAAM,iBAAiB,UAAyB;AAC9C,OACE,MAAM,QAAQ,8BACb,MAAM,WAAW,MAAM,UACxB;IAEA,MAAM,gBAAgB,SAAS;AAM/B,QAJE,eAAe,QAAQ,oBAAoB,IAC3C,eAAe,QAAQ,iBAAiB,IACxC,eAAe,UAAU,SAAS,cAAc,CAGhD;AAGF,UAAM,gBAAgB;AACtB,mBAAe;;;AAInB,SAAO,iBAAiB,WAAW,cAAc;AACjD,eAAa,OAAO,oBAAoB,WAAW,cAAc;IAChE,CAAC,cAAc,CAAC;CAInB,MAAM,QAAQ,OAAO,aAAa;CAElC,MAAM,eAAeA,QAAM,eAClB;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;EACf,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;AAED,QACE,oBAAC,eAAe,UAAhB;EAAyB,OAAO;YAC9B,oBAAC,OAAD;GACE,OACE;IACE,mBAAmB;IACnB,wBAAwB;IACxB,GAAG;IACJ;GAEH,WAAW,GACT,oDACA,UACD;GACI;GACL,GAAI;GAEH;GACG,CAAA;EACkB,CAAA;EAG/B;AACD,gBAAgB,cAAc;AAM9B,MAAM,UAMFA,QAAM,YASN,EACE,OAAO,QACP,UAAU,WACV,cAAc,aACd,WACA,UACA,GAAG,SAEL,QACG;CACH,MAAM,EACJ,UACA,OACA,YACA,eACA,eACA,iBACE,YAAY;CAGhB,MAAM,eACJ,UAAU,aAAa,gBAAgB;AAGzC,KAAI,gBAAgB,SAClB,QAAO;AAGT,KAAI,gBAAgB,OAClB,QACE,oBAAC,OAAD;EACE,WAAW,GACT,sFACA,gBAAgB,WAAW,YAC3B,UACD;EACI;EACL,GAAI;EAEH;EACG,CAAA;AAIV,KAAI,UAAU;EAGZ,MAAM,gBAAgB,gBAAgB,aAAa;AACnD,SACE,qBAAA,UAAA,EAAA,UAAA,CAEG,cACC,oBAAC,OAAD;GACE,WAAW,GAAG,eAAe,2BAA2B;GACxD,eAAe,cAAc,MAAM;GACnC,eAAY;GACZ,CAAA,EAIJ,oBAAC,OAAD;GACE,gBAAa;GACb,eAAY;GACZ,WAAW,GACT,eACA,qIACA,aAAa,kBAAkB,qBAC/B,UACD;GACD,OACE,EACE,mBAAmB,sBACpB;GAEE;GACL,GAAI;aAEJ,oBAAC,OAAD;IAAK,WAAU;IAA+B;IAAe,CAAA;GACzD,CAAA,CACL,EAAA,CAAA;;AAIP,QACE,qBAAC,OAAD;EACO;EACL,WAAU;EACV,cAAY;EACZ,oBAAkB,UAAU,cAAc,cAAc;EACxD,gBAAc;EACd,aAAW;EACX,OACE,EACE,mBAAmB,cACpB;YAVL,CAcE,oBAAC,OAAD,EACE,WAAW,GACT,uEACA,0CACA,sCACA,YAAY,cAAc,YAAY,UAClC,qFACA,yDACL,EACD,CAAA,EACF,oBAAC,OAAD;GACE,WAAW,GACT,uHACA,gBAAgB,WAAW,SAC3B,SAAS,SACL,mFACA,oFAEJ,YAAY,cAAc,YAAY,UAClC,6FACA,2FACJ,UACD;GACD,GAAI;aAEJ,oBAAC,OAAD;IACE,gBAAa;IACb,WAAU;IAET;IACG,CAAA;GACF,CAAA,CACF;;EAGX;AACD,QAAQ,cAAc;AAMtB,MAAM,cAEFA,QAAM,YACP,EAAE,WAAW,GAAG,SAAS,QAAQ;CAChC,MAAM,EAAE,kBAAkB,YAAY;AAEtC,QACE,oBAAC,UAAD;EACO;EACL,gBAAa;EACb,cAAW;EACX,UAAU;EACV,SAAS;EACT,OAAM;EACN,WAAW,GACT,+PACA,4EACA,0HACA,2JACA,6DACA,6DACA,UACD;EACD,GAAI;EACJ,CAAA;EAGP;AACD,YAAY,cAAc;AAM1B,MAAM,eAEFA,QAAM,YACP,EAAE,WAAW,GAAG,SAAS,QAAQ;CAChC,MAAM,EAAE,kBAAkB,YAAY;AACtC,QACE,oBAAC,QAAD;EACO;EACL,WAAW,GACT,iCACA,gBACI,yCACA,2EACJ,mNACA,UACD;EACD,GAAI;EACJ,CAAA;EAGP;AACD,aAAa,cAAc;AAM3B,MAAM,eAEFA,QAAM,YACP,EAAE,WAAW,GAAG,SAAS,QAAQ;AAChC,QACE,oBAAC,SAAD;EACO;EACL,gBAAa;EACb,WAAW,GACT,uJACA,UACD;EACD,GAAI;EACJ,CAAA;EAGP;AACD,aAAa,cAAc;AAM3B,MAAM,gBAEFA,QAAM,YACP,EAAE,WAAW,GAAG,SAAS,QAAQ;AAChC,QACE,oBAAC,OAAD;EACO;EACL,gBAAa;EACb,WAAW,GAAG,2BAA2B,UAAU;EACnD,GAAI;EACJ,CAAA;EAGP;AACD,cAAc,cAAc;AAE5B,MAAM,gBAEFA,QAAM,YACP,EAAE,WAAW,GAAG,SAAS,QAAQ;AAChC,QACE,oBAAC,OAAD;EACO;EACL,gBAAa;EACb,WAAW,GAAG,2BAA2B,UAAU;EACnD,GAAI;EACJ,CAAA;EAGP;AACD,cAAc,cAAc;AAM5B,MAAM,mBAIFA,QAAM,YAKP,EAAE,WAAW,GAAG,SAAS,QAAQ;AAClC,QACE,oBAAC,WAAD;EACO;EACL,gBAAa;EACb,WAAW,GAAG,iCAAiC,UAAU;EACzD,GAAI;EACJ,CAAA;EAEJ;AACF,iBAAiB,cAAc;AAM/B,MAAM,iBAEFA,QAAM,YACP,EAAE,WAAW,GAAG,SAAS,QAAQ;AAChC,QACE,oBAAC,OAAD;EACO;EACL,gBAAa;EACb,WAAW,GACT,gMACA,UACD;EACD,GAAI;EACJ,CAAA;EAGP;AACD,eAAe,cAAc;AAM7B,MAAM,eAEFA,QAAM,YACP,EAAE,WAAW,GAAG,SAAS,QAAQ;AAChC,QACE,oBAAC,OAAD;EACO;EACL,gBAAa;EACb,WAAW,GACT,mHACA,UACD;EACD,GAAI;EACJ,CAAA;EAGP;AACD,aAAa,cAAc;AAE3B,MAAM,oBAIFA,QAAM,YAGP,EAAE,WAAW,UAAU,OAAO,GAAG,SAAS,QAAQ;AAGnD,QACE,oBAHW,UAAU,OAAO,OAG5B;EACO;EACL,gBAAa;EACb,WAAW,GACT,4OACA,4EACA,UACD;EACD,GAAI;EACJ,CAAA;EAEJ;AACF,kBAAkB,cAAc;AAEhC,MAAM,qBAIFA,QAAM,YAGP,EAAE,WAAW,UAAU,OAAO,GAAG,SAAS,QAAQ;AAGnD,QACE,oBAHW,UAAU,OAAO,UAG5B;EACO;EACL,gBAAa;EACb,WAAW,GACT,8RAEA,iDACA,wCACA,UACD;EACD,GAAI;EACJ,CAAA;EAEJ;AACF,mBAAmB,cAAc;AAEjC,MAAM,sBAEFA,QAAM,YACP,EAAE,WAAW,GAAG,SAAS,QACxB,oBAAC,OAAD;CACO;CACL,gBAAa;CACb,WAAW,GAAG,kBAAkB,UAAU;CAC1C,GAAI;CACJ,CAAA,CAEL;AACD,oBAAoB,cAAc;AAMlC,MAAM,cAEFA,QAAM,YACP,EAAE,WAAW,GAAG,SAAS,QACxB,oBAAC,MAAD;CACO;CACL,gBAAa;CACb,WAAW,GAAG,sCAAsC,UAAU;CAC9D,GAAI;CACJ,CAAA,CAEL;AACD,YAAY,cAAc;AAE1B,MAAM,kBAEFA,QAAM,YACP,EAAE,WAAW,GAAG,SAAS,QACxB,oBAAC,MAAD;CACO;CACL,gBAAa;CACb,WAAW,GAAG,4BAA4B,UAAU;CACpD,GAAI;CACJ,CAAA,CAEL;AACD,gBAAgB,cAAc;AAM9B,MAAM,4BAoBQ,IACZ,6zBACA;CACE,UAAU;EACR,SAAS;GACP,SACE;GACF,SACE;GACH;EACD,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EACf,SAAS;EACT,MAAM;EACP;CACF,CACF;AAED,MAAM,oBAMFA,QAAM,YAQN,EACE,UAAU,OACV,WAAW,OACX,UAAU,WACV,OAAO,WACP,WACA,GAAG,SAEL,QACG;AAcH,QAVE,oBAHW,UAAU,OAAO,UAG5B;EACO;EACL,gBAAa;EACb,aAAW;EACX,eAAa;EACb,WAAW,GAAG,0BAA0B;GAAE;GAAS;GAAM,CAAC,EAAE,UAAU;EACtE,GAAI;EACJ,CAAA;EAKP;AACD,kBAAkB,cAAc;AAMhC,MAAM,oBAKFA,QAAM,YAMP,EAAE,WAAW,UAAU,OAAO,cAAc,OAAO,GAAG,SAAS,QAAQ;AAGxE,QACE,oBAHW,UAAU,OAAO,UAG5B;EACO;EACL,gBAAa;EACb,WAAW,GACT,oVAEA,iDACA,yCACA,gDACA,2CACA,wCACA,eACE,4LACF,UACD;EACD,GAAI;EACJ,CAAA;EAEJ;AACF,kBAAkB,cAAc;AAEhC,MAAM,mBAEFA,QAAM,YACP,EAAE,WAAW,GAAG,SAAS,QACxB,oBAAC,OAAD;CACO;CACL,gBAAa;CACb,WAAW,GACT,0KACA,4HACA,yCACA,gDACA,2CACA,wCACA,UACD;CACD,GAAI;CACJ,CAAA,CAEL;AACD,iBAAiB,cAAc;AAE/B,MAAM,sBAIFA,QAAM,YAKP,EAAE,WAAW,WAAW,OAAO,GAAG,SAAS,QAAQ;CAEpD,MAAM,QAAQA,QAAM,cAAc;AAChC,SAAO,GAAG,KAAK,MAAM,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG;IAC7C,EAAE,CAAC;AAEN,QACE,qBAAC,OAAD;EACO;EACL,gBAAa;EACb,WAAW,GAAG,+CAA+C,UAAU;EACvE,GAAI;YAJN,CAMG,YACC,oBAAC,UAAD;GACE,WAAU;GACV,gBAAa;GACb,CAAA,EAEJ,oBAAC,UAAD;GACE,WAAU;GACV,gBAAa;GACb,OACE,EACE,oBAAoB,OACrB;GAEH,CAAA,CACE;;EAER;AACF,oBAAoB,cAAc;AAMlC,MAAM,iBAEFA,QAAM,YACP,EAAE,WAAW,GAAG,SAAS,QACxB,oBAAC,MAAD;CACO;CACL,gBAAa;CACb,WAAW,GACT,kGACA,wCACA,UACD;CACD,GAAI;CACJ,CAAA,CAEL;AACD,eAAe,cAAc;AAE7B,MAAM,qBAEFA,QAAM,YACP,EAAE,GAAG,SAAS,QAAQ,oBAAC,MAAD;CAAS;CAAK,GAAI;CAAS,CAAA,CACnD;AACD,mBAAmB,cAAc;AAEjC,MAAM,uBAMFA,QAAM,YAOP,EAAE,UAAU,OAAO,OAAO,MAAM,UAAU,WAAW,GAAG,SAAS,QAAQ;AAG1E,QACE,oBAHW,UAAU,OAAO,KAG5B;EACO;EACL,gBAAa;EACb,aAAW;EACX,eAAa;EACb,WAAW,GACT,ifACA,0FACA,SAAS,QAAQ,WACjB,SAAS,QAAQ,WACjB,wCACA,UACD;EACD,GAAI;EACJ,CAAA;EAEJ;AACF,qBAAqB,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-mobile.cjs","names":[],"sources":["../../src/shell/use-mobile.ts"],"sourcesContent":["import { useState, useEffect } from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\nconst TABLET_BREAKPOINT = 1024;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = useState<boolean>(false);\n\n useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isMobile;\n}\n\nexport function useIsTablet() {\n const [isTablet, setIsTablet] = useState<boolean>(false);\n\n useEffect(() => {\n const mql = window.matchMedia(\n `(min-width: ${MOBILE_BREAKPOINT}px) and (max-width: ${TABLET_BREAKPOINT - 1}px)`,\n );\n const onChange = () => {\n setIsTablet(\n window.innerWidth >= MOBILE_BREAKPOINT &&\n window.innerWidth < TABLET_BREAKPOINT,\n );\n };\n mql.addEventListener(\"change\", onChange);\n setIsTablet(\n window.innerWidth >= MOBILE_BREAKPOINT &&\n window.innerWidth < TABLET_BREAKPOINT,\n );\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isTablet;\n}\n\nexport function useIsMobileOrTablet() {\n const [isMobileOrTablet, setIsMobileOrTablet] = useState<boolean>(false);\n\n useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${TABLET_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobileOrTablet(window.innerWidth < TABLET_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobileOrTablet(window.innerWidth < TABLET_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isMobileOrTablet;\n}\n"],"mappings":";;;;AAEA,MAAM,oBAAoB;AAC1B,MAAM,oBAAoB;AAE1B,SAAgB,cAAc;CAC5B,MAAM,CAAC,UAAU,gBAAA,GAAA,MAAA,UAAiC,MAAM;AAExD,EAAA,GAAA,MAAA,iBAAgB;EACd,MAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,EAAE,KAAK;EACxE,MAAM,iBAAiB;AACrB,eAAY,OAAO,aAAa,kBAAkB;;AAEpD,MAAI,iBAAiB,UAAU,SAAS;AACxC,cAAY,OAAO,aAAa,kBAAkB;AAClD,eAAa,IAAI,oBAAoB,UAAU,SAAS;IACvD,EAAE,CAAC;AAEN,QAAO;;AAGT,SAAgB,cAAc;CAC5B,MAAM,CAAC,UAAU,gBAAA,GAAA,MAAA,UAAiC,MAAM;AAExD,EAAA,GAAA,MAAA,iBAAgB;EACd,MAAM,MAAM,OAAO,WACjB,eAAe,kBAAkB,sBAAsB,oBAAoB,EAAE,KAC9E;EACD,MAAM,iBAAiB;AACrB,eACE,OAAO,cAAc,qBACnB,OAAO,aAAa,kBACvB;;AAEH,MAAI,iBAAiB,UAAU,SAAS;AACxC,cACE,OAAO,cAAc,qBACnB,OAAO,aAAa,kBACvB;AACD,eAAa,IAAI,oBAAoB,UAAU,SAAS;IACvD,EAAE,CAAC;AAEN,QAAO;;AAGT,SAAgB,sBAAsB;CACpC,MAAM,CAAC,kBAAkB,wBAAA,GAAA,MAAA,UAAyC,MAAM;AAExE,EAAA,GAAA,MAAA,iBAAgB;EACd,MAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,EAAE,KAAK;EACxE,MAAM,iBAAiB;AACrB,uBAAoB,OAAO,aAAa,kBAAkB;;AAE5D,MAAI,iBAAiB,UAAU,SAAS;AACxC,sBAAoB,OAAO,aAAa,kBAAkB;AAC1D,eAAa,IAAI,oBAAoB,UAAU,SAAS;IACvD,EAAE,CAAC;AAEN,QAAO"}
1
+ {"version":3,"file":"use-mobile.cjs","names":[],"sources":["../../src/shell/use-mobile.ts"],"sourcesContent":["import { useState, useEffect } from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\nconst TABLET_BREAKPOINT = 1024;\n\nexport function useIsMobile(): boolean {\n const [isMobile, setIsMobile] = useState<boolean>(false);\n\n useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isMobile;\n}\n\nexport function useIsTablet(): boolean {\n const [isTablet, setIsTablet] = useState<boolean>(false);\n\n useEffect(() => {\n const mql = window.matchMedia(\n `(min-width: ${MOBILE_BREAKPOINT}px) and (max-width: ${TABLET_BREAKPOINT - 1}px)`,\n );\n const onChange = () => {\n setIsTablet(\n window.innerWidth >= MOBILE_BREAKPOINT &&\n window.innerWidth < TABLET_BREAKPOINT,\n );\n };\n mql.addEventListener(\"change\", onChange);\n setIsTablet(\n window.innerWidth >= MOBILE_BREAKPOINT &&\n window.innerWidth < TABLET_BREAKPOINT,\n );\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isTablet;\n}\n\nexport function useIsMobileOrTablet(): boolean {\n const [isMobileOrTablet, setIsMobileOrTablet] = useState<boolean>(false);\n\n useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${TABLET_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobileOrTablet(window.innerWidth < TABLET_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobileOrTablet(window.innerWidth < TABLET_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isMobileOrTablet;\n}\n"],"mappings":";;;;AAEA,MAAM,oBAAoB;AAC1B,MAAM,oBAAoB;AAE1B,SAAgB,cAAuB;CACrC,MAAM,CAAC,UAAU,gBAAA,GAAA,MAAA,UAAiC,MAAM;AAExD,EAAA,GAAA,MAAA,iBAAgB;EACd,MAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,EAAE,KAAK;EACxE,MAAM,iBAAiB;AACrB,eAAY,OAAO,aAAa,kBAAkB;;AAEpD,MAAI,iBAAiB,UAAU,SAAS;AACxC,cAAY,OAAO,aAAa,kBAAkB;AAClD,eAAa,IAAI,oBAAoB,UAAU,SAAS;IACvD,EAAE,CAAC;AAEN,QAAO;;AAGT,SAAgB,cAAuB;CACrC,MAAM,CAAC,UAAU,gBAAA,GAAA,MAAA,UAAiC,MAAM;AAExD,EAAA,GAAA,MAAA,iBAAgB;EACd,MAAM,MAAM,OAAO,WACjB,eAAe,kBAAkB,sBAAsB,oBAAoB,EAAE,KAC9E;EACD,MAAM,iBAAiB;AACrB,eACE,OAAO,cAAc,qBACnB,OAAO,aAAa,kBACvB;;AAEH,MAAI,iBAAiB,UAAU,SAAS;AACxC,cACE,OAAO,cAAc,qBACnB,OAAO,aAAa,kBACvB;AACD,eAAa,IAAI,oBAAoB,UAAU,SAAS;IACvD,EAAE,CAAC;AAEN,QAAO;;AAGT,SAAgB,sBAA+B;CAC7C,MAAM,CAAC,kBAAkB,wBAAA,GAAA,MAAA,UAAyC,MAAM;AAExE,EAAA,GAAA,MAAA,iBAAgB;EACd,MAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,EAAE,KAAK;EACxE,MAAM,iBAAiB;AACrB,uBAAoB,OAAO,aAAa,kBAAkB;;AAE5D,MAAI,iBAAiB,UAAU,SAAS;AACxC,sBAAoB,OAAO,aAAa,kBAAkB;AAC1D,eAAa,IAAI,oBAAoB,UAAU,SAAS;IACvD,EAAE,CAAC;AAEN,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-mobile.mjs","names":[],"sources":["../../src/shell/use-mobile.ts"],"sourcesContent":["import { useState, useEffect } from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\nconst TABLET_BREAKPOINT = 1024;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = useState<boolean>(false);\n\n useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isMobile;\n}\n\nexport function useIsTablet() {\n const [isTablet, setIsTablet] = useState<boolean>(false);\n\n useEffect(() => {\n const mql = window.matchMedia(\n `(min-width: ${MOBILE_BREAKPOINT}px) and (max-width: ${TABLET_BREAKPOINT - 1}px)`,\n );\n const onChange = () => {\n setIsTablet(\n window.innerWidth >= MOBILE_BREAKPOINT &&\n window.innerWidth < TABLET_BREAKPOINT,\n );\n };\n mql.addEventListener(\"change\", onChange);\n setIsTablet(\n window.innerWidth >= MOBILE_BREAKPOINT &&\n window.innerWidth < TABLET_BREAKPOINT,\n );\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isTablet;\n}\n\nexport function useIsMobileOrTablet() {\n const [isMobileOrTablet, setIsMobileOrTablet] = useState<boolean>(false);\n\n useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${TABLET_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobileOrTablet(window.innerWidth < TABLET_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobileOrTablet(window.innerWidth < TABLET_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isMobileOrTablet;\n}\n"],"mappings":";;AAEA,MAAM,oBAAoB;AAC1B,MAAM,oBAAoB;AAE1B,SAAgB,cAAc;CAC5B,MAAM,CAAC,UAAU,eAAe,SAAkB,MAAM;AAExD,iBAAgB;EACd,MAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,EAAE,KAAK;EACxE,MAAM,iBAAiB;AACrB,eAAY,OAAO,aAAa,kBAAkB;;AAEpD,MAAI,iBAAiB,UAAU,SAAS;AACxC,cAAY,OAAO,aAAa,kBAAkB;AAClD,eAAa,IAAI,oBAAoB,UAAU,SAAS;IACvD,EAAE,CAAC;AAEN,QAAO;;AAGT,SAAgB,cAAc;CAC5B,MAAM,CAAC,UAAU,eAAe,SAAkB,MAAM;AAExD,iBAAgB;EACd,MAAM,MAAM,OAAO,WACjB,eAAe,kBAAkB,sBAAsB,oBAAoB,EAAE,KAC9E;EACD,MAAM,iBAAiB;AACrB,eACE,OAAO,cAAc,qBACnB,OAAO,aAAa,kBACvB;;AAEH,MAAI,iBAAiB,UAAU,SAAS;AACxC,cACE,OAAO,cAAc,qBACnB,OAAO,aAAa,kBACvB;AACD,eAAa,IAAI,oBAAoB,UAAU,SAAS;IACvD,EAAE,CAAC;AAEN,QAAO;;AAGT,SAAgB,sBAAsB;CACpC,MAAM,CAAC,kBAAkB,uBAAuB,SAAkB,MAAM;AAExE,iBAAgB;EACd,MAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,EAAE,KAAK;EACxE,MAAM,iBAAiB;AACrB,uBAAoB,OAAO,aAAa,kBAAkB;;AAE5D,MAAI,iBAAiB,UAAU,SAAS;AACxC,sBAAoB,OAAO,aAAa,kBAAkB;AAC1D,eAAa,IAAI,oBAAoB,UAAU,SAAS;IACvD,EAAE,CAAC;AAEN,QAAO"}
1
+ {"version":3,"file":"use-mobile.mjs","names":[],"sources":["../../src/shell/use-mobile.ts"],"sourcesContent":["import { useState, useEffect } from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\nconst TABLET_BREAKPOINT = 1024;\n\nexport function useIsMobile(): boolean {\n const [isMobile, setIsMobile] = useState<boolean>(false);\n\n useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isMobile;\n}\n\nexport function useIsTablet(): boolean {\n const [isTablet, setIsTablet] = useState<boolean>(false);\n\n useEffect(() => {\n const mql = window.matchMedia(\n `(min-width: ${MOBILE_BREAKPOINT}px) and (max-width: ${TABLET_BREAKPOINT - 1}px)`,\n );\n const onChange = () => {\n setIsTablet(\n window.innerWidth >= MOBILE_BREAKPOINT &&\n window.innerWidth < TABLET_BREAKPOINT,\n );\n };\n mql.addEventListener(\"change\", onChange);\n setIsTablet(\n window.innerWidth >= MOBILE_BREAKPOINT &&\n window.innerWidth < TABLET_BREAKPOINT,\n );\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isTablet;\n}\n\nexport function useIsMobileOrTablet(): boolean {\n const [isMobileOrTablet, setIsMobileOrTablet] = useState<boolean>(false);\n\n useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${TABLET_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobileOrTablet(window.innerWidth < TABLET_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobileOrTablet(window.innerWidth < TABLET_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isMobileOrTablet;\n}\n"],"mappings":";;AAEA,MAAM,oBAAoB;AAC1B,MAAM,oBAAoB;AAE1B,SAAgB,cAAuB;CACrC,MAAM,CAAC,UAAU,eAAe,SAAkB,MAAM;AAExD,iBAAgB;EACd,MAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,EAAE,KAAK;EACxE,MAAM,iBAAiB;AACrB,eAAY,OAAO,aAAa,kBAAkB;;AAEpD,MAAI,iBAAiB,UAAU,SAAS;AACxC,cAAY,OAAO,aAAa,kBAAkB;AAClD,eAAa,IAAI,oBAAoB,UAAU,SAAS;IACvD,EAAE,CAAC;AAEN,QAAO;;AAGT,SAAgB,cAAuB;CACrC,MAAM,CAAC,UAAU,eAAe,SAAkB,MAAM;AAExD,iBAAgB;EACd,MAAM,MAAM,OAAO,WACjB,eAAe,kBAAkB,sBAAsB,oBAAoB,EAAE,KAC9E;EACD,MAAM,iBAAiB;AACrB,eACE,OAAO,cAAc,qBACnB,OAAO,aAAa,kBACvB;;AAEH,MAAI,iBAAiB,UAAU,SAAS;AACxC,cACE,OAAO,cAAc,qBACnB,OAAO,aAAa,kBACvB;AACD,eAAa,IAAI,oBAAoB,UAAU,SAAS;IACvD,EAAE,CAAC;AAEN,QAAO;;AAGT,SAAgB,sBAA+B;CAC7C,MAAM,CAAC,kBAAkB,uBAAuB,SAAkB,MAAM;AAExE,iBAAgB;EACd,MAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,EAAE,KAAK;EACxE,MAAM,iBAAiB;AACrB,uBAAoB,OAAO,aAAa,kBAAkB;;AAE5D,MAAI,iBAAiB,UAAU,SAAS;AACxC,sBAAoB,OAAO,aAAa,kBAAkB;AAC1D,eAAa,IAAI,oBAAoB,UAAU,SAAS;IACvD,EAAE,CAAC;AAEN,QAAO"}
@@ -1,43 +1,43 @@
1
- import { _ as ThemeDefinition, a as OklchPlain, c as ResolvedColorSet, d as SEMANTIC_COLOR_NAMES, f as SHADE_STEPS, g as ThemeColorPlain, h as ThemeColorInput, i as FontSizeKey, l as ResolvedSemanticColor, m as ShadeStep, n as FONT_SIZE_KEYS, o as RADIUS_KEYS, p as SemanticColorName, r as FontFamilyKey, s as RadiusKey, t as FONT_FAMILY_KEYS, u as ResolvedTheme, v as ThemePayload } from "../types-Ctu-Zio6.cjs";
1
+ import { _ as ThemeDefinition, a as OklchPlain, c as ResolvedColorSet, d as SEMANTIC_COLOR_NAMES, f as SHADE_STEPS, g as ThemeColorPlain, h as ThemeColorInput, i as FontSizeKey, l as ResolvedSemanticColor, m as ShadeStep, n as FONT_SIZE_KEYS, o as RADIUS_KEYS, p as SemanticColorName, r as FontFamilyKey, s as RadiusKey, t as FONT_FAMILY_KEYS, u as ResolvedTheme, v as ThemePayload } from "../types-27AHMek-.cjs";
2
2
  import Color from "colorjs.io";
3
3
 
4
4
  //#region src/theme/color-engine.d.ts
5
5
  /**
6
- * Attempt to convert any string into a Color using colorjs.io.
7
- * If the string is exactly 6 characters it is assumed to be a bare hex value
8
- * (e.g. "3b82f6") and a "#" prefix is added before parsing.
9
- *
10
- * @returns the parsed Color, or a neutral gray (`oklch(0.5 0 0)`) on failure
11
- */
6
+ * Attempt to convert any string into a Color using colorjs.io.
7
+ * If the string is exactly 6 characters it is assumed to be a bare hex value
8
+ * (e.g. "3b82f6") and a "#" prefix is added before parsing.
9
+ *
10
+ * @returns the parsed Color, or a neutral gray (`oklch(0.5 0 0)`) on failure
11
+ */
12
12
  declare function parseColor(value: string): Color;
13
13
  /**
14
- * Returns either the original foreground or a corrected lightness variant,
15
- * whichever provides better contrast against `color`.
16
- * Inversion triggers when the APCA contrast is below 50.
17
- */
14
+ * Returns either the original foreground or a corrected lightness variant,
15
+ * whichever provides better contrast against `color`.
16
+ * Inversion triggers when the APCA contrast is below 50.
17
+ */
18
18
  declare function getForegroundColor(foreground: Color, color: Color): Color;
19
19
  /**
20
- * Generate a 100–900 shade ramp from a base color.
21
- * Base anchors at 500. Light shades (100–400) step toward white,
22
- * dark shades (600–900) step toward black. Dark steps use an asymmetric
23
- * multiplier (1.6×, 1.875×, 3×, 4× of `darkStep`) for a more gradual
24
- * initial descent. Chroma is nudged per step for perceptually natural ramps.
25
- */
20
+ * Generate a 100–900 shade ramp from a base color.
21
+ * Base anchors at 500. Light shades (100–400) step toward white,
22
+ * dark shades (600–900) step toward black. Dark steps use an asymmetric
23
+ * multiplier (1.6×, 1.875×, 3×, 4× of `darkStep`) for a more gradual
24
+ * initial descent. Chroma is nudged per step for perceptually natural ramps.
25
+ */
26
26
  declare function generateShades(base: Color): Record<ShadeStep, Color>;
27
27
  /**
28
- * Derive a dark-mode ThemeColorInput from its light-mode counterpart.
29
- */
28
+ * Derive a dark-mode ThemeColorInput from its light-mode counterpart.
29
+ */
30
30
  declare function deriveDarkVariant(name: SemanticColorName, light: ThemeColorInput): ThemeColorInput;
31
31
  /**
32
- * Merge auto-derived dark colors with any user-specified overrides.
33
- * For each semantic color, if the user has fully overridden both base and
34
- * foreground those are used; otherwise the missing channels are derived.
35
- */
32
+ * Merge auto-derived dark colors with any user-specified overrides.
33
+ * For each semantic color, if the user has fully overridden both base and
34
+ * foreground those are used; otherwise the missing channels are derived.
35
+ */
36
36
  declare function mergeDarkOverrides(def: ThemeDefinition): Record<SemanticColorName, ThemeColorInput>;
37
37
  /**
38
- * Resolve a ThemeDefinition into a complete ResolvedTheme.
39
- * Dark mode colors are derived from light where not overridden.
40
- */
38
+ * Resolve a ThemeDefinition into a complete ResolvedTheme.
39
+ * Dark mode colors are derived from light where not overridden.
40
+ */
41
41
  declare function resolveTheme(def: ThemeDefinition): ResolvedTheme;
42
42
  //#endregion
43
43
  //#region src/theme/css-generator.d.ts
@@ -48,23 +48,23 @@ interface GenerateThemeCSSOptions {
48
48
  mapTailwindColors?: boolean;
49
49
  }
50
50
  /**
51
- * Generate a complete CSS string for a resolved theme.
52
- * Outputs 2–3 blocks: light default, dark explicit via `[data-theme-mode="dark"]`,
53
- * and (unless `disableAutoTheme`) a `prefers-color-scheme: dark` media query block.
54
- */
51
+ * Generate a complete CSS string for a resolved theme.
52
+ * Outputs 2–3 blocks: light default, dark explicit via `[data-theme-mode="dark"]`,
53
+ * and (unless `disableAutoTheme`) a `prefers-color-scheme: dark` media query block.
54
+ */
55
55
  declare function generateThemeCSS(theme: ResolvedTheme, options?: GenerateThemeCSSOptions): string;
56
56
  //#endregion
57
57
  //#region src/theme/serialisation.d.ts
58
58
  /**
59
- * Serialise a ThemeDefinition (with Color objects) to a plain JSON payload
60
- * suitable for backend storage.
61
- */
59
+ * Serialise a ThemeDefinition (with Color objects) to a plain JSON payload
60
+ * suitable for backend storage.
61
+ */
62
62
  declare function serialiseTheme(def: ThemeDefinition): ThemePayload;
63
63
  /**
64
- * Deserialise a backend payload into a ThemeDefinition with Color objects.
65
- * Accepts `Record<string, unknown>` because API data is untyped at the boundary.
66
- * Falls back to default colors for any missing light-mode entries.
67
- */
64
+ * Deserialise a backend payload into a ThemeDefinition with Color objects.
65
+ * Accepts `Record<string, unknown>` because API data is untyped at the boundary.
66
+ * Falls back to default colors for any missing light-mode entries.
67
+ */
68
68
  declare function deserialiseTheme(payload: Record<string, unknown>): ThemeDefinition;
69
69
  //#endregion
70
70
  //#region src/theme/transforms.d.ts
@@ -76,28 +76,28 @@ interface RawApiTheme {
76
76
  name?: string | null;
77
77
  }
78
78
  /**
79
- * Build a ThemeDefinition from a single API theme object.
80
- * Handles both new structured format and legacy flat format.
81
- */
79
+ * Build a ThemeDefinition from a single API theme object.
80
+ * Handles both new structured format and legacy flat format.
81
+ */
82
82
  declare function buildThemeDefinition(theme: RawApiTheme): ThemeDefinition;
83
83
  /**
84
- * Transform raw API themes to ThemeDefinition[].
85
- * Catches and logs errors per theme (graceful degradation).
86
- */
84
+ * Transform raw API themes to ThemeDefinition[].
85
+ * Catches and logs errors per theme (graceful degradation).
86
+ */
87
87
  declare function transformThemes(themes: RawApiTheme[]): ThemeDefinition[];
88
88
  /**
89
- * Get the active theme ID from a list of raw API themes.
90
- * Falls back to the first theme if none is marked active.
91
- */
89
+ * Get the active theme ID from a list of raw API themes.
90
+ * Falls back to the first theme if none is marked active.
91
+ */
92
92
  declare function getActiveThemeId(themes: RawApiTheme[]): string | undefined;
93
93
  //#endregion
94
94
  //#region src/theme/theme-applicator.d.ts
95
95
  /**
96
- * Inject or update a `<style>` element in `<head>` for the given theme.
97
- * The element ID is deterministic (`theme-style-{themeId}`) so repeated calls
98
- * for the same theme are idempotent — the existing element is updated in place.
99
- * No-op when `document` is unavailable (SSR).
100
- */
96
+ * Inject or update a `<style>` element in `<head>` for the given theme.
97
+ * The element ID is deterministic (`theme-style-{themeId}`) so repeated calls
98
+ * for the same theme are idempotent — the existing element is updated in place.
99
+ * No-op when `document` is unavailable (SSR).
100
+ */
101
101
  declare function applyTheme(theme: ResolvedTheme, options?: GenerateThemeCSSOptions): void;
102
102
  /** Remove an injected theme stylesheet. No-op during SSR. */
103
103
  declare function removeTheme(themeId: string): void;
@@ -122,9 +122,9 @@ declare const DEFAULT_COLORS: {
122
122
  declare const DEFAULT_THEME_ID = "default";
123
123
  declare const DEFAULT_THEME_NAME = "Default Theme";
124
124
  /**
125
- * Build a fresh ThemeDefinition populated with all defaults.
126
- * Returns a new object each call because Color instances are mutable — do not cache the result.
127
- */
125
+ * Build a fresh ThemeDefinition populated with all defaults.
126
+ * Returns a new object each call because Color instances are mutable — do not cache the result.
127
+ */
128
128
  declare function getDefaultThemeDefinition(): ThemeDefinition;
129
129
  //#endregion
130
130
  export { DEFAULT_COLORS, DEFAULT_FONT_FAMILIES, DEFAULT_FONT_SIZES, DEFAULT_RADII, DEFAULT_SPACING, DEFAULT_THEME_ID, DEFAULT_THEME_NAME, FONT_FAMILY_KEYS, FONT_SIZE_KEYS, type FontFamilyKey, type FontSizeKey, type GenerateThemeCSSOptions, type OklchPlain, RADIUS_KEYS, type RadiusKey, type RawApiTheme, type ResolvedColorSet, type ResolvedSemanticColor, type ResolvedTheme, SEMANTIC_COLOR_NAMES, SHADE_STEPS, type SemanticColorName, type ShadeStep, type ThemeColorInput, type ThemeColorPlain, type ThemeDefinition, type ThemePayload, applyTheme, buildThemeDefinition, deriveDarkVariant, deserialiseTheme, generateShades, generateThemeCSS, getActiveThemeId, getDefaultThemeDefinition, getForegroundColor, mergeDarkOverrides, parseColor, removeAllThemes, removeTheme, resolveTheme, serialiseTheme, transformThemes };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/theme/color-engine.ts","../../src/theme/css-generator.ts","../../src/theme/serialisation.ts","../../src/theme/transforms.ts","../../src/theme/theme-applicator.ts","../../src/theme/defaults.ts"],"mappings":";;;;;;AAmBA;;;;;iBAAgB,UAAA,CAAW,KAAA,WAAgB,KAAA;;;;;;iBAiB3B,kBAAA,CAAmB,UAAA,EAAY,KAAA,EAAO,KAAA,EAAO,KAAA,GAAQ,KAAA;;;;;;;;iBAuBrD,cAAA,CAAe,IAAA,EAAM,KAAA,GAAQ,MAAA,CAAO,SAAA,EAAW,KAAA;AAA/D;;;AAAA,iBAqEgB,iBAAA,CACd,IAAA,EAAM,iBAAA,EACN,KAAA,EAAO,eAAA,GACN,eAAA;;;;;;iBAmCa,kBAAA,CACd,GAAA,EAAK,eAAA,GACJ,MAAA,CAAO,iBAAA,EAAmB,eAAA;;;;;iBAwDb,YAAA,CAAa,GAAA,EAAK,eAAA,GAAkB,aAAA;;;UChHnC,uBAAA;;EAEf,gBAAA;ED/Fc;ECiGd,iBAAA;AAAA;;;ADhFF;;;iBCwFgB,gBAAA,CACd,KAAA,EAAO,aAAA,EACP,OAAA,GAAS,uBAAA;;;;;;AD3GX;iBEiBgB,cAAA,CAAe,GAAA,EAAK,eAAA,GAAkB,YAAA;;;;AFAtD;;iBEsCgB,gBAAA,CACd,OAAA,EAAS,MAAA,oBACR,eAAA;;;;UC1Dc,WAAA;EACf,EAAA;EACA,MAAA,GAAS,MAAA;EACT,MAAA;EACA,IAAA;AAAA;;;;;iBAwFc,oBAAA,CAAqB,KAAA,EAAO,WAAA,GAAc,eAAA;;;;;iBAsB1C,eAAA,CAAgB,MAAA,EAAQ,WAAA,KAAgB,eAAA;;AHzExD;;;iBGwFgB,gBAAA,CAAiB,MAAA,EAAQ,WAAA;;;;;AHhIzC;;;;iBIPgB,UAAA,CACd,KAAA,EAAO,aAAA,EACP,OAAA,GAAU,uBAAA;AJsBZ;AAAA,iBIDgB,WAAA,CAAY,OAAA;;iBAMZ,eAAA,CAAA;;;cC9BH,kBAAA,EAAoB,MAAA,CAAO,WAAA;AAAA,cAS3B,qBAAA,EAAuB,MAAA,CAAO,aAAA;AAAA,cAK9B,eAAA;AAAA,cAEA,aAAA,EAAe,MAAA,CAAO,SAAA;AAAA,cAStB,cAAA;EAAA;;;;;;;;;cAaA,gBAAA;AAAA,cACA,kBAAA;;;;;iBAQG,yBAAA,CAAA,GAA6B,eAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/theme/color-engine.ts","../../src/theme/css-generator.ts","../../src/theme/serialisation.ts","../../src/theme/transforms.ts","../../src/theme/theme-applicator.ts","../../src/theme/defaults.ts"],"mappings":";;;;;;AAmBA;;;;;iBAAgB,UAAA,CAAW,KAAA,WAAgB,KAAA;;;;;;iBAiB3B,kBAAA,CAAmB,UAAA,EAAY,KAAA,EAAO,KAAA,EAAO,KAAA,GAAQ,KAAA;;;;;;;;iBAuBrD,cAAA,CAAe,IAAA,EAAM,KAAA,GAAQ,MAAA,CAAO,SAAA,EAAW,KAAA;AAA/D;;;AAAA,iBAqEgB,iBAAA,CACd,IAAA,EAAM,iBAAA,EACN,KAAA,EAAO,eAAA,GACN,eAAA;;;;;;iBAmCa,kBAAA,CACd,GAAA,EAAK,eAAA,GACJ,MAAA,CAAO,iBAAA,EAAmB,eAAA;;;;;iBAwDb,YAAA,CAAa,GAAA,EAAK,eAAA,GAAkB,aAAA;;;UChHnC,uBAAA;;EAEf,gBAAA;ED/FF;ECiGE,iBAAA;AAAA;;;ADhFF;;;iBCwFgB,gBAAA,CACd,KAAA,EAAO,aAAA,EACP,OAAA,GAAS,uBAAA;;;;;;AD3GX;iBEiBgB,cAAA,CAAe,GAAA,EAAK,eAAA,GAAkB,YAAA;;;;AFAtD;;iBEsCgB,gBAAA,CACd,OAAA,EAAS,MAAA,oBACR,eAAA;;;;UC1Dc,WAAA;EACf,EAAA;EACA,MAAA,GAAS,MAAA;EACT,MAAA;EACA,IAAA;AAAA;;;;;iBAwFc,oBAAA,CAAqB,KAAA,EAAO,WAAA,GAAc,eAAA;;;;;iBAsB1C,eAAA,CAAgB,MAAA,EAAQ,WAAA,KAAgB,eAAA;;AHzExD;;;iBGwFgB,gBAAA,CAAiB,MAAA,EAAQ,WAAA;;;;;AHhIzC;;;;iBIPgB,UAAA,CACd,KAAA,EAAO,aAAA,EACP,OAAA,GAAU,uBAAA;AJsBZ;AAAA,iBIDgB,WAAA,CAAY,OAAA;;iBAMZ,eAAA,CAAA;;;cC9BH,kBAAA,EAAoB,MAAA,CAAO,WAAA;AAAA,cAS3B,qBAAA,EAAuB,MAAA,CAAO,aAAA;AAAA,cAK9B,eAAA;AAAA,cAEA,aAAA,EAAe,MAAA,CAAO,SAAA;AAAA,cAStB,cAAA;EAAA,SACX,UAAA;EAAA,SACA,UAAA;EAAA,SACA,OAAA;EAAA,SACA,SAAA;EAAA,SACA,MAAA;EAAA,SACA,KAAA;EAAA,SACA,WAAA;EAAA,SACA,eAAA;AAAA;AAAA,cAKW,gBAAA;AAAA,cACA,kBAAA;;;;;iBAQG,yBAAA,CAAA,GAA6B,eAAA"}
@@ -1,43 +1,43 @@
1
- import { _ as ThemeDefinition, a as OklchPlain, c as ResolvedColorSet, d as SEMANTIC_COLOR_NAMES, f as SHADE_STEPS, g as ThemeColorPlain, h as ThemeColorInput, i as FontSizeKey, l as ResolvedSemanticColor, m as ShadeStep, n as FONT_SIZE_KEYS, o as RADIUS_KEYS, p as SemanticColorName, r as FontFamilyKey, s as RadiusKey, t as FONT_FAMILY_KEYS, u as ResolvedTheme, v as ThemePayload } from "../types-ByG6Xy3C.mjs";
1
+ import { _ as ThemeDefinition, a as OklchPlain, c as ResolvedColorSet, d as SEMANTIC_COLOR_NAMES, f as SHADE_STEPS, g as ThemeColorPlain, h as ThemeColorInput, i as FontSizeKey, l as ResolvedSemanticColor, m as ShadeStep, n as FONT_SIZE_KEYS, o as RADIUS_KEYS, p as SemanticColorName, r as FontFamilyKey, s as RadiusKey, t as FONT_FAMILY_KEYS, u as ResolvedTheme, v as ThemePayload } from "../types-CeCPKvOv.mjs";
2
2
  import Color from "colorjs.io";
3
3
 
4
4
  //#region src/theme/color-engine.d.ts
5
5
  /**
6
- * Attempt to convert any string into a Color using colorjs.io.
7
- * If the string is exactly 6 characters it is assumed to be a bare hex value
8
- * (e.g. "3b82f6") and a "#" prefix is added before parsing.
9
- *
10
- * @returns the parsed Color, or a neutral gray (`oklch(0.5 0 0)`) on failure
11
- */
6
+ * Attempt to convert any string into a Color using colorjs.io.
7
+ * If the string is exactly 6 characters it is assumed to be a bare hex value
8
+ * (e.g. "3b82f6") and a "#" prefix is added before parsing.
9
+ *
10
+ * @returns the parsed Color, or a neutral gray (`oklch(0.5 0 0)`) on failure
11
+ */
12
12
  declare function parseColor(value: string): Color;
13
13
  /**
14
- * Returns either the original foreground or a corrected lightness variant,
15
- * whichever provides better contrast against `color`.
16
- * Inversion triggers when the APCA contrast is below 50.
17
- */
14
+ * Returns either the original foreground or a corrected lightness variant,
15
+ * whichever provides better contrast against `color`.
16
+ * Inversion triggers when the APCA contrast is below 50.
17
+ */
18
18
  declare function getForegroundColor(foreground: Color, color: Color): Color;
19
19
  /**
20
- * Generate a 100–900 shade ramp from a base color.
21
- * Base anchors at 500. Light shades (100–400) step toward white,
22
- * dark shades (600–900) step toward black. Dark steps use an asymmetric
23
- * multiplier (1.6×, 1.875×, 3×, 4× of `darkStep`) for a more gradual
24
- * initial descent. Chroma is nudged per step for perceptually natural ramps.
25
- */
20
+ * Generate a 100–900 shade ramp from a base color.
21
+ * Base anchors at 500. Light shades (100–400) step toward white,
22
+ * dark shades (600–900) step toward black. Dark steps use an asymmetric
23
+ * multiplier (1.6×, 1.875×, 3×, 4× of `darkStep`) for a more gradual
24
+ * initial descent. Chroma is nudged per step for perceptually natural ramps.
25
+ */
26
26
  declare function generateShades(base: Color): Record<ShadeStep, Color>;
27
27
  /**
28
- * Derive a dark-mode ThemeColorInput from its light-mode counterpart.
29
- */
28
+ * Derive a dark-mode ThemeColorInput from its light-mode counterpart.
29
+ */
30
30
  declare function deriveDarkVariant(name: SemanticColorName, light: ThemeColorInput): ThemeColorInput;
31
31
  /**
32
- * Merge auto-derived dark colors with any user-specified overrides.
33
- * For each semantic color, if the user has fully overridden both base and
34
- * foreground those are used; otherwise the missing channels are derived.
35
- */
32
+ * Merge auto-derived dark colors with any user-specified overrides.
33
+ * For each semantic color, if the user has fully overridden both base and
34
+ * foreground those are used; otherwise the missing channels are derived.
35
+ */
36
36
  declare function mergeDarkOverrides(def: ThemeDefinition): Record<SemanticColorName, ThemeColorInput>;
37
37
  /**
38
- * Resolve a ThemeDefinition into a complete ResolvedTheme.
39
- * Dark mode colors are derived from light where not overridden.
40
- */
38
+ * Resolve a ThemeDefinition into a complete ResolvedTheme.
39
+ * Dark mode colors are derived from light where not overridden.
40
+ */
41
41
  declare function resolveTheme(def: ThemeDefinition): ResolvedTheme;
42
42
  //#endregion
43
43
  //#region src/theme/css-generator.d.ts
@@ -48,23 +48,23 @@ interface GenerateThemeCSSOptions {
48
48
  mapTailwindColors?: boolean;
49
49
  }
50
50
  /**
51
- * Generate a complete CSS string for a resolved theme.
52
- * Outputs 2–3 blocks: light default, dark explicit via `[data-theme-mode="dark"]`,
53
- * and (unless `disableAutoTheme`) a `prefers-color-scheme: dark` media query block.
54
- */
51
+ * Generate a complete CSS string for a resolved theme.
52
+ * Outputs 2–3 blocks: light default, dark explicit via `[data-theme-mode="dark"]`,
53
+ * and (unless `disableAutoTheme`) a `prefers-color-scheme: dark` media query block.
54
+ */
55
55
  declare function generateThemeCSS(theme: ResolvedTheme, options?: GenerateThemeCSSOptions): string;
56
56
  //#endregion
57
57
  //#region src/theme/serialisation.d.ts
58
58
  /**
59
- * Serialise a ThemeDefinition (with Color objects) to a plain JSON payload
60
- * suitable for backend storage.
61
- */
59
+ * Serialise a ThemeDefinition (with Color objects) to a plain JSON payload
60
+ * suitable for backend storage.
61
+ */
62
62
  declare function serialiseTheme(def: ThemeDefinition): ThemePayload;
63
63
  /**
64
- * Deserialise a backend payload into a ThemeDefinition with Color objects.
65
- * Accepts `Record<string, unknown>` because API data is untyped at the boundary.
66
- * Falls back to default colors for any missing light-mode entries.
67
- */
64
+ * Deserialise a backend payload into a ThemeDefinition with Color objects.
65
+ * Accepts `Record<string, unknown>` because API data is untyped at the boundary.
66
+ * Falls back to default colors for any missing light-mode entries.
67
+ */
68
68
  declare function deserialiseTheme(payload: Record<string, unknown>): ThemeDefinition;
69
69
  //#endregion
70
70
  //#region src/theme/transforms.d.ts
@@ -76,28 +76,28 @@ interface RawApiTheme {
76
76
  name?: string | null;
77
77
  }
78
78
  /**
79
- * Build a ThemeDefinition from a single API theme object.
80
- * Handles both new structured format and legacy flat format.
81
- */
79
+ * Build a ThemeDefinition from a single API theme object.
80
+ * Handles both new structured format and legacy flat format.
81
+ */
82
82
  declare function buildThemeDefinition(theme: RawApiTheme): ThemeDefinition;
83
83
  /**
84
- * Transform raw API themes to ThemeDefinition[].
85
- * Catches and logs errors per theme (graceful degradation).
86
- */
84
+ * Transform raw API themes to ThemeDefinition[].
85
+ * Catches and logs errors per theme (graceful degradation).
86
+ */
87
87
  declare function transformThemes(themes: RawApiTheme[]): ThemeDefinition[];
88
88
  /**
89
- * Get the active theme ID from a list of raw API themes.
90
- * Falls back to the first theme if none is marked active.
91
- */
89
+ * Get the active theme ID from a list of raw API themes.
90
+ * Falls back to the first theme if none is marked active.
91
+ */
92
92
  declare function getActiveThemeId(themes: RawApiTheme[]): string | undefined;
93
93
  //#endregion
94
94
  //#region src/theme/theme-applicator.d.ts
95
95
  /**
96
- * Inject or update a `<style>` element in `<head>` for the given theme.
97
- * The element ID is deterministic (`theme-style-{themeId}`) so repeated calls
98
- * for the same theme are idempotent — the existing element is updated in place.
99
- * No-op when `document` is unavailable (SSR).
100
- */
96
+ * Inject or update a `<style>` element in `<head>` for the given theme.
97
+ * The element ID is deterministic (`theme-style-{themeId}`) so repeated calls
98
+ * for the same theme are idempotent — the existing element is updated in place.
99
+ * No-op when `document` is unavailable (SSR).
100
+ */
101
101
  declare function applyTheme(theme: ResolvedTheme, options?: GenerateThemeCSSOptions): void;
102
102
  /** Remove an injected theme stylesheet. No-op during SSR. */
103
103
  declare function removeTheme(themeId: string): void;
@@ -122,9 +122,9 @@ declare const DEFAULT_COLORS: {
122
122
  declare const DEFAULT_THEME_ID = "default";
123
123
  declare const DEFAULT_THEME_NAME = "Default Theme";
124
124
  /**
125
- * Build a fresh ThemeDefinition populated with all defaults.
126
- * Returns a new object each call because Color instances are mutable — do not cache the result.
127
- */
125
+ * Build a fresh ThemeDefinition populated with all defaults.
126
+ * Returns a new object each call because Color instances are mutable — do not cache the result.
127
+ */
128
128
  declare function getDefaultThemeDefinition(): ThemeDefinition;
129
129
  //#endregion
130
130
  export { DEFAULT_COLORS, DEFAULT_FONT_FAMILIES, DEFAULT_FONT_SIZES, DEFAULT_RADII, DEFAULT_SPACING, DEFAULT_THEME_ID, DEFAULT_THEME_NAME, FONT_FAMILY_KEYS, FONT_SIZE_KEYS, type FontFamilyKey, type FontSizeKey, type GenerateThemeCSSOptions, type OklchPlain, RADIUS_KEYS, type RadiusKey, type RawApiTheme, type ResolvedColorSet, type ResolvedSemanticColor, type ResolvedTheme, SEMANTIC_COLOR_NAMES, SHADE_STEPS, type SemanticColorName, type ShadeStep, type ThemeColorInput, type ThemeColorPlain, type ThemeDefinition, type ThemePayload, applyTheme, buildThemeDefinition, deriveDarkVariant, deserialiseTheme, generateShades, generateThemeCSS, getActiveThemeId, getDefaultThemeDefinition, getForegroundColor, mergeDarkOverrides, parseColor, removeAllThemes, removeTheme, resolveTheme, serialiseTheme, transformThemes };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/theme/color-engine.ts","../../src/theme/css-generator.ts","../../src/theme/serialisation.ts","../../src/theme/transforms.ts","../../src/theme/theme-applicator.ts","../../src/theme/defaults.ts"],"mappings":";;;;;;AAmBA;;;;;iBAAgB,UAAA,CAAW,KAAA,WAAgB,KAAA;;;;;;iBAiB3B,kBAAA,CAAmB,UAAA,EAAY,KAAA,EAAO,KAAA,EAAO,KAAA,GAAQ,KAAA;;;;;;;;iBAuBrD,cAAA,CAAe,IAAA,EAAM,KAAA,GAAQ,MAAA,CAAO,SAAA,EAAW,KAAA;AAA/D;;;AAAA,iBAqEgB,iBAAA,CACd,IAAA,EAAM,iBAAA,EACN,KAAA,EAAO,eAAA,GACN,eAAA;;;;;;iBAmCa,kBAAA,CACd,GAAA,EAAK,eAAA,GACJ,MAAA,CAAO,iBAAA,EAAmB,eAAA;;;;;iBAwDb,YAAA,CAAa,GAAA,EAAK,eAAA,GAAkB,aAAA;;;UChHnC,uBAAA;;EAEf,gBAAA;ED/Fc;ECiGd,iBAAA;AAAA;;;ADhFF;;;iBCwFgB,gBAAA,CACd,KAAA,EAAO,aAAA,EACP,OAAA,GAAS,uBAAA;;;;;;AD3GX;iBEiBgB,cAAA,CAAe,GAAA,EAAK,eAAA,GAAkB,YAAA;;;;AFAtD;;iBEsCgB,gBAAA,CACd,OAAA,EAAS,MAAA,oBACR,eAAA;;;;UC1Dc,WAAA;EACf,EAAA;EACA,MAAA,GAAS,MAAA;EACT,MAAA;EACA,IAAA;AAAA;;;;;iBAwFc,oBAAA,CAAqB,KAAA,EAAO,WAAA,GAAc,eAAA;;;;;iBAsB1C,eAAA,CAAgB,MAAA,EAAQ,WAAA,KAAgB,eAAA;;AHzExD;;;iBGwFgB,gBAAA,CAAiB,MAAA,EAAQ,WAAA;;;;;AHhIzC;;;;iBIPgB,UAAA,CACd,KAAA,EAAO,aAAA,EACP,OAAA,GAAU,uBAAA;AJsBZ;AAAA,iBIDgB,WAAA,CAAY,OAAA;;iBAMZ,eAAA,CAAA;;;cC9BH,kBAAA,EAAoB,MAAA,CAAO,WAAA;AAAA,cAS3B,qBAAA,EAAuB,MAAA,CAAO,aAAA;AAAA,cAK9B,eAAA;AAAA,cAEA,aAAA,EAAe,MAAA,CAAO,SAAA;AAAA,cAStB,cAAA;EAAA;;;;;;;;;cAaA,gBAAA;AAAA,cACA,kBAAA;;;;;iBAQG,yBAAA,CAAA,GAA6B,eAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/theme/color-engine.ts","../../src/theme/css-generator.ts","../../src/theme/serialisation.ts","../../src/theme/transforms.ts","../../src/theme/theme-applicator.ts","../../src/theme/defaults.ts"],"mappings":";;;;;;AAmBA;;;;;iBAAgB,UAAA,CAAW,KAAA,WAAgB,KAAA;;;;;;iBAiB3B,kBAAA,CAAmB,UAAA,EAAY,KAAA,EAAO,KAAA,EAAO,KAAA,GAAQ,KAAA;;;;;;;;iBAuBrD,cAAA,CAAe,IAAA,EAAM,KAAA,GAAQ,MAAA,CAAO,SAAA,EAAW,KAAA;AAA/D;;;AAAA,iBAqEgB,iBAAA,CACd,IAAA,EAAM,iBAAA,EACN,KAAA,EAAO,eAAA,GACN,eAAA;;;;;;iBAmCa,kBAAA,CACd,GAAA,EAAK,eAAA,GACJ,MAAA,CAAO,iBAAA,EAAmB,eAAA;;;;;iBAwDb,YAAA,CAAa,GAAA,EAAK,eAAA,GAAkB,aAAA;;;UChHnC,uBAAA;;EAEf,gBAAA;ED/FF;ECiGE,iBAAA;AAAA;;;ADhFF;;;iBCwFgB,gBAAA,CACd,KAAA,EAAO,aAAA,EACP,OAAA,GAAS,uBAAA;;;;;;AD3GX;iBEiBgB,cAAA,CAAe,GAAA,EAAK,eAAA,GAAkB,YAAA;;;;AFAtD;;iBEsCgB,gBAAA,CACd,OAAA,EAAS,MAAA,oBACR,eAAA;;;;UC1Dc,WAAA;EACf,EAAA;EACA,MAAA,GAAS,MAAA;EACT,MAAA;EACA,IAAA;AAAA;;;;;iBAwFc,oBAAA,CAAqB,KAAA,EAAO,WAAA,GAAc,eAAA;;;;;iBAsB1C,eAAA,CAAgB,MAAA,EAAQ,WAAA,KAAgB,eAAA;;AHzExD;;;iBGwFgB,gBAAA,CAAiB,MAAA,EAAQ,WAAA;;;;;AHhIzC;;;;iBIPgB,UAAA,CACd,KAAA,EAAO,aAAA,EACP,OAAA,GAAU,uBAAA;AJsBZ;AAAA,iBIDgB,WAAA,CAAY,OAAA;;iBAMZ,eAAA,CAAA;;;cC9BH,kBAAA,EAAoB,MAAA,CAAO,WAAA;AAAA,cAS3B,qBAAA,EAAuB,MAAA,CAAO,aAAA;AAAA,cAK9B,eAAA;AAAA,cAEA,aAAA,EAAe,MAAA,CAAO,SAAA;AAAA,cAStB,cAAA;EAAA,SACX,UAAA;EAAA,SACA,UAAA;EAAA,SACA,OAAA;EAAA,SACA,SAAA;EAAA,SACA,MAAA;EAAA,SACA,KAAA;EAAA,SACA,WAAA;EAAA,SACA,eAAA;AAAA;AAAA,cAKW,gBAAA;AAAA,cACA,kBAAA;;;;;iBAQG,yBAAA,CAAA,GAA6B,eAAA"}
@@ -1,4 +1,4 @@
1
- import { a as WidgetSchema, c as assertDefined, d as isWidgetTypeName, i as WidgetRegistry, l as assertNever, n as WIDGET_TYPE_NAMES, o as WidgetType, r as WidgetPath, s as WidgetTypeName, t as TypedWidgetSchema, u as isWidgetType } from "../widget-schema--PY1uMWx.cjs";
2
- import { _ as ThemeDefinition, h as ThemeColorInput, u as ResolvedTheme, v as ThemePayload } from "../types-Ctu-Zio6.cjs";
3
- import { A as RepAppProfile, C as VerticalAlign, D as NavigationItem, E as Navigation, O as RepAppData, S as VERTICAL_ALIGN_OPTIONS, T as ShareableItem, _ as HorizontalAlign, a as BUTTON_SIZE_OPTIONS, b as SECTION_LAYOUT_CONFIG, c as BorderRadiusOptions, d as ColorOptions, f as FONT_SIZE_OPTIONS, g as HORIZONTAL_ALIGN_OPTIONS, h as GapOptions, i as BORDER_RADIUS_OPTIONS, j as ScreenDefinition, k as RepAppManifest, l as ButtonSizeOptions, m as GAP_OPTIONS, n as AlignOptions, o as BackgroundType, p as FontSizeOptions, r as BACKGROUND_TYPES, s as BackgroundValue, t as StrictOmit, u as COLOR_OPTIONS, v as PADDING_VALUES, w as sectionLayoutConfig, x as SectionLayoutType, y as PaddingOptions } from "../index-Bxe_LIi8.cjs";
1
+ import { a as WidgetSchema, c as assertDefined, d as isWidgetTypeName, i as WidgetRegistry, l as assertNever, n as WIDGET_TYPE_NAMES, o as WidgetType, r as WidgetPath, s as WidgetTypeName, t as TypedWidgetSchema, u as isWidgetType } from "../widget-schema-BSX2fVhW.cjs";
2
+ import { _ as ThemeDefinition, h as ThemeColorInput, u as ResolvedTheme, v as ThemePayload } from "../types-27AHMek-.cjs";
3
+ import { A as RepAppProfile, C as VerticalAlign, D as NavigationItem, E as Navigation, O as RepAppData, S as VERTICAL_ALIGN_OPTIONS, T as ShareableItem, _ as HorizontalAlign, a as BUTTON_SIZE_OPTIONS, b as SECTION_LAYOUT_CONFIG, c as BorderRadiusOptions, d as ColorOptions, f as FONT_SIZE_OPTIONS, g as HORIZONTAL_ALIGN_OPTIONS, h as GapOptions, i as BORDER_RADIUS_OPTIONS, j as ScreenDefinition, k as RepAppManifest, l as ButtonSizeOptions, m as GAP_OPTIONS, n as AlignOptions, o as BackgroundType, p as FontSizeOptions, r as BACKGROUND_TYPES, s as BackgroundValue, t as StrictOmit, u as COLOR_OPTIONS, v as PADDING_VALUES, w as sectionLayoutConfig, x as SectionLayoutType, y as PaddingOptions } from "../index-Bgv8HUpo.cjs";
4
4
  export { AlignOptions, BACKGROUND_TYPES, BORDER_RADIUS_OPTIONS, BUTTON_SIZE_OPTIONS, BackgroundType, BackgroundValue, BorderRadiusOptions, ButtonSizeOptions, COLOR_OPTIONS, ColorOptions, FONT_SIZE_OPTIONS, FontSizeOptions, GAP_OPTIONS, GapOptions, HORIZONTAL_ALIGN_OPTIONS, HorizontalAlign, Navigation, NavigationItem, PADDING_VALUES, PaddingOptions, RepAppData, RepAppManifest, RepAppProfile, ResolvedTheme, SECTION_LAYOUT_CONFIG, ScreenDefinition, SectionLayoutType, ShareableItem, StrictOmit, ThemeColorInput, ThemeDefinition, ThemePayload, TypedWidgetSchema, VERTICAL_ALIGN_OPTIONS, VerticalAlign, WIDGET_TYPE_NAMES, WidgetPath, WidgetRegistry, WidgetSchema, WidgetType, WidgetTypeName, assertDefined, assertNever, isWidgetType, isWidgetTypeName, sectionLayoutConfig };
@@ -1,4 +1,4 @@
1
- import { a as WidgetSchema, c as assertDefined, d as isWidgetTypeName, i as WidgetRegistry, l as assertNever, n as WIDGET_TYPE_NAMES, o as WidgetType, r as WidgetPath, s as WidgetTypeName, t as TypedWidgetSchema, u as isWidgetType } from "../widget-schema-YkD5p3v4.mjs";
2
- import { _ as ThemeDefinition, h as ThemeColorInput, u as ResolvedTheme, v as ThemePayload } from "../types-ByG6Xy3C.mjs";
3
- import { A as RepAppProfile, C as VerticalAlign, D as NavigationItem, E as Navigation, O as RepAppData, S as VERTICAL_ALIGN_OPTIONS, T as ShareableItem, _ as HorizontalAlign, a as BUTTON_SIZE_OPTIONS, b as SECTION_LAYOUT_CONFIG, c as BorderRadiusOptions, d as ColorOptions, f as FONT_SIZE_OPTIONS, g as HORIZONTAL_ALIGN_OPTIONS, h as GapOptions, i as BORDER_RADIUS_OPTIONS, j as ScreenDefinition, k as RepAppManifest, l as ButtonSizeOptions, m as GAP_OPTIONS, n as AlignOptions, o as BackgroundType, p as FontSizeOptions, r as BACKGROUND_TYPES, s as BackgroundValue, t as StrictOmit, u as COLOR_OPTIONS, v as PADDING_VALUES, w as sectionLayoutConfig, x as SectionLayoutType, y as PaddingOptions } from "../index-CCAu2n19.mjs";
1
+ import { a as WidgetSchema, c as assertDefined, d as isWidgetTypeName, i as WidgetRegistry, l as assertNever, n as WIDGET_TYPE_NAMES, o as WidgetType, r as WidgetPath, s as WidgetTypeName, t as TypedWidgetSchema, u as isWidgetType } from "../widget-schema-BKZgsNG7.mjs";
2
+ import { _ as ThemeDefinition, h as ThemeColorInput, u as ResolvedTheme, v as ThemePayload } from "../types-CeCPKvOv.mjs";
3
+ import { A as RepAppProfile, C as VerticalAlign, D as NavigationItem, E as Navigation, O as RepAppData, S as VERTICAL_ALIGN_OPTIONS, T as ShareableItem, _ as HorizontalAlign, a as BUTTON_SIZE_OPTIONS, b as SECTION_LAYOUT_CONFIG, c as BorderRadiusOptions, d as ColorOptions, f as FONT_SIZE_OPTIONS, g as HORIZONTAL_ALIGN_OPTIONS, h as GapOptions, i as BORDER_RADIUS_OPTIONS, j as ScreenDefinition, k as RepAppManifest, l as ButtonSizeOptions, m as GAP_OPTIONS, n as AlignOptions, o as BackgroundType, p as FontSizeOptions, r as BACKGROUND_TYPES, s as BackgroundValue, t as StrictOmit, u as COLOR_OPTIONS, v as PADDING_VALUES, w as sectionLayoutConfig, x as SectionLayoutType, y as PaddingOptions } from "../index-Ka_HOwpb.mjs";
4
4
  export { AlignOptions, BACKGROUND_TYPES, BORDER_RADIUS_OPTIONS, BUTTON_SIZE_OPTIONS, BackgroundType, BackgroundValue, BorderRadiusOptions, ButtonSizeOptions, COLOR_OPTIONS, ColorOptions, FONT_SIZE_OPTIONS, FontSizeOptions, GAP_OPTIONS, GapOptions, HORIZONTAL_ALIGN_OPTIONS, HorizontalAlign, Navigation, NavigationItem, PADDING_VALUES, PaddingOptions, RepAppData, RepAppManifest, RepAppProfile, ResolvedTheme, SECTION_LAYOUT_CONFIG, ScreenDefinition, SectionLayoutType, ShareableItem, StrictOmit, ThemeColorInput, ThemeDefinition, ThemePayload, TypedWidgetSchema, VERTICAL_ALIGN_OPTIONS, VerticalAlign, WIDGET_TYPE_NAMES, WidgetPath, WidgetRegistry, WidgetSchema, WidgetType, WidgetTypeName, assertDefined, assertNever, isWidgetType, isWidgetTypeName, sectionLayoutConfig };