import { type MaybePromise, type PartialWithUndefined } from '@augment-vir/common'; import { LocalStorageClient } from '@electrovir/local-storage-client'; /** * A user-facing selection of which theme to display. `Auto` follows the system color scheme; the * other values force a specific theme regardless of system preference. * * @category Internal */ export declare enum ViraThemeSelection { Light = "light", Dark = "dark", Auto = "auto" } /** * Used by {@link ViraThemeClient} to apply themes. By default, vira themes will be applied (via * {@link defaultApplyThemeCallback}). * * @category Internal * @default `defaultApplyThemeCallback` */ export type ApplyThemeCallback = (params: Readonly<{ useDarkTheme: boolean; }>) => MaybePromise; /** * Default implementation of {@link ApplyThemeCallback}, which simply applies Vira themes. * * @category Internal */ export declare const defaultApplyThemeCallback: ApplyThemeCallback; /** * Constructor params for {@link ViraThemeClient}. * * @category Internal */ export type ViraThemeClientParams = PartialWithUndefined<{ /** * Called whenever the effective theme should change. If not provided, the default Vira themes * will be used. */ applyTheme: ApplyThemeCallback; /** * Override the LocalStorage store name used for theme persistence. Useful if a single page * hosts multiple isolated theme clients. * * @default 'vira-theme' */ storeName: string; }>; declare const themeStorageShapes: { selectedTheme: import("object-shape-tester").Shape<{ theme: import("object-shape-tester").Shape | import("@sinclair/typebox").TLiteral | import("@sinclair/typebox").TLiteral)[]>>; }>; }; /** * Tracks the user's {@link ViraThemeSelection} and bridges it to a consumer-supplied `applyTheme` * callback. Persists the selection in LocalStorage via an internal `LocalStorageClient`, and * listens for system color-scheme changes to re-apply the theme in auto mode without persisting. * * The initial theme is applied during construction. * * @category Util */ export declare class ViraThemeClient { /** The callback that will be called to apply a new theme. */ protected readonly applyThemeCallback: ApplyThemeCallback; /** Contains the user's last selected theme, saving and loading it to disk for persistence. */ protected readonly localStorageClient: LocalStorageClient; /** A callback to remove the global theme preference listener. */ protected readonly removeThemePreferenceListener: () => void; constructor(params?: Readonly); /** * The currently selected theme. If you use multiple clients to set the same theme, this might * get out of sync. */ get currentTheme(): ViraThemeSelection; /** Set the selected theme. */ setSelectedTheme(selection: ViraThemeSelection): void; /** Cleanup internal state and listeners. */ destroy(): void; /** Apply the currently selected theme. */ protected applySelection(selection: ViraThemeSelection): void; } export {};