export interface ArbitraryFn { (...args: any[]): any; } export interface BoundArbitraryFn { (this: CustomElement, ...args: any[]): any; } export interface GetFn { (this: CustomElement, val: any): void; } export interface SetFn { (this: CustomElement, val: any): any; } export interface CoerceFn { (this: CustomElement, val: any): any; } export interface FromAttrFn { (this: CustomElement, val: string): any; } export interface ToAttrFn { (this: CustomElement, val: any): string; } export declare type ReadyFn = BoundArbitraryFn; export interface ElementDef { props?: PropDefs; shadowDom?: boolean; template?: string; templateUrl?: string; cacheIds?: boolean; methods?: MethodsDef; ready?: ReadyFn; } export interface PropDefs { [index: string]: PropDef; } export interface PropDef { attr?: string; boolAttr?: boolean; set?: SetFn; get?: GetFn; toAttr?: ToAttrFn; fromAttr?: FromAttrFn; coerce?: CoerceFn; init?: any; } export interface MethodsDef { [index: string]: BoundArbitraryFn; } export interface IdMap { [index: string]: IdentifiedElement; } export interface CustomElementClass extends Function { new (): CustomElement; } export interface CustomElement extends HTMLElement { $?: IdMap; [index: string]: any; } export interface IdentifiedElement extends CustomElement { } export declare function defer(work: ArbitraryFn): Promise; declare function makeElement(def?: ElementDef): CustomElementClass; export default makeElement;