import type { Config } from 'alinea/core/Config';
import type { Connection } from 'alinea/core/Connection';
import { Entry, type EntryStatus } from 'alinea/core/Entry';
import { Type } from 'alinea/core/Type';
import { FormAtoms } from 'alinea/dashboard/atoms/FormAtoms';
import { type Edits } from './Edits.js';
export declare enum EditMode {
    Editing = "editing",
    Diff = "diff"
}
export type Version = Entry & {
    parents: Array<string>;
};
interface EntryEditorParams {
    id: string | undefined;
    locale: string | null;
}
export declare enum EntryTransition {
    SaveDraft = 0,
    SaveTranslation = 1,
    PublishEdits = 2,
    RestoreRevision = 3,
    PublishDraft = 4,
    UnpublishDraft = 5,
    DiscardDraft = 6,
    ArchivePublished = 7,
    PublishArchived = 8,
    DeleteFile = 9,
    DeleteEntry = 10
}
export declare const entryEditorAtoms: import("jotai/vanilla/utils/atomFamily.js").AtomFamily<EntryEditorParams, import("jotai").Atom<Promise<{
    transition: import("jotai").PrimitiveAtom<EntryTransition | undefined> & {
        init: EntryTransition | undefined;
    };
    revisionId: string;
    activeStatus: EntryStatus;
    statusInUrl: import("jotai").Atom<EntryStatus | undefined>;
    selectedStatus: import("jotai").Atom<EntryStatus>;
    entryData: EntryData;
    editMode: import("jotai").PrimitiveAtom<EditMode> & {
        init: EditMode;
    };
    activeVersion: Version;
    type: Type;
    previewPayload: import("jotai").Atom<Promise<string>>;
    activeTitle: import("jotai").Atom<string>;
    hasChanges: import("jotai").PrimitiveAtom<boolean> & {
        init: boolean;
    };
    draftEntry: import("jotai").Atom<Promise<Entry<Record<string, unknown>>>> & {
        current: import("jotai").Atom<Entry<Record<string, unknown>> | undefined>;
    };
    saveDraft: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    publishEdits: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    restoreRevision: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    publishDraft: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    discardDraft: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    unPublish: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    archive: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    publishArchived: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    deleteFile: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    deleteMediaLibrary: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    deleteEntry: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    saveTranslation: import("jotai").WritableAtom<null, [locale: string], Promise<void>> & {
        init: null;
    };
    discardEdits: import("jotai").WritableAtom<null, [], void> & {
        init: null;
    };
    showHistory: import("jotai").WritableAtom<boolean, [value: boolean], void>;
    revisionsAtom: import("jotai").Atom<Promise<import("alinea/core/Connection").Revision[]>>;
    previewToken: import("jotai").Atom<Promise<string>>;
    previewRevision: import("jotai").PrimitiveAtom<{
        ref: string;
        file: string;
    } | undefined> & {
        init: {
            ref: string;
            file: string;
        } | undefined;
    };
    preview: import("alinea/core/Preview.js").Preview | undefined;
    form: import("jotai").Atom<FormAtoms<object>>;
    view: import("alinea/core/View.js").View<import("../view/EntryEdit.js").EntryEditProps & {
        type: Type;
    }> | undefined;
    parents: Array<{
        id: string;
        path: string;
        status: EntryStatus;
        main: boolean;
    }>;
    client: Connection;
    config: Config;
    entryId: string;
    versions: Array<Version>;
    statuses: Record<EntryStatus, Version>;
    availableStatuses: Array<EntryStatus>;
    translations: Array<{
        locale: string;
        entryId: string;
    }>;
    untranslated: boolean;
    canPublish: boolean;
    canDelete: boolean;
    parentNeedsTranslation: boolean;
    edits: Edits;
} | undefined>>>;
export interface EntryData {
    parents: Array<{
        id: string;
        path: string;
        status: EntryStatus;
        main: boolean;
    }>;
    client: Connection;
    config: Config;
    entryId: string;
    versions: Array<Version>;
    statuses: Record<EntryStatus, Version>;
    availableStatuses: Array<EntryStatus>;
    translations: Array<{
        locale: string;
        entryId: string;
    }>;
    untranslated: boolean;
    canPublish: boolean;
    canDelete: boolean;
    parentNeedsTranslation: boolean;
    edits: Edits;
}
export type EntryEditor = ReturnType<typeof createEntryEditor>;
export declare function createEntryEditor(entryData: EntryData): {
    transition: import("jotai").PrimitiveAtom<EntryTransition | undefined> & {
        init: EntryTransition | undefined;
    };
    revisionId: string;
    activeStatus: EntryStatus;
    statusInUrl: import("jotai").Atom<EntryStatus | undefined>;
    selectedStatus: import("jotai").Atom<EntryStatus>;
    entryData: EntryData;
    editMode: import("jotai").PrimitiveAtom<EditMode> & {
        init: EditMode;
    };
    activeVersion: Version;
    type: Type;
    previewPayload: import("jotai").Atom<Promise<string>>;
    activeTitle: import("jotai").Atom<string>;
    hasChanges: import("jotai").PrimitiveAtom<boolean> & {
        init: boolean;
    };
    draftEntry: import("jotai").Atom<Promise<Entry<Record<string, unknown>>>> & {
        current: import("jotai").Atom<Entry<Record<string, unknown>> | undefined>;
    };
    saveDraft: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    publishEdits: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    restoreRevision: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    publishDraft: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    discardDraft: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    unPublish: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    archive: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    publishArchived: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    deleteFile: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    deleteMediaLibrary: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    deleteEntry: import("jotai").WritableAtom<null, [], Promise<void>> & {
        init: null;
    };
    saveTranslation: import("jotai").WritableAtom<null, [locale: string], Promise<void>> & {
        init: null;
    };
    discardEdits: import("jotai").WritableAtom<null, [], void> & {
        init: null;
    };
    showHistory: import("jotai").WritableAtom<boolean, [value: boolean], void>;
    revisionsAtom: import("jotai").Atom<Promise<import("alinea/core/Connection").Revision[]>>;
    previewToken: import("jotai").Atom<Promise<string>>;
    previewRevision: import("jotai").PrimitiveAtom<{
        ref: string;
        file: string;
    } | undefined> & {
        init: {
            ref: string;
            file: string;
        } | undefined;
    };
    preview: import("alinea/core/Preview.js").Preview | undefined;
    form: import("jotai").Atom<FormAtoms<object>>;
    view: import("alinea/core/View.js").View<import("../view/EntryEdit.js").EntryEditProps & {
        type: Type;
    }> | undefined;
    parents: Array<{
        id: string;
        path: string;
        status: EntryStatus;
        main: boolean;
    }>;
    client: Connection;
    config: Config;
    entryId: string;
    versions: Array<Version>;
    statuses: Record<EntryStatus, Version>;
    availableStatuses: Array<EntryStatus>;
    translations: Array<{
        locale: string;
        entryId: string;
    }>;
    untranslated: boolean;
    canPublish: boolean;
    canDelete: boolean;
    parentNeedsTranslation: boolean;
    edits: Edits;
};
export {};
