export interface PropDefinition { 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 = HTMLElement & ICustomElement & T; export interface ComponentOptions { element: ICustomElement; } export interface ConstructableComponent { new (props: T, options: ComponentOptions): unknown; } export interface FunctionComponent { (props: T, options: ComponentOptions): unknown; } export type PropsDefinitionInput = { [P in keyof T]: PropDefinition | T[P]; }; export type PropsDefinition = { [P in keyof T]: PropDefinition; }; export type ComponentType = FunctionComponent | ConstructableComponent; export declare function normalizePropDefs(props: PropsDefinitionInput): PropsDefinition; export declare function propValues(props: PropsDefinition): T; export declare function initializeProps(element: UpdateableElement, propDefinition: PropsDefinition): PropsDefinition; export declare function parseAttributeValue(value: string): any; export declare function reflect(node: UpdateableElement, 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;