typed-dom
Version:
A value-level and type-level DOM builder.
61 lines (60 loc) • 3.52 kB
TypeScript
declare global {
interface ShadowHostHTMLElementTagNameMap {
'article': HTMLElement;
'aside': HTMLElement;
'blockquote': HTMLQuoteElement;
'body': HTMLBodyElement;
'div': HTMLDivElement;
'footer': HTMLElement;
'h1': HTMLHeadingElement;
'h2': HTMLHeadingElement;
'h3': HTMLHeadingElement;
'h4': HTMLHeadingElement;
'h5': HTMLHeadingElement;
'h6': HTMLHeadingElement;
'header': HTMLElement;
'main': HTMLElement;
'nav': HTMLElement;
'p': HTMLParagraphElement;
'section': HTMLElement;
'span': HTMLSpanElement;
}
interface HTMLElementTagNameMap extends ShadowHostHTMLElementTagNameMap {
}
}
export declare const enum NS {
HTML = "HTML",
SVG = "SVG",
Math = "MathML"
}
interface NodeEvent<N extends Node> extends Event {
readonly target: Node;
readonly currentTarget: N;
}
type NodeEventListener<N extends Node> = (ev: NodeEvent<N>) => void;
export type TagNameMap = object;
export type Attrs<E extends Element = Element> = Record<string, string | NodeEventListener<E> | null | undefined>;
export type Children = Iterable<string | Node> | string | undefined;
export interface Factory<M extends TagNameMap> {
<T extends keyof M & string>(tag: T, children?: Children): M[T];
<T extends keyof M & string>(tag: T, attrs: Attrs<Extract<M[T], Element>> | undefined, children?: Children): M[T];
}
export declare function shadow<M extends ShadowHostHTMLElementTagNameMap>(el: keyof M & string | Extract<M[keyof M & string], Element>, factory?: Factory<M>): ShadowRoot;
export declare function shadow<M extends ShadowHostHTMLElementTagNameMap>(el: keyof M & string | Extract<M[keyof M & string], Element>, children?: Children, factory?: Factory<M>): ShadowRoot;
export declare function shadow<M extends ShadowHostHTMLElementTagNameMap>(el: keyof M & string | Extract<M[keyof M & string], Element>, opts?: ShadowRootInit, factory?: Factory<M>): ShadowRoot;
export declare function shadow<M extends ShadowHostHTMLElementTagNameMap>(el: keyof M & string | Extract<M[keyof M & string], Element>, opts?: ShadowRootInit, children?: Children, factory?: Factory<M>): ShadowRoot;
export declare function frag(children?: Children): DocumentFragment;
export declare const html: Factory<HTMLElementTagNameMap>;
export declare const svg: Factory<SVGElementTagNameMap>;
export declare const math: Factory<MathMLElementTagNameMap>;
export declare function text(source: string): Text;
export declare function element<M extends HTMLElementTagNameMap>(context: Document | ShadowRoot, ns: NS.HTML): Factory<M>;
export declare function element<M extends SVGElementTagNameMap>(context: Document | ShadowRoot, ns: NS.SVG): Factory<M>;
export declare function element<M extends MathMLElementTagNameMap>(context: Document | ShadowRoot, ns: NS.Math): Factory<M>;
export declare function define<E extends Element>(el: E, attrs?: Attrs<E>, children?: Children): E;
export declare function define<E extends Element | DocumentFragment | ShadowRoot>(node: E, children?: Children): E;
export declare function isChildren(value: Attrs | Children | ShadowRootInit): value is NonNullable<Children>;
export declare function append<N extends ParentNode & Node>(node: N, children: Children): N;
export declare function prepend<N extends ParentNode & Node>(node: N, children: Children): N;
export declare function defrag<N extends Node | string>(nodes: ArrayLike<N>): N[];
export {};