import { Constructor } from "@implab/core-amd/interfaces"; import { HtmlElementContext } from "./djx/HtmlElementContext"; import { WidgetContext } from "./djx/WidgetContext"; import { isWidgetConstructor, BuildContext } from "./djx/traits"; export function createElement(elementType: string | T, ...args: any[]): BuildContext { if (typeof elementType === "string") { const ctx = new HtmlElementContext(elementType); if (args) args.forEach(x => ctx.visitNext(x)); return ctx; } else if (isWidgetConstructor(elementType)) { const ctx = new WidgetContext(elementType); if (args) args.forEach(x => ctx.visitNext(x)); return ctx; } else { throw new Error(`The element type '${elementType}' is unsupported`); } } export interface EventDetails { detail: T; } export interface EventSelector { selectorTarget: HTMLElement; target: HTMLElement; } export type DojoMouseEvent = MouseEvent & EventSelector & EventDetails;