export type ContentLifecycleStatus = 'draft' | 'scheduled' | 'published' | (string & {});
export type RoutingHelpers = {
    slugPrefix: string;
    normalizedPrefix: string;
    routePattern: string | null;
    defaultSlug: string | null;
    toSlug: (input: string | null | undefined) => string;
    toPath: (slug: string | null | undefined) => string;
    buildRoutePath: (slug: string | null | undefined) => string;
    sanitize: (value: string | null | undefined) => string;
};
export type RoutableContentSnapshot<TStatus extends string = string> = {
    kind: 'routable';
    id: string;
    draft: {
        title: string;
        slug: string;
        status: TStatus;
        publishAt: string | null;
        path: string;
    };
    published: {
        title: string | null;
        path: string | null;
        status: TStatus | null;
        publishAt: string | null;
    };
    status: TStatus;
    route: {
        draftMetaTitle?: string | null;
        draftMetaDescription?: string | null;
        publishedMetaTitle?: string | null;
        publishedMetaDescription?: string | null;
        ogImageId?: string | null;
    };
};
export type NonRoutableContentSnapshot<TStatus extends string = string> = {
    kind: 'non-routable';
    id: string;
    draft: {
        title: string;
        status: TStatus;
        publishAt: string | null;
    };
    published: {
        title: string | null;
        status: TStatus | null;
        publishAt: string | null;
    };
    status: TStatus;
    hasDraftVersionChanges?: boolean;
};
export type ContentEntrySnapshot<TStatus extends string = string> = RoutableContentSnapshot<TStatus> | NonRoutableContentSnapshot<TStatus>;
export type ValidationIssue<TValues extends Record<string, unknown>> = {
    path: keyof TValues & string;
    message: string;
};
export type MetadataStateSnapshot<TValues extends Record<string, unknown>> = {
    values: TValues;
    baseline: TValues;
};
export type ToolbarState<TValues extends Record<string, unknown>> = {
    currentStatus: ContentLifecycleStatus;
    publishLabel: string;
    publishedMessage?: string | null;
    disablePublish?: boolean;
    disableDiscard?: boolean;
    values: TValues;
};
export type ContentEntryDefinition<TEntry extends ContentEntrySnapshot, TValues extends Record<string, unknown>, TMetadataPayload extends Record<string, unknown> = Record<string, unknown>, TPublishPayload = void, TMetadataResponse extends Record<string, unknown> = Record<string, unknown>> = {
    type: string;
    title: string;
    kind: 'content' | 'page';
    routing: RoutingHelpers;
    hasRoute: boolean;
    services: {
        saveMetadata: (payload: TMetadataPayload) => Promise<TMetadataResponse>;
        publish: (payload: TPublishPayload | undefined) => Promise<TEntry>;
        discardDraft: () => Promise<TEntry>;
        deleteEntry: () => Promise<void>;
    };
    publish?: {
        buildPayload?: (values: TValues, entry: TEntry) => TPublishPayload | undefined;
    };
};
