"use client"; import { ComponentLibraryProductThemeProvider, resolveComponentLibraryDefaultTheme, useComponentLibraryProductTheme, type ComponentLibraryProductTheme, } from "@prototype/lib/use-component-library-product-theme"; import { useSyncComponentLibraryPortalTheme } from "@prototype/lib/use-sync-component-library-portal-theme"; import { useComponentLibraryThemeGuard } from "@prototype/lib/use-component-library-theme-guard"; import { useComponentLibraryThemeRescope } from "@prototype/lib/use-component-library-theme-rescope"; import { PROTOTYPE_PRODUCT_THEME_MANAGED_ATTR, PROTOTYPE_SOURCE_SURFACE_ATTR, } from "@prototype/lib/tool-portal"; import { useBootstrapPreview } from "@prototype/lib/prototypes/use-bootstrap-preview"; import { cn } from "@prototype/lib/utils"; import type { ReactNode } from "react"; import { PrototypeGalleryHeader, PrototypeGalleryPageLayout, } from "./prototype-gallery-shell"; type PrototypeDesignSystemShellProps = { title: string; description: string; children: ReactNode; isEmpty?: boolean; productThemes?: readonly ComponentLibraryProductTheme[]; }; function PrototypeDesignSystemShellContent({ title, description, children, isEmpty = false, productThemes, }: PrototypeDesignSystemShellProps) { const { isComponentLibraryLoadingPanelVisible } = useBootstrapPreview(); const showPreSyncSurface = isEmpty || isComponentLibraryLoadingPanelVisible; const themes = productThemes ?? (["light", "dark"] as const); const libraryTheme = resolveComponentLibraryDefaultTheme(themes); return ( {children} ); } function PrototypeDesignSystemShellLayout({ title, description, children, themes, guardTheme, }: { title: string; description: string; children: ReactNode; themes: readonly ComponentLibraryProductTheme[]; guardTheme: boolean; }) { const { surfaceRef, theme } = useComponentLibraryProductTheme(); useComponentLibraryThemeRescope(themes, theme); useSyncComponentLibraryPortalTheme(theme, guardTheme, surfaceRef); useComponentLibraryThemeGuard(surfaceRef, theme, { enabled: guardTheme }); return ( } scrollClassName={ guardTheme ? cn(theme, "bg-[var(--bg-main)]") : "bg-[var(--bg-ground)]" } scrollContainerRef={guardTheme ? surfaceRef : undefined} scrollContainerProps={ guardTheme ? { "data-theme": theme, [PROTOTYPE_SOURCE_SURFACE_ATTR]: "", [PROTOTYPE_PRODUCT_THEME_MANAGED_ATTR]: "", } : undefined } > {children} ); } /** Component library content area — dark before import, then source product tokens. */ export function PrototypeDesignSystemShell({ title, description, children, isEmpty, productThemes, }: PrototypeDesignSystemShellProps) { return ( {children} ); }