typed-dom
Version:
A value-level and type-level DOM builder.
48 lines (47 loc) • 4.76 kB
TypeScript
import { El } from './proxy';
import { Factory, TagNameMap, Attrs } from './util/dom';
export type API<M extends TagNameMap> = BuilderFunction<M> & {
readonly [P in K<M>]: BuilderMethod<M, P>;
};
export declare function API<M extends TagNameMap>(baseFactory: Factory<M>, container?: (el: E<M[K<M>]>) => ShadowRoot | undefined): API<M>;
export declare const Shadow: API<ShadowHostHTMLElementTagNameMap>;
export declare const HTML: API<HTMLElementTagNameMap>;
export declare const SVG: API<SVGElementTagNameMap>;
export declare const Math: API<MathMLElementTagNameMap>;
type K<M> = keyof M & string;
type E<V> = Extract<V, Element>;
type El_Children_Unit = readonly [];
type ElFactory<M extends TagNameMap, T extends keyof M & string = keyof M & string, C extends El.Children = El.Children> = (baseFactory: Factory<M>, tag: T, attrs: Attrs<E<M[T]>>, children: C) => M[T];
interface BuilderFunction<M extends TagNameMap> {
<T extends K<M>, C extends El.Children.Void>(tag: T, attrs: Attrs<E<M[T]>> | undefined, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Void>;
<T extends K<M>, C extends El.Children.Void>(tag: T, attrs: Attrs<E<M[T]>> | undefined, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Void>;
<T extends K<M>, C extends El.Children.Node>(tag: T, attrs: Attrs<E<M[T]>> | undefined, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, C>;
<T extends K<M>, C extends El.Children.Text>(tag: T, attrs: Attrs<E<M[T]>> | undefined, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Text>;
<T extends K<M>, C extends El_Children_Unit>(tag: T, attrs: Attrs<E<M[T]>> | undefined, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Array>;
<T extends K<M>, C extends El.Children.Array>(tag: T, attrs: Attrs<E<M[T]>> | undefined, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, Readonly<C>>;
<T extends K<M>, C extends El.Children.Struct>(tag: T, attrs: Attrs<E<M[T]>> | undefined, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, C>;
<T extends K<M>, C extends El.Children.Void>(tag: T, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Void>;
<T extends K<M>, C extends El.Children.Node>(tag: T, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, C>;
<T extends K<M>, C extends El.Children.Text>(tag: T, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Text>;
<T extends K<M>, C extends El_Children_Unit>(tag: T, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Array>;
<T extends K<M>, C extends El.Children.Array>(tag: T, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, Readonly<C>>;
<T extends K<M>, C extends El.Children.Struct>(tag: T, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, C>;
<T extends K<M>, C extends El.Children.Void>(tag: T, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Void>;
}
interface BuilderMethod<M extends TagNameMap, T extends K<M>> {
<C extends El.Children.Void>(attrs: Attrs<E<M[T]>> | undefined, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Void>;
<C extends El.Children.Void>(attrs: Attrs<E<M[T]>> | undefined, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Void>;
<C extends El.Children.Node>(attrs: Attrs<E<M[T]>> | undefined, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, C>;
<C extends El.Children.Text>(attrs: Attrs<E<M[T]>> | undefined, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Text>;
<C extends El_Children_Unit>(attrs: Attrs<E<M[T]>> | undefined, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Array>;
<C extends El.Children.Array>(attrs: Attrs<E<M[T]>> | undefined, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, Readonly<C>>;
<C extends El.Children.Struct>(attrs: Attrs<E<M[T]>> | undefined, children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, C>;
<C extends El.Children.Void>(children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Void>;
<C extends El.Children.Node>(children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, C>;
<C extends El.Children.Text>(children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Text>;
<C extends El_Children_Unit>(children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Array>;
<C extends El.Children.Array>(children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, Readonly<C>>;
<C extends El.Children.Struct>(children: C, factory?: ElFactory<M, T, C>): El<T, E<M[T]>, C>;
<C extends El.Children.Void>(factory?: ElFactory<M, T, C>): El<T, E<M[T]>, El.Children.Void>;
}
export {};