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