import { type BlockManifest } from '../../blocks/src/index';
import type { EditorSyncState } from '../../core/src/index';
import type { z } from 'zod';
type ManifestValidationIssue = z.core.$ZodIssue;
export type BlockDraftValidationIssue = Readonly<{
    code: ManifestValidationIssue['code'];
    path: (string | number)[];
    fieldPath: string;
    message: string;
}>;
export type BlockManifestValidationMode = 'draft' | 'strict';
export type BlockDraftSaveability = Readonly<{
    kind: 'pristine';
    issues: readonly BlockDraftValidationIssue[];
}> | Readonly<{
    kind: 'incomplete';
    issues: readonly BlockDraftValidationIssue[];
}> | Readonly<{
    kind: 'saveable';
    issues: readonly [];
}> | Readonly<{
    kind: 'save_failed';
    issues: readonly BlockDraftValidationIssue[];
    error: string;
}>;
export declare const unfinishedBlockCopy: {
    readonly title: "Fix this block to save it";
    readonly description: "Some fields need a quick check. Your changes are safe here for now.";
};
export declare const recoveryConflictCopy: {
    readonly reviewActionLabel: "Review affected blocks";
    readonly discardActionLabel: "Discard browser recovery";
    readonly blockNoticeTitle: "We couldn’t restore unfinished edits here automatically";
    readonly blockNoticeDescription: "The saved version changed before we could put them back.";
    readonly pageNoticeDescription: "The saved page changed, so we couldn’t restore them automatically.";
};
export declare const unfinishedBlocksSummaryCopy: {
    readonly singular: "1 block still needs attention";
    readonly plural: (count: number) => string;
};
export declare const publishBlockedCopy: {
    readonly singleInvalidBlock: (blockLabel: string) => string;
    readonly multipleInvalidBlocks: (count: number) => string;
};
export declare function formatRecoveryConflictTitle(count: number): string;
export declare function formatRecoveryConflictSummary(count: number): string | null;
export declare function formatUnfinishedBlocksSummary(count: number): string | null;
export declare function formatPublishBlockedMessage(input: Readonly<{
    type: 'single-invalid-block';
    blockLabel: string;
} | {
    type: 'multiple-invalid-blocks';
    count: number;
}>): string;
export declare function deriveBlockDraftSaveability(input: {
    syncState: EditorSyncState;
    issues: readonly BlockDraftValidationIssue[];
    hasMeaningfulEdit: boolean;
    showAllValidation: boolean;
}): BlockDraftSaveability;
export declare function shouldShowBlockFieldValidation(input: {
    fieldPath: string;
    touchedPaths: ReadonlySet<string>;
    showAllValidation: boolean;
}): boolean;
export declare function validateBlockManifestValues(manifest: BlockManifest, values: Record<string, unknown>): BlockDraftValidationIssue[];
export declare function validateBlockManifestIssues(manifest: BlockManifest, values: Record<string, unknown>, mode: BlockManifestValidationMode): ManifestValidationIssue[];
export declare function validateBlockManifest(manifest: BlockManifest, values: Record<string, unknown>, mode: BlockManifestValidationMode): BlockDraftValidationIssue[];
export declare function normalizeManifestIssueMessage(issue: ManifestValidationIssue): string;
export {};
