import { PBUiBackground, PBUiText, PBUiTransform, PBUiInput, PBUiDropdown } from '@dcl/ecs';
import { Callback, Key } from './components';
/**
 * @public
 */
export interface EcsElements {
    entity: Partial<EntityComponents> & {
        children?: ReactEcs.JSX.ReactNode;
        key?: Key;
    };
}
/**
 * @public
 */
export type EntityComponents = {
    uiTransform: PBUiTransform;
    uiText: PBUiText;
    uiBackground: PBUiBackground;
    uiInput: PBUiInput;
    uiDropdown: PBUiDropdown;
    onMouseDown: Callback;
    onMouseUp: Callback;
    onMouseEnter: Callback;
    onMouseLeave: Callback;
};
/**
 * @hidden
 */
export declare namespace JSX {
    interface Element extends ReactElement<any, any> {
    }
    interface IntrinsicElements extends EcsElements {
    }
    interface Component {
    }
}
/**
 * @public
 */
export type JSXElementConstructor<P> = (props: P) => ReactElement<any, any> | null;
/**
 * @public
 */
export interface ReactElement<P = any, T extends string | JSXElementConstructor<any> = string | JSXElementConstructor<any>> {
    type: T;
    props: P;
    key: Key | null;
}
/**
 * @public
 */
export declare namespace ReactEcs {
    export namespace JSX {
        /**
         * @public
         */
        type ReactNode = Element | ReactElement | string | number | boolean | null | undefined | ReactNode[];
        /**
         * @public
         */
        interface Element extends ReactElement<any, any> {
        }
        /**
         * @public
         * HTML tag elements
         */
        interface IntrinsicElements extends EcsElements {
        }
        /**
         * @public
         * Component empty interface
         */
        interface Component {
        }
    }
    export const createElement: any;
    type SetStateAction<T> = T | ((prevState: T) => T);
    type Dispatch<T> = (action: SetStateAction<T>) => void;
    type StateHook = <T>(initialState: T | (() => T)) => [T, Dispatch<T>];
    type DependencyList = ReadonlyArray<any>;
    type EffectCallback = () => void | (() => void | undefined);
    type EffectHook = (effect: EffectCallback, deps?: DependencyList) => void;
    export const useEffect: EffectHook;
    export const useState: StateHook;
    export {};
}
