import { type CuratedSiteStyle } from '../../../../theme-core/src/site-styles/previewCompiler';
import { type FooterLookId, type FooterSelectionContext, type HeaderLookId, type HeaderSelectionContext, type LookCustomizationWritePlan } from '../../../../theme-core/src/site-styles/index';
import type { SelectionSnapshot, StyleConfiguratorState } from './StyleConfigurator.state';
export type SiteChromeLookOption<TId extends string | null> = Readonly<{
    id: TId;
    label: string;
    description?: string;
    available: boolean;
}>;
export type SiteChromeLookCatalogOption<TId extends string> = Readonly<{
    id: TId;
    label: string;
}>;
export type SiteChromeLookRowModel<TId extends string> = Readonly<{
    options: readonly SiteChromeLookOption<TId | null>[];
    diagnostics: readonly string[];
    renderedLookId: TId;
}>;
export type SiteChromeLookModels = Readonly<{
    header: SiteChromeLookRowModel<HeaderLookId>;
    footer: SiteChromeLookRowModel<FooterLookId>;
}>;
type SiteChromeLookModelInput = Readonly<{
    state: StyleConfiguratorState;
    siteStyle: CuratedSiteStyle;
    headerSelectionContext?: Partial<HeaderSelectionContext>;
    footerSelectionContext?: Partial<FooterSelectionContext>;
}>;
export declare function buildSiteChromeLookModels(input: SiteChromeLookModelInput): SiteChromeLookModels;
export declare function cycleSiteChromeLookId<TId extends string>(options: readonly SiteChromeLookOption<TId | null>[], currentId: TId | null, direction: 'prev' | 'next'): TId | null | undefined;
export declare function cycleableSiteChromeOptions<TId extends string>(options: readonly SiteChromeLookOption<TId | null>[]): readonly SiteChromeLookOption<TId | null>[];
export type SiteChromeLookSelectionCommand = Readonly<{
    surface: 'header';
    lookId: HeaderLookId | null;
}> | Readonly<{
    surface: 'footer';
    lookId: FooterLookId | null;
}>;
export type SiteChromeLookSelectionPlan = Readonly<{
    kind: 'header';
    writePlan: LookCustomizationWritePlan<HeaderLookId>;
    next: Pick<SelectionSnapshot, 'headerLookId'>;
}> | Readonly<{
    kind: 'footer';
    writePlan: LookCustomizationWritePlan<FooterLookId>;
    next: Pick<SelectionSnapshot, 'footerLookId'>;
}>;
export declare function planSiteChromeLookSelection(command: SiteChromeLookSelectionCommand): SiteChromeLookSelectionPlan;
export {};
