import { AudioElement } from '../components/bce-element/bce-element-audio/element-audio';
import { CheckboxElement } from '../components/bce-element/bce-element-checkbox/element-checkbox';
import { DownloadElement } from '../components/bce-element/bce-element-download/element-download';
import { HeaderElement } from '../components/bce-element/bce-element-header/element-header';
import { IconElement } from '../components/bce-element/bce-element-icon/element-icon';
import { ImageElement } from '../components/bce-element/bce-element-image/element-image';
import { InputElement } from '../components/bce-element/bce-element-input/element-input';
import { LinkElement } from '../components/bce-element/bce-element-link/element-link';
import { MatrixElement } from '../components/bce-element/bce-element-matrix/element-matrix';
import { RadioElement } from '../components/bce-element/bce-element-radio/element-radio';
import { SliderElement } from '../components/bce-element/bce-element-slider/element-slider';
import { SortElement } from '../components/bce-element/bce-element-sort/element-sort';
import { TableElement } from '../components/bce-element/bce-element-table/element-table';
import { TextElement } from '../components/bce-element/bce-element-text/element-text';
import { VideoElement } from '../components/bce-element/bce-element-video/element-video';
export declare type BlockElement = BlockElement.Map[BlockElement.Type];
export declare namespace BlockElement {
    type Type = keyof Map;
    interface Map {
        audio: AudioElement;
        checkbox: CheckboxElement;
        download: DownloadElement;
        header: HeaderElement;
        icon: IconElement;
        image: ImageElement;
        input: InputElement;
        link: LinkElement;
        matrix: MatrixElement;
        radio: RadioElement;
        slider: SliderElement;
        sort: SortElement;
        table: TableElement;
        text: TextElement;
        video: VideoElement;
    }
    const NamespaceMap: {
        audio: typeof AudioElement;
        checkbox: typeof CheckboxElement;
        download: typeof DownloadElement;
        header: typeof HeaderElement;
        icon: typeof IconElement;
        image: typeof ImageElement;
        input: typeof InputElement;
        link: typeof LinkElement;
        matrix: typeof MatrixElement;
        radio: typeof RadioElement;
        slider: typeof SliderElement;
        sort: typeof SortElement;
        table: typeof TableElement;
        text: typeof TextElement;
        video: typeof VideoElement;
    };
    const empty: <T extends "link" | "audio" | "header" | "input" | "table" | "video" | "image" | "text" | "download" | "radio" | "sort" | "icon" | "checkbox" | "matrix" | "slider">(id: string, type: T) => Map[T];
    const icon: (type: "link" | "audio" | "header" | "input" | "table" | "video" | "image" | "text" | "download" | "radio" | "sort" | "icon" | "checkbox" | "matrix" | "slider") => string;
    const TYPES: ("link" | "audio" | "header" | "input" | "table" | "video" | "image" | "text" | "download" | "radio" | "sort" | "icon" | "checkbox" | "matrix" | "slider")[];
    interface Base {
        readonly id: string;
        readonly type: BlockElement.Type;
        readonly metadata: ElementMetadata;
    }
    interface BaseQuestion {
        readonly question: string;
        readonly required: boolean;
        readonly validation?: string;
    }
    interface BaseSelect {
        readonly orientation: 'horizontal' | 'vertical';
        readonly options: OptionSelect[];
        readonly other: boolean;
    }
    type Option = OptionIcon | OptionSelect | OptionSort | OptionTable;
    interface OptionIcon {
        readonly text: string;
        readonly color?: string;
    }
    interface OptionSelect {
        readonly color?: string;
        readonly feedback?: string;
        readonly icon?: string;
        readonly image?: string;
        readonly text: string;
    }
    interface OptionSort {
        readonly text: string;
        readonly answer?: string;
        readonly image?: string;
        readonly feedback?: string;
    }
    interface OptionTable {
        readonly text: string;
        readonly image?: string;
        readonly feedback?: string;
    }
}
export interface ElementMetadata {
}
