declare global { export type ListItemsInput = readonly T[] | Iterable; // Dynamic list function types - supports both HTML and SVG builders/elements export type ListRenderResult = | ExpandedElement | DetachedExpandedElementFactory | NodeModFn | DetachedSVGElementFactory | SVGElementModifierFn | Node | null | undefined; export type ListRenderFunction = ( item: T, index: number ) => ListRenderResult; export type ListItemsProvider = () => ListItemsInput; /** * A list modifier uses a generic call signature so it can be attached to any * parent element, regardless of the tag of the items it renders. * (TTagName represents the child element tag, not the parent.) */ export type ListModifier = ((parent: ExpandedElement, index: number) => Comment) & ((parent: Node & ParentNode, index: number) => Comment); export function list( itemsProvider: ListItemsProvider, render: ListRenderFunction ): ListModifier; } export {};