/// declare namespace Leaf { interface WidgetElement extends HTMLElement { controllingWidget: WidgetBase; selfWidget: WidgetBase; widgetId: string; } interface WidgetElementAny extends WidgetElement { } class Namespace { private readonly Widgets; include(W: any): void; getWidgetByName(name: any): any; createWidgetByName(name: string, el?: HTMLElement): WidgetAny; } type WidgetTemplate = string | HTMLElement; type WidgetEventHandler = { (e: Event): void; }; interface WidgetEnhancedEvent extends Event { capture?: { (): void; }; bubblingTarget: HTMLElement; } interface WidgetDynamicAssignable { [index: string]: any; } type DOMEventInfo = { name: string; bubble: boolean; target?: string[]; }; class WidgetBase { template: WidgetTemplate; protected _VMFields: TVMField[]; static namespace: Namespace; namespace: Namespace; VM: TVMs; availableEvents: DOMEventInfo[]; ViewModel: Model; parentWidget: WidgetAny; events: EventEmitter; UI: TUIs; node: HTMLElement | WidgetElement; interestingUnbubblingEvents: DOMEventInfo[]; interestingBubblingEvents: DOMEventInfo[]; readonly name: string; before(who: WidgetAny | HTMLElement): boolean; after(who: WidgetAny | HTMLElement): boolean; prependTo(who: WidgetAny | HTMLElement): boolean; appendTo(who: WidgetAny | HTMLElement): boolean; constructor(template?: WidgetTemplate, name?: string, _VMFields?: TVMField[]); initTemplate(template?: WidgetTemplate): void; private initSubWidget(_el?); private initCommonWidget(_el?); private syncElementToChildWidget(el, widget); private mixChildWidgetClassRole(el, child); private initUI(); private bindUI(node, id); private delegateTo(name, event); private initBubblingDelegates(); private initUnbubblingDelegates(); } class Widget extends WidgetBase { static makeList(el: HTMLElement): List; initTemplate(template?: WidgetTemplate): void; private initDataRole(el); private initElementRole(el); private initTextRole(text); private createSyncTemplates(templateString); private syncElementProperty(el, rule); private explain(t); private syncTextProperty(text, rule); protected emitDOMEvent(name: string, bubble: boolean, props?: any): void; protected emitWidgetEvent(name: string, value?: any): void; protected include(W: any): void; protected expose(name: string, remoteName?: string): void; protected makeList(who: string | HTMLElement): List; } interface CommonWidget { new (el: HTMLElement): void; } type WidgetAny = Widget; }