UNPKG

typed-dom

Version:

A value-level and type-level DOM builder.

45 lines (44 loc) 1.75 kB
import { symbols, Listeners } from './internal'; import { TagNameMap, Attrs, Factory as BaseFactory } from './util/dom'; declare global { interface ElementEventMap { 'mutate': Event; 'connect': Event; 'disconnect': Event; } } export interface El<T extends string = string, E extends Element = Element, C extends El.Children = El.Children> { readonly tag: T; readonly element: E; get children(): El.Getter<C>; set children(children: El.Setter<C>); } export declare namespace El { type Children = Children.Void | Children.Node | Children.Text | Children.Array | Children.Struct; namespace Children { type Void = void; type Node = DocumentFragment; type Text = string; type Array = readonly El[]; type Struct = { [field: string]: El; }; } type Getter<C extends El.Children> = C; type Setter<C extends El.Children> = C extends Children.Struct ? Partial<C> : C; type Factory<M extends TagNameMap, C extends El.Children = El.Children> = <T extends keyof M & string>(baseFactory: BaseFactory<M>, tag: T, attrs: Attrs<Extract<M[T], Element>>, children: C) => M[T]; } export declare class ElementProxy<T extends string = string, E extends Element = Element, C extends El.Children = El.Children> implements El<T, E, C> { readonly tag: T; readonly element: E; private readonly container; constructor(tag: T, element: E, children: C, container?: Element | ShadowRoot); private isInternalUpdate; private observe; private readonly type; private isInit; private $children; readonly [symbols.listeners]: Listeners; get children(): El.Getter<C>; set children(children: El.Setter<C>); }