import { type FrameContent } from './component.ts'; import type { RemixElement } from './jsx.ts'; import type { FrameHandle } from './component.ts'; import type { Scheduler } from './vdom.ts'; import { createRangeRoot } from './vdom.ts'; import type { StyleManager } from './style/index.ts'; type FrameRoot = [Comment, Comment] | Element | Document | DocumentFragment; type FrameData = { status: 'pending' | 'resolved'; name?: string; src: string; }; type HydrationData = { moduleUrl: string; exportName: string; props: Record; }; type RmxData = { h?: Record; f?: Record; }; export type VirtualRootMarker = Comment & { $rmx: ReturnType; }; type FrameMarkerData = FrameData & { id: string; }; type PendingClientEntries = Map; /** * Loads a client entry module for hydration. */ export type LoadModule = (moduleUrl: string, exportName: string) => Promise | Function; /** * Resolves frame content for the given frame source. */ export type ResolveFrame = (src: string, signal?: AbortSignal, target?: string) => Promise | FrameContent; type InternalFrameContent = FrameContent | DocumentFragment; export type FrameRuntime = { topFrame?: FrameHandle; errorTarget: EventTarget; loadModule: LoadModule; resolveFrame: ResolveFrame; pendingClientEntries: PendingClientEntries; scheduler: Scheduler; styleManager: StyleManager; data: RmxData; moduleCache: Map; moduleLoads: Map>; frameInstances: WeakMap; namedFrames: Map; }; export type FrameContext = { topFrame?: FrameHandle; errorTarget: EventTarget; loadModule: LoadModule; resolveFrame: ResolveFrame; pendingClientEntries: PendingClientEntries; scheduler: Scheduler; frame: FrameHandle; styleManager: StyleManager; data: RmxData; moduleCache: Map; moduleLoads: Map>; frameInstances: WeakMap; namedFrames: Map; regionTailRef?: ChildNode | null; regionParent?: ParentNode | null; }; type FrameInit = { name?: string; topFrame?: FrameHandle; src: string; errorTarget: EventTarget; loadModule: LoadModule; resolveFrame: ResolveFrame; pendingClientEntries: PendingClientEntries; scheduler: Scheduler; styleManager: StyleManager; marker?: FrameMarkerData; data: RmxData; moduleCache: Map; moduleLoads: Map>; frameInstances: WeakMap; namedFrames: Map; }; export type Frame = { render: (content: InternalFrameContent, options?: RenderOptions) => Promise; ready: () => Promise; flush: () => void; dispose: () => void; handle: FrameHandle; }; type RenderOptions = { initialHydrationTracker?: InitialHydrationTracker; signal?: AbortSignal; }; export declare function createFrame(root: FrameRoot, init: FrameInit): Frame; export declare function createFrameRuntime(init: { topFrame?: FrameHandle; errorTarget: EventTarget; loadModule: LoadModule; resolveFrame: ResolveFrame; pendingClientEntries: PendingClientEntries; scheduler: Scheduler; styleManager: StyleManager; data: RmxData; moduleCache: Map; moduleLoads: Map>; frameInstances: WeakMap; namedFrames: Map; }): FrameRuntime; type InitialHydrationTracker = { track: () => () => void; finalize: () => void; ready: () => Promise; }; export declare function publishFrameTemplate(id: string, fragment: DocumentFragment): void; export declare function consumeFrameTemplate(id: string): DocumentFragment | null; export {};