///
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;
}