@reckona/mreact-compat 0.0.172 → 0.0.173

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/root.js CHANGED
@@ -59,7 +59,7 @@ function renderHostFiberIntoContainer(container, fiberRoot, runtime, element) {
59
59
  }
60
60
  fiberRoot.finishedWork = finishedWork;
61
61
  commitFiberRoot(fiberRoot);
62
- collectPortalNodes(fiberRoot.current, runtime);
62
+ collectPortalNodes(fiberRoot.current, runtime, portalSnapshot);
63
63
  removeStalePortalNodes(portalSnapshot, runtime);
64
64
  commitDevToolsRoot(container, fiberRoot);
65
65
  runtime.idMode = "client";
@@ -99,7 +99,7 @@ function renderHydratingHostFiberIntoContainer(container, fiberRoot, runtime, el
99
99
  fiberRoot.finishedWork = undefined;
100
100
  fiberRoot.workInProgress = undefined;
101
101
  fiberRoot.workInProgressRootRenderLanes = 0;
102
- collectPortalNodes(fiberRoot.current, runtime);
102
+ collectPortalNodes(fiberRoot.current, runtime, portalSnapshot);
103
103
  removeStalePortalNodes(portalSnapshot, runtime);
104
104
  commitDevToolsRoot(container, fiberRoot);
105
105
  runtime.idMode = "client";
@@ -271,8 +271,9 @@ function clearElementChildren(element) {
271
271
  element.removeChild(element.firstChild);
272
272
  }
273
273
  }
