interface KindergardenGroupListener { addNode(node: Node): any; removeNode(node: Node): any; } declare class KindergartenGroup { private kindergarten; private groupListener; children: Set; constructor(kindergarten: Kindergarten); addListener(groupListener: KindergardenGroupListener): void; ensureNode(node: Node, atIndex?: number): void; removeNode(node: Node): void; removeNodeAt(pos: number): void; moveNode(from: number, to: number): void; } declare class Kindergarten { readonly parentNode: Element; private groups; constructor(parentNode: Element); newGroup(): KindergartenGroup; getGroups(): ReadonlyArray; getOffsetFor(group: KindergartenGroup): number; } interface updateFunc { (newData: T): void; _origUpdates?: Array>; } type MountFunc = () => void; declare const noop: () => void; declare const noopUpdate: updateFunc; declare const noopMount: MountFunc; interface BaseJayElement { update: updateFunc; mount: MountFunc; unmount: MountFunc; } interface JayElement extends BaseJayElement { refs: Refs; } type Coordinate = string[]; interface JayEvent { event: EventType; viewState: ViewState; coordinate: Coordinate; } type JayEventHandler = (event: JayEvent) => Returns; /** Event type for ViewState change notifications */ declare const VIEW_STATE_CHANGE_EVENT = "viewStateChange"; interface JayComponent> { element: jayElement; update: updateFunc; mount: MountFunc; unmount: MountFunc; addEventListener: (type: string, handler: JayEventHandler) => void; removeEventListener: (type: string, handler: JayEventHandler) => void; /** Current ViewState (read-only, available when using @jay-framework/component) */ readonly viewState?: ViewState; } type PropsFrom = Type extends JayComponent ? Props : null; type ViewStateFrom = Type extends JayComponent ? ViewState : null; type ElementFrom = Type extends JayComponent ? Element : null; type JayComponentConstructor = (props: Props) => JayComponent; type PreRenderElement> = (options?: RenderElementOptions) => [Refs, RenderElement]; type RenderElement> = (vs: ViewState) => JayElementT; interface RenderElementOptions { eventWrapper?: JayEventHandlerWrapper; sanitizeHtml?: (html: string) => string; } type JayEventHandlerWrapper = (orig: JayEventHandler, event: JayEvent) => Returns; interface ContextMarker { } declare const _jayContractBrand: unique symbol; type JayContract = { readonly [_jayContractBrand]: { viewState: ViewState; refs: Refs; slowViewState: SlowViewState; fastViewState: FastViewState; interactiveViewState: InteractiveViewState; props: Props; }; }; type ExtractViewState = A extends JayContract ? ViewState : never; type ExtractRefs = A extends JayContract ? Refs : never; type ExtractSlowViewState = A extends JayContract ? SlowViewState : never; type ExtractFastViewState = A extends JayContract ? FastViewState : never; type ExtractInteractiveViewState = A extends JayContract ? InteractiveViewState : never; type ExtractProps = A extends JayContract ? Props : never; declare enum LogType { ASYNC_ERROR = 0, CONTEXT_NOT_FOUND = 1 } type JayLog = { log: (type: LogType) => void; error: (type: LogType, error: Error) => void; }; declare const jayLog: JayLog; declare module '@jay-framework/runtime' { interface BaseJayElement { dom: Element; } } /** DOM element references **/ type JayNativeFunction = (elem: ElementType, viewState: ViewState) => Result; interface JayNativeEventBuilder { then(handler: (event: JayEvent) => void): void; } interface GlobalJayEvents { onabort(handler: JayEventHandler): void; onabort$(handler: JayEventHandler): JayNativeEventBuilder; onanimationcancel(handler: JayEventHandler): void; onanimationcancel$(handler: JayEventHandler): JayNativeEventBuilder; onanimationend(handler: JayEventHandler): void; onanimationend$(handler: JayEventHandler): JayNativeEventBuilder; onanimationiteration(handler: JayEventHandler): void; onanimationiteration$(handler: JayEventHandler): JayNativeEventBuilder; onanimationstart(handler: JayEventHandler): void; onanimationstart$(handler: JayEventHandler): JayNativeEventBuilder; onauxclick(handler: JayEventHandler): void; onauxclick$(handler: JayEventHandler): JayNativeEventBuilder; onblur(handler: JayEventHandler): void; onblur$(handler: JayEventHandler): JayNativeEventBuilder; oncanplay(handler: JayEventHandler): void; oncanplay$(handler: JayEventHandler): JayNativeEventBuilder; oncanplaythrough(handler: JayEventHandler): void; oncanplaythrough$(handler: JayEventHandler): JayNativeEventBuilder; onchange(handler: JayEventHandler): void; onchange$(handler: JayEventHandler): JayNativeEventBuilder; onclick(handler: JayEventHandler): void; onclick$(handler: JayEventHandler): JayNativeEventBuilder; onclose(handler: JayEventHandler): void; onclose$(handler: JayEventHandler): JayNativeEventBuilder; oncontextmenu(handler: JayEventHandler): void; oncontextmenu$(handler: JayEventHandler): JayNativeEventBuilder; oncuechange(handler: JayEventHandler): void; oncuechange$(handler: JayEventHandler): JayNativeEventBuilder; ondblclick(handler: JayEventHandler): void; ondblclick$(handler: JayEventHandler): JayNativeEventBuilder; ondrag(handler: JayEventHandler): void; ondrag$(handler: JayEventHandler): JayNativeEventBuilder; ondragend(handler: JayEventHandler): void; ondragend$(handler: JayEventHandler): JayNativeEventBuilder; ondragenter(handler: JayEventHandler): void; ondragenter$(handler: JayEventHandler): JayNativeEventBuilder; ondragleave(handler: JayEventHandler): void; ondragleave$(handler: JayEventHandler): JayNativeEventBuilder; ondragover(handler: JayEventHandler): void; ondragover$(handler: JayEventHandler): JayNativeEventBuilder; ondragstart(handler: JayEventHandler): void; ondragstart$(handler: JayEventHandler): JayNativeEventBuilder; ondrop(handler: JayEventHandler): void; ondrop$(handler: JayEventHandler): JayNativeEventBuilder; ondurationchange(handler: JayEventHandler): void; ondurationchange$(handler: JayEventHandler): JayNativeEventBuilder; onemptied(handler: JayEventHandler): void; onemptied$(handler: JayEventHandler): JayNativeEventBuilder; onended(handler: JayEventHandler): void; onended$(handler: JayEventHandler): JayNativeEventBuilder; onfocus(handler: JayEventHandler): void; onfocus$(handler: JayEventHandler): JayNativeEventBuilder; onformdata(handler: JayEventHandler): void; onformdata$(handler: JayEventHandler): JayNativeEventBuilder; ongotpointercapture(handler: JayEventHandler): void; ongotpointercapture$(handler: JayEventHandler): JayNativeEventBuilder; oninput(handler: JayEventHandler): void; oninput$(handler: JayEventHandler): JayNativeEventBuilder; oninvalid(handler: JayEventHandler): void; oninvalid$(handler: JayEventHandler): JayNativeEventBuilder; onkeydown(handler: JayEventHandler): void; onkeydown$(handler: JayEventHandler): JayNativeEventBuilder; onkeypress(handler: JayEventHandler): void; onkeypress$(handler: JayEventHandler): JayNativeEventBuilder; onkeyup(handler: JayEventHandler): void; onkeyup$(handler: JayEventHandler): JayNativeEventBuilder; onload(handler: JayEventHandler): void; onload$(handler: JayEventHandler): JayNativeEventBuilder; onloadeddata(handler: JayEventHandler): void; onloadeddata$(handler: JayEventHandler): JayNativeEventBuilder; onloadedmetadata(handler: JayEventHandler): void; onloadedmetadata$(handler: JayEventHandler): JayNativeEventBuilder; onloadstart(handler: JayEventHandler): void; onloadstart$(handler: JayEventHandler): JayNativeEventBuilder; onlostpointercapture(handler: JayEventHandler): void; onlostpointercapture$(handler: JayEventHandler): JayNativeEventBuilder; onmousedown(handler: JayEventHandler): void; onmousedown$(handler: JayEventHandler): JayNativeEventBuilder; onmouseenter(handler: JayEventHandler): void; onmouseenter$(handler: JayEventHandler): JayNativeEventBuilder; onmouseleave(handler: JayEventHandler): void; onmouseleave$(handler: JayEventHandler): JayNativeEventBuilder; onmousemove(handler: JayEventHandler): void; onmousemove$(handler: JayEventHandler): JayNativeEventBuilder; onmouseout(handler: JayEventHandler): void; onmouseout$(handler: JayEventHandler): JayNativeEventBuilder; onmouseover(handler: JayEventHandler): void; onmouseover$(handler: JayEventHandler): JayNativeEventBuilder; onmouseup(handler: JayEventHandler): void; onmouseup$(handler: JayEventHandler): JayNativeEventBuilder; onpause(handler: JayEventHandler): void; onpause$(handler: JayEventHandler): JayNativeEventBuilder; onplay(handler: JayEventHandler): void; onplay$(handler: JayEventHandler): JayNativeEventBuilder; onplaying(handler: JayEventHandler): void; onplaying$(handler: JayEventHandler): JayNativeEventBuilder; onpointercancel(handler: JayEventHandler): void; onpointercancel$(handler: JayEventHandler): JayNativeEventBuilder; onpointerdown(handler: JayEventHandler): void; onpointerdown$(handler: JayEventHandler): JayNativeEventBuilder; onpointerenter(handler: JayEventHandler): void; onpointerenter$(handler: JayEventHandler): JayNativeEventBuilder; onpointerleave(handler: JayEventHandler): void; onpointerleave$(handler: JayEventHandler): JayNativeEventBuilder; onpointermove(handler: JayEventHandler): void; onpointermove$(handler: JayEventHandler): JayNativeEventBuilder; onpointerout(handler: JayEventHandler): void; onpointerout$(handler: JayEventHandler): JayNativeEventBuilder; onpointerover(handler: JayEventHandler): void; onpointerover$(handler: JayEventHandler): JayNativeEventBuilder; onpointerup(handler: JayEventHandler): void; onpointerup$(handler: JayEventHandler): JayNativeEventBuilder; onprogress(handler: JayEventHandler): void; onprogress$(handler: JayEventHandler): JayNativeEventBuilder; onratechange(handler: JayEventHandler): void; onratechange$(handler: JayEventHandler): JayNativeEventBuilder; onreset(handler: JayEventHandler): void; onreset$(handler: JayEventHandler): JayNativeEventBuilder; onresize(handler: JayEventHandler): void; onresize$(handler: JayEventHandler): JayNativeEventBuilder; onscroll(handler: JayEventHandler): void; onscroll$(handler: JayEventHandler): JayNativeEventBuilder; onseeked(handler: JayEventHandler): void; onseeked$(handler: JayEventHandler): JayNativeEventBuilder; onseeking(handler: JayEventHandler): void; onseeking$(handler: JayEventHandler): JayNativeEventBuilder; onselect(handler: JayEventHandler): void; onselect$(handler: JayEventHandler): JayNativeEventBuilder; onselectionchange(handler: JayEventHandler): void; onselectionchange$(handler: JayEventHandler): JayNativeEventBuilder; onselectstart(handler: JayEventHandler): void; onselectstart$(handler: JayEventHandler): JayNativeEventBuilder; onstalled(handler: JayEventHandler): void; onstalled$(handler: JayEventHandler): JayNativeEventBuilder; onsubmit(handler: JayEventHandler): void; onsubmit$(handler: JayEventHandler): JayNativeEventBuilder; onsuspend(handler: JayEventHandler): void; onsuspend$(handler: JayEventHandler): JayNativeEventBuilder; ontimeupdate(handler: JayEventHandler): void; ontimeupdate$(handler: JayEventHandler): JayNativeEventBuilder; ontoggle(handler: JayEventHandler): void; ontoggle$(handler: JayEventHandler): JayNativeEventBuilder; ontouchcancel(handler: JayEventHandler): void; ontouchcancel$(handler: JayEventHandler): JayNativeEventBuilder; ontouchend(handler: JayEventHandler): void; ontouchend$(handler: JayEventHandler): JayNativeEventBuilder; ontouchmove(handler: JayEventHandler): void; ontouchmove$(handler: JayEventHandler): JayNativeEventBuilder; ontouchstart(handler: JayEventHandler): void; ontouchstart$(handler: JayEventHandler): JayNativeEventBuilder; ontransitioncancel(handler: JayEventHandler): void; ontransitioncancel$(handler: JayEventHandler): JayNativeEventBuilder; ontransitionend(handler: JayEventHandler): void; ontransitionend$(handler: JayEventHandler): JayNativeEventBuilder; ontransitionrun(handler: JayEventHandler): void; ontransitionrun$(handler: JayEventHandler): JayNativeEventBuilder; ontransitionstart(handler: JayEventHandler): void; ontransitionstart$(handler: JayEventHandler): JayNativeEventBuilder; onvolumechange(handler: JayEventHandler): void; onvolumechange$(handler: JayEventHandler): JayNativeEventBuilder; ontransitionstart(handler: JayEventHandler): void; ontransitionstart$(handler: JayEventHandler): JayNativeEventBuilder; ontransitionstart(handler: JayEventHandler): void; ontransitionstart$(handler: JayEventHandler): JayNativeEventBuilder; ontransitionstart(handler: JayEventHandler): void; ontransitionstart$(handler: JayEventHandler): JayNativeEventBuilder; ontransitionstart(handler: JayEventHandler): void; ontransitionstart$(handler: JayEventHandler): JayNativeEventBuilder; onvolumechange(handler: JayEventHandler): void; onvolumechange$(handler: JayEventHandler): JayNativeEventBuilder; onwaiting(handler: JayEventHandler): void; onwaiting$(handler: JayEventHandler): JayNativeEventBuilder; onwebkitanimationend(handler: JayEventHandler): void; onwebkitanimationend$(handler: JayEventHandler): JayNativeEventBuilder; onwebkitanimationiteration(handler: JayEventHandler): void; onwebkitanimationiteration$(handler: JayEventHandler): JayNativeEventBuilder; onwebkitanimationstart(handler: JayEventHandler): void; onwebkitanimationstart$(handler: JayEventHandler): JayNativeEventBuilder; onwebkittransitionend(handler: JayEventHandler): void; onwebkittransitionend$(handler: JayEventHandler): JayNativeEventBuilder; onwheel(handler: JayEventHandler): void; onwheel$(handler: JayEventHandler): JayNativeEventBuilder; } interface HTMLElementCollectionProxyTarget { addEventListener(type: string, handler: JayEventHandler, options?: boolean | AddEventListenerOptions): any; removeEventListener(type: string, handler: JayEventHandler, options?: EventListenerOptions | boolean): any; find(predicate: (t: ViewState, c: Coordinate) => boolean): HTMLNativeExec | undefined; map(handler: (element: HTMLNativeExec, viewState: ViewState, coordinate: Coordinate) => ResultType): Array; } interface HTMLElementCollectionProxy extends GlobalJayEvents, HTMLElementCollectionProxyTarget { } interface HTMLNativeExec { exec$(handler: JayNativeFunction): Promise; } interface HTMLElementProxyTarget extends HTMLNativeExec { addEventListener(type: string, handler: JayEventHandler, options?: boolean | AddEventListenerOptions): any; removeEventListener(type: string, handler: JayEventHandler, options?: EventListenerOptions | boolean): any; } interface HTMLElementProxy extends GlobalJayEvents, HTMLElementProxyTarget { } /** Components references **/ interface EventEmitter { (handler: JayEventHandler): void; emit: (event?: EventType) => void; } type EventTypeFrom = Type extends EventEmitter ? X : null; type MapEventEmitterViewState = { [key in keyof ComponentType]: ComponentType[key] extends EventEmitter ? EventEmitter : ComponentType[key]; }; type OnlyEventEmitters = { [key in keyof ComponentType as ComponentType[key] extends EventEmitter ? key : never]: ComponentType[key]; }; interface ComponentProxy> { addEventListener(type: string, handler: JayEventHandler, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: string, handler: JayEventHandler, options?: EventListenerOptions | boolean): void; } interface ComponentCollectionProxy> { addEventListener(type: string, handler: JayEventHandler, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: string, handler: JayEventHandler, options?: EventListenerOptions | boolean): void; map(handler: (comp: ComponentType, viewState: ViewState, coordinate: Coordinate) => ResultType): Array; find(predicate: (t: ViewState) => boolean): ComponentType | undefined; } interface ManagedRefs { getPublicAPI(): any; mkManagedRef(currData: any, strings: Coordinate, eventWrapper: JayEventHandlerWrapper): any; } declare function defaultEventWrapper(orig: JayEventHandler, event: JayEvent): Returns; type ManagedRefConstructor = () => ManagedRefs; type PrivateRefConstructor = () => PrivateRef; declare enum ManagedRefType { element = 0, elementCollection = 1, component = 2, componentCollection = 3 } declare abstract class BaseReferencesManager { readonly eventWrapper: JayEventHandlerWrapper; private refs; private refsPublicAPI; constructor(eventWrapper?: JayEventHandlerWrapper); abstract mkManagedRef(refType: ManagedRefType, refName: string): ManagedRefs; abstract currentContext(): { currData: any; coordinate: (refName: string) => Coordinate; }; private mkRefsOfType; mkRefs(elem: string[], elemCollection: string[], comp: string[], compCollection: string[], childRefManagers?: Record): PrivateRefConstructor[]; private mkRefsPublicAPI; get(refName: string): ManagedRefs | BaseReferencesManager; getPublicAPI(): object; applyToElement(element: BaseJayElement): JayElement; } declare class ReferencesManager extends BaseReferencesManager { mkManagedRef(refType: ManagedRefType): ManagedRefs; currentContext(): { currData: any; coordinate: (refName: string) => Coordinate; }; static for(options: RenderElementOptions, elem: string[], elemCollection: string[], comp: string[], compCollection: string[], childRefManagers?: Record): [ReferencesManager, PrivateRefConstructor[]]; } type ReferenceTarget = Element | JayComponent; interface PrivateRef { update: updateFunc; mount: MountFunc; unmount: MountFunc; viewState: ViewState; coordinate: Coordinate; getPublicAPI(): PublicRefAPI; set(referenced: ReferenceTarget): void; addEventListener(type: string, handler: JayEventHandler, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: string, handler: JayEventHandler, options?: EventListenerOptions | boolean): void; } declare abstract class PrivateRefs> { protected elements: Set; private listeners; addEventListener(type: string, listener: JayEventHandler, options?: boolean | AddEventListenerOptions): void; addRef(ref: RefType): void; removeRef(ref: RefType): void; removeEventListener(type: string, listener: JayEventHandler, options?: EventListenerOptions | boolean): void; } declare abstract class PrivateCollectionRefs> extends PrivateRefs { map(handler: (referenced: PublicRefAPI, viewState: ViewState, coordinate: Coordinate) => ResultType): Array; find(predicate: (viewState: ViewState, c: Coordinate) => boolean): PublicRefAPI; abstract getPublicAPI(): PublicCollectionRefAPI; } declare class ComponentRefsImpl> extends PrivateRefs> implements ManagedRefs { getInstance(): ComponentType; mkManagedRef(currData: any, coordinate: Coordinate, eventWrapper: JayEventHandlerWrapper): ComponentRefImpl; getPublicAPI(): ComponentType; } declare class ComponentCollectionRefImpl> extends PrivateCollectionRefs, ComponentRefImpl> implements ManagedRefs { mkManagedRef(currData: any, coordinate: Coordinate, eventWrapper: JayEventHandlerWrapper): ComponentRefImpl; getPublicAPI(): ComponentCollectionProxy; } declare abstract class RefImpl, PublicRefAPI, RefType extends PrivateRef> implements PrivateRef { viewState: ViewState; coordinate: Coordinate; private eventWrapper; private parentCollection?; private listeners; protected element: ElementType; constructor(viewState: ViewState, coordinate: Coordinate, eventWrapper: JayEventHandlerWrapper, parentCollection?: PrivateRefs); abstract getPublicAPI(): PublicRefAPI; set(referenced: ElementType | JayComponent): void; mount: () => void; unmount: () => void; abstract formatEvent(event: any): JayEvent; addEventListener(type: string, listener: JayEventHandler, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: string, listener: JayEventHandler, options?: EventListenerOptions | boolean): void; update: (newData: ViewState) => void; } declare class ComponentRefImpl> extends RefImpl> { getFromComponent(prop: any): any; formatEvent(event: any): JayEvent; getPublicAPI(): ComponentType; } declare const EVENT_TRAP: (target: any, prop: any) => any; declare const GetTrapProxy: (getTraps: ((target: any, p: string | symbol, receiver: any) => any)[]) => { get: (target: any, prop: any, receiver: any) => any; }; declare function childComp, ChildComp extends JayComponent>(compCreator: JayComponentConstructor, getProps: (t: ParentVS) => Props, ref?: PrivateRef): BaseJayElement; interface TextElement { dom: Text; update: updateFunc; mount: MountFunc; unmount: MountFunc; } declare const PROPERTY = 1; declare const ATTRIBUTE = 2; declare const BOOLEAN_ATTRIBUTE = 3; type AttributeStyle = typeof PROPERTY | typeof ATTRIBUTE | typeof BOOLEAN_ATTRIBUTE; interface DynamicAttributeOrProperty { valueFunc: (data: ViewState) => S; style: AttributeStyle; } declare function dynamicAttribute(attributeValue: (data: ViewState) => string): DynamicAttributeOrProperty; declare function dynamicProperty(propertyValue: (data: ViewState) => S): DynamicAttributeOrProperty; declare function booleanAttribute(propertyValue: (data: ViewState) => S): DynamicAttributeOrProperty; type Attribute = string | DynamicAttributeOrProperty | Record>; type Attributes = Record>; declare function conditional(condition: (newData: ViewState) => boolean, elem: () => BaseJayElement | TextElement | string): Conditional; interface Conditional { condition: (newData: ViewState) => boolean; elem: () => BaseJayElement | TextElement; } declare enum WhenRole { pending = 0, resolved = 1, rejected = 2 } interface When { role: WhenRole; promise: (newData: ViewState) => Promise; elem: () => BaseJayElement | TextElement | string; } declare const resolved: (promise: (newData: ViewState) => Promise, elem: () => string | BaseJayElement | TextElement) => When; declare const rejected: (promise: (newData: ViewState) => Promise, elem: () => BaseJayElement | TextElement | string) => When; declare const pending: (promise: (newData: ViewState) => Promise, elem: () => BaseJayElement | TextElement | string) => When; declare function isCondition(c: Conditional | When | ForEach | WithData | TextElement | BaseJayElement): c is Conditional; declare function isForEach(c: Conditional | When | ForEach | WithData | TextElement | BaseJayElement): c is ForEach; declare function isWhen(c: Conditional | When | ForEach | WithData | TextElement | BaseJayElement): c is When; declare function isWithData(c: Conditional | When | ForEach | WithData | TextElement | BaseJayElement): c is WithData; declare function forEach(getItems: (T: any) => Array, elemCreator: (Item: any) => BaseJayElement, matchBy: string): ForEach; interface ForEach { getItems: (T: any) => Array; elemCreator: (Item: any, String: any) => BaseJayElement; trackBy: string; } declare function withData(accessor: (data: ParentViewState) => ChildViewState | null | undefined, elem: () => BaseJayElement): WithData; interface WithData { accessor: (data: ParentViewState) => ChildViewState | null | undefined; elem: () => BaseJayElement; } declare function mkUpdateCollection(child: ForEach, group: KindergartenGroup): [updateFunc, MountFunc, MountFunc]; declare function dynamicText(textContent: (vs: ViewState) => string | number | boolean): TextElement; interface HtmlContent { __htmlContent: true; htmlAccessor: (vs: ViewState) => string; } declare function dynamicHtml(htmlContent: (vs: ViewState) => string): HtmlContent; declare function isHtmlContent(child: any): child is HtmlContent; declare function applyHtmlContent(child: HtmlContent, parentElement: Element, updates: updateFunc[], skipInitial?: boolean): void; type ElementChildren = Array | TextElement | HtmlContent | string>; declare const element: (tagName: string, attributes: Attributes, children?: ElementChildren, ref?: PrivateRef>) => BaseJayElement; declare const svgElement: (tagName: string, attributes: Attributes, children?: ElementChildren, ref?: PrivateRef>) => BaseJayElement; declare const mathMLElement: (tagName: string, attributes: Attributes, children?: ElementChildren, ref?: PrivateRef>) => BaseJayElement; type DynamicElementChildren = Array | ForEach | WithData | TextElement | BaseJayElement | HtmlContent | When | string>; declare const dynamicElementNS: (ns: string) => (tagName: string, attributes: Attributes, children?: DynamicElementChildren, ref?: PrivateRef>) => BaseJayElement; declare const dynamicElement: (tagName: string, attributes: Attributes, children?: DynamicElementChildren, ref?: PrivateRef>) => BaseJayElement; declare const svgDynamicElement: (tagName: string, attributes: Attributes, children?: DynamicElementChildren, ref?: PrivateRef>) => BaseJayElement; declare const mathMLDynamicElement: (tagName: string, attributes: Attributes, children?: DynamicElementChildren, ref?: PrivateRef>) => BaseJayElement; declare function normalizeUpdates(updates: Array>): updateFunc; declare function normalizeMount(mounts: Array): MountFunc; interface HeadLink { rel: string; href: string; attributes?: Record; } declare function injectHeadLinks(headLinks: HeadLink[]): void; interface ContextStack { context: ContextType; marker: ContextMarker; parent?: ContextStack; } /** * Registers a global context that will be available to all components. * Global contexts are checked after the context stack, so component-provided * contexts can override global ones. * * @param marker - The context marker created with createJayContext() * @param context - The context value to register * * @example * ```typescript * // In lib/init.ts (using makeJayInit pattern) * export const init = makeJayInit() * .withServer(() => ({ itemsPerPage: 10 })) * .withClient((serverData) => { * registerGlobalContext(APP_CONFIG_CONTEXT, serverData); * }); * ``` */ declare function registerGlobalContext(marker: ContextMarker, context: ContextType): void; /** * Clears all registered global contexts. * Internal API for testing and hot reload. */ declare function clearGlobalContextRegistry(): void; /** * Gets a global context by marker. * Internal API used by findContext. */ declare function useGlobalContext(marker: ContextMarker): ContextType | undefined; declare function createJayContext(name: string): ContextMarker; declare function withContext(marker: ContextMarker, context: ContextType, callback: () => Returns): Returns; declare function useContext(marker: ContextMarker): ContextType; declare function findContext(predicate: (marker: ContextMarker) => boolean): ContextType | undefined; declare function saveContext(): ContextStack; declare function restoreContext(savedContext: ContextStack, callback: () => Returns): Returns; declare function currentConstructionContext(): ConstructContext; declare class ConstructContext { private readonly data; readonly forStaticElements: boolean; private readonly coordinateBase; private readonly _coordinateMap?; private readonly _rootElement?; private readonly _dataIds; readonly sanitizeHtml?: (html: string) => string; constructor(data: ViewState, forStaticElements?: boolean, coordinateBase?: Coordinate, coordinateMap?: Map, rootElement?: Element, dataIds?: Coordinate, sanitizeHtml?: (html: string) => string); get currData(): ViewState; /** The accumulated trackBy values from ancestor forEach loops (for __headlessInstances key lookup) */ get dataIds(): Coordinate; coordinate: (refName: string) => Coordinate; /** * Create a child context for a forEach item. * * With scoped coordinates (DL#126), coordinateBase is NOT accumulated — * scoped coordinates are fully qualified within each scope. Only dataIds * accumulates (for __headlessInstances key lookup). * * coordinateBase is still maintained for the non-hydration path where * coordinate() is used for refs. */ forItem(childViewState: ChildViewState, id: string): ConstructContext; /** * Create a child context scoped to a DOM subtree (DL#126). * * Builds a LOCAL coordinate map from the scope root element's subtree. * All coordinate lookups within this scope search the local map only. * This ensures forEach items with shared scope IDs resolve correctly — * each item builds its own local map from its own DOM branch. */ forScope(scopeRootElement: Element): ConstructContext; forAsync(childViewState: ChildViewState): ConstructContext; /** Whether this context is in hydration mode (adopting existing DOM). */ get isHydrating(): boolean; /** The root element being hydrated (undefined in non-hydration mode). */ get rootElement(): Element | undefined; /** * Resolve an element by its coordinate key from the hydration map. * * With scoped coordinates (DL#126), the key is fully qualified within the * scope (e.g., "S2/0"). No coordinateBase prefix is applied — coordinates * are self-contained within their scope. * * When multiple elements share the same coordinate (e.g., forEach items * sharing the same template scope IDs), each call returns the next element * in document order. */ resolveCoordinate(key: string): Element | undefined; /** * Peek at an element by its coordinate key without consuming it. * Used by hydrateForEach to resolve the container element — the same element * is also consumed by the parent adoptElement call (which evaluates after * hydrateForEach due to JavaScript argument evaluation order). */ peekCoordinate(key: string): Element | undefined; static withRootContext(viewState: ViewState, refManager: ReferencesManager, elementConstructor: () => BaseJayElement, sanitizeHtml?: (html: string) => string): JayElement; /** * Hydrate a child component's inline template within the parent's coordinate scope. * * Like withRootContext, but inherits the coordinateBase and coordinateMap from * the current (parent) ConstructContext. This allows adoptElement/adoptText calls * inside the child to resolve coordinates scoped to the child's prefix. * * Used by headless component instances during hydration: the parent pushes a * scoped context (via childCompHydrate), and the child's preRender calls this * method which inherits the scoped coordinateBase. */ static withHydrationChildContext(viewState: ViewState, refManager: ReferencesManager, elementConstructor: () => BaseJayElement): JayElement; /** * Hydrate existing server-rendered DOM. * * Builds a coordinate→element map from all [jay-coordinate] attributes * inside rootElement, creates a ConstructContext in hydration mode, * pushes it onto the context stack, then calls hydrateConstructor. * * The hydrateConstructor calls adoptText(), adoptElement(), etc. which * read from the context stack — same pattern as element(), dynamicText(). * It returns a BaseJayElement whose update/mount/unmount are composed * from all adopted children — same as withRootContext's elementConstructor. */ static withHydrationRootContext(viewState: ViewState, refManager: ReferencesManager, rootElement: Element, hydrateConstructor: () => BaseJayElement): JayElement; } /** * Sentinel value for static children in adoptDynamicElement. * Represents a child position occupied by a pre-existing DOM node * that has no hydration code (no dynamic text, no dynamic attributes, no refs). */ declare const STATIC: unique symbol; /** Element returned by hydrateForEach/hydrateConditional that needs a group assigned later. */ type DynamicChild = BaseJayElement & { _setGroup: (group: KindergartenGroup) => void; }; /** * Adopt an existing text node inside the element at the given coordinate. * * Reads the current ConstructContext from the stack (via currentConstructionContext()) * to resolve the coordinate to an existing DOM element. Finds the text child at * the given index (by significant-child position) and connects a dynamic text updater. * * - coordinate: element containing the text (or parent in mixed content) * - accessor: (vs) => string | number | boolean * - ref?: optional ref for the element * - childIndex?: index among significant children (default 0). Use when parent has * mixed content (text + elements); matches element target's positional dynamicText. */ declare function adoptText(coordinate: string, accessor: (vs: ViewState) => string | number | boolean, ref?: PrivateRef>, childIndex?: number): BaseJayElement; /** * Adopt an existing element at the given coordinate, connecting dynamic * attributes and adopted children to it. * * Hydration counterpart to element() — adopts server-rendered HTML and wires * up dynamic attribute bindings and children. */ declare function adoptElement(coordinate: string, attributes: Attributes, children?: (BaseJayElement | HtmlContent)[], ref?: PrivateRef>): BaseJayElement; /** * Adopt an existing element that has interactive children (forEach/conditional). * * Creates one Kindergarten per parent, one group per child position. * STATIC sentinels represent children with no hydrate code. * Children with `_setGroup` (forEach/conditional) receive their group via callback. */ declare function adoptDynamicElement(coordinate: string, attributes: Attributes, children?: (BaseJayElement | typeof STATIC)[], ref?: PrivateRef>): BaseJayElement; /** * Hydration-aware conditional. * * Returns an element with `_setGroup` callback. The parent `adoptDynamicElement` * calls `_setGroup` to assign a KindergartenGroup, which is used for DOM * positioning (ensureNode/removeNode) instead of anchor comments. * * Handles two cases: * - **True at SSR**: Element exists in DOM. Adopt it, register in group, wire toggle. * - **False at SSR**: Element absent. Use createFallback to lazily create when true. */ declare function hydrateConditional(condition: (vs: ViewState) => boolean, adoptExisting: () => BaseJayElement, createFallback?: () => BaseJayElement): DynamicChild; /** * Hydration-aware forEach. * * Adopts existing items that were server-rendered, and creates new items via * the regular element creation path when the list changes. * * Returns an element with `_setGroup` callback. The parent `adoptDynamicElement` * calls `_setGroup` to assign a KindergartenGroup from the parent's Kindergarten, * ensuring correct DOM positioning relative to siblings. * * @param accessor - Function to get the array from the ViewState * @param trackBy - Property name used for item identity (reconciliation key) * @param itemCoordinate - Scoped coordinate of each forEach item root element (DL#126). * All items share this coordinate; each resolveCoordinate call consumes the next one. * @param adoptItem - Called per existing item during hydration (should use adoptText/adoptElement) * @param createItem - Called per new item (regular element()/dynamicText() from generated-element.ts) */ declare function hydrateForEach(accessor: (vs: ViewState) => Item[], trackBy: string, itemCoordinate: string, adoptItem: () => BaseJayElement[], createItem: (item: Item, id: string) => BaseJayElement): DynamicChild; /** * Hydration-aware child component instantiation. * * With scoped coordinates (DL#126), the child component creates a LOCAL * coordinate map from its inline template root element's subtree. * This ensures the child's adopt calls resolve against the correct DOM * branch, not the global map. * * @param compCreator - Component factory (from makeHeadlessInstanceComponent) * @param getProps - Extracts component props from parent ViewState * @param scopeRootCoordinate - Coordinate of the inline template root element (e.g., "S2/0") * @param ref - Optional ref for the component instance */ declare function childCompHydrate, ChildComp extends JayComponent>(compCreator: JayComponentConstructor, getProps: (t: ParentVS) => Props, scopeRootCoordinate?: string, ref?: PrivateRef): BaseJayElement; export { type Attribute, type Attributes, type BaseJayElement, BaseReferencesManager, type ComponentCollectionProxy, ComponentCollectionRefImpl, type ComponentProxy, ComponentRefImpl, ComponentRefsImpl, type Conditional, ConstructContext, type ContextMarker, type Coordinate, type DynamicAttributeOrProperty, EVENT_TRAP, type ElementFrom, type EventEmitter, type EventTypeFrom, type ExtractFastViewState, type ExtractInteractiveViewState, type ExtractProps, type ExtractRefs, type ExtractSlowViewState, type ExtractViewState, type ForEach, GetTrapProxy, type GlobalJayEvents, type HTMLElementCollectionProxy, type HTMLElementCollectionProxyTarget, type HTMLElementProxy, type HTMLElementProxyTarget, type HTMLNativeExec, type HeadLink, type HtmlContent, type JayComponent, type JayComponentConstructor, type JayContract, type JayElement, type JayEvent, type JayEventHandler, type JayEventHandlerWrapper, type JayLog, type JayNativeEventBuilder, type JayNativeFunction, LogType, type ManagedRefConstructor, ManagedRefType, type ManagedRefs, type MapEventEmitterViewState, type MountFunc, type OnlyEventEmitters, type PreRenderElement, type PrivateRef, type PrivateRefConstructor, PrivateRefs, type PropsFrom, ReferencesManager, type RenderElement, type RenderElementOptions, STATIC, type TextElement, VIEW_STATE_CHANGE_EVENT, type ViewStateFrom, type When, WhenRole, type WithData, adoptDynamicElement, adoptElement, adoptText, applyHtmlContent, booleanAttribute, childComp, childCompHydrate, clearGlobalContextRegistry, conditional, createJayContext, currentConstructionContext, defaultEventWrapper, dynamicAttribute, dynamicElement, dynamicElementNS, dynamicHtml, dynamicProperty, dynamicText, element, findContext, forEach, hydrateConditional, hydrateForEach, injectHeadLinks, isCondition, isForEach, isHtmlContent, isWhen, isWithData, jayLog, mathMLDynamicElement, mathMLElement, mkUpdateCollection, noop, noopMount, noopUpdate, normalizeMount, normalizeUpdates, pending, registerGlobalContext, rejected, resolved, restoreContext, saveContext, svgDynamicElement, svgElement, type updateFunc, useContext, useGlobalContext, withContext, withData };