typed-dom
Version:
A value-level and type-level DOM builder.
45 lines (44 loc) • 1.75 kB
TypeScript
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>);
}