274
- function collectPortalNodes(fiber, runtime) {
275
- if (fiber === undefined || runtime.portalContainers.size === 0) {
274
+ function collectPortalNodes(fiber, runtime, snapshot) {
275
+ if (fiber === undefined ||
276
+ (runtime.portalContainers.size === 0 && snapshot.containers.size === 0)) {
276
277
  return;
277
278
  }
278
279
  const deferredSiblings = [];
package/dist/root.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"root.js","sourceRoot":"","sources":["../src/root.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactCompatNode } from \"./element.js\";\nimport {\n createRootRuntime,\n flushSyncUpdates,\n hasStableExternalStores,\n type RenderPriority,\n type RootRuntime,\n} from \"./hooks.js\";\nimport { collectOwnedChildNodes, removeChildIfPresent } from \"./dom-children.js\";\nimport { commitDevToolsRoot, unmountDevToolsRoot } from \"./devtools.js\";\nimport {\n applyStreamingHydrationFragments,\n findContainingResumeBoundaryId,\n getHydrationScope,\n type HydrationRecoverableErrorInfo,\n type RenderOptions,\n} from \"./hydration.js\";\nimport {\n enableEventHydrationManifestReplay,\n readEventHydrationManifest,\n replayQueuedHydrationEvents,\n type EventHydrationManifest,\n} from \"./event-replay.js\";\nimport {\n ContinuousEventLane,\n SyncLane,\n TransitionLane,\n type Lane,\n} from \"./fiber-lanes.js\";\nimport {\n createContainerFiberRoot,\n enqueueRootRender,\n} from \"./fiber-work-loop.js\";\nimport { commitFiberRoot, detachFiberRefs } from \"./fiber-commit.js\";\nimport {\n canRenderHostFiber,\n commitHydratingHostFiberRoot,\n disposeHostFiberResources,\n renderHydratingHostFiberRoot,\n renderHostFiberRoot,\n} from \"./fiber-host.js\";\nimport type { Fiber, FiberRoot } from \"./fiber.js\";\nimport { renderIntoContainer } from \"./reconciler.js\";\n\n/** Root controller returned by createRoot and hydrateRoot. */\nexport interface Root {\n render(element: ReactCompatNode): void;\n unmount(): void;\n}\n\n/** Options used when creating a client render root. */\nexport interface RootOptions {\n identifierPrefix?: string;\n}\n\n/** Options used when hydrating server-rendered markup. */\nexport interface HydrateRootOptions {\n onRecoverableError?: (\n error: Error,\n info: HydrationRecoverableErrorInfo,\n ) => void;\n resumeId?: string;\n consumeResumeMarkers?: boolean;\n identifierPrefix?: string;\n}\n\n/** Controller for deferred or selective streaming hydration. */\nexport interface StreamingHydrationRoot {\n hydrate(element: ReactCompatNode, options?: HydrateRootOptions): Root;\n dispose(): void;\n}\n\n/** Options for creating a streaming hydration root. */\nexport interface StreamingHydrationRootOptions {\n manifest?: EventHydrationManifest;\n manifestRoot?: ParentNode;\n fragmentRoot?: ParentNode;\n applyOutOfOrderFragments?: boolean;\n observeOutOfOrderFragments?: boolean;\n selectiveHydration?: SelectiveHydrationOptions;\n}\n\n/** Rules that choose which boundary to hydrate after a captured event. */\nexport interface SelectiveHydrationOptions {\n element?: ReactCompatNode;\n options?: HydrateRootOptions | ((event: Event) => HydrateRootOptions);\n boundaries?: Record<string, SelectiveHydrationBoundary>;\n}\n\n/** Element and options used to hydrate one selective boundary. */\nexport interface SelectiveHydrationBoundary {\n element: ReactCompatNode;\n options?: HydrateRootOptions | ((event: Event) => HydrateRootOptions);\n}\n\nconst legacyRoots = new WeakMap<Element, Root>();\n\n/** Creates a root that renders React-compatible nodes into a DOM container. */\nexport function createRoot(\n container: Element,\n options: RootOptions = {},\n): Root {\n const fiberRoot = createContainerFiberRoot(container);\n const runtime = createRootRuntime((priority = \"sync\") => {\n if (runtime.currentElement !== undefined) {\n enqueueRootRender(fiberRoot, runtime.currentElement, laneForRenderPriority(priority), () => {\n if (canRenderHostFiber(runtime.currentElement as ReactCompatNode)) {\n return renderHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n runtime.currentElement as ReactCompatNode,\n );\n }\n\n renderIntoContainer(container, runtime.currentElement, runtime);\n });\n }\n }, options);\n\n return {\n render(element) {\n runtime.currentElement = element;\n enqueueRootRender(fiberRoot, element, SyncLane, () => {\n if (canRenderHostFiber(element)) {\n return renderHostFiberIntoContainer(container, fiberRoot, runtime, element);\n }\n\n renderIntoContainer(container, element, runtime);\n });\n },\n unmount() {\n runtime.currentElement = undefined;\n runtime.dispose();\n detachFiberRefs(fiberRoot.current);\n disposeHostFiberResources(fiberRoot.current);\n runtime.instances.clear();\n unmountDevToolsRoot(container);\n clearElementChildren(container);\n },\n };\n}\n\nfunction renderHostFiberIntoContainer(\n container: Element,\n fiberRoot: FiberRoot,\n runtime: RootRuntime,\n element: ReactCompatNode,\n): Fiber {\n for (let attempt = 0; attempt < 25; attempt += 1) {\n const portalSnapshot = beginPortalRender(runtime);\n runtime.beginRender();\n let committed = false;\n\n try {\n const finishedWork = renderHostFiberRoot(fiberRoot, element, runtime);\n\n if (runtime.renderPhaseUpdate) {\n runtime.renderPhaseUpdate = false;\n continue;\n }\n\n if (!hasStableExternalStores(runtime)) {\n continue;\n }\n\n fiberRoot.finishedWork = finishedWork;\n commitFiberRoot(fiberRoot);\n collectPortalNodes(fiberRoot.current, runtime);\n removeStalePortalNodes(portalSnapshot, runtime);\n commitDevToolsRoot(container, fiberRoot);\n runtime.idMode = \"client\";\n committed = true;\n return finishedWork;\n } finally {\n if (!committed) {\n restorePortalRender(runtime, portalSnapshot);\n }\n runtime.endRender(committed);\n if (committed) {\n runtime.flushEffects();\n }\n }\n }\n\n throw new Error(\"Store unstable.\");\n}\n\nfunction renderHydratingHostFiberIntoContainer(\n container: Element,\n fiberRoot: FiberRoot,\n runtime: RootRuntime,\n element: ReactCompatNode,\n options: RenderOptions & {\n resumeId?: string;\n consumeResumeMarkers?: boolean;\n },\n): Fiber {\n for (let attempt = 0; attempt < 25; attempt += 1) {\n const portalSnapshot = beginPortalRender(runtime);\n runtime.beginRender();\n let committed = false;\n\n try {\n const scope = getHydrationScope(container, options.resumeId);\n const finishedWork = renderHydratingHostFiberRoot(\n fiberRoot,\n element,\n runtime,\n scope,\n options,\n );\n\n if (runtime.renderPhaseUpdate) {\n runtime.renderPhaseUpdate = false;\n continue;\n }\n\n if (!hasStableExternalStores(runtime)) {\n continue;\n }\n\n commitHydratingHostFiberRoot(fiberRoot, finishedWork, scope, options);\n fiberRoot.current = finishedWork;\n fiberRoot.current.stateNode = fiberRoot;\n fiberRoot.finishedWork = undefined;\n fiberRoot.workInProgress = undefined;\n fiberRoot.workInProgressRootRenderLanes = 0;\n collectPortalNodes(fiberRoot.current, runtime);\n removeStalePortalNodes(portalSnapshot, runtime);\n commitDevToolsRoot(container, fiberRoot);\n runtime.idMode = \"client\";\n committed = true;\n return finishedWork;\n } finally {\n if (!committed) {\n restorePortalRender(runtime, portalSnapshot);\n }\n runtime.endRender(committed);\n if (committed) {\n runtime.flushEffects();\n }\n }\n }\n\n throw new Error(\"Store unstable.\");\n}\n\n/** Renders a React-compatible node into a legacy root container. */\nexport function render(element: ReactCompatNode, container: Element): void {\n const root = legacyRoots.get(container) ?? createRoot(container);\n legacyRoots.set(container, root);\n root.render(element);\n}\n\n/** Runs updates synchronously and flushes pending reactive work before returning. */\nexport function flushSync<T>(callback: () => T): T {\n return flushSyncUpdates(callback);\n}\n\n/** Hydrates server-rendered markup with a React-compatible element tree. */\nexport function hydrateRoot(\n container: Element,\n element: ReactCompatNode,\n options: HydrateRootOptions = {},\n): Root {\n const fiberRoot = createContainerFiberRoot(container);\n const renderOptions: RenderOptions & {\n resumeId?: string;\n consumeResumeMarkers?: boolean;\n } = {\n hydration:\n options.onRecoverableError === undefined\n ? {}\n : { onRecoverableError: options.onRecoverableError },\n ...(options.resumeId === undefined ? {} : { resumeId: options.resumeId }),\n ...(options.consumeResumeMarkers === undefined\n ? {}\n : { consumeResumeMarkers: options.consumeResumeMarkers }),\n };\n const runtime = createRootRuntime((priority = \"sync\") => {\n if (runtime.currentElement !== undefined) {\n enqueueRootRender(fiberRoot, runtime.currentElement, laneForRenderPriority(priority), () => {\n const useHydratingRerender =\n runtime.idMode === \"server\" ||\n renderOptions.resumeId !== undefined ||\n renderOptions.consumeResumeMarkers !== undefined;\n if (canRenderHostFiber(runtime.currentElement as ReactCompatNode)) {\n return useHydratingRerender\n ? renderHydratingHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n runtime.currentElement as ReactCompatNode,\n renderOptions,\n )\n : renderHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n runtime.currentElement as ReactCompatNode,\n );\n }\n\n renderIntoContainer(\n container,\n runtime.currentElement,\n runtime,\n useHydratingRerender ? renderOptions : {},\n );\n });\n }\n }, {\n ...(options.identifierPrefix === undefined\n ? {}\n : { identifierPrefix: options.identifierPrefix }),\n idMode: \"server\",\n });\n\n const root: Root = {\n render(nextElement) {\n runtime.currentElement = nextElement;\n enqueueRootRender(fiberRoot, nextElement, SyncLane, () => {\n if (canRenderHostFiber(nextElement)) {\n return renderHostFiberIntoContainer(container, fiberRoot, runtime, nextElement);\n }\n\n renderIntoContainer(container, nextElement, runtime);\n });\n },\n unmount() {\n runtime.currentElement = undefined;\n runtime.dispose();\n detachFiberRefs(fiberRoot.current);\n disposeHostFiberResources(fiberRoot.current);\n runtime.instances.clear();\n unmountDevToolsRoot(container);\n clearElementChildren(container);\n },\n };\n\n runtime.currentElement = element;\n enqueueRootRender(fiberRoot, element, SyncLane, () => {\n if (canRenderHostFiber(element)) {\n return renderHydratingHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n element,\n renderOptions,\n );\n }\n\n renderIntoContainer(container, element, runtime, renderOptions);\n });\n replayQueuedHydrationEvents(container);\n return root;\n}\n\nfunction laneForRenderPriority(priority: RenderPriority): Lane {\n if (priority === \"transition\") {\n return TransitionLane;\n }\n\n if (priority === \"continuous\") {\n return ContinuousEventLane;\n }\n\n return SyncLane;\n}\n\n/** Creates a root that can hydrate streamed or selectively revealed markup. */\nexport function createStreamingHydrationRoot(\n container: Element,\n options: StreamingHydrationRootOptions = {},\n): StreamingHydrationRoot {\n const fragmentRoot = options.fragmentRoot ?? container.ownerDocument;\n const manifestRoot = options.manifestRoot ?? container;\n const manifest = options.manifest ?? readEventHydrationManifest(manifestRoot);\n\n if (options.applyOutOfOrderFragments !== false) {\n applyStreamingHydrationFragments(fragmentRoot);\n }\n\n let hydratedRoot: Root | undefined;\n const hydrate = (\n element: ReactCompatNode,\n hydrateOptions: HydrateRootOptions = {},\n ): Root => {\n if (options.applyOutOfOrderFragments !== false) {\n applyStreamingHydrationFragments(fragmentRoot);\n }\n\n const root = hydrateRoot(container, element, hydrateOptions);\n hydratedRoot = root;\n disposeReplayCaptureOnce();\n return root;\n };\n const disposeReplayCapture = enableEventHydrationManifestReplay(\n container,\n manifest,\n {\n onCapturedEvent(event, target) {\n const selectiveHydration = options.selectiveHydration;\n const selectiveBoundary = resolveSelectiveHydrationBoundary(\n container,\n event,\n target,\n manifest,\n selectiveHydration,\n );\n\n if (selectiveBoundary === undefined || hydratedRoot !== undefined) {\n return;\n }\n\n hydrate(\n selectiveBoundary.element,\n resolveSelectiveHydrationOptions(event, selectiveBoundary),\n );\n },\n },\n );\n const observer =\n options.observeOutOfOrderFragments === true &&\n typeof MutationObserver !== \"undefined\" &&\n fragmentRoot instanceof Node\n ? new MutationObserver(() => {\n applyStreamingHydrationFragments(fragmentRoot);\n })\n : undefined;\n let replayDisposed = false;\n\n observer?.observe(fragmentRoot as Node, { childList: true, subtree: true });\n\n const disposeReplayCaptureOnce = (): void => {\n if (!replayDisposed) {\n disposeReplayCapture();\n replayDisposed = true;\n }\n };\n\n return {\n hydrate,\n dispose() {\n disposeReplayCaptureOnce();\n observer?.disconnect();\n },\n };\n}\n\n/** Unmounts a legacy root from a container and reports whether anything was removed. */\nexport function unmountComponentAtNode(container: Element): boolean {\n const root = legacyRoots.get(container);\n\n if (root !== undefined) {\n root.unmount();\n legacyRoots.delete(container);\n return true;\n }\n\n const hadChildren = container.childNodes.length > 0;\n clearElementChildren(container);\n return hadChildren;\n}\n\nfunction clearElementChildren(element: Element): void {\n if (typeof element.replaceChildren === \"function\") {\n element.replaceChildren();\n return;\n }\n\n while (element.firstChild !== null) {\n element.removeChild(element.firstChild);\n }\n}\n\nfunction collectPortalNodes(fiber: Fiber | undefined, runtime: RootRuntime): void {\n if (fiber === undefined || runtime.portalContainers.size === 0) {\n return;\n }\n\n const deferredSiblings: Fiber[] = [];\n let cursor: Fiber | undefined = fiber;\n\n while (cursor !== undefined) {\n if (cursor.tag === \"portal\" && cursor.stateNode instanceof Element) {\n const nodes = Array.isArray(cursor.memoizedState)\n ? cursor.memoizedState.filter((node): node is Node => node instanceof Node)\n : [];\n runtime.portalContainers.add(cursor.stateNode);\n const ownedNodes = runtime.portalNodes.get(cursor.stateNode) ?? new Set<Node>();\n for (const node of nodes) {\n ownedNodes.add(node);\n }\n runtime.portalNodes.set(cursor.stateNode, ownedNodes);\n }\n\n if (cursor.child !== undefined) {\n if (cursor.sibling !== undefined) {\n deferredSiblings.push(cursor.sibling);\n }\n cursor = cursor.child;\n continue;\n }\n\n cursor = cursor.sibling ?? deferredSiblings.pop();\n }\n}\n\ninterface PortalRenderSnapshot {\n containers: Set<Element>;\n nodes: Map<Element, Set<Node>>;\n}\n\nfunction beginPortalRender(runtime: RootRuntime): PortalRenderSnapshot {\n const snapshot = {\n containers: new Set(runtime.portalContainers),\n nodes: clonePortalNodes(runtime.portalNodes),\n };\n runtime.portalContainers.clear();\n runtime.portalNodes.clear();\n return snapshot;\n}\n\nfunction restorePortalRender(\n runtime: RootRuntime,\n snapshot: PortalRenderSnapshot,\n): void {\n runtime.portalContainers = snapshot.containers;\n runtime.portalNodes = snapshot.nodes;\n}\n\nfunction removeStalePortalNodes(\n snapshot: PortalRenderSnapshot,\n runtime: RootRuntime,\n): void {\n for (const container of snapshot.containers) {\n const nodes = snapshot.nodes.get(container) ?? new Set(collectOwnedChildNodes(container));\n const currentNodes = runtime.portalNodes.get(container);\n\n for (const node of nodes) {\n if (currentNodes?.has(node) !== true) {\n removeChildIfPresent(container, node);\n }\n }\n }\n}\n\nfunction clonePortalNodes(source: Map<Element, Set<Node>>): Map<Element, Set<Node>> {\n const clone = new Map<Element, Set<Node>>();\n\n for (const [container, nodes] of source) {\n clone.set(container, new Set(nodes));\n }\n\n return clone;\n}\n\nfunction resolveSelectiveHydrationBoundary(\n container: Element,\n event: Event,\n target: EventTarget,\n manifest: EventHydrationManifest | undefined,\n selectiveHydration: SelectiveHydrationOptions | undefined,\n): SelectiveHydrationBoundary | undefined {\n if (selectiveHydration === undefined) {\n return undefined;\n }\n\n const resumeId = resolveSelectiveHydrationResumeId(\n container,\n event,\n target,\n manifest,\n );\n const boundary =\n resumeId === undefined ? undefined : selectiveHydration.boundaries?.[resumeId];\n\n if (boundary !== undefined && resumeId !== undefined) {\n return {\n element: boundary.element,\n options: boundary.options ?? { resumeId, consumeResumeMarkers: true },\n };\n }\n\n if (selectiveHydration.element === undefined) {\n return undefined;\n }\n\n return {\n element: selectiveHydration.element,\n ...(selectiveHydration.options === undefined\n ? {}\n : { options: selectiveHydration.options }),\n };\n}\n\nfunction resolveSelectiveHydrationOptions(\n event: Event,\n boundary: SelectiveHydrationBoundary,\n): HydrateRootOptions {\n return typeof boundary.options === \"function\"\n ? boundary.options(event)\n : boundary.options ?? {};\n}\n\nfunction resolveSelectiveHydrationResumeId(\n container: Element,\n event: Event,\n target: EventTarget,\n manifest: EventHydrationManifest | undefined,\n): string | undefined {\n if (!(target instanceof Node) || manifest === undefined) {\n return undefined;\n }\n\n const containingResumeId = findContainingResumeBoundaryId(container, target);\n\n if (containingResumeId === undefined) {\n return undefined;\n }\n\n return manifest.events.some(\n (entry) =>\n entry.event === event.type &&\n getManifestResumeId(entry.id) === containingResumeId,\n )\n ? containingResumeId\n : undefined;\n}\n\nfunction getManifestResumeId(id: string): string {\n return id.split(\":\")[0] ?? id;\n}\n"]}
1
+ {"version":3,"file":"root.js","sourceRoot":"","sources":["../src/root.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactCompatNode } from \"./element.js\";\nimport {\n createRootRuntime,\n flushSyncUpdates,\n hasStableExternalStores,\n type RenderPriority,\n type RootRuntime,\n} from \"./hooks.js\";\nimport { collectOwnedChildNodes, removeChildIfPresent } from \"./dom-children.js\";\nimport { commitDevToolsRoot, unmountDevToolsRoot } from \"./devtools.js\";\nimport {\n applyStreamingHydrationFragments,\n findContainingResumeBoundaryId,\n getHydrationScope,\n type HydrationRecoverableErrorInfo,\n type RenderOptions,\n} from \"./hydration.js\";\nimport {\n enableEventHydrationManifestReplay,\n readEventHydrationManifest,\n replayQueuedHydrationEvents,\n type EventHydrationManifest,\n} from \"./event-replay.js\";\nimport {\n ContinuousEventLane,\n SyncLane,\n TransitionLane,\n type Lane,\n} from \"./fiber-lanes.js\";\nimport {\n createContainerFiberRoot,\n enqueueRootRender,\n} from \"./fiber-work-loop.js\";\nimport { commitFiberRoot, detachFiberRefs } from \"./fiber-commit.js\";\nimport {\n canRenderHostFiber,\n commitHydratingHostFiberRoot,\n disposeHostFiberResources,\n renderHydratingHostFiberRoot,\n renderHostFiberRoot,\n} from \"./fiber-host.js\";\nimport type { Fiber, FiberRoot } from \"./fiber.js\";\nimport { renderIntoContainer } from \"./reconciler.js\";\n\n/** Root controller returned by createRoot and hydrateRoot. */\nexport interface Root {\n render(element: ReactCompatNode): void;\n unmount(): void;\n}\n\n/** Options used when creating a client render root. */\nexport interface RootOptions {\n identifierPrefix?: string;\n}\n\n/** Options used when hydrating server-rendered markup. */\nexport interface HydrateRootOptions {\n onRecoverableError?: (\n error: Error,\n info: HydrationRecoverableErrorInfo,\n ) => void;\n resumeId?: string;\n consumeResumeMarkers?: boolean;\n identifierPrefix?: string;\n}\n\n/** Controller for deferred or selective streaming hydration. */\nexport interface StreamingHydrationRoot {\n hydrate(element: ReactCompatNode, options?: HydrateRootOptions): Root;\n dispose(): void;\n}\n\n/** Options for creating a streaming hydration root. */\nexport interface StreamingHydrationRootOptions {\n manifest?: EventHydrationManifest;\n manifestRoot?: ParentNode;\n fragmentRoot?: ParentNode;\n applyOutOfOrderFragments?: boolean;\n observeOutOfOrderFragments?: boolean;\n selectiveHydration?: SelectiveHydrationOptions;\n}\n\n/** Rules that choose which boundary to hydrate after a captured event. */\nexport interface SelectiveHydrationOptions {\n element?: ReactCompatNode;\n options?: HydrateRootOptions | ((event: Event) => HydrateRootOptions);\n boundaries?: Record<string, SelectiveHydrationBoundary>;\n}\n\n/** Element and options used to hydrate one selective boundary. */\nexport interface SelectiveHydrationBoundary {\n element: ReactCompatNode;\n options?: HydrateRootOptions | ((event: Event) => HydrateRootOptions);\n}\n\nconst legacyRoots = new WeakMap<Element, Root>();\n\n/** Creates a root that renders React-compatible nodes into a DOM container. */\nexport function createRoot(\n container: Element,\n options: RootOptions = {},\n): Root {\n const fiberRoot = createContainerFiberRoot(container);\n const runtime = createRootRuntime((priority = \"sync\") => {\n if (runtime.currentElement !== undefined) {\n enqueueRootRender(fiberRoot, runtime.currentElement, laneForRenderPriority(priority), () => {\n if (canRenderHostFiber(runtime.currentElement as ReactCompatNode)) {\n return renderHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n runtime.currentElement as ReactCompatNode,\n );\n }\n\n renderIntoContainer(container, runtime.currentElement, runtime);\n });\n }\n }, options);\n\n return {\n render(element) {\n runtime.currentElement = element;\n enqueueRootRender(fiberRoot, element, SyncLane, () => {\n if (canRenderHostFiber(element)) {\n return renderHostFiberIntoContainer(container, fiberRoot, runtime, element);\n }\n\n renderIntoContainer(container, element, runtime);\n });\n },\n unmount() {\n runtime.currentElement = undefined;\n runtime.dispose();\n detachFiberRefs(fiberRoot.current);\n disposeHostFiberResources(fiberRoot.current);\n runtime.instances.clear();\n unmountDevToolsRoot(container);\n clearElementChildren(container);\n },\n };\n}\n\nfunction renderHostFiberIntoContainer(\n container: Element,\n fiberRoot: FiberRoot,\n runtime: RootRuntime,\n element: ReactCompatNode,\n): Fiber {\n for (let attempt = 0; attempt < 25; attempt += 1) {\n const portalSnapshot = beginPortalRender(runtime);\n runtime.beginRender();\n let committed = false;\n\n try {\n const finishedWork = renderHostFiberRoot(fiberRoot, element, runtime);\n\n if (runtime.renderPhaseUpdate) {\n runtime.renderPhaseUpdate = false;\n continue;\n }\n\n if (!hasStableExternalStores(runtime)) {\n continue;\n }\n\n fiberRoot.finishedWork = finishedWork;\n commitFiberRoot(fiberRoot);\n collectPortalNodes(fiberRoot.current, runtime, portalSnapshot);\n removeStalePortalNodes(portalSnapshot, runtime);\n commitDevToolsRoot(container, fiberRoot);\n runtime.idMode = \"client\";\n committed = true;\n return finishedWork;\n } finally {\n if (!committed) {\n restorePortalRender(runtime, portalSnapshot);\n }\n runtime.endRender(committed);\n if (committed) {\n runtime.flushEffects();\n }\n }\n }\n\n throw new Error(\"Store unstable.\");\n}\n\nfunction renderHydratingHostFiberIntoContainer(\n container: Element,\n fiberRoot: FiberRoot,\n runtime: RootRuntime,\n element: ReactCompatNode,\n options: RenderOptions & {\n resumeId?: string;\n consumeResumeMarkers?: boolean;\n },\n): Fiber {\n for (let attempt = 0; attempt < 25; attempt += 1) {\n const portalSnapshot = beginPortalRender(runtime);\n runtime.beginRender();\n let committed = false;\n\n try {\n const scope = getHydrationScope(container, options.resumeId);\n const finishedWork = renderHydratingHostFiberRoot(\n fiberRoot,\n element,\n runtime,\n scope,\n options,\n );\n\n if (runtime.renderPhaseUpdate) {\n runtime.renderPhaseUpdate = false;\n continue;\n }\n\n if (!hasStableExternalStores(runtime)) {\n continue;\n }\n\n commitHydratingHostFiberRoot(fiberRoot, finishedWork, scope, options);\n fiberRoot.current = finishedWork;\n fiberRoot.current.stateNode = fiberRoot;\n fiberRoot.finishedWork = undefined;\n fiberRoot.workInProgress = undefined;\n fiberRoot.workInProgressRootRenderLanes = 0;\n collectPortalNodes(fiberRoot.current, runtime, portalSnapshot);\n removeStalePortalNodes(portalSnapshot, runtime);\n commitDevToolsRoot(container, fiberRoot);\n runtime.idMode = \"client\";\n committed = true;\n return finishedWork;\n } finally {\n if (!committed) {\n restorePortalRender(runtime, portalSnapshot);\n }\n runtime.endRender(committed);\n if (committed) {\n runtime.flushEffects();\n }\n }\n }\n\n throw new Error(\"Store unstable.\");\n}\n\n/** Renders a React-compatible node into a legacy root container. */\nexport function render(element: ReactCompatNode, container: Element): void {\n const root = legacyRoots.get(container) ?? createRoot(container);\n legacyRoots.set(container, root);\n root.render(element);\n}\n\n/** Runs updates synchronously and flushes pending reactive work before returning. */\nexport function flushSync<T>(callback: () => T): T {\n return flushSyncUpdates(callback);\n}\n\n/** Hydrates server-rendered markup with a React-compatible element tree. */\nexport function hydrateRoot(\n container: Element,\n element: ReactCompatNode,\n options: HydrateRootOptions = {},\n): Root {\n const fiberRoot = createContainerFiberRoot(container);\n const renderOptions: RenderOptions & {\n resumeId?: string;\n consumeResumeMarkers?: boolean;\n } = {\n hydration:\n options.onRecoverableError === undefined\n ? {}\n : { onRecoverableError: options.onRecoverableError },\n ...(options.resumeId === undefined ? {} : { resumeId: options.resumeId }),\n ...(options.consumeResumeMarkers === undefined\n ? {}\n : { consumeResumeMarkers: options.consumeResumeMarkers }),\n };\n const runtime = createRootRuntime((priority = \"sync\") => {\n if (runtime.currentElement !== undefined) {\n enqueueRootRender(fiberRoot, runtime.currentElement, laneForRenderPriority(priority), () => {\n const useHydratingRerender =\n runtime.idMode === \"server\" ||\n renderOptions.resumeId !== undefined ||\n renderOptions.consumeResumeMarkers !== undefined;\n if (canRenderHostFiber(runtime.currentElement as ReactCompatNode)) {\n return useHydratingRerender\n ? renderHydratingHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n runtime.currentElement as ReactCompatNode,\n renderOptions,\n )\n : renderHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n runtime.currentElement as ReactCompatNode,\n );\n }\n\n renderIntoContainer(\n container,\n runtime.currentElement,\n runtime,\n useHydratingRerender ? renderOptions : {},\n );\n });\n }\n }, {\n ...(options.identifierPrefix === undefined\n ? {}\n : { identifierPrefix: options.identifierPrefix }),\n idMode: \"server\",\n });\n\n const root: Root = {\n render(nextElement) {\n runtime.currentElement = nextElement;\n enqueueRootRender(fiberRoot, nextElement, SyncLane, () => {\n if (canRenderHostFiber(nextElement)) {\n return renderHostFiberIntoContainer(container, fiberRoot, runtime, nextElement);\n }\n\n renderIntoContainer(container, nextElement, runtime);\n });\n },\n unmount() {\n runtime.currentElement = undefined;\n runtime.dispose();\n detachFiberRefs(fiberRoot.current);\n disposeHostFiberResources(fiberRoot.current);\n runtime.instances.clear();\n unmountDevToolsRoot(container);\n clearElementChildren(container);\n },\n };\n\n runtime.currentElement = element;\n enqueueRootRender(fiberRoot, element, SyncLane, () => {\n if (canRenderHostFiber(element)) {\n return renderHydratingHostFiberIntoContainer(\n container,\n fiberRoot,\n runtime,\n element,\n renderOptions,\n );\n }\n\n renderIntoContainer(container, element, runtime, renderOptions);\n });\n replayQueuedHydrationEvents(container);\n return root;\n}\n\nfunction laneForRenderPriority(priority: RenderPriority): Lane {\n if (priority === \"transition\") {\n return TransitionLane;\n }\n\n if (priority === \"continuous\") {\n return ContinuousEventLane;\n }\n\n return SyncLane;\n}\n\n/** Creates a root that can hydrate streamed or selectively revealed markup. */\nexport function createStreamingHydrationRoot(\n container: Element,\n options: StreamingHydrationRootOptions = {},\n): StreamingHydrationRoot {\n const fragmentRoot = options.fragmentRoot ?? container.ownerDocument;\n const manifestRoot = options.manifestRoot ?? container;\n const manifest = options.manifest ?? readEventHydrationManifest(manifestRoot);\n\n if (options.applyOutOfOrderFragments !== false) {\n applyStreamingHydrationFragments(fragmentRoot);\n }\n\n let hydratedRoot: Root | undefined;\n const hydrate = (\n element: ReactCompatNode,\n hydrateOptions: HydrateRootOptions = {},\n ): Root => {\n if (options.applyOutOfOrderFragments !== false) {\n applyStreamingHydrationFragments(fragmentRoot);\n }\n\n const root = hydrateRoot(container, element, hydrateOptions);\n hydratedRoot = root;\n disposeReplayCaptureOnce();\n return root;\n };\n const disposeReplayCapture = enableEventHydrationManifestReplay(\n container,\n manifest,\n {\n onCapturedEvent(event, target) {\n const selectiveHydration = options.selectiveHydration;\n const selectiveBoundary = resolveSelectiveHydrationBoundary(\n container,\n event,\n target,\n manifest,\n selectiveHydration,\n );\n\n if (selectiveBoundary === undefined || hydratedRoot !== undefined) {\n return;\n }\n\n hydrate(\n selectiveBoundary.element,\n resolveSelectiveHydrationOptions(event, selectiveBoundary),\n );\n },\n },\n );\n const observer =\n options.observeOutOfOrderFragments === true &&\n typeof MutationObserver !== \"undefined\" &&\n fragmentRoot instanceof Node\n ? new MutationObserver(() => {\n applyStreamingHydrationFragments(fragmentRoot);\n })\n : undefined;\n let replayDisposed = false;\n\n observer?.observe(fragmentRoot as Node, { childList: true, subtree: true });\n\n const disposeReplayCaptureOnce = (): void => {\n if (!replayDisposed) {\n disposeReplayCapture();\n replayDisposed = true;\n }\n };\n\n return {\n hydrate,\n dispose() {\n disposeReplayCaptureOnce();\n observer?.disconnect();\n },\n };\n}\n\n/** Unmounts a legacy root from a container and reports whether anything was removed. */\nexport function unmountComponentAtNode(container: Element): boolean {\n const root = legacyRoots.get(container);\n\n if (root !== undefined) {\n root.unmount();\n legacyRoots.delete(container);\n return true;\n }\n\n const hadChildren = container.childNodes.length > 0;\n clearElementChildren(container);\n return hadChildren;\n}\n\nfunction clearElementChildren(element: Element): void {\n if (typeof element.replaceChildren === \"function\") {\n element.replaceChildren();\n return;\n }\n\n while (element.firstChild !== null) {\n element.removeChild(element.firstChild);\n }\n}\n\nfunction collectPortalNodes(\n fiber: Fiber | undefined,\n runtime: RootRuntime,\n snapshot: PortalRenderSnapshot,\n): void {\n if (\n fiber === undefined ||\n (runtime.portalContainers.size === 0 && snapshot.containers.size === 0)\n ) {\n return;\n }\n\n const deferredSiblings: Fiber[] = [];\n let cursor: Fiber | undefined = fiber;\n\n while (cursor !== undefined) {\n if (cursor.tag === \"portal\" && cursor.stateNode instanceof Element) {\n const nodes = Array.isArray(cursor.memoizedState)\n ? cursor.memoizedState.filter((node): node is Node => node instanceof Node)\n : [];\n runtime.portalContainers.add(cursor.stateNode);\n const ownedNodes = runtime.portalNodes.get(cursor.stateNode) ?? new Set<Node>();\n for (const node of nodes) {\n ownedNodes.add(node);\n }\n runtime.portalNodes.set(cursor.stateNode, ownedNodes);\n }\n\n if (cursor.child !== undefined) {\n if (cursor.sibling !== undefined) {\n deferredSiblings.push(cursor.sibling);\n }\n cursor = cursor.child;\n continue;\n }\n\n cursor = cursor.sibling ?? deferredSiblings.pop();\n }\n}\n\ninterface PortalRenderSnapshot {\n containers: Set<Element>;\n nodes: Map<Element, Set<Node>>;\n}\n\nfunction beginPortalRender(runtime: RootRuntime): PortalRenderSnapshot {\n const snapshot = {\n containers: new Set(runtime.portalContainers),\n nodes: clonePortalNodes(runtime.portalNodes),\n };\n runtime.portalContainers.clear();\n runtime.portalNodes.clear();\n return snapshot;\n}\n\nfunction restorePortalRender(\n runtime: RootRuntime,\n snapshot: PortalRenderSnapshot,\n): void {\n runtime.portalContainers = snapshot.containers;\n runtime.portalNodes = snapshot.nodes;\n}\n\nfunction removeStalePortalNodes(\n snapshot: PortalRenderSnapshot,\n runtime: RootRuntime,\n): void {\n for (const container of snapshot.containers) {\n const nodes = snapshot.nodes.get(container) ?? new Set(collectOwnedChildNodes(container));\n const currentNodes = runtime.portalNodes.get(container);\n\n for (const node of nodes) {\n if (currentNodes?.has(node) !== true) {\n removeChildIfPresent(container, node);\n }\n }\n }\n}\n\nfunction clonePortalNodes(source: Map<Element, Set<Node>>): Map<Element, Set<Node>> {\n const clone = new Map<Element, Set<Node>>();\n\n for (const [container, nodes] of source) {\n clone.set(container, new Set(nodes));\n }\n\n return clone;\n}\n\nfunction resolveSelectiveHydrationBoundary(\n container: Element,\n event: Event,\n target: EventTarget,\n manifest: EventHydrationManifest | undefined,\n selectiveHydration: SelectiveHydrationOptions | undefined,\n): SelectiveHydrationBoundary | undefined {\n if (selectiveHydration === undefined) {\n return undefined;\n }\n\n const resumeId = resolveSelectiveHydrationResumeId(\n container,\n event,\n target,\n manifest,\n );\n const boundary =\n resumeId === undefined ? undefined : selectiveHydration.boundaries?.[resumeId];\n\n if (boundary !== undefined && resumeId !== undefined) {\n return {\n element: boundary.element,\n options: boundary.options ?? { resumeId, consumeResumeMarkers: true },\n };\n }\n\n if (selectiveHydration.element === undefined) {\n return undefined;\n }\n\n return {\n element: selectiveHydration.element,\n ...(selectiveHydration.options === undefined\n ? {}\n : { options: selectiveHydration.options }),\n };\n}\n\nfunction resolveSelectiveHydrationOptions(\n event: Event,\n boundary: SelectiveHydrationBoundary,\n): HydrateRootOptions {\n return typeof boundary.options === \"function\"\n ? boundary.options(event)\n : boundary.options ?? {};\n}\n\nfunction resolveSelectiveHydrationResumeId(\n container: Element,\n event: Event,\n target: EventTarget,\n manifest: EventHydrationManifest | undefined,\n): string | undefined {\n if (!(target instanceof Node) || manifest === undefined) {\n return undefined;\n }\n\n const containingResumeId = findContainingResumeBoundaryId(container, target);\n\n if (containingResumeId === undefined) {\n return undefined;\n }\n\n return manifest.events.some(\n (entry) =>\n entry.event === event.type &&\n getManifestResumeId(entry.id) === containingResumeId,\n )\n ? containingResumeId\n : undefined;\n}\n\nfunction getManifestResumeId(id: string): string {\n return id.split(\":\")[0] ?? id;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reckona/mreact-compat",
3
- "version": "0.0.172",
3
+ "version": "0.0.173",
4
4
  "description": "React-compatible runtime implementation for mreact.",
5
5
  "keywords": [
6
6
  "compatibility",
@@ -69,7 +69,7 @@
69
69
  "access": "public"
70
70
  },
71
71
  "dependencies": {
72
- "@reckona/mreact-reactive-core": "0.0.172",
73
- "@reckona/mreact-shared": "0.0.172"
72
+ "@reckona/mreact-reactive-core": "0.0.173",
73
+ "@reckona/mreact-shared": "0.0.173"
74
74
  }
75
75
  }
@@ -1,6 +1,6 @@
1
1
  import type { Fiber, FiberRoot } from "./fiber.js";
2
2
  import { ChildDeletion } from "./fiber-flags.js";
3
- import { commitHostFiberRoot, disposeHostFiberResources } from "./fiber-host.js";
3
+ import { commitHostFiberRoot, disposeUnretainedHostFiberResources } from "./fiber-host.js";
4
4
  import { markRootFinished } from "./fiber-lanes.js";
5
5
  import { runWithHostCommit } from "./hooks.js";
6
6
  import type { RenderOptions } from "./hydration.js";
@@ -122,7 +122,7 @@ function detachDeletedFiberSubtrees(
122
122
  }
123
123
 
124
124
  function detachFiberSubtree(fiber: Fiber, retained: ReadonlySet<Fiber>): void {
125
- disposeHostFiberResources(fiber);
125
+ disposeUnretainedHostFiberResources(fiber, retained);
126
126
 
127
127
  const stack = [fiber];
128
128
  const seen = new Set<Fiber>();
package/src/fiber-host.ts CHANGED
@@ -3,6 +3,7 @@ export {
3
3
  commitHostFiberRoot,
4
4
  commitHydratingHostFiberRoot,
5
5
  disposeHostFiberResources,
6
+ disposeUnretainedHostFiberResources,
6
7
  renderHostFiberRoot,
7
8
  renderHydratingHostFiberRoot,
8
9
  } from "./host-reconciler.js";
package/src/hooks.ts CHANGED
@@ -136,6 +136,7 @@ type HookSlot =
136
136
  | {
137
137
  kind: "state";
138
138
  value: unknown;
139
+ dispatch?: (value: unknown) => void;
139
140
  hostCommitValue?: unknown;
140
141
  textBinding?: ReactiveTextBinding;
141
142
  stateBinding?: ReactiveStateBinding;
@@ -155,7 +156,13 @@ type HookSlot =
155
156
  update: (state: unknown, payload: unknown) => unknown;
156
157
  dispatch?: (payload: unknown) => void;
157
158
  }
158
- | { kind: "store"; value: unknown; hasMounted?: boolean; hostCommitValue?: unknown }
159
+ | {
160
+ kind: "store";
161
+ value: unknown;
162
+ getSnapshot?: () => unknown;
163
+ hasMounted?: boolean;
164
+ hostCommitValue?: unknown;
165
+ }
159
166
  | { kind: "ref"; value: { current: unknown } }
160
167
  | { kind: "memo"; value: unknown; deps?: readonly unknown[] }
161
168
  | { kind: "debug"; value: unknown }
@@ -857,11 +864,11 @@ export function useState<T>(
857
864
  throw new Error("Hook order changed between renders.");
858
865
  }
859
866
 
860
- const setState = (value: T | ((previous: T) => T)): void => {
867
+ slot.dispatch ??= (value: unknown): void => {
861
868
  const previousValue = slot.value;
862
869
  const nextValue =
863
870
  typeof value === "function"
864
- ? (value as (previous: T) => T)(slot.value as T)
871
+ ? (value as (previous: unknown) => unknown)(slot.value)
865
872
  : value;
866
873
 
867
874
  if (Object.is(slot.value, nextValue)) {
@@ -905,6 +912,7 @@ export function useState<T>(
905
912
 
906
913
  scheduleInstanceUpdate(runtime, instance, { deferSync: typeof value === "function" });
907
914
  };
915
+ const setState = slot.dispatch as (value: T | ((previous: T) => T)) => void;
908
916
 
909
917
  recordDevToolsHook("useState", {
910
918
  kind: "state",
@@ -1420,6 +1428,7 @@ export function useSyncExternalStore<T>(
1420
1428
  if (slot.kind !== "store") {
1421
1429
  throw new Error("Hook order changed between renders.");
1422
1430
  }
1431
+ slot.getSnapshot = getSnapshot as () => unknown;
1423
1432
 
1424
1433
  const isHydrationMount =
1425
1434
  runtime.idMode === "server" && slot.hasMounted !== true && getServerSnapshot !== undefined;
@@ -1439,7 +1448,7 @@ export function useSyncExternalStore<T>(
1439
1448
  return;
1440
1449
  }
1441
1450
 
1442
- const nextSnapshot = getSnapshot();
1451
+ const nextSnapshot = (slot.getSnapshot ?? getSnapshot)();
1443
1452
 
1444
1453
  if (!Object.is(slot.value, nextSnapshot)) {
1445
1454
  if (hookRenderState.hostCommitDepth > 0 && !Object.hasOwn(slot, "hostCommitValue")) {
@@ -1473,7 +1482,7 @@ export function useSyncExternalStore<T>(
1473
1482
  return () => {
1474
1483
  unsubscribe();
1475
1484
  };
1476
- }, [subscribe, getSnapshot]));
1485
+ }, [subscribe]));
1477
1486
 
1478
1487
  recordDevToolsHook("useSyncExternalStore", {
1479
1488
  kind: "store",
@@ -370,6 +370,18 @@ export function disposeHostFiberResources(fiber: Fiber | undefined): void {
370
370
  disposeHostFiberChildResources(fiber.child, seen);
371
371
  }
372
372
 
373
+ export function disposeUnretainedHostFiberResources(
374
+ fiber: Fiber | undefined,
375
+ retained: ReadonlySet<Fiber>,
376
+ ): void {
377
+ if (fiber === undefined || fiber.hasDisposableResources !== true || retained.has(fiber)) {
378
+ return;
379
+ }
380
+
381
+ const seen = new Set<unknown>();
382
+ disposeUnretainedHostFiberSubtreeResources(fiber, seen, retained);
383
+ }
384
+
373
385
  function disposeHostFiberChildResources(
374
386
  fiber: Fiber | undefined,
375
387
  seen: Set<unknown>,
@@ -389,6 +401,26 @@ function disposeHostFiberChildResources(
389
401
  }
390
402
  }
391
403
 
404
+ function disposeUnretainedHostFiberSubtreeResources(
405
+ fiber: Fiber | undefined,
406
+ seen: Set<unknown>,
407
+ retained: ReadonlySet<Fiber>,
408
+ ): void {
409
+ if (fiber === undefined || retained.has(fiber) || fiber.hasDisposableResources !== true) {
410
+ return;
411
+ }
412
+
413
+ if (fiber.tag === "reactive-dom-block") {
414
+ disposeReactiveDomBlockState(fiber.stateNode, seen);
415
+ }
416
+
417
+ let child = fiber.child;
418
+ while (child !== undefined) {
419
+ disposeUnretainedHostFiberSubtreeResources(child, seen, retained);
420
+ child = child.sibling;
421
+ }
422
+ }
423
+
392
424
  function reconcileHostChild(
393
425
  parent: Fiber,
394
426
  currentFirstChild: Fiber | undefined,
@@ -2675,7 +2707,7 @@ function commitHostDirtyFiber(
2675
2707
  : container instanceof Element
2676
2708
  ? container
2677
2709
  : eventRoot;
2678
- const portalOptions = withPortalDocumentRef(options, container);
2710
+ const portalOptions = withPortalHostOptions(options, container);
2679
2711
 
2680
2712
  if (
2681
2713
  fiber.childListChanged ||
@@ -3266,7 +3298,7 @@ function commitHostFiber(
3266
3298
  : container instanceof Element
3267
3299
  ? container
3268
3300
  : eventRoot;
3269
- const portalOptions = withPortalDocumentRef(options, container);
3301
+ const portalOptions = withPortalHostOptions(options, container);
3270
3302
  const childNodes = commitHostChildren(
3271
3303
  fiber.child,
3272
3304
  container as ParentNode,
@@ -4220,7 +4252,11 @@ function createPortalFiber(
4220
4252
  portal.children,
4221
4253
  runtime,
4222
4254
  `${path}.portal`,
4223
- { ...options, documentRef: portal.container.ownerDocument },
4255
+ {
4256
+ ...options,
4257
+ documentRef: portal.container.ownerDocument,
4258
+ namespace: namespaceForPortalContainer(portal.container),
4259
+ },
4224
4260
  );
4225
4261
  fiber.child = childResult.fiber;
4226
4262
  fiber.return = parent;
@@ -4697,10 +4733,11 @@ function isPortalHostContainer(value: unknown): value is ParentNode {
4697
4733
  );
4698
4734
  }
4699
4735
 
4700
- function withPortalDocumentRef(
4736
+ function withPortalHostOptions(
4701
4737
  options: RenderOptions,
4702
4738
  container: ParentNode,
4703
- ): RenderOptions & { documentRef?: Document | CustomHostDocument } {
4739
+ ): RenderOptions & { documentRef?: Document | CustomHostDocument; namespace: HostNamespace } {
4740
+ const namespace = namespaceForPortalContainer(container);
4704
4741
  const ownerDocument = (container as { ownerDocument?: unknown }).ownerDocument;
4705
4742
  if (
4706
4743
  typeof ownerDocument === "object" &&
@@ -4710,10 +4747,19 @@ function withPortalDocumentRef(
4710
4747
  return {
4711
4748
  ...options,
4712
4749
  documentRef: ownerDocument as Document | CustomHostDocument,
4750
+ namespace,
4713
4751
  };
4714
4752
  }
4715
4753
 
4716
- return options;
4754
+ return { ...options, namespace };
4755
+ }
4756
+
4757
+ function namespaceForPortalContainer(container: ParentNode): HostNamespace {
4758
+ if (container instanceof SVGElement && container.localName !== "foreignObject") {
4759
+ return "svg";
4760
+ }
4761
+
4762
+ return "html";
4717
4763
  }
4718
4764
 
4719
4765
  function committedHostNodesFromState(state: unknown): Node[] {
package/src/root.ts CHANGED
@@ -166,7 +166,7 @@ function renderHostFiberIntoContainer(
166
166
 
167
167
  fiberRoot.finishedWork = finishedWork;
168
168
  commitFiberRoot(fiberRoot);
169
- collectPortalNodes(fiberRoot.current, runtime);
169
+ collectPortalNodes(fiberRoot.current, runtime, portalSnapshot);
170
170
  removeStalePortalNodes(portalSnapshot, runtime);
171
171
  commitDevToolsRoot(container, fiberRoot);
172
172
  runtime.idMode = "client";
@@ -226,7 +226,7 @@ function renderHydratingHostFiberIntoContainer(
226
226
  fiberRoot.finishedWork = undefined;
227
227
  fiberRoot.workInProgress = undefined;
228
228
  fiberRoot.workInProgressRootRenderLanes = 0;
229
- collectPortalNodes(fiberRoot.current, runtime);
229
+ collectPortalNodes(fiberRoot.current, runtime, portalSnapshot);
230
230
  removeStalePortalNodes(portalSnapshot, runtime);
231
231
  commitDevToolsRoot(container, fiberRoot);
232
232
  runtime.idMode = "client";
@@ -475,8 +475,15 @@ function clearElementChildren(element: Element): void {
475
475
  }
476
476
  }
477
477
 
478
- function collectPortalNodes(fiber: Fiber | undefined, runtime: RootRuntime): void {
479
- if (fiber === undefined || runtime.portalContainers.size === 0) {
478
+ function collectPortalNodes(
479
+ fiber: Fiber | undefined,
480
+ runtime: RootRuntime,
481
+ snapshot: PortalRenderSnapshot,
482
+ ): void {
483
+ if (
484
+ fiber === undefined ||
485
+ (runtime.portalContainers.size === 0 && snapshot.containers.size === 0)
486
+ ) {
480
487
  return;
481
488
  }
482
489