UNPKG

typed-dom

Version:

A value-level and type-level DOM builder.

48 lines (47 loc) 4.81 kB
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>]>, opts?: ShadowRootInit) => ShadowRoot | undefined, opts?: ShadowRootInit): 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 {};