import type { AnyAction } from '@reduxjs/toolkit';
import type { MyUser as MyUserDTO, User as UserDTO, Team as TeamDTO, Project as ProjectDTO, SiteConfigDTO, Block as BlockDTO, ALL_BLOCKS, ProjectId, BlockId, VersionId, FormatTypes, TemplateSpec } from '@curvenote/blocks';
import { projectFromDTO, blockFromDTO, userFromDTO, myUserFromDTO, teamFromDTO, siteConfigFromDTO } from '@curvenote/blocks';
import type { ISession } from './session/types.js';
import type { RootState } from './store/index.js';
import { selectors } from './store/index.js';
/** Base class for API models */
declare class BaseTransfer<ID, DTO extends {
    id: ID;
}, GetOptions extends Record<string, string> = Record<string, never>> {
    modelKind: string;
    session: ISession;
    id: ID;
    $data?: DTO;
    $fromDTO: (id: ID, json: Record<string, any>) => DTO;
    $createUrl: () => string;
    $selector?: (state: RootState, id: ID) => DTO;
    $receive?: (dto: DTO) => AnyAction;
    constructor(session: ISession, id: ID);
    get data(): DTO;
    set data(data: DTO);
    get(query?: GetOptions): Promise<this>;
}
export declare class MyUser extends BaseTransfer<string, MyUserDTO> {
    constructor(session: ISession);
    modelKind: string;
    $fromDTO: typeof myUserFromDTO;
    $createUrl: () => string;
    $receive: import("@reduxjs/toolkit").ActionCreatorWithPayload<UserDTO, "usersApi/receive">;
}
export declare class User extends BaseTransfer<string, UserDTO> {
    modelKind: string;
    $fromDTO: typeof userFromDTO;
    $createUrl: () => string;
    $receive: import("@reduxjs/toolkit").ActionCreatorWithPayload<UserDTO, "usersApi/receive">;
    $selector: typeof selectors.selectUser;
}
export declare class Team extends BaseTransfer<string, TeamDTO> {
    modelKind: string;
    $fromDTO: typeof teamFromDTO;
    $createUrl: () => string;
    $receive: import("@reduxjs/toolkit").ActionCreatorWithPayload<TeamDTO, "teamsApi/receive">;
    $selector: typeof selectors.selectTeam;
}
export declare class Project extends BaseTransfer<ProjectId, ProjectDTO> {
    modelKind: string;
    $fromDTO: typeof projectFromDTO;
    $createUrl: () => string;
    $receive: import("@reduxjs/toolkit").ActionCreatorWithPayload<ProjectDTO, "projectsApi/receive">;
    $selector: typeof selectors.selectProject;
}
export declare class RemoteSiteConfig extends BaseTransfer<ProjectId, SiteConfigDTO> {
    modelKind: string;
    $fromDTO: typeof siteConfigFromDTO;
    $createUrl: () => string;
    $receive: import("@reduxjs/toolkit").ActionCreatorWithPayload<SiteConfigDTO, "siteconfigsApi/receive">;
    $selector: typeof selectors.selectSiteConfig;
}
export declare class Block extends BaseTransfer<BlockId, BlockDTO> {
    modelKind: string;
    $fromDTO: typeof blockFromDTO;
    $createUrl: () => string;
    $receive: import("@reduxjs/toolkit").ActionCreatorWithPayload<BlockDTO, "blocksApi/receive">;
    $selector: typeof selectors.selectBlock;
}
export type VersionQueryOpts = {
    format?: FormatTypes;
};
export declare class Version<T extends ALL_BLOCKS = ALL_BLOCKS> extends BaseTransfer<VersionId, T, VersionQueryOpts> {
    modelKind: string;
    $fromDTO: (versionId: VersionId, json: Record<string, any>) => T;
    $createUrl: () => string;
    $receive: import("@reduxjs/toolkit").ActionCreatorWithPayload<ALL_BLOCKS, "versionsApi/receive">;
    $selector: typeof selectors.selectVersion;
}
export declare class Template extends BaseTransfer<string, TemplateSpec & {
    id: string;
}> {
    modelKind: string;
    $fromDTO: (id: string, json: Record<string, any>) => TemplateSpec & {
        id: string;
    };
    $createUrl: () => string;
    $receive: import("@reduxjs/toolkit").ActionCreatorWithPayload<TemplateSpec & {
        id: string;
    }, "templatesApi/receive">;
    $selector: typeof selectors.selectTemplate;
}
export {};
//# sourceMappingURL=models.d.ts.map