import type { BlockLayoutDesignProfile } from './blockFlow';
import { autoDesignChoice, type PageDesignBlockDescriptor, type PageDesignIntent, type PageDesignUserPinnedChoice } from './pageDesignIntent';
import { type AppearancePresetId, type BoundaryOptionId, type DesignBlockId, type LayoutVariantKey, type SiteStyleId } from './types';
export declare const defaultPolicyPageFlowPresetId: import("../../../blocks/src/index").PageFlowPresetId;
export type OpenSiteStyleBlockPolicy = Readonly<{
    kind: 'open';
}>;
export type LockedLookAndLayoutsSiteStyleBlockPolicy = Readonly<{
    kind: 'locked-look-and-layouts';
    blockKind: string;
    lookId: AppearancePresetId;
    allowedLayoutVariantKeys: readonly LayoutVariantKey[];
    defaultLayoutVariantKey: LayoutVariantKey;
    defaultBoundaryAfter?: Readonly<{
        optionId: BoundaryOptionId;
        mode: 'default-only';
    }>;
    customize: Readonly<{
        hideDisallowedLooks: true;
        hideDisallowedLayouts: true;
    }>;
}>;
export type SiteStyleBlockPolicy = OpenSiteStyleBlockPolicy | LockedLookAndLayoutsSiteStyleBlockPolicy;
type RegisteredSiteStyleBlockPolicy = LockedLookAndLayoutsSiteStyleBlockPolicy & Readonly<{
    siteStyleId: SiteStyleId;
}>;
export type BlockPolicyDescriptor<TBlockId extends DesignBlockId = DesignBlockId> = PageDesignBlockDescriptor<TBlockId> & Readonly<{
    currentLayoutVariantKey?: LayoutVariantKey | null;
    layoutProfiles?: readonly BlockLayoutDesignProfile[] | null;
}>;
export type BlockContentVariantPolicyPlan = Readonly<{
    kind: 'unchanged';
}> | Readonly<{
    kind: 'set-variant';
    variantKey: LayoutVariantKey;
}>;
export type PageDesignPolicyAuditIssue<TBlockId extends DesignBlockId = DesignBlockId> = Readonly<{
    kind: 'missing-page-design-authority';
    siteStyleId: SiteStyleId;
    policyBlockCount: number;
}> | Readonly<{
    kind: 'missing-required-look-pin';
    blockId: TBlockId;
    blockKind: string;
    requiredLookId: AppearancePresetId;
}> | Readonly<{
    kind: 'unsupported-look-pin';
    blockId: TBlockId;
    blockKind: string;
    actualLookId: AppearancePresetId;
    requiredLookId: AppearancePresetId;
}> | Readonly<{
    kind: 'unsupported-layout-variant';
    blockId: TBlockId;
    blockKind: string;
    actualLayoutVariantKey: LayoutVariantKey;
    defaultLayoutVariantKey: LayoutVariantKey;
}>;
export declare function siteStyleBlockPolicies(): readonly RegisteredSiteStyleBlockPolicy[];
export declare function buildInitialPolicyPageDesignIntent(siteStyleId: SiteStyleId): PageDesignIntent;
export declare function hasPolicyForBlocks(input: Readonly<{
    siteStyleId: SiteStyleId;
    blocks: readonly PageDesignBlockDescriptor[];
}>): boolean;
export declare function deriveSiteStyleBlockPolicy(input: Readonly<{
    siteStyleId: SiteStyleId;
    blockKind: string;
}>): SiteStyleBlockPolicy;
export declare function isLayoutVariantAllowedByPolicy(policy: SiteStyleBlockPolicy, layoutVariantKey: LayoutVariantKey): boolean;
export declare function normalizeLayoutVariantForPolicy(policy: SiteStyleBlockPolicy, layoutVariantKey: LayoutVariantKey | null | undefined): LayoutVariantKey | null;
export declare function filterLayoutProfilesForPolicy(policy: SiteStyleBlockPolicy, layoutProfiles: readonly BlockLayoutDesignProfile[]): readonly BlockLayoutDesignProfile[];
export declare function isLookAllowedByPolicy(policy: SiteStyleBlockPolicy, lookId: AppearancePresetId): boolean;
export declare function filterLookIdsForPolicy<TLook extends Readonly<{
    id: AppearancePresetId;
}>>(policy: SiteStyleBlockPolicy, looks: readonly TLook[]): readonly TLook[];
export declare function applySiteStyleBlockPoliciesToPageDesignIntent<TBlockId extends DesignBlockId>(intent: PageDesignIntent<TBlockId>, blocks: readonly PageDesignBlockDescriptor<TBlockId>[]): PageDesignIntent<TBlockId>;
export declare function planBlockContentVariantPolicyUpdate(input: Readonly<{
    policy: SiteStyleBlockPolicy;
    content: Readonly<Record<string, unknown>>;
}>): BlockContentVariantPolicyPlan;
export declare function applyBlockContentVariantPolicy(input: Readonly<{
    policy: SiteStyleBlockPolicy;
    content: Readonly<Record<string, unknown>>;
}>): Readonly<Record<string, unknown>>;
export declare function auditPageDesignIntentPolicy<TBlockId extends DesignBlockId>(input: Readonly<{
    intent: PageDesignIntent<TBlockId>;
    blocks: readonly BlockPolicyDescriptor<TBlockId>[];
}>): readonly PageDesignPolicyAuditIssue<TBlockId>[];
export declare function auditPageDesignAuthorityPolicy<TBlockId extends DesignBlockId>(input: Readonly<{
    siteStyleId: SiteStyleId;
    intent: PageDesignIntent<TBlockId> | null;
    blocks: readonly BlockPolicyDescriptor<TBlockId>[];
}>): readonly PageDesignPolicyAuditIssue<TBlockId>[];
export declare function assertRegisteredSiteStyleBlockPoliciesAreValid(): void;
export declare function autoChoiceAllowedByPolicy(policy: SiteStyleBlockPolicy): ReturnType<typeof autoDesignChoice> | PageDesignUserPinnedChoice<AppearancePresetId>;
export {};
