export interface PropDefinition<T> {
    value: T;
    attribute: string;
    notify: boolean;
    reflect: boolean;
    parse?: boolean;
}
export interface ICustomElement {
    [prop: string]: any;
    __initialized?: boolean;
    __released: boolean;
    __releaseCallbacks: any[];
    __propertyChangedCallbacks: any[];
    __updating: {
        [prop: string]: any;
    };
    props: {
        [prop: string]: any;
    };
    lookupProp(attrName: string): string | undefined;
    renderRoot: Element | Document | ShadowRoot | DocumentFragment;
    addReleaseCallback(fn: () => void): void;
    addPropertyChangedCallback(fn: (name: string, value: any) => void): void;
}
export type UpdateableElement<T> = HTMLElement & ICustomElement & T;
export interface ComponentOptions {
    element: ICustomElement;
}
export interface ConstructableComponent<T> {
    new (props: T, options: ComponentOptions): unknown;
}
export interface FunctionComponent<T> {
    (props: T, options: ComponentOptions): unknown;
}
export type PropsDefinitionInput<T> = {
    [P in keyof T]: PropDefinition<T[P]> | T[P];
};
export type PropsDefinition<T> = {
    [P in keyof T]: PropDefinition<T[P]>;
};
export type ComponentType<T> = FunctionComponent<T> | ConstructableComponent<T>;
export declare function normalizePropDefs<T>(props: PropsDefinitionInput<T>): PropsDefinition<T>;
export declare function propValues<T>(props: PropsDefinition<T>): T;
export declare function initializeProps<T>(element: UpdateableElement<T>, propDefinition: PropsDefinition<T>): PropsDefinition<T>;
export declare function parseAttributeValue(value: string): any;
export declare function reflect<T>(node: UpdateableElement<T>, attribute: string, value: any, parse: boolean): void;
export declare function toAttribute(propName: string): string;
export declare function toProperty(attr: string): string;
export declare function isObject(obj: any): boolean;
export declare function isFunction(val: any): boolean;
export declare function isConstructor(f: Function): boolean;
export declare function reloadElement(node: ICustomElement): void;
