import { DocumentField, DocumentStringLikeFieldForType } from './content-source-document-fields';
import { DocumentPermissions } from './content-permissions';
export type TypeDocument = 'document';
export type DocumentStatus = 'added' | 'modified' | 'published' | 'deleted' | 'archived';
export interface Document<DocumentContext = unknown> {
    type: TypeDocument;
    id: string;
    manageUrl: string;
    modelName: string;
    status: DocumentStatus;
    createdAt: string;
    createdBy?: string;
    updatedAt: string;
    updatedBy?: string[];
    locale?: string;
    fields: Record<string, DocumentField>;
    context: DocumentContext;
    hidden?: boolean;
    permissions?: DocumentPermissions;
}
export type DocumentWithSource = Document & {
    srcType: string;
    srcProjectId: string;
};
export interface DocumentSpecifier {
    srcType: string;
    srcProjectId: string;
    srcDocumentId: string;
    omitFields?: boolean;
}
export type TypeAsset = 'asset';
export interface Asset<AssetContext = unknown> {
    type: TypeAsset;
    id: string;
    manageUrl: string;
    status: DocumentStatus;
    createdAt: string;
    createdBy?: string;
    updatedAt: string;
    updatedBy?: string[];
    locale?: string;
    fields: AssetFields;
    context: AssetContext;
    hidden?: boolean;
    permissions?: DocumentPermissions;
}
export type AssetWithSource = Asset & {
    srcType: string;
    srcProjectId: string;
};
export type AssetField = AssetFields[keyof AssetFields];
export type AssetFields = {
    [key in string]: DocumentStringLikeFieldForType<'string'> | DocumentStringLikeFieldForType<'text'> | AssetFileField;
} & {
    title: DocumentStringLikeFieldForType<'string'>;
} & {
    file: AssetFileField;
};
/**
 * Asset "assetFile" field
 */
export type AssetFileField = AssetFileFieldLocalized | AssetFileFieldNonLocalized;
export interface AssetFileFieldNonLocalized extends AssetFileFieldBase, AssetFileFieldProps {
    localized?: false;
}
export interface AssetFileFieldLocalized extends AssetFileFieldBase {
    localized: true;
    locales: Record<string, {
        locale: string;
    } & AssetFileFieldProps>;
}
export type AssetFileFieldBase = {
    type: 'assetFile';
};
export interface AssetFileFieldProps {
    url: string;
    fileName?: string;
    contentType?: string;
    size?: number;
    dimensions?: {
        width?: number;
        height?: number;
    };
}
//# sourceMappingURL=content-source-document.d.ts.map