import React, { ReactElement } from 'react';
import { BlocComponentIdentifiers, BlocMasterList, BlocsWithSettings } from './BlocComponentIdentifiers';
import { BlockEditingProps } from './BlocTypes';
/**
 * To add a new block element below schema must be adhered.
 * T is the properties that the component consumers.
 * any has been used to support the components which are not in ts.
 */
interface BlockElement<T> {
    component: (props: T & any) => ReactElement;
    defaultProperties: Partial<T> & {
        [key: string]: any;
    };
    icon: React.ReactNode;
    settingsComponent?: (props: T & any) => ReactElement;
    type: BlocComponentIdentifiers;
    contentGenerator?: (html: string, language: string, existingObject: object) => T & any;
    propsGenerator?: (props: any, properties: any, language: string) => T & any;
    propsParser?: (englishProperties: any, thaiProperties: any, id: string) => T & any;
}
export declare const getAllBlockComponents: () => BlockElement<import("./BlocTypes").BlocCommonProps & import("./BlocTypes").BlocProps & BlockEditingProps>[];
export declare const getSettingComponentForBlocType: (type: BlocsWithSettings) => (() => JSX.Element) | ((props: any) => ReactElement);
export declare const getComponent: (type: BlocMasterList, editorMode: boolean) => ({ onBlocChange, id, bloc, sectionIndex, rowIndex, blocIndex, page, account, ...rest }: any) => JSX.Element;
/**
 * Props is a separate column in Blocs table. These are derieved from properties columns.
 * @param type
 */
export declare const getPropsGenerator: (type: BlocComponentIdentifiers) => ((props: any, properties: any, language: string) => any) | undefined;
export declare const getPropsParser: (type: BlocComponentIdentifiers) => ((englishProperties: any, thaiProperties: any, id: string) => any) | undefined;
export {};
