import type { StoredRow } from '../Infer.js';
import type { ImagePreviewDetails } from '../media/CreatePreview.js';
import { Type } from '../Type.js';
import type { Mutation } from './Mutation.js';
import type { WriteableGraph } from './WriteableGraph.js';
type Awaitable<T> = T | Promise<T>;
type Task = (graph: WriteableGraph) => Awaitable<Array<Mutation>>;
export declare class Operation {
    task: Task;
    constructor(task: Task);
}
export interface CreateQuery<Fields> {
    type: Type<Fields>;
    id?: string;
    workspace?: string;
    root?: string;
    parentId?: string | null;
    locale?: string | null;
    status?: 'draft' | 'published' | 'archived';
    set: Partial<StoredRow<Fields>>;
    insertOrder?: 'first' | 'last';
    overwrite?: boolean;
}
export declare class CreateOp<Fields> extends Operation {
    id: string;
    constructor(op: CreateQuery<Fields>);
}
export declare class DeleteOp extends Operation {
    protected entryIds: Array<string>;
    constructor(entryIds: Array<string>);
}
export interface DiscardQuery {
    id: string;
    locale?: string | null;
    status: 'draft' | 'archived' | 'published';
}
export declare class DiscardOp extends Operation {
    constructor(query: DiscardQuery);
}
export interface UpdateQuery<Fields> {
    type?: Type<Fields>;
    id: string;
    set: Partial<StoredRow<Fields>>;
    status?: 'draft' | 'published' | 'archived';
    locale?: string | null;
}
export declare class UpdateOperation<Definition> extends Operation {
    constructor(query: UpdateQuery<Definition>);
}
export interface MoveQuery {
    id: string;
    after?: string | null;
    toParent?: string;
    toRoot?: string;
}
export declare class MoveOperation extends Operation {
    constructor(query: MoveQuery);
}
export interface PublishQuery {
    id: string;
    status: 'draft' | 'archived';
    locale?: string | null;
}
export declare class PublishOperation extends Operation {
    constructor(query: PublishQuery);
}
export interface UnpublishQuery {
    id: string;
    locale?: string | null;
}
export declare class UnpublishOperation extends Operation {
    constructor(query: UnpublishQuery);
}
export interface ArchiveQuery {
    id: string;
    locale?: string | null;
}
export declare class ArchiveOperation extends Operation {
    constructor(query: ArchiveQuery);
}
export interface UploadQuery {
    file: File | [string, Uint8Array];
    workspace?: string;
    root?: string;
    parentId?: string | null;
    createPreview?(blob: Blob): Promise<ImagePreviewDetails>;
    replaceId?: string;
}
export declare class UploadOperation extends Operation {
    id: string;
    constructor(query: UploadQuery);
}
export declare function update<Definition>(query: UpdateQuery<Definition>): UpdateOperation<Definition>;
export declare function create<Definition>(query: CreateQuery<Definition>): CreateOp<Definition>;
export declare function remove(...entryIds: Array<string>): DeleteOp;
export declare function discard(query: DiscardQuery): DiscardOp;
export declare function upload(query: UploadQuery): UploadOperation;
export declare function move(query: MoveQuery): MoveOperation;
export declare function publish(query: PublishQuery): PublishOperation;
export declare function archive(query: ArchiveQuery): ArchiveOperation;
export {};
