export type TemplateScope = 'entry' | 'template';
/**
 * Keep in sync with:
 * - @riverbankcms/blocks `TRANSFORMS`
 * - @riverbankcms/sdk `BINDING_TRANSFORMS`
 */
export declare const TEMPLATE_BINDING_TRANSFORMS: {
    readonly RICHTEXT_FIRST_PARAGRAPH: "richtext.firstParagraph";
    readonly DATE_FORMAT_SHORT: "date.formatShort";
    readonly DATE_FORMAT_LONG: "date.formatLong";
};
export type TemplateBindingTransformName = typeof TEMPLATE_BINDING_TRANSFORMS[keyof typeof TEMPLATE_BINDING_TRANSFORMS];
export type TemplateBindingDescriptor = {
    source: 'field' | 'meta';
    path: string;
} | {
    source: 'literal';
    value: unknown;
} | {
    source: 'transform';
    transform: TemplateBindingTransformName;
    path?: string;
    input?: TemplateBindingDescriptor | string;
} | {
    source: 'fallback';
    options: TemplateBindingValue[];
};
export interface TemplateBindingRecord {
    [key: string]: TemplateBindingValue;
}
export type TemplateBindingValue = TemplateBindingDescriptor | TemplateBindingRecord | string;
export type TemplateBindings = TemplateBindingRecord;
export interface TemplateBlockDefinition {
    blockKind: string;
    scope: TemplateScope;
    content?: Record<string, unknown>;
    bindings?: TemplateBindings;
    dataDependencies?: Record<string, unknown>;
    /**
     * Optional stable identifier for this block within the template.
     * Used by validators and audit tooling to refer to the block in error
     * messages; the SDK's `TemplateBlockConfig` already requires this.
     */
    identifier?: string;
}
export interface TemplateDefinition {
    templateKey: string;
    name: string;
    description?: string | null;
    metadata?: Record<string, unknown>;
    blocks: TemplateBlockDefinition[];
}
export type TemplateDefinitionMap = Record<string, TemplateDefinition>;
