import { ReactNode } from 'react'; /** * Boff UI theme axis. `mode` is the user's stored choice and may be any of the * six concrete Boff UI themes, `system` (resolves to light/dark from the OS), or * `custom` (a user-designed theme — see {@link CustomTheme}). The light/dark * *family* is exposed separately as `resolvedTheme`, while `resolvedThemeName` is * the concrete CSS theme written to `data-theme` on the document root. */ export type ThemeMode = 'light' | 'dark' | 'forest' | 'ocean' | 'sunset' | 'high-contrast' | 'system' | 'custom'; /** The six concrete CSS themes (`data-theme` only ever receives one of these). */ export type ThemeName = Exclude; export type Brand = 'workspaces' | 'fluidgrids' | 'bigconsole' | 'botlit' | 'vibecontrols' | 'healthybowl' | 'housingvista' | 'adaptercloud' | 'artistrybase' | 'atheletebridge' | 'brainyrich' | 'buildmyiq' | 'collabkin' | 'comradecircle' | 'coolandlovely' | 'cosmicintersection' | 'crewfoundry' | 'ecoimpacthub' | 'eventfullymanaged' | 'ggnomad' | 'govcitizenhub' | 'headshotmarketing' | 'hookmovies' | 'intelwatchtower' | 'kadaikodi' | 'labsofscience' | 'manufacturedops' | 'movethewheels' | 'mybodyshield' | 'planmagnet' | 'proserviceworld' | 'semanticfed' | 'subscriberbot' | 'theculturepost' | 'theglobalfuel' | 'timecampus' | 'default'; export type Density = 'compact' | 'comfortable' | 'spacious'; export type Typography = 'default' | 'large' | 'small'; /** Glass intensity preference (drives `data-glass` → blur + opaque fallback). */ export type GlassIntensity = 'off' | 'subtle' | 'full'; /** * A user-designed, saved theme. Reusable across every product (the storage key * is shared across all shells). A custom theme inherits a light/dark base CSS * block and redefines ONLY the action accent (which retints the whole UI via the * existing `color-mix(... var(--color-action-primary-bg) ...)` tokens) plus the * density / typography / glass / motion axes — no new token names. */ export interface CustomTheme { id: string; name: string; base: 'light' | 'dark'; /** single hex accent — feeds --color-action-primary-bg only */ accent: string; density: Density; typography: Typography; glass: GlassIntensity; reduceMotion: boolean; } /** Metadata for the theme picker / Appearance settings UI. */ export interface ThemeOption { value: ThemeName; label: string; family: 'light' | 'dark'; } export declare const THEME_OPTIONS: ReadonlyArray; export interface ThemeContextValue { mode: ThemeMode; brand: Brand; density: Density; typography: Typography; glass: GlassIntensity; reduceMotion: boolean; /** light/dark family of the active theme */ resolvedTheme: 'light' | 'dark'; /** concrete theme written to data-theme (light|dark|forest|ocean|sunset|high-contrast) */ resolvedThemeName: ThemeName; setMode: (mode: ThemeMode) => void; setBrand: (brand: Brand) => void; setDensity: (density: Density) => void; setTypography: (typography: Typography) => void; setGlass: (glass: GlassIntensity) => void; setReduceMotion: (reduce: boolean) => void; customThemes: CustomTheme[]; activeCustomId: string | null; createCustomTheme: (t: Omit) => CustomTheme; updateCustomTheme: (id: string, patch: Partial>) => void; deleteCustomTheme: (id: string) => void; /** Activate a saved custom theme (sets mode='custom'). */ applyCustomTheme: (id: string) => void; colorMode: 'light' | 'dark'; toggleColorMode: () => void; } export interface ThemeProviderProps { children: ReactNode; defaultMode?: ThemeMode; defaultBrand?: Brand; defaultDensity?: Density; defaultTypography?: Typography; defaultGlass?: GlassIntensity; storageKey?: string; } export declare function ThemeProvider({ children, defaultMode, defaultBrand, defaultDensity, defaultTypography, defaultGlass, storageKey, }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element; export declare function useTheme(): ThemeContextValue; //# sourceMappingURL=ThemeProvider.d.ts.map