import type { AttributeSpec, NodeSpec, Node as PMNode } from '@atlaskit/editor-prosemirror/model';
import type { BorderMarkDefinition } from '../marks/border';
import type { LinkDefinition } from '../marks/link';
import type { AnnotationMarkDefinition } from '../marks/annotation';
export type MediaType = 'file' | 'link' | 'external';
export type DisplayType = 'file' | 'thumbnail';
export type DefaultAttributes<T> = {
    [P in keyof T]: {
        default?: T[P] | null;
    };
};
/**
 * @name media_node
 */
export interface MediaDefinition {
    /**
     * Minimum item: 1
     */
    attrs: MediaADFAttrs;
    marks?: Array<LinkDefinition | BorderMarkDefinition | AnnotationMarkDefinition>;
    type: 'media';
}
export interface MediaBaseAttributes {
    __contextId?: string | null;
    __displayType?: DisplayType | null;
    __external?: boolean;
    __fileMimeType?: string | null;
    __fileName?: string | null;
    __fileSize?: number | null;
    __mediaTraceId?: string | null;
    alt?: string;
    collection: string;
    height?: number;
    /**
     * Minimum length: 1
     */
    id: string;
    localId?: string;
    /**
     * Occurrence key (minimum length: 1)
     */
    occurrenceKey?: string;
    width?: number;
}
export interface MediaAttributes extends MediaBaseAttributes {
    type: 'file' | 'link';
}
export interface ExternalMediaAttributes {
    __external?: boolean;
    alt?: string;
    height?: number;
    localId?: string;
    type: 'external';
    url: string;
    width?: number;
}
export type MediaADFAttrs = MediaAttributes | ExternalMediaAttributes;
export declare const defaultAttrs: {
    [name: string]: AttributeSpec;
} | undefined;
export interface MutableMediaAttributes extends MediaAttributes {
    [key: string]: string | number | undefined | null | boolean;
}
export declare const camelCaseToKebabCase: (str: string) => string;
export declare const copyPrivateAttributes: (from: Record<string, any>, to: Record<string, any>, attributes?: Partial<NodeSpec["attrs"]>, map?: ((str: string) => string) | undefined) => void;
export declare const createMediaSpec: (attributes: Partial<NodeSpec["attrs"]>, inline?: boolean, generateLocalId?: boolean) => NodeSpec;
export declare const media: NodeSpec;
export declare const mediaWithLocalId: NodeSpec;
export declare const toJSON: (node: PMNode) => {
    attrs: Record<string, any>;
};
