import { type AdminBrandingMode, type BrandAssetRole, type ColorMode, type LogoShape, type ResolvedAdminBrand, type ResolvedPublicBrand, type SidebarDensity } from '@actuate-media/cms-core/appearance';
import type { SettingsSourceMetadata, ValidationIssue } from './useGeneralSettings.js';
export type SaveState = 'idle' | 'saving' | 'success' | 'error';
/** Theme + typography + motion form (the `appearance` settings blob). */
export interface AppearanceForm {
    colorMode: ColorMode;
    accent: string;
    density: SidebarDensity;
    font: string;
    reduceMotion: boolean;
}
/** Brand asset references + admin branding mode (the `brand` settings blob). */
export interface BrandForm {
    mode: AdminBrandingMode;
    publicPrimaryLogoAssetId?: string;
    publicLogoMarkAssetId?: string;
    publicDarkLogoAssetId?: string;
    adminPrimaryLogoAssetId?: string;
    adminLogoMarkAssetId?: string;
    adminDarkLogoAssetId?: string;
    faviconSourceAssetId?: string;
    defaultLogoAltText?: string;
}
/** A brand-form field that points at a media asset, plus its asset role. */
export type BrandAssetField = 'publicPrimaryLogoAssetId' | 'publicLogoMarkAssetId' | 'publicDarkLogoAssetId' | 'adminPrimaryLogoAssetId' | 'adminLogoMarkAssetId' | 'adminDarkLogoAssetId' | 'faviconSourceAssetId';
export declare const FIELD_ROLE: Record<BrandAssetField, BrandAssetRole>;
export interface AssetPreview {
    id: string;
    url: string;
    mimeType: string;
    width?: number;
    height?: number;
    shape: LogoShape;
}
export interface UseAppearanceSettings {
    loading: boolean;
    loadError: string | null;
    appearance: AppearanceForm;
    brand: BrandForm;
    /** Per-asset-id preview metadata (loaded + freshly uploaded). */
    assets: Record<string, AssetPreview>;
    sources: Record<string, SettingsSourceMetadata>;
    issues: ValidationIssue[];
    preview: {
        admin: ResolvedAdminBrand;
        public: ResolvedPublicBrand;
        faviconUrl: string | null;
    };
    dirty: boolean;
    saveState: SaveState;
    saveError: string | null;
    uploadingField: BrandAssetField | null;
    showAdvanced: boolean;
    setShowAdvanced: (v: boolean) => void;
    setColorMode: (v: ColorMode) => void;
    setAccent: (v: string) => void;
    setDensity: (v: SidebarDensity) => void;
    setFont: (v: string) => void;
    setReduceMotion: (v: boolean) => void;
    setBrandingMode: (v: AdminBrandingMode) => void;
    setAltText: (v: string) => void;
    uploadAsset: (field: BrandAssetField, file: File) => Promise<void>;
    removeAsset: (field: BrandAssetField) => void;
    save: () => Promise<void>;
    reset: () => void;
    reload: () => void;
}
export declare function useAppearanceSettings(canEdit: boolean, config?: Record<string, unknown>): UseAppearanceSettings;
//# sourceMappingURL=useAppearanceSettings.d.ts.map