/** * Universal reconciler for Solid custom renderers. * * Vendored from OpenTUI (MIT): https://github.com/miunau/opentui * packages/solid/src/renderer/universal.js * * Rewritten for Solid 2.0's two-phase createRenderEffect(compute, apply): * - Reactive reads (signal access) happen in compute (tracked) * - Tree mutations (insertNode, removeNode, etc.) happen in apply (untracked) * - No accidental dependency tracking from mutation side-effects * - mergeProps -> merge * * Converted to TypeScript with proper types. */ import { createRenderEffect, merge } from "solid-js"; export interface RendererOptions { createElement(tag: string): N; createSlotNode(): N; createTextNode(value: string): N; getFirstChild(node: N): N | undefined; getNextSibling(node: N): N | undefined; getParentNode(node: N): N | undefined; insertNode(parent: N, node: N, anchor?: N): void; isTextNode(node: N): boolean; removeNode(parent: N, node: N): void; replaceText(textNode: N, value: string): void; setProperty(node: N, name: string, value: T, prev?: T): void; } export interface Renderer { createComponent>(Comp: (props: T) => unknown, props: T): unknown; createElement(tag: string): N; createTextNode(value: string): N; effect: typeof createRenderEffect; insert(parent: N, accessor: (() => unknown) | unknown, marker?: N | null, initial?: unknown): void; insertNode(parent: N, node: N, anchor?: N): void; memo(fn: () => T, equal: boolean): () => T; mergeProps: typeof merge; ref(getter: () => unknown, node: N): void; render(code: () => unknown, node: N): () => void; setProp(node: N, name: string, value: T, prev?: T): T; spread(node: N, accessor: (() => unknown) | unknown, skipChildren?: boolean): void; use(fn: (element: N, arg: A) => T, element: N, arg: A): T; } export declare function createRenderer(opts: RendererOptions): Renderer; //# sourceMappingURL=universal.d.ts.map