import type { FragmentIndex, RemoveHooks } from "./ref.js"; import { Skippable } from "./util.js"; import type { Nullish } from "./types.js"; export { boot, }; export { Emitable, Component, ComponentResult, NonNullNodeRange, emit, emitWithNodeRange, component, withoutRange, Range, Zone, forEachNode, fromParent, setRange, setZone, withRange, DOM, DOMRef, insert, remove, syncParents, withRef, }; declare const componentEarmark: unique symbol; declare type Component = (attrs?: { [x: string]: any; } | null, children?: Emitable) => Emitable; declare type ComponentResult = (() => Emitable) & { [componentEarmark]: true; }; declare function component(f: (this: unknown, ...args: T) => Emitable, ...args: T): ComponentResult; interface DOM { parent: Element; nextSibling: Node | Nullish; } interface NodeRange { parentNodeRange: NodeRange | Nullish; parentNode: Element; firstNode: Node | Nullish; lastNode: Node | Nullish; nodeCount: number; removeHooks: RemoveHooks | Nullish; } interface NonNullNodeRange { parentNodeRange: NodeRange | Nullish; parentNode: Element; firstNode: Node; lastNode: Node; nodeCount: number; removeHooks: RemoveHooks | null; } declare let DOM: DOM; declare let Range: NodeRange | Nullish; declare let Zone: NodeRange; declare const setRange: (nr: NodeRange | Nullish) => NodeRange; declare const setZone: (zn: NodeRange) => NodeRange; declare function withoutRange(cb: () => any): void; declare function withRange(nr: NodeRange, cb: () => any): void; declare function withRef(ref: DOM, cb: () => T): T; declare function forEachNode(nr: NonNullNodeRange, cb: ((x: Node, fi: FragmentIndex) => T) | ((x: Node) => T), includingComments?: boolean, result?: T[]): void; declare function DOMRef(parent: Element, nextSibling: Node | Nullish): { parent: Element; nextSibling: Node; }; declare function NodeRange({ parentNode, parentNodeRange }?: { parentNode?: Element; parentNodeRange?: NodeRange | Nullish; }): NodeRange; declare function fromParent(parentNodeRange: NodeRange | Nullish): NodeRange; declare function insert(node: Node): void; declare function remove(nr: NonNullNodeRange): void; declare function syncParents(nr: NodeRange | Nullish, key: "firstNode" | "lastNode", old: Node, current: Node): void; declare type Emitable = Skippable | Node | string | number | (() => Emitable) | Emitable[]; declare function emit(node: Emitable): void; declare function emitWithNodeRange(node: Emitable): NonNullNodeRange; declare type NSOption = { nextSibling: Element; }; declare type Root = Element | NSOption; declare function boot(parentNode: Root, main: () => Emitable): () => void;