type DomElement = Element; type DomNode = Node; export { DomElement as Element, DomNode as Node }; /** * Helper to create a DOM element. */ export function el( tagName: T, ...classNameOrChilds: Array ): HTMLElementTagNameMap[T] { const dom = document!.createElement(tagName); for (const classNameOrChild of classNameOrChilds) { if (classNameOrChild !== null && classNameOrChild !== false) { if (typeof classNameOrChild === "string") { dom.classList.add(classNameOrChild); } else { dom.appendChild(classNameOrChild); } } } return dom; } export function isClipboardEvent(event: Event): event is ClipboardEvent { return event.type === "paste"; } const dragEventTypes = new Set(["drag", "dragend", "dragenter", "dragexit", "dragleave", "dragover", "dragstart", "drop"]); export function isDragEvent(event: Event): event is DragEvent { return dragEventTypes.has(event.type); } export function isFileDragEvent(event: Event): event is DragEvent { if (isDragEvent(event)) { const { types } = event.dataTransfer; for (let i = 0; i < types.length; i++) { if (types[0] === "Files") { return true; } } } return false; } export function isElement(e: EventTarget): e is Element { return "tagName" in e; } export function isHtmlElement(e: EventTarget): e is HTMLElement { return "offsetParent" in e; } export function isInputElement(e: EventTarget): e is HTMLInputElement { return isElement(e) && e.tagName === "INPUT"; } export function isMouseMove(event: Event): event is MouseEvent { return event.type === "mousemove"; } export function isMouseUp(event: Event): event is MouseEvent { return event.type === "mouseup"; } export function isClick(event: Event): event is MouseEvent { return event.type === "click"; } const keyboardEventTypes = new Set(["keydown", "keypress", "keyup"]); export function isKeyboardEvent(event: Event): event is KeyboardEvent { return keyboardEventTypes.has(event.type); }