@bgub/fig-reconciler 0.1.0-alpha.1 → 0.1.0-alpha.2
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/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/commit-index.ts","../src/devtools-internal.ts","../src/hook-kinds.ts","../src/hook-queue.ts","../src/host-content.ts","../src/root-data-store.ts","../src/index.ts"],"sourcesContent":["import { CommitIndexedFlag, type Flag, NoFlags } from \"./fiber-work.ts\";\n\ninterface CommitIndexNode {\n flags: Flag;\n}\n\nexport type CommitIndex<Node extends CommitIndexNode> = Node[];\n\nexport function recordCommitWork<Node extends CommitIndexNode>(\n index: CommitIndex<Node>,\n node: Node,\n flags: Flag = NoFlags,\n): void {\n node.flags |= flags;\n if ((node.flags & CommitIndexedFlag) !== 0) return;\n node.flags |= CommitIndexedFlag;\n index.push(node);\n}\n\nexport function rollbackCommitIndex<Node extends CommitIndexNode>(\n index: CommitIndex<Node>,\n checkpoint: number | undefined,\n): void {\n if (checkpoint === undefined || checkpoint >= index.length) return;\n for (let offset = checkpoint; offset < index.length; offset += 1) {\n index[offset].flags &= ~CommitIndexedFlag;\n }\n index.length = checkpoint;\n}\n\nexport function clearCommitIndex<Node extends CommitIndexNode>(\n index: CommitIndex<Node>,\n): void {\n for (const node of index) node.flags &= ~CommitIndexedFlag;\n index.length = 0;\n}\n","import { type ElementType, type FigContext, Fragment } from \"@bgub/fig\";\nimport type { FigDevtoolsGlobalHook } from \"./devtools.ts\";\n\nexport function devtoolsTypeName(\n type: ElementType | FigContext<unknown> | null,\n fallback: string,\n): string {\n if (typeof type === \"string\") return type;\n if (type === Fragment) return \"Fragment\";\n if (typeof type !== \"function\") return fallback;\n\n const namedType = type as {\n displayName?: unknown;\n name?: unknown;\n };\n\n if (typeof namedType.displayName === \"string\" && namedType.displayName !== \"\")\n return namedType.displayName;\n if (typeof namedType.name === \"string\" && namedType.name !== \"\")\n return namedType.name;\n\n return fallback;\n}\n\nexport function getFigDevtoolsGlobalHook(): FigDevtoolsGlobalHook | null {\n const globalWithHook = globalThis as typeof globalThis & {\n __FIG_DEVTOOLS_GLOBAL_HOOK__?: unknown;\n };\n const hook = globalWithHook.__FIG_DEVTOOLS_GLOBAL_HOOK__;\n\n if (\n typeof hook !== \"object\" ||\n hook === null ||\n !(\"inject\" in hook) ||\n !(\"onCommitRoot\" in hook)\n ) {\n return null;\n }\n\n const candidate = hook as Partial<FigDevtoolsGlobalHook>;\n if (\n typeof candidate.inject !== \"function\" ||\n typeof candidate.onCommitRoot !== \"function\"\n ) {\n return null;\n }\n\n return candidate as FigDevtoolsGlobalHook;\n}\n","// Effect hooks reuse their phase as their hook kind. Keeping the shared\n// numeric vocabulary here lets rendering and DevTools interpret hooks without\n// making either module depend on the other's implementation.\nexport const ReactiveEffect = 0;\nexport const BeforePaintEffect = 1;\nexport const BeforeLayoutEffect = 2;\n\nexport type EffectPhase =\n | typeof ReactiveEffect\n | typeof BeforePaintEffect\n | typeof BeforeLayoutEffect;\n\nexport const StateHook = 3;\nexport const ActionStateHook = 4;\nexport const IdHook = 5;\nexport const DeferredValueHook = 6;\nexport const ExternalStoreHook = 7;\nexport const MemoHook = 8;\nexport const TransitionHook = 9;\nexport const StableEventHook = 10;\n\nexport type HookKind = number;\n\nexport const hookKindNames = [\n \"reactive\",\n \"before-paint\",\n \"before-layout\",\n \"state\",\n \"action-state\",\n \"id\",\n \"deferred-value\",\n \"external-store\",\n \"memo\",\n \"transition\",\n \"stable-event\",\n] as const;\n\nexport function isEffectHook(kind: HookKind): boolean {\n return kind <= BeforeLayoutEffect;\n}\n","import type { StateSetter } from \"@bgub/fig\";\nimport { type Lane, NoLane } from \"./lanes.ts\";\n\nexport type StateUpdate<S> = S | ((previous: S) => S);\n\nexport class HookUpdate<S> {\n next: HookUpdate<S> = this;\n\n constructor(\n readonly action: StateUpdate<S>,\n public lane: Lane,\n ) {}\n}\n\nexport interface HookQueue<S> {\n pending: HookUpdate<S> | null;\n dispatch: StateSetter<S> | null;\n}\n\n// Hook queues are circular lists whose tail points at the first update. These\n// operations keep the pointer manipulation in one place so render retries and\n// rebasing share exactly the same ordering rules.\nexport function mergeQueues<S>(\n baseQueue: HookUpdate<S> | null,\n pendingQueue: HookUpdate<S>,\n): HookUpdate<S> {\n if (baseQueue === null) return pendingQueue;\n\n const baseFirst = baseQueue.next;\n const pendingFirst = pendingQueue.next;\n baseQueue.next = pendingFirst;\n pendingQueue.next = baseFirst;\n return pendingQueue;\n}\n\nexport function cloneUpdateNode<S>(update: HookUpdate<S>): HookUpdate<S> {\n return new HookUpdate(update.action, update.lane);\n}\n\nexport function cloneQueue<S>(\n queue: HookUpdate<S> | null,\n): HookUpdate<S> | null {\n return queue === null ? null : cloneQueueNodes(queue);\n}\n\nexport function cloneQueueNodes<S>(queue: HookUpdate<S>): HookUpdate<S> {\n const first = queue.next;\n let clone = cloneUpdateNode(first);\n let update = first.next;\n\n while (update !== first) {\n clone = mergeQueues(clone, cloneUpdateNode(update));\n update = update.next;\n }\n\n return clone;\n}\n\nexport function clearQueueLanes<S>(queue: HookUpdate<S>): void {\n let update = queue.next;\n do {\n update.lane = NoLane;\n update = update.next;\n } while (update !== queue.next);\n}\n","import { type FigNode, isValidElement, type Props } from \"@bgub/fig\";\nimport { invalidChildError, isPortal, isThenable } from \"@bgub/fig/internal\";\n\nconst EmptyHostTextContent = Symbol(\"fig.empty-host-text-content\");\nconst NonTextHostContent = Symbol(\"fig.non-text-host-content\");\n\ntype HostTextContent =\n | string\n | typeof EmptyHostTextContent\n | typeof NonTextHostContent;\n\nexport function hostTextContent(children: unknown): string | null {\n const text = hostTextContentPart(children as FigNode);\n return typeof text === \"string\" ? text : null;\n}\n\nexport function hostChildren(props: Props): FigNode {\n if (!hasUnsafeHTML(props)) return props.children as FigNode;\n if (hasRenderableChild(props.children as FigNode)) {\n throw new Error(\"Host elements cannot have both unsafeHTML and children.\");\n }\n return null;\n}\n\nexport function hasUnsafeHTML(props: Props): boolean {\n return !emptyValue(props.unsafeHTML);\n}\n\nfunction hasRenderableChild(node: FigNode): boolean {\n if (Array.isArray(node)) return node.some(hasRenderableChild);\n return !emptyChild(node);\n}\n\nfunction emptyValue(value: unknown): boolean {\n return value === null || value === undefined || value === false;\n}\n\nfunction emptyChild(value: unknown): boolean {\n return value === null || value === undefined || typeof value === \"boolean\";\n}\n\nfunction hostTextContentPart(node: FigNode): HostTextContent {\n if (Array.isArray(node)) {\n let hasText = false;\n let text = \"\";\n\n for (const child of node) {\n const childText = hostTextContentPart(child);\n if (childText === NonTextHostContent) return NonTextHostContent;\n if (childText === EmptyHostTextContent) continue;\n\n hasText = true;\n text += childText;\n }\n\n return hasText ? text : EmptyHostTextContent;\n }\n\n if (node === null || node === undefined || typeof node === \"boolean\") {\n return EmptyHostTextContent;\n }\n\n if (typeof node === \"string\" || typeof node === \"number\") {\n return String(node);\n }\n\n if (isValidElement(node) || isPortal(node) || isThenable(node)) {\n return NonTextHostContent;\n }\n\n throw invalidChildError(node);\n}\n","import type {\n DataRefreshResult,\n DataResource,\n DataResourceKey,\n FigDataHydrationEntry,\n} from \"@bgub/fig\";\nimport {\n type FigDataStore,\n type FigDataStoreFactory,\n type FigDataStoreHost,\n setCurrentDataStore,\n} from \"@bgub/fig/internal\";\n\n// Renderer bundles do not import @bgub/fig. Resources created by that package\n// carry the store factory on this symbol, so a root can buffer hydration data\n// until the first real data-resource operation installs the implementation.\nconst DataStoreFactorySymbol = Symbol.for(\"fig.data-store-factory\");\n\nexport function createRootDataStore(host: FigDataStoreHost): FigDataStore {\n let inner: FigDataStore | null = null;\n let buffered: FigDataHydrationEntry[] | null = null;\n let disposed = false;\n\n function installStore<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ): FigDataStore {\n if (inner !== null) return inner;\n if (disposed) {\n throw new Error(\"Data resource APIs require a live Fig root.\");\n }\n\n const factory = (\n resource as DataResource & Record<symbol, FigDataStoreFactory>\n )[DataStoreFactorySymbol];\n if (factory === undefined) {\n throw new Error(\"Data resource APIs require @bgub/fig.\");\n }\n\n inner = factory(host);\n if (buffered !== null) inner.hydrate(buffered);\n buffered = null;\n return inner;\n }\n\n const store: FigDataStore = {\n hydrate(entries: readonly FigDataHydrationEntry[]): void {\n if (inner !== null) {\n inner.hydrate(entries);\n return;\n }\n (buffered ??= []).push(...entries);\n },\n run<T>(callback: () => T): T {\n if (inner !== null) return inner.run(callback);\n\n const previousStore = setCurrentDataStore(store);\n try {\n return callback();\n } finally {\n setCurrentDataStore(previousStore);\n }\n },\n readData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n owner: object,\n ): TValue {\n return installStore(resource).readData(resource, args, owner);\n },\n preloadData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n ): void {\n installStore(resource).preloadData(resource, ...args);\n },\n ensureData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n ): Promise<TValue> {\n return installStore(resource).ensureData(resource, ...args);\n },\n invalidateData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n ): void {\n installStore(resource).invalidateData(resource, ...args);\n },\n invalidateDataError(error: unknown): boolean {\n return inner?.invalidateDataError(error) ?? false;\n },\n invalidateDataKey(key: DataResourceKey): void {\n inner?.invalidateDataKey(key);\n },\n invalidateDataPrefix(prefix: DataResourceKey): void {\n inner?.invalidateDataPrefix(prefix);\n },\n refreshData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n ): Promise<DataRefreshResult<TValue>> {\n return installStore(resource).refreshData(resource, ...args);\n },\n commitDataDependencies(owner: object, previousOwner: object | null): void {\n inner?.commitDataDependencies(owner, previousOwner);\n },\n deleteDataOwner(owner: object): void {\n inner?.deleteDataOwner(owner);\n },\n releaseDataOwner(owner: object): void {\n inner?.releaseDataOwner(owner);\n },\n resetDataDependencies(owner: object): void {\n inner?.resetDataDependencies(owner);\n },\n dispose(): void {\n disposed = true;\n inner?.dispose();\n inner = null;\n buffered = null;\n },\n inspectDataEntries() {\n return inner?.inspectDataEntries() ?? [];\n },\n inspectDataDependencyCanonicalKeys(owner: object) {\n return inner?.inspectDataDependencyCanonicalKeys(owner) ?? [];\n },\n snapshot() {\n return inner?.snapshot() ?? buffered?.slice() ?? [];\n },\n };\n\n return store;\n}\n","import {\n type ActionStateAction,\n type ActionStateRunner,\n type AwaitedFigNode,\n type DataResource,\n type DataResourceKeyInput,\n type DependencyList,\n type EffectCallback,\n type ElementType,\n type ErrorBoundaryProps,\n type ErrorInfo,\n type ExternalStoreSubscribe,\n type FigAssetResourceList,\n type FigContext,\n type FigDataHydrationEntry,\n type FigDataStoreController,\n type FigDataStoreHandle,\n type FigNode,\n type FigPortal,\n isValidElement,\n type Props,\n type StartTransition,\n type StateSetter,\n type TransitionOptions,\n type ViewTransitionProps,\n} from \"@bgub/fig\";\nimport {\n collectChildren,\n attachDataStore,\n dataResourceKeysForError,\n type FigDataStore,\n invalidChildError,\n isPortal,\n isThenable,\n type StableEventCallerArgs,\n type NormalizedChild,\n type RenderDispatcher,\n readThenable,\n setCurrentDataStore,\n setCurrentDispatcher,\n setTransitionHandler,\n trackThenable,\n type Thenable,\n} from \"@bgub/fig/internal\";\nimport {\n clearCommitIndex,\n type CommitIndex,\n recordCommitWork,\n rollbackCommitIndex,\n} from \"./commit-index.ts\";\nimport { emitDevtoolsCommit } from \"./devtools-snapshot.ts\";\nimport { devtoolsTypeName } from \"./devtools-internal.ts\";\nimport type {\n ReconcilerCommitContext,\n ReconcilerCommitCoordinator,\n ReconcilerWorkPriority,\n} from \"./commit-coordinator.ts\";\nimport type {\n ViewTransitionPlannerFiber,\n ViewTransitionPlannerRoot,\n ViewTransitionPlannerState,\n} from \"./view-transition-planner-types.ts\";\nimport {\n ActivityTag,\n AssetsTag,\n ContextProviderTag,\n ErrorBoundaryTag,\n FragmentTag,\n FunctionTag,\n HostTag,\n PortalTag,\n RootTag,\n SuspenseTag,\n tagFor,\n type Tag,\n TextTag,\n ThenableTag,\n ViewTransitionTag,\n} from \"./fiber-tags.ts\";\nimport { walkFiberForest, walkFiberSubtree } from \"./fiber-traversal.ts\";\nimport {\n AssetFlag,\n AdoptedFlag,\n AssembledFlag,\n childSubtreeFlags,\n clearTransientFlags,\n ContextPropagationFlag,\n DeletionFlag,\n EffectFlag,\n HoistedStaticFlag,\n type Flag,\n HostUpdateMask,\n HydrationFlag,\n MutationMask,\n NoFlags,\n PlacementFlag,\n StaticFlagsMask,\n StoreConsistencyFlag,\n TextContentFlag,\n UpdateFlag,\n ViewTransitionStaticFlag,\n VisibilityFlag,\n} from \"./fiber-work.ts\";\nimport {\n ActionStateHook,\n BeforeLayoutEffect,\n BeforePaintEffect,\n DeferredValueHook,\n type EffectPhase,\n ExternalStoreHook,\n hookKindNames,\n type HookKind,\n IdHook,\n isEffectHook,\n MemoHook,\n ReactiveEffect,\n StableEventHook,\n StateHook,\n TransitionHook,\n} from \"./hook-kinds.ts\";\nimport {\n clearQueueLanes,\n cloneQueue,\n cloneQueueNodes,\n cloneUpdateNode,\n type HookQueue,\n HookUpdate,\n mergeQueues,\n type StateUpdate,\n} from \"./hook-queue.ts\";\nimport {\n hasUnsafeHTML,\n hostChildren,\n hostTextContent,\n} from \"./host-content.ts\";\nimport {\n AllTransitionLanes,\n claimNextRetryLane,\n claimNextTransitionLane,\n createLaneMap,\n DefaultHydrationLane,\n DefaultLane,\n DeferredLane,\n getHighestPriorityLane,\n getLaneSchedulerPriority,\n getNextLanes,\n IdleLane,\n InputContinuousLane,\n includesOnlyTransitions,\n includesSomeLane,\n isSyncLane,\n type Lane,\n type LaneRoot,\n type Lanes,\n markRootEntangled,\n markRootFinished,\n markRootPinged,\n markRootSuspended,\n markRootUpdated,\n markStarvedLanesAsExpired,\n mergeLanes,\n NoLane,\n NoLanes,\n NoTimestamp,\n OffscreenLane,\n RetryLanes,\n requestUpdateLane,\n runWithPriority,\n runWithTransition,\n runWithTransitionLane,\n transitionTypeHooks,\n SelectiveHydrationLane,\n SyncLane,\n} from \"./lanes.ts\";\nimport {\n hasRefreshHandler,\n matchesComponentFamily,\n refreshFamilyFor,\n resolveLatestType,\n runWithStaleRefreshFamilies,\n} from \"./refresh-internal.ts\";\nimport type { RefreshUpdate } from \"./refresh.ts\";\nexport type { RefreshUpdate } from \"./refresh.ts\";\nimport { createRootDataStore } from \"./root-data-store.ts\";\nimport {\n NormalPriority,\n now,\n requestPaint,\n type ScheduledTask,\n scheduleCallback,\n shouldYieldToHost,\n} from \"./scheduler.ts\";\n\nexport type EventPriority = \"default\" | \"continuous\" | \"discrete\";\n\nexport function runWithEventPriority<T>(\n priority: EventPriority,\n callback: () => T,\n): T {\n return runWithPriority(eventPriorityLane(priority), callback);\n}\n\nfunction eventPriorityLane(priority: EventPriority): Lane {\n switch (priority) {\n case \"discrete\":\n return SyncLane;\n case \"continuous\":\n return InputContinuousLane;\n case \"default\":\n return DefaultLane;\n }\n}\n\nfunction hydrationLaneForPriority(priority: EventPriority): Lane {\n return priority === \"discrete\" ? SyncLane : SelectiveHydrationLane;\n}\n\ndeclare const __FIG_DEV__: boolean | undefined;\n\nconst __DEV__ = typeof __FIG_DEV__ === \"boolean\" ? __FIG_DEV__ : false;\n\nsetTransitionHandler(runWithTransition);\n\ntype Component = (props: Props & { children?: FigNode }) => FigNode;\ntype HostNode<Instance, TextInstance> = Instance | TextInstance;\ntype Parent<Container, Instance> = Container | Instance;\ntype FiberType = ElementType | FigContext<unknown> | null;\n\nexport interface DehydratedSuspenseError {\n digest?: string;\n message?: string;\n}\n\nexport interface DehydratedSuspenseBoundary<\n Instance = unknown,\n TextInstance = unknown,\n> {\n error?: DehydratedSuspenseError | null;\n id: string | null;\n start: HostNode<Instance, TextInstance>;\n end: HostNode<Instance, TextInstance>;\n status: \"completed\" | \"pending\" | \"client-rendered\";\n forceClientRender: boolean;\n}\n\ndeclare const AssetResourceOwnerBrand: unique symbol;\n\n/** Stable opaque identity for one fiber's asset-resource ownership. */\nexport interface AssetResourceOwner {\n readonly [AssetResourceOwnerBrand]: true;\n}\n\nexport interface HostConfig<Container, Instance, TextInstance> {\n createInstance(\n type: string,\n props: Props,\n parent: Parent<Container, Instance>,\n ): Instance;\n createTextInstance(text: string): TextInstance;\n validateInstanceNesting?(\n type: string,\n props: Props,\n ancestors: readonly string[],\n ): void;\n validateTextNesting?(text: string, ancestors: readonly string[]): void;\n containerType?(container: Parent<Container, Instance>): string | null;\n appendInitialChild?(\n parent: Instance,\n child: HostNode<Instance, TextInstance>,\n ): void;\n finalizeInitialInstance?(instance: Instance, props: Props): void;\n setTextContent?(instance: Instance, text: string): void;\n getFirstHydratableChild?(\n parent: Parent<Container, Instance>,\n props?: Props,\n ): HostNode<Instance, TextInstance> | null;\n getNextHydratableSibling?(\n node: HostNode<Instance, TextInstance>,\n ): HostNode<Instance, TextInstance> | null;\n canHydrateInstance?(\n node: HostNode<Instance, TextInstance>,\n type: string,\n props: Props,\n ): boolean;\n canHydrateTextInstance?(\n node: HostNode<Instance, TextInstance>,\n text: string,\n suppressHydrationWarning?: boolean,\n ): boolean;\n // True when unmatched DOM siblings at the end of this hydrated host belong\n // to an out-of-band owner and must remain outside the reconciled tree.\n canRetainHydrationTail?(instance: Instance): boolean;\n // Resolve an out-of-band host instance using the real host parent. Returning\n // an instance fixes the fiber's placement as hoisted for its lifetime: it\n // does not consume a hydration cursor node and commit acquires/releases it\n // through the hooks below instead of insertBefore/removeChild. Returning\n // null leaves the fiber on the ordinary hydrate/create path.\n resolveHoistedInstance?(\n type: string,\n props: Props,\n parent: Parent<Container, Instance>,\n ): Instance | null;\n // May return a different instance when the fiber's identity already\n // resolves to a live shared instance (e.g. one inserted while this render\n // was suspended); the fiber adopts the returned instance.\n commitHoistedInstance?(\n instance: Instance,\n props: Props,\n owner: AssetResourceOwner,\n ): Instance | void;\n removeHoistedInstance?(instance: Instance, owner: AssetResourceOwner): void;\n // Hoisted instances are shared by identity (key), so an update that\n // changes the identity must not mutate the shared instance in place; the\n // host releases the old identity and returns the instance to use, which\n // may differ from the current one.\n updateHoistedInstance?(\n instance: Instance,\n previousProps: Props,\n nextProps: Props,\n owner: AssetResourceOwner,\n ): Instance;\n // Assets fibers are transparent to host placement. This commit-time diff is\n // their complete lifecycle: null means the owner did not exist on that side\n // of the commit. The host owns normalization, dedupe, and reference counts.\n commitAssetResources?(\n previous: FigAssetResourceList | null,\n next: FigAssetResourceList | null,\n owner: AssetResourceOwner,\n ): void;\n shouldCommitUpdate?(\n type: string,\n previousProps: Props,\n nextProps: Props,\n ): boolean;\n clearContainer?(container: Container): void;\n insertBefore(\n parent: Parent<Container, Instance>,\n child: HostNode<Instance, TextInstance>,\n before: HostNode<Instance, TextInstance> | null,\n ): void;\n removeChild(\n parent: Parent<Container, Instance>,\n child: HostNode<Instance, TextInstance>,\n ): void;\n commitUpdate(\n instance: Instance,\n previousProps: Props,\n nextProps: Props,\n ): void;\n commitHydratedInstance?(instance: Instance, nextProps: Props): void;\n getActivityBoundary?(node: HostNode<Instance, TextInstance>): Instance | null;\n getFirstActivityHydratable?(\n boundary: Instance,\n ): HostNode<Instance, TextInstance> | null;\n commitHydratedActivityBoundary?(boundary: Instance): void;\n hideInstance?(instance: Instance): void;\n unhideInstance?(instance: Instance, props: Props): void;\n hideTextInstance?(instance: TextInstance): void;\n unhideTextInstance?(instance: TextInstance, text: string): void;\n getSuspenseBoundary?(\n node: HostNode<Instance, TextInstance>,\n ): DehydratedSuspenseBoundary<Instance, TextInstance> | null;\n getEnclosingSuspenseBoundaryStart?(\n target: unknown,\n ): HostNode<Instance, TextInstance> | null;\n isTargetWithinSuspenseBoundary?(\n target: unknown,\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): boolean;\n shouldRecoverSuspenseMismatchAtRoot?(\n container: Container,\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): boolean;\n registerSuspenseBoundaryRetry?(\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n retry: () => void,\n ): void;\n commitHydratedSuspenseBoundary?(\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): void;\n completeRootHydration?(container: Container): void;\n removeDehydratedSuspenseBoundary?(\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): void;\n preparePortalContainer?(\n container: Parent<Container, Instance>,\n root: Container,\n logicalParent: Parent<Container, Instance>,\n ): void;\n removePortalContainer?(container: Parent<Container, Instance>): void;\n commitTextUpdate(text: TextInstance, value: string): void;\n}\n\n// Capability types describe coherent host method groups for renderers that\n// implement them. Plain regroupings of HostConfig members do not earn aliases.\nexport type HostHydrationConfig<Container, Instance, TextInstance> = Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n | \"getFirstHydratableChild\"\n | \"getNextHydratableSibling\"\n | \"canHydrateInstance\"\n | \"canHydrateTextInstance\"\n | \"clearContainer\"\n >\n> &\n Pick<HostConfig<Container, Instance, TextInstance>, \"commitHydratedInstance\">;\n\nexport type HostActivityConfig<Container, Instance, TextInstance> = Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n | \"getActivityBoundary\"\n | \"getFirstActivityHydratable\"\n | \"commitHydratedActivityBoundary\"\n | \"hideInstance\"\n | \"unhideInstance\"\n | \"hideTextInstance\"\n | \"unhideTextInstance\"\n >\n>;\n\nexport type HostSuspenseHydrationConfig<Container, Instance, TextInstance> =\n Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n | \"getSuspenseBoundary\"\n | \"getEnclosingSuspenseBoundaryStart\"\n | \"isTargetWithinSuspenseBoundary\"\n | \"registerSuspenseBoundaryRetry\"\n | \"commitHydratedSuspenseBoundary\"\n | \"completeRootHydration\"\n | \"removeDehydratedSuspenseBoundary\"\n >\n >;\n\nexport type HostPortalConfig<Container, Instance, TextInstance> = Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n \"preparePortalContainer\" | \"removePortalContainer\"\n >\n>;\n\nexport type HostHoistedAssetConfig<Container, Instance, TextInstance> =\n Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n | \"resolveHoistedInstance\"\n | \"commitHoistedInstance\"\n | \"removeHoistedInstance\"\n | \"updateHoistedInstance\"\n >\n >;\n\nexport interface FigRoot {\n data: FigDataStoreHandle;\n render(children: FigNode): void;\n unmount(): void;\n}\n\nexport interface FigRootOptions {\n /** Adopt a store populated before the renderer root was created. */\n dataStore?: FigDataStoreController;\n dataPartition?: DataResourceKeyInput;\n initialData?: readonly FigDataHydrationEntry[];\n identifierPrefix?: string;\n devtools?: boolean;\n onRecoverableError?: (error: unknown, info: RecoverableErrorInfo) => void;\n onUncaughtError?: (error: unknown, info: ErrorInfo) => void;\n}\n\nexport interface RecoverableErrorInfo extends ErrorInfo {\n actual?: string;\n boundaryId?: string;\n componentStack: string;\n digest?: string;\n expected?: string;\n recovery: \"root\" | \"suspense\";\n source: \"hydration\" | \"server\";\n}\n\nexport type HydrationTargetResult = \"none\" | \"hydrated\" | \"blocked\";\n\nexport interface FigRenderer<Container, Instance = unknown> {\n batchedUpdates<T>(this: void, callback: () => T): T;\n createRoot(\n this: void,\n container: Container,\n options?: FigRootOptions,\n ): FigRoot;\n hydrateRoot(\n this: void,\n container: Container,\n children: FigNode,\n options?: FigRootOptions,\n ): FigRoot;\n hydrateTarget(\n this: void,\n container: Container,\n target: unknown,\n priority?: EventPriority,\n ): HydrationTargetResult;\n flushSync<T>(this: void, callback: () => T): T;\n installCommitCoordinator(\n this: void,\n coordinator: ReconcilerCommitCoordinator<Container, Instance>,\n ): void;\n scheduleRefresh(this: void, update: RefreshUpdate): void;\n}\n\ninterface Hook<S = any> {\n kind: HookKind;\n memoizedState: S;\n baseState: S;\n baseQueue: HookUpdate<S> | null;\n queue: HookQueue<S>;\n next: Hook<any> | null;\n}\n\ninterface Effect {\n phase: EffectPhase;\n create: EffectCallback;\n controller: AbortController | null;\n deps: DependencyList | null;\n owner: Fiber<unknown, unknown, unknown>;\n // Carried across renders like controller; gates the dev-only strict\n // re-run to once per hook lifetime so renders nested inside an effect\n // (e.g. flushSync) cannot re-trigger the cycle.\n strictRan: boolean;\n}\n\ntype StableEventHandler = (...args: unknown[]) => unknown;\n\ninterface StableEventInstance {\n controller: AbortController | null;\n handler: StableEventHandler | null;\n live: boolean;\n stable: StableEventHandler;\n}\n\ninterface StableEventState {\n instance: StableEventInstance;\n // Lives on the per-render hook state, not the persistent instance: commits\n // republish bailed-out fibers' hooks, so an abandoned render's handler must\n // never be reachable from the instance.\n next: StableEventHandler;\n}\n\ninterface MemoState<T> {\n value: T;\n deps: DependencyList;\n}\n\n// One cancellable run per hook: supersede/unmount/hide abort the controller\n// and bump the generation, which retires the run — retired settlements are\n// fully inert (no pending decrement, rejections swallowed).\ninterface RunInstance {\n controller: AbortController | null;\n generation: number;\n}\n\ninterface TransitionState {\n instance: RunInstance;\n pendingCount: number;\n start: StartTransition | null;\n}\n\nconst NoActionStateError = Symbol();\n\ninterface ActionStateInstance<S, Args extends unknown[]> extends RunInstance {\n action: ActionStateAction<S, Args>;\n runner: ActionStateRunner<Args> | null;\n value: S;\n}\n\ninterface ActionState<S, Args extends unknown[]> {\n error: unknown;\n instance: ActionStateInstance<S, Args>;\n pending: number;\n action: ActionStateAction<S, Args>;\n value: S;\n}\n\ntype QueuedHookKind =\n | typeof StateHook\n | typeof TransitionHook\n | typeof ActionStateHook;\n\ninterface ExternalStoreInstance<T, Owner> {\n committedSubscribe: ExternalStoreSubscribe | null;\n getSnapshot: () => T;\n owner: Owner | null;\n unsubscribe: (() => void) | null;\n value: T;\n}\n\ninterface ExternalStoreState<T, Owner> {\n getSnapshot: () => T;\n instance: ExternalStoreInstance<T, Owner>;\n subscribe: ExternalStoreSubscribe;\n value: T;\n}\n\ninterface SuspenseFallbackState<Container, Instance, TextInstance> {\n kind: \"fallback\";\n primaryChild: Fiber<Container, Instance, TextInstance> | null;\n}\n\ninterface DehydratedSuspenseState<Instance, TextInstance> {\n kind: \"dehydrated\";\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>;\n // Canonical server-tree position captured when the marker is first claimed.\n // Hydration restores this base even if updates insert or move siblings before\n // the boundary resumes.\n idPath: string;\n wasPending: boolean;\n}\n\ntype SuspenseState<Container, Instance, TextInstance> =\n | SuspenseFallbackState<Container, Instance, TextInstance>\n | DehydratedSuspenseState<Instance, TextInstance>;\n\ninterface HiddenState<Container, Instance, TextInstance> {\n currentFirstChild: Fiber<Container, Instance, TextInstance> | null;\n}\n\ninterface ErrorBoundaryState {\n error: unknown;\n info: ErrorInfo;\n didReport: boolean;\n}\n\ninterface DehydratedActivityState<Instance> {\n // The host boundary (an inert template holding server content) while the\n // Activity is dehydrated. Cleared when the content unpacks at commit.\n boundary: Instance;\n // Same snapshot as dehydrated Suspense, for hidden server content that may\n // hydrate after the surrounding client tree has changed.\n idPath: string;\n}\n\ninterface ActivityState<Instance> {\n hidden: boolean;\n dehydrated: DehydratedActivityState<Instance> | null;\n}\n\ntype BoundaryState<Container, Instance, TextInstance> =\n | SuspenseState<Container, Instance, TextInstance>\n | ErrorBoundaryState\n | ActivityState<Instance>;\n\ninterface ContextDependency {\n context: FigContext<unknown>;\n memoizedValue: unknown;\n}\n\n// A suspension recorded during render, retried through the boundary fiber\n// once a commit blesses that fiber's identity. Entries from discarded renders\n// die with the render; their thenables are covered by the root ping attached\n// at capture time.\ninterface PendingSuspenseRetry<Container, Instance, TextInstance> {\n boundary: Fiber<Container, Instance, TextInstance>;\n thenable: Thenable;\n lanes: Lanes;\n}\n\ninterface Fiber<\n Container,\n Instance,\n TextInstance,\n> extends ViewTransitionPlannerFiber {\n tag: Tag;\n type: FiberType;\n key: string | number | null;\n props: Props;\n memoizedProps: Props | null;\n committedProps: Props | null;\n memoizedState: Hook<any> | null;\n stateNode:\n | HostNode<Instance, TextInstance>\n | FiberRoot<Container, Instance, TextInstance>\n | ViewTransitionState\n | null;\n return: Fiber<Container, Instance, TextInstance> | null;\n child: Fiber<Container, Instance, TextInstance> | null;\n sibling: Fiber<Container, Instance, TextInstance> | null;\n index: number;\n alternate: Fiber<Container, Instance, TextInstance> | null;\n flags: Flag;\n subtreeFlags: Flag;\n deletions: Fiber<Container, Instance, TextInstance>[] | null;\n lanes: Lanes;\n childLanes: Lanes;\n effects: Effect[] | null;\n contextDependencies: ContextDependency[] | null;\n contextSubtreeDependencies: FigContext<unknown>[] | null;\n dataDependenciesDirty: boolean;\n // Lazily allocated only for hoisted hosts and Assets fibers. Keep cold\n // lifecycle state after the topology and work fields.\n assetResourceOwner: AssetResourceOwner | null;\n // The fiber tag discriminates this union.\n // Activity state is shared by both generations so stale return chains see\n // the committed visibility state.\n boundaryState: BoundaryState<Container, Instance, TextInstance> | null;\n suspenseQueueStart?: number;\n // Suspense/ErrorBoundary only: root commit-index length when this boundary\n // began, so a capture can truncate entries queued by its discarded subtree.\n commitIndexCheckpoint?: number;\n hiddenState: HiddenState<Container, Instance, TextInstance> | null;\n}\n\ninterface ViewTransitionState extends ViewTransitionPlannerState {\n autoName: string | null;\n}\n\ninterface FiberRoot<Container, Instance, TextInstance>\n extends LaneRoot, ViewTransitionPlannerRoot<Container> {\n container: Container;\n current: Fiber<Container, Instance, TextInstance>;\n element: FigNode;\n identifierPrefix: string;\n nextClientId: number;\n devtools: boolean;\n callback: ScheduledTask | null;\n callbackPriority: Lane;\n wip: Fiber<Container, Instance, TextInstance> | null;\n finishedWork: Fiber<Container, Instance, TextInstance> | null;\n renderLanes: Lanes;\n pendingCoordinatedCommit: boolean;\n // finishedWork is rendered but its commit waits for a coordinator-owned\n // operation to finish. Unlike pendingCoordinatedCommit (the sub-frame\n // commit window, which freezes the root), a parked root keeps rendering:\n // newer work supersedes the parked tree so the latest state commits when\n // the animation ends.\n parkedCoordinatedCommit: boolean;\n dataStore: FigDataStore;\n contextValues: Map<FigContext<unknown>, unknown>;\n contextStack: ContextStackEntry<Container, Instance, TextInstance>[];\n externalStores: Set<\n ExternalStoreInstance<unknown, Fiber<Container, Instance, TextInstance>>\n >;\n pendingReactiveEffects: Effect[];\n reactiveCallback: ScheduledTask | null;\n suspendedThenables: WeakMap<object, Lanes>;\n pendingSuspenseRetries: PendingSuspenseRetry<\n Container,\n Instance,\n TextInstance\n >[];\n attachedSuspenseRetries: WeakMap<\n object,\n WeakSet<Fiber<Container, Instance, TextInstance>>\n >;\n consumedPendingQueues: ConsumedPendingQueue[];\n onRecoverableError: (error: unknown, info: RecoverableErrorInfo) => void;\n onUncaughtError: ((error: unknown, info: ErrorInfo) => void) | null;\n recoverableErrors: RecoverableErrorRecord[];\n uncaughtErrorInfo: ErrorInfo | null;\n commitEffectPhases: number;\n needsCommitDeletions: boolean;\n // Commit work discovered during render: every fiber that rendered hooks,\n // recorded deletions, or caught an error, in begin order (pre-order over\n // the rendered region). Commit passes iterate this instead of walking the\n // tree; each pass re-checks its own per-fiber predicate, so duplicate and\n // stale entries are inert. Truncated to a boundary checkpoint when a\n // capture discards its subtree; cleared on restart and after commit.\n commitIndex: CommitIndex<Fiber<Container, Instance, TextInstance>>;\n // Boundaries that caught during the commit phase (effects, reactive\n // flushes). Kept outside the commit index: these must survive render restarts\n // until a later commit reports them.\n committedCaughtErrors: Fiber<Container, Instance, TextInstance>[];\n isHydrating: boolean;\n isHydrationRoot: boolean;\n hydrationParent: Fiber<Container, Instance, TextInstance> | null;\n hydratingSuspenseBoundary: Fiber<Container, Instance, TextInstance> | null;\n hydratingActivityBoundary: Fiber<Container, Instance, TextInstance> | null;\n dehydratedSuspenseCount: number;\n // Live dehydrated boundaries keyed by their start marker node, rebuilt in\n // the same post-commit walk that maintains dehydratedSuspenseCount, so\n // event-target lookups resolve to a fiber without searching the tree.\n dehydratedBoundaries: Map<\n HostNode<Instance, TextInstance>,\n Fiber<Container, Instance, TextInstance>\n >;\n needsRootHydrationCompletion: boolean;\n nextHydratableInstance: HostNode<Instance, TextInstance> | null;\n clearContainerBeforeCommit: boolean;\n hydrationInitialElement: FigNode | typeof NoHydrationInitialElement;\n}\n\ninterface ContextStackEntry<Container, Instance, TextInstance> {\n context: FigContext<unknown>;\n hadPrevious: boolean;\n previous: unknown;\n provider: Fiber<Container, Instance, TextInstance>;\n}\n\ninterface ConsumedPendingQueue {\n queue: HookQueue<unknown>;\n pending: HookUpdate<unknown>;\n}\n\ninterface RecoverableErrorRecord {\n error: unknown;\n info: RecoverableErrorInfo;\n}\n\ntype RecoverableDetails = Omit<RecoverableErrorInfo, \"componentStack\">;\n\nconst PreservedSuspense = Symbol(\"fig.preserved-suspense\");\nconst NoHydrationInitialElement = Symbol(\"fig.no-hydration-initial-element\");\n\nclass HydrationMismatchError extends Error {}\n\nexport function createRenderer<Container, Instance, TextInstance>(\n host: HostConfig<Container, Instance, TextInstance>,\n): FigRenderer<Container, Instance> {\n type F = Fiber<Container, Instance, TextInstance>;\n type R = FiberRoot<Container, Instance, TextInstance>;\n // Shared read-only stand-in for the common no-retries commit; never pushed\n // to (commits swap in a fresh array before recording anything).\n const noSuspenseRetries: PendingSuspenseRetry<\n Container,\n Instance,\n TextInstance\n >[] = [];\n type ActivityHydrationHostConfig = Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n | \"getActivityBoundary\"\n | \"getFirstActivityHydratable\"\n | \"commitHydratedActivityBoundary\"\n >\n >;\n type ActivityVisibilityHostConfig = Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n | \"hideInstance\"\n | \"unhideInstance\"\n | \"hideTextInstance\"\n | \"unhideTextInstance\"\n >\n >;\n const roots = new WeakMap<object, R>();\n // Iterable view of live roots, only populated when a refresh handler is set,\n // so a hot-reload pass can walk every mounted tree (dev-only; empty in prod).\n const mountedRoots = new Set<R>();\n const pendingRoots = new Set<R>();\n const batchedRoots = new Set<R>();\n const abandonedHydrationBoundaries = new WeakSet<object>();\n let commitCoordinator: ReconcilerCommitCoordinator<\n Container,\n Instance\n > | null = null;\n let didWarnMissingViewTransitionCoordinator = false;\n let batchDepth = 0;\n let flushingSyncWork = false;\n let commitDepth = 0;\n let needsPostCommitSyncFlush = false;\n let flushingPostCommitSyncWork = false;\n let nestedPostCommitSyncFlushes = 0;\n const nestedPostCommitSyncFlushLimit = 50;\n let currentCommitEffectPhase: EffectPhase | null = null;\n // `hasHiddenBoundaries` gates the parent-walk in `hiddenSubtreeLane`: while it\n // is false no update can need the offscreen downgrade, so the walk is skipped.\n // It is set eagerly true whenever a hidden boundary is begun (covering the\n // in-flight render before its commit) and recomputed from `hiddenStates` at\n // the end of every commit, so it resets to false once the last hidden boundary\n // is revealed or unmounted. `hiddenStates` tracks the live committed\n // `ActivityState`s that are currently hidden; keying on the state object (which\n // both fiber generations share) makes membership generation-agnostic.\n let hasHiddenBoundaries = false;\n const hiddenStates = new Set<ActivityState<Instance>>();\n let activityHostConfig: ActivityVisibilityHostConfig | null = null;\n let activityHydrationHostConfig: ActivityHydrationHostConfig | null = null;\n let hoistedAssetHostConfig: HostHoistedAssetConfig<\n Container,\n Instance,\n TextInstance\n > | null = null;\n let renderingFiber: F | null = null;\n let currentHook: Hook | null = null;\n let workInProgressHook: Hook | null = null;\n let localIdCounter = 0;\n\n function installCommitCoordinator(\n coordinator: ReconcilerCommitCoordinator<Container, Instance>,\n ): void {\n if (commitCoordinator === coordinator) return;\n if (commitCoordinator !== null) {\n throw new Error(\n `Cannot install commit coordinator \"${coordinator.name}\": commit ` +\n `coordination is already owned by \"${commitCoordinator.name}\".`,\n );\n }\n commitCoordinator = coordinator;\n }\n\n function commitPriority(lanes: Lanes): ReconcilerWorkPriority {\n const lane = getHighestPriorityLane(lanes);\n if (includesSomeLane(RetryLanes | SelectiveHydrationLane, lane)) {\n return \"suspense\";\n }\n if (includesSomeLane(AllTransitionLanes | DeferredLane, lane)) {\n return \"transition\";\n }\n if (includesSomeLane(IdleLane | OffscreenLane, lane)) return \"idle\";\n return \"blocking\";\n }\n\n // Argument-identical delegations are direct references (the function\n // declarations below are hoisted); only the effect hooks, which bind their\n // phase constant, need wrappers.\n const dispatcher: RenderDispatcher = {\n useState: updateStateHook,\n useActionState: updateActionStateHook,\n useId: updateIdHook,\n useDeferredValue: updateDeferredValueHook,\n useMemo: updateMemoHook,\n useTransition: updateTransitionHook,\n useReactive(effect: EffectCallback, deps?: DependencyList): void {\n updateEffectHook(ReactiveEffect, effect, deps);\n },\n useBeforePaint(effect: EffectCallback, deps?: DependencyList): void {\n updateEffectHook(BeforePaintEffect, effect, deps);\n },\n useBeforeLayout(effect: EffectCallback, deps?: DependencyList): void {\n updateEffectHook(BeforeLayoutEffect, effect, deps);\n },\n useSyncExternalStore: updateExternalStoreHook,\n useStableEvent: updateStableEventHook,\n readContext: readContextValue,\n readData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): TValue {\n const fiber = requireRenderingFiber();\n return rootOf(fiber).dataStore.readData(resource, args, fiber);\n },\n preloadData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): void {\n const fiber = requireRenderingFiber();\n rootOf(fiber).dataStore.preloadData(resource, ...args);\n },\n readPromise<T>(promise: PromiseLike<T>): T {\n return readThenable(promise);\n },\n };\n\n function createRoot(\n container: Container,\n options: FigRootOptions = {},\n ): FigRoot {\n return rootHandle(rootForContainer(container, { kind: \"client\", options }));\n }\n\n function hydrateRoot(\n container: Container,\n children: FigNode,\n options: FigRootOptions = {},\n ): FigRoot {\n const root = rootForContainer(container, { kind: \"hydration\", options });\n root.hydrationInitialElement = children;\n updateRoot(root, children);\n return rootHandle(root);\n }\n\n function rootForContainer(\n container: Container,\n request: {\n kind: \"client\" | \"hydration\";\n options: FigRootOptions;\n },\n ): R {\n if (roots.has(container as object)) {\n throw duplicateRootError(request.kind);\n }\n\n if (request.kind === \"hydration\") requireHydrationHostConfig();\n\n const root = createFiberRoot(container, request.options);\n roots.set(container as object, root);\n if (__DEV__) {\n if (hasRefreshHandler()) mountedRoots.add(root);\n }\n\n if (request.kind === \"hydration\") {\n root.isHydrating = true;\n root.isHydrationRoot = true;\n root.needsRootHydrationCompletion = true;\n }\n\n return root;\n }\n\n function createFiberRoot(container: Container, options: FigRootOptions): R {\n const current = fiber(RootTag, null, null, { children: null }, null);\n const dataStoreHost = {\n getLane: requestUpdateLane,\n partition: options.dataPartition,\n schedule(owner: object, lane: unknown): void {\n scheduleFiber(owner as F, hiddenSubtreeLane(owner as F, lane as Lane));\n },\n };\n const dataStore =\n options.dataStore === undefined\n ? createRootDataStore(dataStoreHost)\n : attachDataStore(\n options.dataStore,\n dataStoreHost,\n options.initialData,\n );\n const root: R = {\n container,\n current,\n element: null,\n identifierPrefix: options.identifierPrefix ?? \"\",\n nextClientId: 0,\n devtools: options.devtools ?? true,\n pendingLanes: NoLanes,\n suspendedLanes: NoLanes,\n pingedLanes: NoLanes,\n expiredLanes: NoLanes,\n entangledLanes: NoLanes,\n entanglements: createLaneMap(NoLanes),\n expirationTimes: createLaneMap(NoTimestamp),\n callback: null,\n callbackPriority: NoLane,\n wip: null,\n finishedWork: null,\n renderLanes: NoLanes,\n pendingCoordinatedCommit: false,\n parkedCoordinatedCommit: false,\n dataStore,\n contextValues: new Map(),\n contextStack: [],\n externalStores: new Set(),\n pendingReactiveEffects: [],\n reactiveCallback: null,\n suspendedThenables: new WeakMap(),\n pendingSuspenseRetries: [],\n attachedSuspenseRetries: new WeakMap(),\n consumedPendingQueues: [],\n onRecoverableError: options.onRecoverableError ?? noop,\n onUncaughtError: options.onUncaughtError ?? null,\n recoverableErrors: [],\n uncaughtErrorInfo: null,\n commitEffectPhases: 0,\n needsCommitDeletions: false,\n commitIndex: [],\n committedCaughtErrors: [],\n isHydrating: false,\n isHydrationRoot: false,\n hydrationParent: null,\n hydratingSuspenseBoundary: null,\n hydratingActivityBoundary: null,\n dehydratedSuspenseCount: 0,\n dehydratedBoundaries: new Map(),\n needsRootHydrationCompletion: false,\n nextHydratableInstance: null,\n clearContainerBeforeCommit: false,\n hydrationInitialElement: NoHydrationInitialElement,\n };\n if (options.dataStore === undefined && options.initialData !== undefined)\n dataStore.hydrate(options.initialData);\n current.stateNode = root;\n return root;\n }\n\n function duplicateRootError(kind: \"client\" | \"hydration\"): Error {\n const method = kind === \"hydration\" ? \"hydrateRoot\" : \"createRoot\";\n return new Error(\n `Cannot call ${method} on a container that already has a Fig root. Use the existing root.render(...) to update it instead.`,\n );\n }\n\n function noop(): void {}\n\n function rootHandle(root: R): FigRoot {\n let unmounted = false;\n return {\n data: root.dataStore,\n render: (children) => {\n if (unmounted) {\n throw new Error(\"Cannot update an unmounted root.\");\n }\n updateRoot(root, children);\n },\n unmount: () => {\n if (unmounted) return;\n unmounted = true;\n // Tear the tree down synchronously so per-fiber data cleanup runs while\n // the store is still live; dispose is then the final teardown step.\n flushSync(() => updateRoot(root, null));\n root.dataStore.dispose();\n // Free the container so a later createRoot/render starts a fresh root\n // instead of reusing this one's now-disposed store.\n if (roots.get(root.container as object) === root) {\n roots.delete(root.container as object);\n }\n mountedRoots.delete(root);\n },\n };\n }\n\n function hydrateTarget(\n container: Container,\n target: unknown,\n priority: EventPriority = \"default\",\n ): HydrationTargetResult {\n const lane = hydrationLaneForPriority(priority);\n const root = roots.get(container as object);\n if (root === undefined) return \"none\";\n // Before the shell's first hydration commit nothing has handlers, so\n // every target is blocked — reporting \"none\" here would let a replayed\n // event dispatch into a slot-less tree and be consumed silently. A\n // discrete interaction pulls the whole initial hydration forward\n // synchronously, exactly like it does for a dehydrated boundary.\n if (rootShellPendingHydration(root)) {\n if (isSyncLane(lane)) performRoot(root, true);\n if (rootShellPendingHydration(root)) return \"blocked\";\n }\n if (root.dehydratedSuspenseCount === 0) return \"none\";\n\n const boundary = dehydratedBoundaryForTarget(root, target);\n if (boundary === null) return \"none\";\n\n scheduleFiber(boundary, lane);\n if (isSyncLane(lane)) performRoot(root, true);\n return dehydratedBoundaryForTarget(root, target) === null\n ? \"hydrated\"\n : \"blocked\";\n }\n\n // needsRootHydrationCompletion clears when every boundary hydrated, and\n // current.child fills at the first commit — together they mean \"the shell\n // has not committed yet\" (a root rendering null clears the flag at its\n // first commit, so the conjunction still breaks).\n function rootShellPendingHydration(root: R): boolean {\n return root.needsRootHydrationCompletion && root.current.child === null;\n }\n\n function dehydratedBoundaryForTarget(root: R, target: unknown): F | null {\n if (host.getEnclosingSuspenseBoundaryStart === undefined) {\n // Fallback for hosts without target-instance lookup: search the fiber\n // tree for a dehydrated boundary whose host range contains the target.\n return findDehydratedSuspenseBoundaryForTarget(\n root.current.child,\n target,\n );\n }\n\n // A start marker with no live dehydrated fiber belongs to a boundary\n // nested inside an outer dehydrated one (its content has no fibers yet),\n // so resume the marker walk outward from that marker.\n let start = host.getEnclosingSuspenseBoundaryStart(target);\n while (start !== null) {\n const fiber = root.dehydratedBoundaries.get(start) ?? null;\n if (fiberSuspenseState(fiber)?.kind === \"dehydrated\") return fiber;\n start = host.getEnclosingSuspenseBoundaryStart(start);\n }\n\n return null;\n }\n\n function flushSync<T>(callback: () => T): T {\n if (renderingFiber !== null) {\n throw new Error(\n \"flushSync cannot be called while rendering a component.\",\n );\n }\n\n try {\n return runWithPriority(SyncLane, callback);\n } finally {\n flushSyncWork();\n }\n }\n\n function flushSyncWork(): void {\n if (commitDepth > 0) {\n needsPostCommitSyncFlush = true;\n return;\n }\n\n // Save/restore rather than force false: a nested flushSync (e.g. unmount()\n // from a commit-phase effect) must not clear the flag while an outer flush is\n // still running, or the outer flush's uncaught errors get misrouted.\n const previousFlushingSyncWork = flushingSyncWork;\n flushingSyncWork = true;\n try {\n for (const root of pendingRoots) {\n if (root.pendingLanes !== NoLanes) {\n root.callback?.cancel();\n root.callback = null;\n root.callbackPriority = NoLane;\n performRoot(root, true);\n } else {\n pendingRoots.delete(root);\n }\n }\n } finally {\n flushingSyncWork = previousFlushingSyncWork;\n }\n }\n\n function flushPostCommitSyncWork(): void {\n if (\n commitDepth > 0 ||\n !needsPostCommitSyncFlush ||\n flushingPostCommitSyncWork\n ) {\n return;\n }\n\n flushingPostCommitSyncWork = true;\n try {\n do {\n nestedPostCommitSyncFlushes += 1;\n if (nestedPostCommitSyncFlushes > nestedPostCommitSyncFlushLimit) {\n throw new Error(\"Maximum update depth exceeded.\");\n }\n needsPostCommitSyncFlush = false;\n flushSyncWork();\n } while (needsPostCommitSyncFlush);\n } finally {\n nestedPostCommitSyncFlushes = 0;\n flushingPostCommitSyncWork = false;\n }\n }\n\n function batchedUpdates<T>(callback: () => T): T {\n batchDepth += 1;\n\n try {\n return callback();\n } finally {\n batchDepth -= 1;\n if (batchDepth === 0) {\n for (const root of batchedRoots) scheduleRoot(root);\n batchedRoots.clear();\n }\n }\n }\n\n function updateRoot(root: R, children: FigNode): void {\n if (shouldClientRenderEarlyHydrationUpdate(root, children)) {\n forceClientRender(root);\n }\n\n const lane = requestUpdateLane();\n root.element = children;\n markRootPending(root, lane);\n scheduleOrBatchRoot(root);\n }\n\n function markRootPending(root: R, lane: Lane): void {\n markRootUpdated(root, lane);\n transitionTypeHooks.record?.(root, lane);\n pendingRoots.add(root);\n if (currentCommitEffectPhase === BeforePaintEffect && isSyncLane(lane)) {\n needsPostCommitSyncFlush = true;\n }\n }\n\n function markRootCompleted(root: R, remainingLanes: Lanes): void {\n markRootFinished(root, remainingLanes);\n transitionTypeHooks.complete?.(root, remainingLanes);\n }\n\n function markCommitEffectPhase(root: R, phase: EffectPhase): void {\n root.commitEffectPhases |= 1 << phase;\n }\n\n function scheduleOrBatchRoot(root: R): void {\n if (batchDepth > 0) batchedRoots.add(root);\n else scheduleRoot(root);\n }\n\n function scheduleRoot(root: R): void {\n if (root.pendingCoordinatedCommit) return;\n\n markStarvedLanesAsExpired(root, now());\n\n const nextLanes = getNextLanes(root, root.renderLanes);\n if (nextLanes === NoLanes) {\n if (root.pendingLanes === NoLanes) pendingRoots.delete(root);\n return;\n }\n\n const priorityLane = getHighestPriorityLane(nextLanes);\n if (root.callback !== null && root.callbackPriority === priorityLane)\n return;\n\n root.callback?.cancel();\n root.callbackPriority = priorityLane;\n root.callback = scheduleCallback(\n getLaneSchedulerPriority(priorityLane),\n () => {\n performRoot(root, isSyncLane(priorityLane));\n },\n );\n }\n\n function performRoot(root: R, forceSync: boolean): void {\n try {\n performRootWork(root, forceSync);\n } catch (error) {\n if (error === PreservedSuspense) {\n restartRootWork(root);\n scheduleRoot(root);\n return;\n }\n\n if (error instanceof HydrationMismatchError) {\n recoverFromHydrationMismatch(root);\n return;\n }\n\n if (isThenable(error)) {\n const suspendedLanes = root.renderLanes;\n restartRootWork(root);\n markRootSuspended(root, suspendedLanes);\n attachPing(root, error, suspendedLanes);\n scheduleRoot(root);\n return;\n }\n\n const info = root.uncaughtErrorInfo ?? errorInfoFor(root.current, error);\n restartRootWork(root);\n clearRootAfterUncaughtError(root);\n reportUncaughtError(root, error, info);\n\n // flushSync callers observe the error directly. Outside flushSync the\n // error must not escape into the scheduler tick (that would stall other\n // queued tasks), so without an onUncaughtError handler it is rethrown\n // from a detached task to surface as a global error.\n if (flushingSyncWork) throw error;\n if (root.onUncaughtError === null) {\n setTimeout(() => {\n throw error;\n });\n }\n }\n }\n\n function recoverFromHydrationMismatch(root: R): void {\n if (root.hydratingSuspenseBoundary !== null) {\n recoverFromSuspenseHydrationMismatch(\n root,\n root.hydratingSuspenseBoundary,\n );\n return;\n }\n\n markHydrationRecovery(root, \"root\");\n restartRootWork(root);\n forceClientRender(root);\n performRoot(root, true);\n }\n\n function recoverFromSuspenseHydrationMismatch(root: R, boundary: F): void {\n const current = boundary.alternate ?? boundary;\n const state = fiberSuspenseState(current);\n\n restartRootWork(root);\n\n if (state?.kind !== \"dehydrated\") {\n markHydrationRecovery(root, \"root\");\n forceClientRender(root);\n performRoot(root, true);\n return;\n }\n\n if (\n host.shouldRecoverSuspenseMismatchAtRoot?.(\n root.container,\n state.boundary,\n ) === true\n ) {\n markHydrationRecovery(root, \"root\");\n state.boundary.forceClientRender = true;\n forceClientRender(root);\n performRoot(root, true);\n return;\n }\n\n markHydrationRecovery(root, \"suspense\");\n state.boundary.forceClientRender = true;\n deactivateHydration(root);\n scheduleFiber(current, SelectiveHydrationLane);\n performRoot(root, true);\n }\n\n function markHydrationRecovery(\n root: R,\n recovery: RecoverableErrorInfo[\"recovery\"],\n ): void {\n for (const record of root.recoverableErrors) {\n if (record.info.source === \"hydration\") record.info.recovery = recovery;\n }\n }\n\n function shouldClientRenderEarlyHydrationUpdate(\n root: R,\n children: FigNode,\n ): boolean {\n return (\n root.isHydrating &&\n root.current.child === null &&\n root.hydrationInitialElement !== NoHydrationInitialElement &&\n root.hydrationInitialElement !== children\n );\n }\n\n function forceClientRender(root: R): void {\n deactivateHydration(root);\n root.clearContainerBeforeCommit = true;\n root.hydrationInitialElement = NoHydrationInitialElement;\n }\n\n function performRootWork(root: R, forceSync: boolean): void {\n if (root.pendingCoordinatedCommit) return;\n\n if (root.pendingLanes === NoLanes && root.wip === null) {\n pendingRoots.delete(root);\n return;\n }\n\n flushPendingReactiveEffects(root);\n\n if (root.parkedCoordinatedCommit) {\n root.parkedCoordinatedCommit = false;\n // The parked tree's lanes were never marked finished, so they are\n // still inside pendingLanes; anything beyond them is newer work.\n const supersededByNewerWork =\n (root.pendingLanes & ~root.renderLanes) !== NoLanes;\n if (\n !supersededByNewerWork &&\n root.wip === null &&\n root.finishedWork !== null\n ) {\n // Nothing changed while the animation ran: commit the parked tree\n // as-is (commitRoot re-parks it if yet another transition started\n // in between, e.g. a streaming reveal).\n if (commitRoot(root, root.finishedWork)) return;\n finishRootWork(root);\n flushPostCommitSyncWork();\n return;\n }\n // Newer work supersedes the parked commit — React cancels its\n // suspended commit the same way. restartRootWork restores the update\n // queues the parked render consumed, and the fresh render below\n // absorbs the parked lanes, so the latest state commits instead.\n restartRootWork(root);\n }\n\n const nextLanes = getNextLanes(root, root.renderLanes);\n if (nextLanes === NoLanes && root.wip === null) {\n root.callback = null;\n root.callbackPriority = NoLane;\n return;\n }\n\n if (\n root.wip !== null &&\n nextLanes !== NoLanes &&\n nextLanes !== root.renderLanes\n ) {\n restartRootWork(root);\n }\n\n if (root.wip === null) {\n root.renderLanes = nextLanes;\n root.consumedPendingQueues = [];\n resetContextStack(root);\n root.finishedWork = createWorkInProgress(root.current, {\n children: root.element,\n });\n root.wip = root.finishedWork;\n prepareToHydrateRoot(root);\n }\n\n while (\n root.wip !== null &&\n (forceSync ||\n isSyncLane(getHighestPriorityLane(root.renderLanes)) ||\n !shouldYieldToHost())\n ) {\n root.wip = performUnit(root.wip);\n }\n\n if (root.wip !== null) {\n root.callback = null;\n root.callbackPriority = NoLane;\n scheduleRoot(root);\n return;\n }\n\n if (root.finishedWork !== null && commitRoot(root, root.finishedWork)) {\n return;\n }\n finishRootWork(root);\n flushPostCommitSyncWork();\n }\n\n function finishRootWork(root: R): void {\n resetRootWork(root);\n\n if (root.pendingLanes !== NoLanes) scheduleRoot(root);\n else pendingRoots.delete(root);\n }\n\n function restartRootWork(root: R): void {\n restoreConsumedPendingQueues(root);\n resetRootWork(root);\n }\n\n function resetRootWork(root: R): void {\n const wasHydratingCompletedBoundary =\n root.hydrationInitialElement === NoHydrationInitialElement &&\n (root.hydratingSuspenseBoundary !== null ||\n root.hydratingActivityBoundary !== null);\n root.wip = null;\n root.finishedWork = null;\n root.renderLanes = NoLanes;\n root.callback = null;\n root.callbackPriority = NoLane;\n // Retries recorded by the discarded render die with it; their thenables\n // stay covered by the root pings attached at capture time.\n if (root.pendingSuspenseRetries.length > 0) {\n root.pendingSuspenseRetries = [];\n }\n clearCommitIndex(root.commitIndex);\n resetHydrationPointers(root);\n resetContextStack(root);\n if (wasHydratingCompletedBoundary) root.isHydrating = false;\n root.uncaughtErrorInfo = null;\n }\n\n function resetHydrationPointers(root: R): void {\n root.hydrationParent = null;\n root.hydratingSuspenseBoundary = null;\n root.hydratingActivityBoundary = null;\n root.nextHydratableInstance = null;\n }\n\n function deactivateHydration(root: R): void {\n root.isHydrating = false;\n resetHydrationPointers(root);\n }\n\n function performUnit(node: F): F | null {\n try {\n begin(node);\n } catch (error) {\n return handleThrownValue(node, error);\n }\n\n if ((node.flags & AdoptedFlag) === 0 && node.child !== null) {\n return node.child;\n }\n\n return completeUnit(node);\n }\n\n function handleThrownValue(node: F, error: unknown): F | null {\n const root = rootOf(node);\n if (root.hydratingActivityBoundary !== null) {\n abandonActivityHydration(root, error instanceof HydrationMismatchError);\n }\n\n if (isThenable(error)) {\n const boundary = findSuspenseBoundary(node);\n if (boundary !== null) {\n unwindContextTo(root, boundary);\n return captureSuspenseBoundary(boundary, error);\n }\n\n unwindContextTo(root, null);\n throw error;\n }\n\n if (error instanceof HydrationMismatchError) {\n unwindContextTo(root, null);\n throw error;\n }\n\n const boundary = findErrorBoundary(node);\n if (boundary !== null) {\n unwindContextTo(root, boundary);\n return captureErrorBoundary(boundary, error, node);\n }\n\n unwindContextTo(root, null);\n rootOf(node).uncaughtErrorInfo = errorInfoFor(node, error);\n throw error;\n }\n\n function completeUnit(node: F): F | null {\n let next: F | null = node;\n while (next !== null) {\n complete(next);\n if (next.sibling !== null) return next.sibling;\n next = next.return;\n }\n return null;\n }\n\n function begin(node: F): void {\n const root = rootOf(node);\n\n // Recorded before any path that can render descendants (including the\n // clone-and-descend bailout), so a capture always has a fresh watermark.\n if (node.tag === SuspenseTag || node.tag === ErrorBoundaryTag) {\n node.commitIndexCheckpoint = root.commitIndex.length;\n }\n\n if (canBailout(node, root)) {\n let hasChildWork = includesSomeLane(node.childLanes, root.renderLanes);\n if (!hasChildWork) {\n hasChildWork = lazilyPropagateParentContextChanges(node, root);\n }\n\n if (!hasChildWork) {\n // The whole subtree is clean: adopt the committed children without\n // cloning and skip them entirely.\n node.flags |= AdoptedFlag;\n node.child = node.alternate?.child ?? null;\n return;\n }\n\n // Descendants have work but this fiber does not: clone children and\n // descend without re-rendering, preserving child props identity.\n // Suspense always runs begin so hidden-primary retries are handled.\n if (node.tag !== SuspenseTag) {\n if (node.tag === ContextProviderTag) pushContextProvider(node, root);\n cloneChildFibers(node);\n return;\n }\n }\n\n if (node.tag === ContextProviderTag) pushContextProvider(node, root);\n\n const hasOwnWork = includesSomeLane(node.lanes, root.renderLanes);\n node.lanes &= ~root.renderLanes;\n\n if (node.tag === FunctionTag) {\n renderFunction(node, root);\n return;\n }\n\n if (node.tag === ThenableTag) {\n reconcileCurrentChildren(\n node,\n readThenable(node.props.thenable as PromiseLike<AwaitedFigNode>),\n root,\n );\n return;\n }\n\n if (node.tag === TextTag) {\n if (\n __DEV__ &&\n (node.alternate === null ||\n node.alternate.props.nodeValue !== node.props.nodeValue)\n ) {\n host.validateTextNesting?.(\n String(node.props.nodeValue),\n hostAncestorTypes(node),\n );\n }\n if (tryHydrateText(node, root)) return;\n node.stateNode ??= host.createTextInstance(String(node.props.nodeValue));\n return;\n }\n\n if (node.tag === HostTag) {\n const type = String(node.type);\n const children = hostChildren(node.props);\n const hoisted = resolveHoistedFiber(node, root);\n\n if (__DEV__) {\n let ancestors: string[] | null = null;\n\n if (\n !hoisted &&\n node.alternate === null &&\n host.validateInstanceNesting\n ) {\n ancestors = hostAncestorTypes(node);\n host.validateInstanceNesting(type, node.props, ancestors);\n }\n\n // Text that becomes Text fibers is validated by the TextTag branch.\n if (host.validateTextNesting && shouldUseHostTextContent(node, root)) {\n const textContent = hostTextContent(children);\n if (textContent !== null) {\n ancestors ??= hostAncestorTypes(node);\n ancestors.unshift(type);\n host.validateTextNesting(textContent, ancestors);\n }\n }\n }\n\n if (!hoisted && tryHydrateInstance(node, root)) {\n reconcileCurrentChildren(node, children, root);\n return;\n }\n\n if (!hoisted) {\n node.stateNode ??= host.createInstance(\n type,\n node.props,\n hostParent(node),\n );\n }\n\n reconcileCurrentChildren(\n node,\n children === null || shouldUseHostTextContent(node, root)\n ? null\n : children,\n root,\n );\n return;\n }\n\n if (node.tag === SuspenseTag) {\n beginSuspense(node, hasOwnWork);\n return;\n }\n\n if (node.tag === ErrorBoundaryTag) {\n beginErrorBoundary(node);\n return;\n }\n\n if (node.tag === ActivityTag && node.type === null) {\n beginHiddenBoundary(root, node);\n return;\n }\n\n if (node.tag === ActivityTag) {\n beginActivity(root, node);\n return;\n }\n\n if (node.tag === ViewTransitionTag) {\n beginViewTransition(node);\n return;\n }\n\n if (node.tag === PortalTag) {\n beginPortal(node);\n return;\n }\n\n reconcileCurrentChildren(node, node.props.children, root);\n }\n\n function beginViewTransition(node: F): void {\n if (__DEV__) {\n const name = (node.props as ViewTransitionProps).name;\n if (name === \"none\" || name === \"\") {\n throw new Error(\n `<ViewTransition> received the reserved name \"${name}\". ` +\n '\"none\" disables the browser feature and \"\" is not a valid ' +\n 'view-transition-name; use \"auto\" or omit the prop for a ' +\n \"generated name.\",\n );\n }\n if (\n commitCoordinator?.viewTransitions !== true &&\n !didWarnMissingViewTransitionCoordinator\n ) {\n didWarnMissingViewTransitionCoordinator = true;\n const coordinatorDescription =\n commitCoordinator === null\n ? \"this renderer has no commit coordinator with View Transition support\"\n : `the installed commit coordinator \"${commitCoordinator.name}\" does not provide View Transition support`;\n console.error(\n `A <ViewTransition> rendered, but ${coordinatorDescription}. ` +\n \"Install View Transition support for this renderer. Fig DOM \" +\n \"applications can call enableViewTransitions() from \" +\n '\"@bgub/fig-dom/view-transitions\".',\n );\n }\n }\n node.stateNode ??= { autoName: null };\n reconcileCurrentChildren(node, node.props.children);\n }\n\n function beginActivity(root: R, node: F): void {\n const hidden = activityHidden(node.props);\n if (hidden) hasHiddenBoundaries = true;\n\n const state = ensureFiberActivityState(node);\n\n if (\n state.dehydrated === null &&\n tryDehydrateActivityBoundary(root, node, state)\n ) {\n // Server-hidden content stays dehydrated; if the client wants it\n // visible, a follow-up render hydrates through.\n if (!hidden) scheduleFiber(node, DefaultLane);\n return;\n }\n\n if (state.dehydrated !== null) {\n if (hidden) return;\n hydrateDehydratedActivityBoundary(root, node);\n return;\n }\n\n beginHiddenBoundary(root, node);\n }\n\n function beginHiddenBoundary(root: R, node: F): void {\n const hidden = activityHidden(node.props);\n if (hidden) hasHiddenBoundaries = true;\n const hiddenState = node.hiddenState;\n const previousHidden =\n node.alternate === null\n ? false\n : activityHidden(node.alternate.memoizedProps ?? {});\n\n ensureFiberActivityState(node);\n\n if (hidden !== previousHidden) {\n node.flags |= VisibilityFlag;\n }\n if (!hidden && hiddenState?.currentFirstChild != null) {\n node.flags |= VisibilityFlag;\n }\n\n // A reveal with pending offscreen work expands the render lanes so the\n // revealed subtree commits already up to date. Offscreen work skipped by\n // earlier bailouts is re-marked pending after commit.\n if (!hidden && previousHidden) {\n // Deferred effects can live below otherwise unchanged wrapper components.\n // Mark the committed hidden subtree so reveal traversal does not adopt\n // those wrappers and skip the newly armed effects underneath them.\n markSubtreeLanes(node.alternate?.child ?? null, root.renderLanes);\n if (\n includesSomeLane(node.childLanes, OffscreenLane) &&\n !includesSomeLane(root.renderLanes, OffscreenLane)\n ) {\n root.renderLanes = mergeLanes(root.renderLanes, OffscreenLane);\n }\n }\n\n reconcile(\n node,\n node.props.children,\n hiddenState?.currentFirstChild ?? node.alternate?.child ?? null,\n hiddenState?.currentFirstChild != null && node.alternate === null,\n );\n node.hiddenState = null;\n }\n\n function prepareToHydrateRoot(root: R): void {\n if (!root.isHydrating) return;\n\n const hydrationHost = requireHydrationHostConfig();\n root.hydrationParent = root.finishedWork;\n root.nextHydratableInstance = hydrationHost.getFirstHydratableChild(\n root.container,\n );\n }\n\n function tryHydrateInstance(node: F, root: R): boolean {\n if (!shouldHydrateFiber(root, node)) return false;\n\n const hydrationHost = requireHydrationHostConfig();\n const hydratable = root.nextHydratableInstance;\n const type = String(node.type);\n\n if (\n hydratable === null ||\n !hydrationHost.canHydrateInstance(hydratable, type, node.props)\n ) {\n throwHydrationMismatch(root, node, `<${type}>`);\n }\n\n node.stateNode = hydratable as Instance;\n recordCommitWork(root.commitIndex, node, UpdateFlag | HydrationFlag);\n root.hydrationParent = node;\n root.nextHydratableInstance = hydrationHost.getFirstHydratableChild(\n hydratable as Instance,\n node.props,\n );\n\n return true;\n }\n\n function tryHydrateText(node: F, root: R): boolean {\n if (!shouldHydrateFiber(root, node)) return false;\n\n const hydrationHost = requireHydrationHostConfig();\n const hydratable = root.nextHydratableInstance;\n const text = String(node.props.nodeValue);\n const suppressHydrationWarning =\n (node.return?.tag === HostTag &&\n node.return.props.suppressHydrationWarning === true) ||\n canHydratePendingSuspenseTextMismatch(root);\n\n if (\n hydratable === null ||\n !hydrationHost.canHydrateTextInstance(\n hydratable,\n text,\n suppressHydrationWarning,\n )\n ) {\n throwHydrationMismatch(root, node, \"text\");\n }\n\n node.stateNode = hydratable as TextInstance;\n recordCommitWork(root.commitIndex, node, UpdateFlag);\n root.nextHydratableInstance =\n hydrationHost.getNextHydratableSibling(hydratable);\n\n return true;\n }\n\n function shouldHydrateFiber(root: R, node: F): boolean {\n return (\n root.isHydrating &&\n node.alternate === null &&\n node.stateNode === null &&\n !insideHydrationExemptHost(node)\n );\n }\n\n // A fresh host that rendered during hydration without claiming a DOM node\n // (its instance was created out-of-band) renders its subtree fresh, so\n // descendants must not consume the outer hydration cursor. The walk stops\n // at the nearest host ancestor, or at any cloned fiber: hydration only\n // occurs in fully fresh subtrees.\n function insideHydrationExemptHost(node: F): boolean {\n for (\n let parent = node.return;\n parent !== null && parent.alternate === null;\n parent = parent.return\n ) {\n if (parent.tag !== HostTag) continue;\n return hydrationBypassedHost(parent);\n }\n\n return false;\n }\n\n function completeHydration(node: F): void {\n const root = rootOf(node);\n\n if (\n node.tag === SuspenseTag &&\n (node.flags & HydrationFlag) !== 0 &&\n root.hydratingSuspenseBoundary === node\n ) {\n completeDehydratedSuspenseHydration(root, node);\n return;\n }\n\n if (\n node.tag === ActivityTag &&\n (node.flags & HydrationFlag) !== 0 &&\n root.hydratingActivityBoundary === node\n ) {\n if (root.nextHydratableInstance !== null) {\n throwHydrationMismatch(root, node, undefined, \" in Activity\");\n }\n leaveActivityHydration(root, node);\n return;\n }\n\n if (!root.isHydrating || root.hydrationParent !== node) return;\n\n if (\n root.nextHydratableInstance !== null &&\n !(\n node.tag === HostTag &&\n host.canRetainHydrationTail?.(node.stateNode as Instance) === true\n )\n ) {\n throwHydrationMismatch(root, node);\n }\n\n const hydrationHost = requireHydrationHostConfig();\n root.hydrationParent = nextHydrationParent(node.return);\n root.nextHydratableInstance =\n node.tag === HostTag\n ? hydrationHost.getNextHydratableSibling(node.stateNode as Instance)\n : null;\n }\n\n function completeDehydratedSuspenseHydration(root: R, node: F): void {\n const boundary = dehydratedSuspenseBoundary(node.alternate);\n\n if (boundary === null) return;\n\n if (\n boundary.status === \"completed\" &&\n !boundary.forceClientRender &&\n root.nextHydratableInstance !== boundary.end\n ) {\n throwHydrationMismatch(\n root,\n node,\n undefined,\n \" in Suspense\",\n boundary.id ?? undefined,\n );\n }\n\n leaveSuspenseHydration(root, node, boundary);\n }\n\n function nextHydrationParent(node: F | null): F | null {\n for (let parent = node; parent !== null; parent = parent.return) {\n if (\n parent.tag === RootTag ||\n parent.tag === HostTag ||\n (parent.tag === SuspenseTag &&\n (parent.flags & HydrationFlag) !== 0 &&\n dehydratedSuspenseBoundary(parent.alternate) !== null) ||\n (parent.tag === ActivityTag &&\n (parent.flags & HydrationFlag) !== 0 &&\n fiberActivityState(parent)?.dehydrated != null)\n ) {\n return parent;\n }\n }\n\n return null;\n }\n\n function firstWithinSuspenseBoundary(\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): HostNode<Instance, TextInstance> | null {\n const first = requireHydrationHostConfig().getNextHydratableSibling(\n boundary.start,\n );\n return first === boundary.end ? null : first;\n }\n\n function nextAfterSuspenseBoundary(\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): HostNode<Instance, TextInstance> | null {\n return requireHydrationHostConfig().getNextHydratableSibling(boundary.end);\n }\n\n function requireHydrationHostConfig(): HostHydrationConfig<\n Container,\n Instance,\n TextInstance\n > {\n if (\n host.getFirstHydratableChild === undefined ||\n host.getNextHydratableSibling === undefined ||\n host.canHydrateInstance === undefined ||\n host.canHydrateTextInstance === undefined ||\n host.clearContainer === undefined\n ) {\n throw new Error(\"Hydration is not supported by this renderer.\");\n }\n\n return host as HostHydrationConfig<Container, Instance, TextInstance>;\n }\n\n // The message and the recoverable-error fields derive from two facts: what\n // was expected (`<div>`/\"text\"; undefined means an unexpected extra node)\n // and whether the hydration cursor was empty — the expected-node throw\n // sites all test root.nextHydratableInstance directly.\n function throwHydrationMismatch(\n root: R,\n node: F,\n expected?: string,\n where = \"\",\n boundaryId?: string,\n ): never {\n const nothing = root.nextHydratableInstance === null;\n const message =\n expected === undefined\n ? `found an extra DOM node${where}`\n : nothing\n ? `expected ${expected}, but found no DOM node`\n : `expected ${expected}`;\n const error = new Error(`Hydration mismatch: ${message}.`);\n queueRecoverableError(root, node, error, {\n actual:\n expected === undefined\n ? \"extra DOM node\"\n : nothing\n ? \"nothing\"\n : \"different DOM node\",\n boundaryId,\n expected,\n recovery: \"root\",\n source: \"hydration\",\n });\n throw new HydrationMismatchError(error.message);\n }\n\n function canBailout(node: F, root: R): boolean {\n return (\n node.alternate !== null &&\n (node.flags & PlacementFlag) === 0 &&\n node.props === node.alternate.memoizedProps &&\n !includesSomeLane(node.lanes, root.renderLanes) &&\n !contextDependenciesChanged(node, root)\n );\n }\n\n function contextDependenciesChanged(node: F, root: R): boolean {\n const dependencies = node.contextDependencies;\n if (dependencies === null) return false;\n\n for (const dependency of dependencies) {\n if (\n !Object.is(\n currentContextValue(root, dependency.context),\n dependency.memoizedValue,\n )\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n function currentContextValue(root: R, context: FigContext<unknown>): unknown {\n return root.contextValues.has(context)\n ? root.contextValues.get(context)\n : context.defaultValue;\n }\n\n function shouldUseHostTextContent(node: F, root = rootOf(node)): boolean {\n return (\n host.setTextContent !== undefined &&\n // A host created out-of-band during hydration (hoisted instance)\n // renders fresh: its text must replace any server content wholesale\n // rather than match against it.\n (!root.isHydrating || hydrationBypassedHost(node)) &&\n // Hydration adopted the text as a child fiber (it had to match the\n // server's text node); keep that shape on re-renders. Collapsing to\n // textContent would delete the adopted fiber and rewrite identical\n // text — flag noise that reads as a real mutation (and made view\n // transitions animate the first post-hydration commit).\n !adoptedSingleTextChild(node) &&\n hostTextContent(node.props.children) !== null\n );\n }\n\n function adoptedSingleTextChild(node: F): boolean {\n const child = node.alternate?.child ?? node.child;\n return child !== null && child.tag === TextTag && child.sibling === null;\n }\n\n function hydrationBypassedHost(node: F): boolean {\n return (\n node.alternate === null &&\n node.stateNode !== null &&\n (node.flags & HydrationFlag) === 0\n );\n }\n\n function resolveHoistedFiber(node: F, root: R): boolean {\n if (isHoistedFiber(node)) return true;\n if (\n node.tag !== HostTag ||\n node.stateNode !== null ||\n host.resolveHoistedInstance === undefined\n ) {\n return false;\n }\n\n const hydrating = shouldHydrateFiber(root, node);\n const instance = host.resolveHoistedInstance(\n String(node.type),\n node.props,\n hostParent(node),\n );\n if (instance === null) return false;\n\n requireHoistedAssetHostConfig();\n node.stateNode = instance;\n node.flags |= HoistedStaticFlag;\n // The resource lives out-of-band, so leave the hydration cursor for the\n // next ordinary sibling and route acquisition through placement commit.\n if (hydrating) node.flags |= PlacementFlag;\n return true;\n }\n\n function isHoistedFiber(node: F): boolean {\n return node.tag === HostTag && (node.flags & HoistedStaticFlag) !== 0;\n }\n\n function requireHoistedAssetHostConfig(): HostHoistedAssetConfig<\n Container,\n Instance,\n TextInstance\n > {\n if (hoistedAssetHostConfig !== null) return hoistedAssetHostConfig;\n\n if (\n host.resolveHoistedInstance === undefined ||\n host.commitHoistedInstance === undefined ||\n host.removeHoistedInstance === undefined ||\n host.updateHoistedInstance === undefined\n ) {\n throw new Error(\"Hoisted assets are not supported by this renderer.\");\n }\n\n hoistedAssetHostConfig = host as HostHoistedAssetConfig<\n Container,\n Instance,\n TextInstance\n >;\n return hoistedAssetHostConfig;\n }\n\n function renderFunction(node: F, root: R): void {\n // Hot reload: run the latest version of this component's family. In\n // production the whole block strips out.\n if (__DEV__) {\n if (hasRefreshHandler()) {\n node.type = resolveLatestType(node.type) as F[\"type\"];\n }\n }\n prepareHookRender(node, root);\n\n const previousDispatcher = setCurrentDispatcher(dispatcher);\n const previousDataStore = setCurrentDataStore(root.dataStore);\n try {\n if (__DEV__) {\n // Strict shadow pass: invoke the component once and discard every\n // trace so impure renders surface in development. Skipping\n // reconciliation keeps the pass free of child and deletion effects.\n const consumedBefore = root.consumedPendingQueues.length;\n const nextClientIdBefore = root.nextClientId;\n const shadowResult = (node.type as Component)(node.props);\n // Discarded promise children can still reject. Observe them without\n // comparing identities: mount-time useMemo intentionally recomputes\n // between the passes, while the committed result owns rendering.\n observeDiscardedPromiseChildren(shadowResult);\n if (currentHook !== null) throw hookOrderError(\"fewer\");\n restoreConsumedPendingQueues(root, consumedBefore);\n // Client ids are attempt-scoped during the strict shadow pass: the\n // real invocation must observe the same allocation sequence.\n root.nextClientId = nextClientIdBefore;\n prepareHookRender(node, root);\n node.effects = null;\n }\n reconcileCurrentChildren(\n node,\n (node.type as Component)(node.props),\n root,\n );\n if (currentHook !== null) throw hookOrderError(\"fewer\");\n } finally {\n setCurrentDataStore(previousDataStore);\n setCurrentDispatcher(previousDispatcher);\n renderingFiber = null;\n currentHook = null;\n workInProgressHook = null;\n localIdCounter = 0;\n }\n }\n\n function prepareHookRender(node: F, root: R): void {\n renderingFiber = node;\n currentHook = node.alternate?.memoizedState ?? null;\n workInProgressHook = null;\n localIdCounter = 0;\n node.memoizedState = null;\n node.contextDependencies = null;\n root.dataStore.resetDataDependencies(node);\n node.dataDependenciesDirty = true;\n recordCommitWork(root.commitIndex, node);\n }\n\n function beginSuspense(node: F, hasOwnWork: boolean): void {\n const root = rootOf(node);\n const previousSuspenseState = fiberSuspenseState(node.alternate);\n\n node.boundaryState = null;\n\n if (previousSuspenseState?.kind === \"dehydrated\") {\n if (!hasOwnWork) {\n node.boundaryState = previousSuspenseState;\n return;\n }\n hydrateDehydratedSuspenseBoundary(node, previousSuspenseState);\n return;\n }\n\n if (tryDehydrateSuspenseBoundary(node)) return;\n\n node.suspenseQueueStart = root.consumedPendingQueues.length;\n\n if (previousSuspenseState === null) {\n beginSuspensePrimary(node, suspensePrimaryFiber(node.alternate));\n return;\n }\n\n const currentPrimary = suspensePrimaryFiber(node.alternate);\n if (currentPrimary !== null) {\n // Reveal of a re-suspended boundary: the committed primary was kept hidden\n // and its lanes were cleared (so blocked offscreen work could not busy-loop\n // the scheduler while suspended). Updates dispatched during the fallback\n // were parked in their hook queues. Mark the kept-hidden subtree with the\n // current render lanes so it re-renders instead of bailing out and adopting\n // the frozen clone — that re-render is what applies the parked updates.\n markSubtreeLanes(currentPrimary.child, root.renderLanes);\n }\n beginSuspensePrimary(\n node,\n currentPrimary,\n previousSuspenseState.primaryChild,\n );\n appendDeletions(node, suspenseFallbackFiber(node.alternate));\n }\n\n function markSubtreeLanes(node: F | null, lanes: Lanes): void {\n for (let child = node; child !== null; child = child.sibling) {\n child.lanes = mergeLanes(child.lanes, lanes);\n child.childLanes = mergeLanes(child.childLanes, lanes);\n markSubtreeLanes(child.child, lanes);\n }\n }\n\n function beginSuspensePrimary(\n boundary: F,\n currentPrimary: F | null,\n capturedPrimary: F | null = null,\n ): void {\n if (capturedPrimary !== null) hasHiddenBoundaries = true;\n const primary = suspensePrimaryWorkInProgress(\n boundary,\n currentPrimary,\n \"visible\",\n capturedPrimary,\n );\n boundary.child = primary;\n }\n\n function suspensePrimaryWorkInProgress(\n boundary: F,\n currentPrimary: F | null,\n mode: \"visible\" | \"hidden\",\n capturedPrimary: F | null = null,\n ): F {\n const props: Props = { mode, children: boundary.props.children };\n\n const primary =\n currentPrimary === null\n ? fiber(ActivityTag, null, null, props, null)\n : createWorkInProgress(currentPrimary, props);\n\n primary.hiddenState = {\n currentFirstChild: capturedPrimary,\n };\n primary.index = 0;\n primary.return = boundary;\n primary.sibling = null;\n return primary;\n }\n\n function suspenseFallbackWorkInProgress(\n boundary: F,\n currentFallback: F | null,\n index: number,\n ): F {\n const props: Props = { children: boundary.props.fallback };\n const fallback =\n currentFallback?.tag === FragmentTag\n ? createWorkInProgress(currentFallback, props)\n : fiber(FragmentTag, null, null, props, null);\n\n fallback.index = index;\n fallback.return = boundary;\n fallback.sibling = null;\n if (currentFallback === null) fallback.flags |= PlacementFlag;\n return fallback;\n }\n\n function suspensePrimaryFiber(node: F | null | undefined): F | null {\n const child = node?.child ?? null;\n return child?.tag === ActivityTag && child.type === null ? child : null;\n }\n\n function suspenseFallbackFiber(node: F | null | undefined): F | null {\n const primary = suspensePrimaryFiber(node);\n return primary === null ? (node?.child ?? null) : primary.sibling;\n }\n\n function cloneSuspendedPrimary(node: F | null, parent: F): F | null {\n let first: F | null = null;\n let previous: F | null = null;\n\n for (let current = node; current !== null; current = current.sibling) {\n const clone = createWorkInProgress(current, current.props);\n clone.return = parent;\n clone.child = cloneSuspendedPrimary(current.child, clone);\n clone.sibling = null;\n // The cloned primary is committed hidden while the boundary stays\n // suspended; it has no schedulable work. Any pending update inside it is\n // parked in its hook queue (restored as NoLane) and applied when the\n // suspense ping retries the reveal — clearing the lanes here keeps a\n // downgraded (OffscreenLane) update from busy-looping the scheduler via\n // the post-commit \"let idle retries proceed\" re-mark.\n clone.lanes = NoLanes;\n clone.childLanes = NoLanes;\n if (previous === null) first = clone;\n else previous.sibling = clone;\n previous = clone;\n }\n\n return first;\n }\n\n function tryDehydrateSuspenseBoundary(node: F): boolean {\n const root = rootOf(node);\n if (!shouldHydrateFiber(root, node)) return false;\n if (host.getSuspenseBoundary === undefined) return false;\n\n const hydratable = root.nextHydratableInstance;\n if (hydratable === null) return false;\n\n const boundary = host.getSuspenseBoundary(hydratable);\n if (boundary === null) return false;\n\n node.boundaryState = {\n boundary,\n idPath: hydrationIdPath(root, node),\n kind: \"dehydrated\",\n wasPending: boundary.status === \"pending\",\n };\n host.registerSuspenseBoundaryRetry?.(boundary, () =>\n scheduleFiber(node, DefaultLane),\n );\n root.nextHydratableInstance = nextAfterSuspenseBoundary(boundary);\n return true;\n }\n\n function hydrateDehydratedSuspenseBoundary(\n node: F,\n state: DehydratedSuspenseState<Instance, TextInstance>,\n ): void {\n const boundary = state.boundary;\n abandonedHydrationBoundaries.delete(node);\n if (node.alternate !== null) {\n abandonedHydrationBoundaries.delete(node.alternate);\n }\n\n if (!boundary.forceClientRender) {\n if (boundary.status === \"completed\") {\n enterSuspenseHydration(node, boundary);\n node.boundaryState = null;\n node.flags |= HydrationFlag;\n beginSuspensePrimary(node, suspensePrimaryFiber(node.alternate));\n return;\n }\n\n if (boundary.status === \"pending\") {\n node.boundaryState = state;\n return;\n }\n }\n\n if (boundary.status === \"client-rendered\") {\n queueClientRenderedSuspenseError(rootOf(node), node, boundary);\n }\n\n node.boundaryState = null;\n node.flags |= HydrationFlag;\n beginSuspensePrimary(node, suspensePrimaryFiber(node.alternate));\n }\n\n function queueClientRenderedSuspenseError(\n root: R,\n node: F,\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): void {\n const boundaryError = boundary.error;\n const error = new Error(\n boundaryError?.message ??\n \"The server could not finish this Suspense boundary. Switched to client rendering.\",\n );\n if (boundaryError?.digest !== undefined) {\n (error as Error & { digest?: string }).digest = boundaryError.digest;\n }\n queueRecoverableError(root, node, error, {\n boundaryId: boundary.id ?? undefined,\n digest: boundaryError?.digest,\n recovery: \"suspense\",\n source: \"server\",\n });\n }\n\n function canHydratePendingSuspenseTextMismatch(root: R): boolean {\n const boundary = root.hydratingSuspenseBoundary;\n const state = fiberSuspenseState(boundary?.alternate);\n return state?.kind === \"dehydrated\" && state.wasPending;\n }\n\n function requireActivityHydrationHostConfig(): ActivityHydrationHostConfig {\n if (activityHydrationHostConfig !== null)\n return activityHydrationHostConfig;\n\n if (\n host.getActivityBoundary === undefined ||\n host.getFirstActivityHydratable === undefined ||\n host.commitHydratedActivityBoundary === undefined\n ) {\n throw new Error(\n \"Activity hydration requires getActivityBoundary, getFirstActivityHydratable, and commitHydratedActivityBoundary.\",\n );\n }\n\n activityHydrationHostConfig = host as ActivityHydrationHostConfig;\n return activityHydrationHostConfig;\n }\n\n function tryDehydrateActivityBoundary(\n root: R,\n node: F,\n state: ActivityState<Instance>,\n ): boolean {\n if (!shouldHydrateFiber(root, node)) return false;\n if (host.getActivityBoundary === undefined) return false;\n\n const hydratable = root.nextHydratableInstance;\n if (hydratable === null) return false;\n\n const boundary = host.getActivityBoundary(hydratable);\n if (boundary === null) return false;\n\n // A detected boundary commits the host to the full lifecycle; partial\n // configs fail loudly here instead of silently never revealing content.\n requireActivityHydrationHostConfig();\n\n hasHiddenBoundaries = true;\n state.dehydrated = {\n boundary,\n idPath: hydrationIdPath(root, node),\n };\n root.nextHydratableInstance =\n requireHydrationHostConfig().getNextHydratableSibling(boundary);\n return true;\n }\n\n function hydrateDehydratedActivityBoundary(root: R, node: F): void {\n enterActivityHydration(root, node);\n node.flags |= HydrationFlag | VisibilityFlag;\n reconcile(node, node.props.children, null, false);\n }\n\n function enterActivityHydration(root: R, node: F): void {\n const boundary = dehydratedActivityBoundary(node);\n if (boundary === null) {\n throw new Error(\"Expected a dehydrated Activity boundary.\");\n }\n\n root.isHydrating = true;\n root.hydrationParent = node;\n root.hydratingActivityBoundary = node;\n root.nextHydratableInstance =\n requireActivityHydrationHostConfig().getFirstActivityHydratable(boundary);\n }\n\n function leaveActivityHydration(root: R, node: F): void {\n root.hydrationParent = nextHydrationParent(node.return);\n root.nextHydratableInstance = null;\n root.hydratingActivityBoundary = null;\n root.isHydrating = false;\n }\n\n // Any throw while hydrating a dehydrated Activity abandons the attempt. For\n // mismatches, clear the dehydrated template before root recovery so the\n // forced client render cannot recurse into the same failed hydration.\n function abandonActivityHydration(root: R, forceClientRender = false): void {\n if (forceClientRender) {\n const state = fiberActivityState(root.hydratingActivityBoundary);\n if (state !== null) state.dehydrated = null;\n }\n deactivateHydration(root);\n }\n\n function enterSuspenseHydration(\n node: F,\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): void {\n const root = rootOf(node);\n root.isHydrating = true;\n root.hydrationParent = node;\n root.hydratingSuspenseBoundary = node;\n root.nextHydratableInstance = firstWithinSuspenseBoundary(boundary);\n }\n\n function leaveSuspenseHydration(\n root: R,\n node: F,\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): void {\n root.hydrationParent = nextHydrationParent(node.return);\n root.nextHydratableInstance = nextAfterSuspenseBoundary(boundary);\n root.hydratingSuspenseBoundary = null;\n root.isHydrating = false;\n }\n\n function beginErrorBoundary(node: F): void {\n const previousErrorState = fiberErrorBoundaryState(node.alternate);\n\n node.boundaryState = previousErrorState;\n\n reconcileCurrentChildren(\n node,\n previousErrorState === null\n ? node.props.children\n : errorBoundaryFallback(node, previousErrorState),\n );\n }\n\n function errorBoundaryFallback(node: F, state: ErrorBoundaryState): FigNode {\n const fallback = node.props.fallback as ErrorBoundaryProps[\"fallback\"];\n return typeof fallback === \"function\" && !isThenable(fallback)\n ? fallback(state.error, state.info)\n : (fallback as FigNode);\n }\n\n function beginPortal(node: F): void {\n reconcileCurrentChildren(node, node.props.children as FigNode);\n }\n\n function updateStateHook<S>(\n initialState: S | (() => S),\n ): [S, StateSetter<S>] {\n const hook = updateQueuedHook(StateHook, initialState);\n const queue = hook.queue;\n const fiber = requireRenderingFiber();\n\n // The queue object persists across renders, so the dispatch created on\n // mount is always present afterwards.\n queue.dispatch ??= (action: StateUpdate<S>) => {\n if (renderingFiber !== null) {\n throw new Error(\n \"State updates are not allowed while rendering a component.\",\n );\n }\n\n scheduleHookUpdate(fiber, queue, action, requestUpdateLane());\n };\n\n return [hook.memoizedState, queue.dispatch];\n }\n\n function updateActionStateHook<S, Args extends unknown[]>(\n action: ActionStateAction<S, Args>,\n initialState: S,\n ): [S, ActionStateRunner<Args>, boolean] {\n const hook: Hook<ActionState<S, Args>> = updateQueuedHook(\n ActionStateHook,\n () => createActionState(action, initialState),\n );\n const queue = hook.queue;\n const fiber = requireRenderingFiber();\n const instance = hook.memoizedState.instance;\n const nextState = { ...hook.memoizedState, action };\n hook.memoizedState = nextState;\n if (hook.baseQueue === null) {\n hook.baseState = nextState;\n } else {\n hook.baseState = { ...hook.baseState, action };\n }\n\n if (instance.runner === null) {\n const updatePending = (delta: 1 | -1, lane: Lane) => {\n scheduleHookUpdate(\n fiber,\n queue,\n (state) => ({\n ...state,\n pending: Math.max(0, state.pending + delta),\n }),\n lane,\n );\n };\n const finish = (lane: Lane, error: unknown, ...value: [] | [S]) => {\n scheduleHookUpdate(\n fiber,\n queue,\n (state) => ({\n ...state,\n error,\n pending: Math.max(0, state.pending - 1),\n value: value.length === 0 ? state.value : value[0],\n }),\n lane,\n );\n };\n\n instance.runner = (...args: Args) => {\n if (renderingFiber !== null) {\n throw new Error(\n \"Action state updates are not allowed during render.\",\n );\n }\n\n // Last-run-wins: a new run aborts and retires the previous one,\n // releasing its pending slot now (on DefaultLane — the retired run's\n // held transition lane may never render). A retired run's settlement\n // — value or rejection — never touches state, error, or pending.\n runLatest(\n instance,\n fiber,\n (signal) => instance.action(instance.value, ...args, signal),\n updatePending,\n (lane, value, failed) => {\n if (failed) finish(lane, value);\n else finish(lane, NoActionStateError, value as S);\n },\n );\n };\n }\n\n if (hook.memoizedState.error !== NoActionStateError) {\n throw hook.memoizedState.error;\n }\n\n return [\n hook.memoizedState.value,\n instance.runner,\n hook.memoizedState.pending > 0,\n ];\n }\n\n function updateIdHook(): string {\n const fiber = requireRenderingFiber();\n const oldHook = updateHook(IdHook) as Hook<string> | null;\n const id =\n oldHook === null\n ? createFiberId(rootOf(fiber), fiber, localIdCounter)\n : oldHook.memoizedState;\n localIdCounter += 1;\n\n appendHook(createHook(IdHook, id));\n return id;\n }\n\n function updateMemoHook<T>(calculate: () => T, deps: DependencyList): T {\n requireRenderingFiber();\n const previous = (updateHook(MemoHook) as Hook<MemoState<T>> | null)\n ?.memoizedState;\n const state =\n previous !== undefined && areHookInputsEqual(deps, previous.deps)\n ? previous\n : { deps, value: calculate() };\n\n appendHook(createHook(MemoHook, state));\n return state.value;\n }\n\n function updateDeferredValueHook<T>(\n value: T,\n initialValue: T | undefined,\n hasInitialValue: boolean,\n ): T {\n const fiber = requireRenderingFiber();\n const oldHook = updateHook(DeferredValueHook) as Hook<T> | null;\n let next =\n oldHook === null\n ? initialDeferredValue(value, initialValue, hasInitialValue)\n : oldHook.memoizedState;\n\n if (!Object.is(next, value)) {\n if (isTransitionOrDeferredRender(rootOf(fiber))) {\n next = value;\n } else {\n scheduleFiber(fiber, DeferredLane);\n }\n }\n\n appendHook(createHook(DeferredValueHook, next));\n return next;\n }\n\n function initialDeferredValue<T>(\n value: T,\n initialValue: T | undefined,\n hasInitialValue: boolean,\n ): T {\n return hasInitialValue ? (initialValue as T) : value;\n }\n\n function isTransitionOrDeferredRender(root: R): boolean {\n return (\n includesOnlyTransitions(root.renderLanes) ||\n includesSomeLane(root.renderLanes, DeferredLane)\n );\n }\n\n function updateTransitionHook(): [boolean, StartTransition] {\n const initialState: TransitionState = {\n instance: { controller: null, generation: 0 },\n pendingCount: 0,\n start: null,\n };\n const hook: Hook<TransitionState> = updateQueuedHook(\n TransitionHook,\n initialState,\n );\n const queue = hook.queue;\n\n let start = hook.memoizedState.start;\n if (start === null) {\n const fiber = requireRenderingFiber();\n const updatePending = (delta: 1 | -1, lane: Lane) => {\n scheduleHookUpdate(\n fiber,\n queue,\n (state) => ({\n ...state,\n pendingCount: Math.max(0, state.pendingCount + delta),\n }),\n lane,\n );\n };\n\n const instance = hook.memoizedState.instance;\n start = (\n callback: (signal: AbortSignal) => void | PromiseLike<void>,\n options?: TransitionOptions,\n ) => {\n if (renderingFiber !== null) {\n throw new Error(\n \"Transitions cannot be started while rendering a component.\",\n );\n }\n\n // One cancellation domain per hook: a new start aborts and retires\n // the previous pending run, releasing its pending slot now so an\n // ignored signal or hung promise can never pin isPending. The\n // decrement goes to DefaultLane — the retired run's own transition\n // lane is held until its callback settles (possibly never), and a\n // cancelled run has nothing to commit atomically with.\n runLatest(\n instance,\n fiber,\n callback,\n updatePending,\n (lane, value, failed, asynchronous) => {\n updatePending(-1, lane);\n if (failed) {\n if (!asynchronous) throw value;\n queueMicrotask(() => {\n throw value;\n });\n }\n },\n options,\n );\n };\n hook.memoizedState.start = start;\n }\n\n return [hook.memoizedState.pendingCount > 0, start];\n }\n\n // A transition and an action are the same cancellable effect up to how\n // their result is folded into state. This owns the shared protocol: one\n // scope, one generation token, and settlements from only the latest run.\n function runLatest<T>(\n instance: RunInstance,\n fiber: F,\n run: (signal: AbortSignal) => T | PromiseLike<T>,\n updatePending: (delta: 1 | -1, lane: Lane) => void,\n settled: (\n lane: Lane,\n value: unknown,\n failed: boolean,\n asynchronous: boolean,\n ) => void,\n options?: TransitionOptions,\n ): void {\n if (retireRun(instance)) updatePending(-1, DefaultLane);\n const lane = claimNextTransitionLane();\n const controller = new AbortController();\n const generation = (instance.generation += 1);\n instance.controller = controller;\n updatePending(1, SyncLane);\n\n const settle = (\n value: unknown,\n failed: boolean,\n asynchronous: boolean,\n ): void => {\n if (generation !== instance.generation) return;\n instance.controller = null;\n settled(lane, value, failed, asynchronous);\n };\n\n // A run started after the owner unmounted (deletion severs the fiber's\n // root path) still executes for its side effects, just without an\n // ambient data store; its settlements schedule into the void.\n const store = rootOfOrNull(fiber)?.dataStore;\n let result: T | PromiseLike<T>;\n try {\n const invoke = () =>\n runWithTransitionLane(lane, () => run(controller.signal), options);\n result = store === undefined ? invoke() : store.run(invoke);\n } catch (error) {\n settle(error, true, false);\n return;\n }\n\n if (!isThenable(result)) {\n settle(result, false, false);\n return;\n }\n\n result.then(\n (value) => settle(value, false, true),\n (error: unknown) => settle(error, true, true),\n );\n }\n\n function requireRenderingFiber(): F {\n if (renderingFiber === null) {\n throw new Error(\"Hooks can only be called while rendering a component.\");\n }\n\n return renderingFiber;\n }\n\n function updateQueuedHook<S>(\n kind: QueuedHookKind,\n initialState: S | (() => S),\n ): Hook<S> {\n const fiber = requireRenderingFiber();\n const oldHook = updateHook(kind) as Hook<S> | null;\n const hook: Hook<S> =\n oldHook === null\n ? createHook(kind, resolveInitialState(initialState))\n : { ...oldHook, next: null };\n\n appendHook(hook);\n\n const root = rootOf(fiber);\n const pending = hook.queue.pending;\n if (pending !== null) {\n hook.baseQueue = consumePendingHookQueue(root, hook, pending);\n }\n\n if (hook.baseQueue !== null) {\n processHookQueue(hook, root.renderLanes);\n }\n\n return hook;\n }\n\n function updateExternalStoreHook<T>(\n subscribe: ExternalStoreSubscribe,\n getSnapshot: () => T,\n getServerSnapshot?: () => T,\n ): T {\n const fiber = requireRenderingFiber();\n const oldHook = updateHook(ExternalStoreHook) as Hook<\n ExternalStoreState<T, F>\n > | null;\n const root = rootOf(fiber);\n const value = readExternalStoreSnapshot(\n root,\n getSnapshot,\n getServerSnapshot,\n );\n const instance = oldHook?.memoizedState.instance ?? {\n committedSubscribe: null,\n getSnapshot,\n owner: null,\n unsubscribe: null,\n value,\n };\n const state: ExternalStoreState<T, F> = {\n getSnapshot,\n instance,\n subscribe,\n value,\n };\n\n recordCommitWork(root.commitIndex, fiber, StoreConsistencyFlag);\n appendHook(createHook(ExternalStoreHook, state));\n return value;\n }\n\n function updateStableEventHook<Args extends unknown[], Result>(\n handler: (...args: Args) => Result,\n ): (...args: StableEventCallerArgs<Args>) => Result {\n requireRenderingFiber();\n const oldHook = updateHook(\n StableEventHook,\n ) as Hook<StableEventState> | null;\n const instance =\n oldHook?.memoizedState.instance ?? createStableEventInstance();\n\n appendHook(\n createHook(StableEventHook, {\n instance,\n next: handler as StableEventHandler,\n }),\n );\n return instance.stable as (...args: StableEventCallerArgs<Args>) => Result;\n }\n\n function createStableEventInstance(): StableEventInstance {\n const instance: StableEventInstance = {\n controller: null,\n handler: null,\n live: false,\n stable: (...args) => {\n if (renderingFiber !== null) {\n throw new Error(\n \"Stable events cannot be called while rendering a component.\",\n );\n }\n\n const handler = instance.handler;\n if (handler === null) {\n throw new Error(\n \"Stable events cannot be called before their first commit.\",\n );\n }\n\n instance.controller?.abort();\n instance.controller = new AbortController();\n if (!instance.live) instance.controller.abort();\n return handler(...args, instance.controller.signal);\n },\n };\n\n return instance;\n }\n\n function readExternalStoreSnapshot<T>(\n root: R,\n getSnapshot: () => T,\n getServerSnapshot?: () => T,\n ): T {\n if (!root.isHydrating) return getSnapshot();\n\n if (getServerSnapshot === undefined) {\n throw new Error(\n \"useSyncExternalStore requires getServerSnapshot during hydration.\",\n );\n }\n\n return getServerSnapshot();\n }\n\n function processHookQueue<S>(hook: Hook<S>, renderLanes: Lanes): void {\n const baseQueue = hook.baseQueue;\n if (baseQueue === null) return;\n\n let state = hook.baseState;\n let newBaseState = state;\n let newBaseQueue: HookUpdate<S> | null = null;\n let update = baseQueue.next;\n\n do {\n if (\n update.lane !== NoLane &&\n !includesSomeLane(renderLanes, update.lane)\n ) {\n const cloneUpdate = cloneUpdateNode(update);\n // Pin the rebase point at the FIRST skipped update (mergeQueues\n // returns the appended tail, so comparing against cloneUpdate would\n // re-snapshot on every skip and lose earlier skipped reductions).\n if (newBaseQueue === null) newBaseState = state;\n newBaseQueue = mergeQueues(newBaseQueue, cloneUpdate);\n } else {\n state =\n typeof update.action === \"function\"\n ? (update.action as (previousState: S) => S)(state)\n : update.action;\n\n if (newBaseQueue !== null) {\n const cloneUpdate = cloneUpdateNode(update);\n cloneUpdate.lane = NoLane;\n newBaseQueue = mergeQueues(newBaseQueue, cloneUpdate);\n }\n }\n update = update.next;\n } while (update !== baseQueue.next);\n\n hook.memoizedState = state;\n hook.baseState = newBaseQueue === null ? state : newBaseState;\n hook.baseQueue = newBaseQueue;\n }\n\n function scheduleHookUpdate<S>(\n fiber: F,\n queue: HookQueue<S>,\n action: StateUpdate<S>,\n lane: Lane,\n ): void {\n if (__DEV__ && currentCommitEffectPhase === BeforeLayoutEffect) {\n throw new Error(\n \"State updates are not allowed from useBeforeLayout effects.\",\n );\n }\n\n lane = hiddenSubtreeLane(fiber, lane);\n const update = new HookUpdate(action, lane);\n queue.pending = mergeQueues(queue.pending, update);\n scheduleFiber(fiber, lane);\n }\n\n // Updates inside hidden boundaries are downgraded to the\n // offscreen lane at schedule time, so normal renders never descend for\n // hidden work and idle renders prerender it. A boundary mid-transition\n // (generations disagree) is treated as visible so updates are never\n // wrongly deferred.\n function hiddenSubtreeLane(node: F, lane: Lane): Lane {\n if (!hasHiddenBoundaries || lane === OffscreenLane) return lane;\n\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if (\n parent.tag === ActivityTag &&\n fiberActivityState(parent)?.hidden === true\n ) {\n return OffscreenLane;\n }\n }\n\n return lane;\n }\n\n function createFiberId(root: R, fiber: F, localId: number): string {\n if (!root.isHydrating || insideHydrationExemptHost(fiber)) {\n const id = root.nextClientId;\n root.nextClientId += 1;\n // Server paths contain only lowercase base-32 segments. The uppercase\n // client discriminator therefore cannot collide with hydrated ids.\n return `${root.identifierPrefix}fig-C-${id.toString(32)}`;\n }\n\n return `${root.identifierPrefix}fig-${hydrationIdPath(root, fiber)}-${localId.toString(32)}`;\n }\n\n function hydrationIdPath(root: R, fiber: F): string {\n const suspense = root.hydratingSuspenseBoundary;\n if (suspense !== null) {\n const state = fiberSuspenseState(suspense.alternate);\n if (state?.kind === \"dehydrated\") {\n return appendIdPath(state.idPath, fiberPath(fiber, suspense));\n }\n }\n\n const activity = root.hydratingActivityBoundary;\n if (activity !== null) {\n const base = fiberActivityState(activity)?.dehydrated?.idPath ?? null;\n if (base !== null) {\n return appendIdPath(base, fiberPath(fiber, activity));\n }\n }\n\n return fiberPath(fiber, null);\n }\n\n function appendIdPath(base: string, relative: string): string {\n return relative === \"\" ? base : `${base}-${relative}`;\n }\n\n function fiberPath(fiber: F, stopBefore: F | null): string {\n const parts: string[] = [];\n\n for (\n let node: F | null = fiber;\n node !== null && node !== stopBefore && node.tag !== RootTag;\n node = node.return\n ) {\n // Suspense inserts a private Activity fiber around its primary tree.\n // The server has no corresponding element, so it is transparent to the\n // canonical id path just like React's implementation-only indirections.\n if (node.tag !== ActivityTag || node.type !== null) {\n parts.push(node.index.toString(32));\n }\n }\n\n return parts.reverse().join(\"-\");\n }\n\n function consumePendingHookQueue<S>(\n root: R,\n hook: Hook<S>,\n pending: HookUpdate<S>,\n ): HookUpdate<S> | null {\n const queue = hook.queue;\n queue.pending = null;\n root.consumedPendingQueues.push({\n queue: queue as HookQueue<unknown>,\n pending: pending as HookUpdate<unknown>,\n });\n return mergeQueues(cloneQueue(hook.baseQueue), cloneQueueNodes(pending));\n }\n\n function appendHook(hook: Hook): void {\n if (renderingFiber === null) return;\n\n if (workInProgressHook === null) {\n renderingFiber.memoizedState = hook;\n } else {\n workInProgressHook.next = hook;\n }\n\n workInProgressHook = hook;\n }\n\n function updateEffectHook(\n phase: EffectPhase,\n create: EffectCallback,\n deps?: DependencyList,\n ): void {\n const fiber = requireRenderingFiber();\n const oldHook = updateHook(phase) as Hook<Effect> | null;\n const nextDeps = deps ?? null;\n const previousEffect = oldHook?.memoizedState ?? null;\n const hasChanged =\n previousEffect === null ||\n previousEffect.controller === null ||\n previousEffect.controller.signal.aborted ||\n !areHookInputsEqual(nextDeps, previousEffect.deps);\n const effect: Effect = {\n phase,\n create,\n controller: previousEffect?.controller ?? null,\n deps: nextDeps,\n owner: fiber as Fiber<unknown, unknown, unknown>,\n strictRan: __DEV__ && previousEffect?.strictRan === true,\n };\n const hook = createHook(phase, effect);\n\n appendHook(hook);\n\n if (hasChanged) {\n fiber.effects ??= [];\n fiber.effects.push(effect);\n const root = rootOf(fiber);\n recordCommitWork(root.commitIndex, fiber, EffectFlag);\n markCommitEffectPhase(root, phase);\n }\n }\n\n function readContextValue<T>(context: FigContext<T>): T {\n if (renderingFiber === null) {\n throw new Error(\n \"readContext can only be called while rendering a component.\",\n );\n }\n\n const root = rootOf(renderingFiber);\n const contextKey = context as FigContext<unknown>;\n const value = currentContextValue(root, contextKey);\n\n addContextDependency(renderingFiber, contextKey, value);\n return value as T;\n }\n\n function pushContextProvider(node: F, root = rootOf(node)): void {\n const context = node.type as FigContext<unknown>;\n const values = root.contextValues;\n const hadPrevious = values.has(context);\n const previous = values.get(context);\n values.set(context, node.props.value);\n root.contextStack.push({ context, hadPrevious, previous, provider: node });\n }\n\n function popContextProvider(node: F): void {\n const root = rootOf(node);\n const entry = root.contextStack.pop();\n if (entry === undefined || entry.provider !== node) {\n resetContextStack(root);\n return;\n }\n restoreContextEntry(root, entry);\n }\n\n function unwindContextTo(root: R, node: F | null): void {\n while (root.contextStack.length > 0) {\n const entry = root.contextStack[root.contextStack.length - 1];\n if (node !== null && isAncestorOf(entry.provider, node)) return;\n restoreContextEntry(\n root,\n root.contextStack.pop() as ContextStackEntry<\n Container,\n Instance,\n TextInstance\n >,\n );\n }\n }\n\n function restoreContextEntry(\n root: R,\n entry: ContextStackEntry<Container, Instance, TextInstance>,\n ): void {\n if (entry.hadPrevious) {\n root.contextValues.set(entry.context, entry.previous);\n } else {\n root.contextValues.delete(entry.context);\n }\n }\n\n function resetContextStack(root: R): void {\n root.contextValues = new Map();\n root.contextStack = [];\n }\n\n function isAncestorOf(ancestor: F, node: F): boolean {\n for (let parent: F | null = node; parent !== null; parent = parent.return) {\n if (parent === ancestor) return true;\n }\n return false;\n }\n\n function addContextDependency(\n node: F,\n context: FigContext<unknown>,\n memoizedValue: unknown,\n ): void {\n node.contextDependencies ??= [];\n const dependency = contextDependency(node, context);\n\n if (dependency === null) {\n node.contextDependencies.push({ context, memoizedValue });\n } else {\n dependency.memoizedValue = memoizedValue;\n }\n }\n\n function contextDependency(\n node: F,\n context: FigContext<unknown>,\n ): ContextDependency | null {\n return (\n node.contextDependencies?.find(\n (dependency) => dependency.context === context,\n ) ?? null\n );\n }\n\n function appendContextDependencies(\n list: FigContext<unknown>[] | null,\n dependencies: ContextDependency[] | null,\n ): FigContext<unknown>[] | null {\n if (dependencies === null) return list;\n\n let next = list;\n for (const dependency of dependencies) {\n next = appendContext(next, dependency.context);\n }\n return next;\n }\n\n function appendContextList(\n list: FigContext<unknown>[] | null,\n contexts: FigContext<unknown>[] | null,\n ): FigContext<unknown>[] | null {\n if (contexts === null) return list;\n\n let next = list;\n for (const context of contexts) next = appendContext(next, context);\n return next;\n }\n\n function appendContext(\n list: FigContext<unknown>[] | null,\n context: FigContext<unknown>,\n ): FigContext<unknown>[] {\n if (list === null) return [context];\n if (!list.includes(context)) list.push(context);\n return list;\n }\n\n function contextListIncludes(\n list: FigContext<unknown>[] | null,\n context: FigContext<unknown>,\n ): boolean {\n return list?.includes(context) === true;\n }\n\n function updateHook(kind: HookKind): Hook | null {\n const hook = currentHook;\n\n if (hook === null) {\n if (didRenderBefore(renderingFiber)) throw hookOrderError(\"more\");\n return null;\n }\n\n if (hook.kind !== kind) {\n throw new Error(\n `Hook order changed: expected ${hookKindName(hook.kind)}, ` +\n `received ${hookKindName(kind)}.`,\n );\n }\n\n currentHook = hook.next;\n return hook;\n }\n\n function didRenderBefore(node: F | null): boolean {\n const previous = node?.alternate ?? null;\n return previous !== null && previous.memoizedProps !== null;\n }\n\n function hookOrderError(direction: \"fewer\" | \"more\"): Error {\n return new Error(\n `Rendered ${direction} hooks than during the previous render.`,\n );\n }\n\n function complete(node: F): void {\n completeHydration(node);\n\n let child = node.child;\n let childLanes = NoLanes;\n let subtreeFlags = NoFlags;\n let contextSubtreeDependencies: FigContext<unknown>[] | null = null;\n\n while (child !== null) {\n childLanes = mergeLanes(childLanes, child.lanes);\n childLanes = mergeLanes(childLanes, child.childLanes);\n subtreeFlags |= childSubtreeFlags(child);\n contextSubtreeDependencies = appendContextDependencies(\n contextSubtreeDependencies,\n child.contextDependencies,\n );\n contextSubtreeDependencies = appendContextList(\n contextSubtreeDependencies,\n child.contextSubtreeDependencies,\n );\n child = child.sibling;\n }\n\n if (isNewHostInstance(node)) {\n host.finalizeInitialInstance?.(node.stateNode as Instance, node.props);\n if (!setInitialHostTextContent(node)) {\n // A reused instance (re-assembled on Suspense reveal) may still hold\n // stale children from before the fallback; clear before re-appending.\n // Gated on a reused node (alternate) with child fibers, so fresh mounts\n // and content set via props (innerHTML/textarea) are left untouched.\n if (node.alternate !== null && node.child !== null) {\n host.setTextContent?.(node.stateNode as Instance, \"\");\n }\n appendAllHostChildren(node.stateNode as Instance, node.child);\n }\n if (host.appendInitialChild !== undefined) node.flags |= AssembledFlag;\n }\n\n if (node.tag === ViewTransitionTag) node.flags |= ViewTransitionStaticFlag;\n\n if (\n node.tag === AssetsTag &&\n host.commitAssetResources !== undefined &&\n (node.committedProps === null ||\n node.committedProps.assets !== node.props.assets)\n ) {\n recordCommitWork(rootOf(node).commitIndex, node, AssetFlag);\n }\n\n node.childLanes = childLanes;\n node.subtreeFlags = subtreeFlags;\n node.contextSubtreeDependencies = contextSubtreeDependencies;\n node.memoizedProps = node.props;\n if (node.tag === ContextProviderTag && (node.flags & AdoptedFlag) === 0) {\n popContextProvider(node);\n }\n }\n\n function isNewHostInstance(node: F): boolean {\n // A host instance needs initial assembly until it has actually committed —\n // tracked by committedProps, not by alternate. A reused fiber from a\n // never-committed render (e.g. a Suspense primary subtree captured when a\n // child suspended, then revealed) has an alternate but null committedProps:\n // its host children were never appended into it, so it must assemble like a\n // fresh instance or its non-suspending descendants are dropped on reveal.\n return (\n node.tag === HostTag &&\n node.committedProps === null &&\n (node.flags & HydrationFlag) === 0\n );\n }\n\n function setInitialHostTextContent(node: F): boolean {\n const text = hostTextContent(node.props.children);\n if (text === null || host.setTextContent === undefined) return false;\n\n host.setTextContent(node.stateNode as Instance, text);\n return true;\n }\n\n function appendAllHostChildren(parent: Instance, child: F | null): void {\n if (host.appendInitialChild === undefined) return;\n\n for (let node = child; node !== null; node = node.sibling) {\n if (node.tag === PortalTag) continue;\n // Hoisted instances live out-of-band; commit acquires them instead.\n if (isHoistedFiber(node)) continue;\n\n if (node.tag === HostTag || node.tag === TextTag) {\n host.appendInitialChild(parent, hostNode(node));\n } else {\n appendAllHostChildren(parent, node.child);\n }\n }\n }\n\n function reconcileCurrentChildren(\n parent: F,\n children: FigNode,\n root = rootOf(parent),\n ): void {\n reconcile(parent, children, parent.alternate?.child ?? null, false, root);\n }\n\n function reconcile(\n parent: F,\n children: FigNode,\n currentFirstChild: F | null,\n forcePlacement: boolean,\n root = rootOf(parent),\n ): void {\n const nextChildren = collectChildren(children);\n const seenKeys = __DEV__ ? new Set<string>() : null;\n\n parent.child = null;\n parent.deletions = null;\n\n let previous: F | null = null;\n let old: F | null = currentFirstChild;\n let index = 0;\n let lastPlacedIndex = 0;\n const isHydratingNewTree =\n parent.tag !== PortalTag &&\n root.isHydrating &&\n currentFirstChild === null;\n\n for (; old !== null && index < nextChildren.length; index += 1) {\n const child = nextChildren[index];\n if (!sameChildKey(old, child, index) || !sameType(old, child)) {\n break;\n }\n validateChildKey(child, seenKeys);\n\n const next = createWorkInProgress(old, propsFor(child));\n next.index = index;\n next.return = parent;\n\n const updateFlags = hostUpdateFlags(old, next.props);\n if (updateFlags !== NoFlags) {\n recordCommitWork(root.commitIndex, next, updateFlags);\n }\n if (forcePlacement) {\n next.flags |= PlacementFlag;\n } else {\n lastPlacedIndex = old.index;\n }\n\n previous = appendChild(parent, previous, next);\n old = old.sibling;\n }\n\n if (index === nextChildren.length) {\n appendDeletions(parent, old);\n return;\n }\n\n if (old === null) {\n for (; index < nextChildren.length; index += 1) {\n validateChildKey(nextChildren[index], seenKeys);\n const next = fiberFrom(nextChildren[index]);\n if (next === null) continue;\n\n next.index = index;\n next.return = parent;\n if (!isHydratingNewTree) next.flags |= PlacementFlag;\n previous = appendChild(parent, previous, next);\n }\n return;\n }\n\n let existingByKey: Map<string, F> | null = null;\n let existingByIndex: Map<number, F> | null = null;\n for (; old !== null; old = old.sibling) {\n if (old.key === null) {\n (existingByIndex ??= new Map()).set(old.index, old);\n } else {\n (existingByKey ??= new Map()).set(String(old.key), old);\n }\n }\n\n for (; index < nextChildren.length; index += 1) {\n const child = nextChildren[index];\n validateChildKey(child, seenKeys);\n const key = childExplicitKey(child);\n const matched =\n key === null ? existingByIndex?.get(index) : existingByKey?.get(key);\n const canReuse = matched !== undefined && sameType(matched, child);\n const next = canReuse\n ? createWorkInProgress(matched, propsFor(child))\n : fiberFrom(child);\n\n if (next === null) continue;\n\n next.index = index;\n next.return = parent;\n\n if (canReuse) {\n if (key === null) {\n existingByIndex?.delete(index);\n } else {\n existingByKey?.delete(key);\n }\n const updateFlags = hostUpdateFlags(matched, next.props);\n if (updateFlags !== NoFlags) {\n recordCommitWork(root.commitIndex, next, updateFlags);\n }\n if (forcePlacement || matched.index < lastPlacedIndex) {\n next.flags |= PlacementFlag;\n } else {\n lastPlacedIndex = matched.index;\n }\n } else {\n if (!isHydratingNewTree) next.flags |= PlacementFlag;\n }\n\n previous = appendChild(parent, previous, next);\n }\n\n if (existingByKey !== null) {\n for (const child of existingByKey.values()) appendDeletion(parent, child);\n }\n if (existingByIndex !== null) {\n for (const child of existingByIndex.values()) {\n appendDeletion(parent, child);\n }\n }\n }\n\n function appendDeletions(parent: F, firstChild: F | null): void {\n for (let child = firstChild; child !== null; child = child.sibling) {\n appendDeletion(parent, child);\n }\n }\n\n function appendDeletion(parent: F, child: F): void {\n const root = rootOf(parent);\n parent.deletions ??= [];\n parent.deletions.push(child);\n root.needsCommitDeletions = true;\n recordCommitWork(root.commitIndex, parent, DeletionFlag);\n }\n\n function hostUpdateFlags(current: F, nextProps: Props): Flag {\n if (current.tag === TextTag) {\n return current.committedProps?.nodeValue !== nextProps.nodeValue\n ? UpdateFlag\n : NoFlags;\n }\n\n if (current.tag !== HostTag) return NoFlags;\n\n const previousProps = current.committedProps ?? {};\n let flags = NoFlags;\n\n if (hostPropsChanged(previousProps, nextProps)) {\n flags |= UpdateFlag;\n }\n if (\n host.shouldCommitUpdate?.(String(current.type), previousProps, nextProps)\n ) {\n flags |= UpdateFlag;\n }\n if (hostTextContentChanged(current, previousProps, nextProps)) {\n flags |= TextContentFlag;\n }\n\n return flags;\n }\n\n function hostTextContentChanged(\n current: F,\n previous: Props,\n next: Props,\n ): boolean {\n if (host.setTextContent === undefined) return false;\n if (hasUnsafeHTML(next)) return false;\n // Hydration-adopted single-text children keep their fiber shape: the\n // text fiber owns updates (commitTextUpdate). Setting textContent here\n // would replace the very node that fiber points at.\n if (adoptedSingleTextChild(current)) return false;\n\n const previousText = hostTextContent(previous.children);\n const nextText = hostTextContent(next.children);\n\n return (\n previousText !== nextText || (nextText !== null && current.child !== null)\n );\n }\n\n function hostPropsChanged(previous: Props, next: Props): boolean {\n let previousCount = 0;\n\n for (const key in previous) {\n if (!Object.hasOwn(previous, key)) continue;\n if (!committedHostProp(key)) continue;\n previousCount += 1;\n if (!(key in next) || previous[key] !== next[key]) return true;\n }\n\n let nextCount = 0;\n\n for (const key in next) {\n if (!Object.hasOwn(next, key)) continue;\n if (committedHostProp(key)) nextCount += 1;\n }\n\n return previousCount !== nextCount;\n }\n\n function committedHostProp(name: string): boolean {\n return name !== \"children\";\n }\n\n function commitRoot(root: R, finishedWork: F): boolean {\n if (\n !root.pendingCoordinatedCommit &&\n commitCoordinator?.suspend?.(root, () => scheduleRoot(root)) === true\n ) {\n parkCoordinatedCommit(root);\n return true;\n }\n\n commitDepth += 1;\n try {\n // Taken before any commit step runs: the closures below may defer\n // completion across ticks (view transitions), and a later render must\n // not see or clear this commit's retries. Most commits carry none —\n // the shared empty list avoids a per-commit allocation, and holding\n // root's own (empty) array instead would let a later render's pushes\n // leak into this commit's deferred attach.\n let suspenseRetries = noSuspenseRetries;\n if (root.pendingSuspenseRetries.length > 0) {\n suspenseRetries = root.pendingSuspenseRetries;\n root.pendingSuspenseRetries = [];\n }\n commitLiveHookInstances(root);\n if (__DEV__) assertLiveHookInstanceParity(finishedWork.child);\n if (hasHiddenBoundaries) armRevealedHiddenBoundaries(finishedWork.child);\n commitEffects(root, finishedWork.child, BeforeLayoutEffect);\n const commitHostChanges = () => {\n if (root.clearContainerBeforeCommit) {\n requireHydrationHostConfig().clearContainer(root.container);\n }\n if (root.needsCommitDeletions) {\n commitDeletions(root);\n root.needsCommitDeletions = false;\n }\n if (__DEV__) assertDeletionCommitParity(finishedWork);\n commitAssetResourceUpdates(root);\n if (__DEV__) assertAssetResourceCommitParity(finishedWork.child);\n commitDataDependencies(root);\n if (__DEV__) assertDataDependencyCommitParity(finishedWork.child);\n commitHostUpdates(root);\n if (__DEV__) assertHostUpdateCommitParity(finishedWork.child);\n commitMutationEffects(finishedWork.child);\n if (hasHiddenBoundaries)\n commitHiddenBoundaryVisibility(finishedWork.child);\n if (__DEV__) assertPlacedHostCommitParity(finishedWork.child, false);\n root.clearContainerBeforeCommit = false;\n };\n const completeCommit = () => {\n // Recompute from committed reality: the eager render-time set is sticky, so\n // once the last hidden boundary reveals or unmounts this clears the flag and\n // the per-update parent-walk is skipped again.\n hasHiddenBoundaries = hiddenStates.size > 0;\n root.current = finishedWork;\n deactivateHydration(root);\n root.hydrationInitialElement = NoHydrationInitialElement;\n root.consumedPendingQueues = [];\n // Remaining work is read from the committed tree, not just from\n // pendingLanes minus renderLanes: an update dispatched after its fiber\n // rendered but before this line (setState in a commit-phase effect, or a\n // same-lane update while a time-sliced render of that lane was yielded)\n // lands on a lane inside renderLanes, and stripping it here would park it\n // in its hook queue forever. markLanes/markChildLanes recorded such\n // updates on the finishedWork fibers (begin cleared the lanes that\n // actually rendered), so merging finishedWork.lanes | childLanes revives\n // exactly the work still owed without resurrecting completed lanes.\n markRootCompleted(\n root,\n (root.pendingLanes & ~root.renderLanes) |\n finishedWork.lanes |\n finishedWork.childLanes,\n );\n if (includesSomeLane(finishedWork.childLanes, OffscreenLane)) {\n markRootPending(root, OffscreenLane);\n // A suspension after reveal lane expansion may have marked offscreen\n // work suspended alongside the visible lanes; let idle retries proceed.\n root.suspendedLanes &= ~OffscreenLane;\n }\n try {\n commitExternalStores(root);\n if (__DEV__) assertExternalStoreCommitParity(finishedWork.child);\n attachCommittedSuspenseRetries(root, suspenseRetries);\n scheduleDehydratedSuspenseRetries(root);\n commitEffects(root, finishedWork.child, BeforePaintEffect);\n flushCaughtBoundaryErrors(root);\n if (__DEV__) assertCaughtBoundaryErrorParity(finishedWork.child);\n } finally {\n // Once the tree is current its flags must be cleared even when a\n // commit step throws, or a later render would adopt stale flags.\n collectReactiveEffects(root, finishedWork.child);\n clearTransientFlags(finishedWork);\n scheduleReactiveEffects(root);\n clearCommitIndex(root.commitIndex);\n }\n if (__DEV__ && root.devtools) {\n emitDevtoolsCommit(host, root);\n }\n flushRecoverableErrors(root);\n // Host mutations just landed: make the work loop yield at its next check\n // so the host paints before further scheduled work (React does the same\n // from commitRoot).\n requestPaint();\n };\n const finishDeferredCommit = () => {\n if (!root.pendingCoordinatedCommit) return;\n root.pendingCoordinatedCommit = false;\n finishRootWork(root);\n flushPostCommitSyncWork();\n };\n if (commitCoordinator !== null) {\n let didRunMutation = false;\n let didFinishCapture = false;\n const context: ReconcilerCommitContext<Container> = {\n container: root.container,\n finishedWork,\n priority: commitPriority(root.renderLanes),\n root,\n captureFinished() {\n if (!didRunMutation) {\n throw new Error(\n \"A commit coordinator cannot finish capture before running the mutation transaction.\",\n );\n }\n didFinishCapture = true;\n finishDeferredCommit();\n },\n runMutation(afterMutation) {\n if (didRunMutation) {\n throw new Error(\n \"A commit coordinator may run its mutation transaction only once.\",\n );\n }\n didRunMutation = true;\n const isDeferredCommit = root.pendingCoordinatedCommit;\n if (isDeferredCommit) commitDepth += 1;\n try {\n commitHostChanges();\n completeCommit();\n return afterMutation();\n } catch (error) {\n if (!isDeferredCommit) throw error;\n const info =\n root.uncaughtErrorInfo ?? errorInfoFor(root.current, error);\n restartRootWork(root);\n clearRootAfterUncaughtError(root);\n reportUncaughtError(root, error, info);\n if (root.onUncaughtError === null) {\n setTimeout(() => {\n throw error;\n });\n }\n return undefined;\n } finally {\n if (isDeferredCommit) commitDepth -= 1;\n }\n },\n };\n switch (commitCoordinator.commit(context)) {\n case false:\n if (didRunMutation) {\n throw new Error(\n \"A commit coordinator returned false after running the mutation transaction.\",\n );\n }\n break;\n case \"committed\":\n if (!didRunMutation) {\n throw new Error(\n 'A commit coordinator returned \"committed\" without running the mutation transaction.',\n );\n }\n return false;\n case \"deferred\":\n root.pendingCoordinatedCommit = true;\n root.callback = null;\n root.callbackPriority = NoLane;\n if (didFinishCapture) finishDeferredCommit();\n return true;\n }\n }\n commitHostChanges();\n completeCommit();\n return false;\n } finally {\n commitDepth -= 1;\n }\n }\n\n function parkCoordinatedCommit(root: R): void {\n root.parkedCoordinatedCommit = true;\n // The scheduler callback that carried this attempt is spent; clear it so\n // the coordinator's resume callback (or a newer update) is not deduped.\n root.callback = null;\n root.callbackPriority = NoLane;\n }\n\n function scheduleDehydratedSuspenseRetries(root: R): void {\n if (\n !root.isHydrationRoot &&\n root.dehydratedSuspenseCount === 0 &&\n !root.needsRootHydrationCompletion\n ) {\n root.dehydratedBoundaries = new Map();\n return;\n }\n\n const boundaries: F[] = [];\n root.dehydratedBoundaries = new Map();\n const dehydratedSuspenseCount = collectDehydratedSuspense(\n root.current.child,\n boundaries,\n root.dehydratedBoundaries,\n );\n updateDehydratedSuspenseCount(root, dehydratedSuspenseCount);\n if (boundaries.length === 0) return;\n\n queueMicrotask(() => {\n for (const boundary of boundaries) {\n const state = fiberSuspenseState(boundary);\n if (state?.kind !== \"dehydrated\") continue;\n\n const lane = dehydratedSuspenseRetryLane(state.boundary);\n if (lane !== NoLane) scheduleFiber(boundary, lane);\n }\n });\n }\n\n function collectDehydratedSuspense(\n node: F | null,\n boundaries: F[],\n byStartMarker: Map<HostNode<Instance, TextInstance>, F>,\n ): number {\n let count = 0;\n walkFiberForest(node, (cursor) => {\n const state = fiberSuspenseState(cursor);\n if (state?.kind === \"dehydrated\") {\n count += 1;\n byStartMarker.set(state.boundary.start, cursor);\n // A dehydrated boundary has no live children to descend into, but its\n // siblings may be retriable too (e.g. several boundaries inside one\n // revealed Activity), so keep walking the sibling chain.\n if (\n !abandonedHydrationBoundaries.has(cursor) &&\n dehydratedSuspenseRetryLane(state.boundary) !== NoLane\n ) {\n boundaries.push(cursor);\n }\n return false;\n }\n return true;\n });\n return count;\n }\n\n function updateDehydratedSuspenseCount(root: R, count: number): void {\n const previous = root.dehydratedSuspenseCount;\n root.dehydratedSuspenseCount = count;\n if ((previous > 0 || root.needsRootHydrationCompletion) && count === 0) {\n root.needsRootHydrationCompletion = false;\n host.completeRootHydration?.(root.container);\n }\n }\n\n function dehydratedSuspenseRetryLane(\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): Lane {\n if (boundary.forceClientRender) return DefaultLane;\n if (boundary.status === \"completed\") return DefaultHydrationLane;\n if (boundary.status === \"client-rendered\") return DefaultLane;\n return NoLane;\n }\n\n function flushRecoverableErrors(root: R): void {\n const errors = root.recoverableErrors;\n if (errors.length === 0) return;\n\n root.recoverableErrors = [];\n\n for (const { error, info } of errors) {\n try {\n root.onRecoverableError(error, info);\n } catch {\n // Recoverable error reporting should not break a successful commit.\n }\n }\n }\n\n function flushCaughtBoundaryErrors(root: R): void {\n if (root.committedCaughtErrors.length > 0) {\n const boundaries = root.committedCaughtErrors;\n root.committedCaughtErrors = [];\n for (const boundary of boundaries) {\n flushCaughtBoundaryError(root, boundary);\n }\n }\n\n for (const boundary of root.commitIndex) {\n flushCaughtBoundaryError(root, boundary);\n }\n }\n\n function assertCaughtBoundaryErrorParity(node: F | null): void {\n walkFiberForest(node, (cursor) => {\n const state = fiberErrorBoundaryState(cursor);\n if (state !== null && !state.didReport) {\n throw new Error(\n \"Fig internal parity error: a caught boundary error was missing \" +\n \"from the commit index.\",\n );\n }\n });\n }\n\n function flushCaughtBoundaryError(root: R, node: F): void {\n const state = fiberErrorBoundaryState(node);\n if (state === null || state.didReport) return;\n\n state.didReport = true;\n if (node.alternate !== null) node.alternate.boundaryState = state;\n\n const onError = node.props.onError;\n if (typeof onError !== \"function\") return;\n\n try {\n (onError as (error: unknown, info: ErrorInfo) => void)(\n state.error,\n state.info,\n );\n } catch (error) {\n reportUncaughtError(root, error, errorInfoFor(node, error));\n }\n }\n\n function reportUncaughtError(root: R, error: unknown, info: ErrorInfo): void {\n try {\n root.onUncaughtError?.(error, info);\n } catch {\n // Error reporting should not corrupt already-failed recovery work.\n }\n }\n\n function clearRootAfterUncaughtError(root: R): void {\n root.reactiveCallback?.cancel();\n root.reactiveCallback = null;\n root.pendingReactiveEffects = [];\n root.element = null;\n\n if (root.current.child !== null) {\n deleteFiberDataTree(root.current.child);\n abortFiberEffects(root.current);\n }\n\n if (host.clearContainer !== undefined) {\n removePortalDescendants(root.current.child);\n releaseOutOfBandDescendants(root.current.child);\n host.clearContainer(root.container);\n } else if (root.current.child !== null) {\n let child: F | null = root.current.child;\n while (child !== null) {\n const next: F | null = child.sibling;\n remove(child, root.container);\n child = next;\n }\n }\n\n const current = fiber(RootTag, null, null, { children: null }, root);\n current.memoizedProps = current.props;\n current.committedProps = current.props;\n root.current = current;\n resetRootWork(root);\n root.clearContainerBeforeCommit = false;\n root.hydrationInitialElement = NoHydrationInitialElement;\n root.consumedPendingQueues = [];\n root.commitEffectPhases = 0;\n root.needsCommitDeletions = false;\n root.committedCaughtErrors.length = 0;\n markRootCompleted(root, NoLanes);\n pendingRoots.delete(root);\n }\n\n function commitMutationEffects(node: F | null, hidden = false): void {\n let cursor = node;\n\n while (cursor !== null) {\n const subtreeMutation = (cursor.subtreeFlags & MutationMask) !== 0;\n\n if ((cursor.flags & MutationMask) === 0 && !subtreeMutation) {\n cursor = cursor.sibling;\n continue;\n }\n\n if ((cursor.flags & PlacementFlag) !== 0) {\n cursor = commitPlacementRun(cursor, hidden);\n continue;\n }\n\n if (cursor.tag === PortalTag) {\n commitPortal(cursor);\n }\n\n if (cursor.tag === ActivityTag && (cursor.flags & HydrationFlag) !== 0) {\n commitHydratedActivityBoundary(cursor);\n }\n\n // Hydration commits are position-sensitive (Activity templates unpack\n // above, Suspense boundaries commit below), so they stay in the walk\n // rather than the host-update queue pass.\n if (\n (cursor.flags & HydrationFlag) !== 0 &&\n (cursor.flags & HostUpdateMask) !== 0 &&\n isHost(cursor)\n ) {\n const hostFiber = cursor;\n commitHostMutation(hostFiber, () => commitUpdate(hostFiber));\n if (hidden) hideHostFiber(hostFiber);\n }\n\n if ((cursor.flags & AdoptedFlag) === 0 && subtreeMutation) {\n commitMutationEffects(cursor.child, hidden || isHiddenBoundary(cursor));\n }\n\n if (cursor.tag === SuspenseTag && (cursor.flags & HydrationFlag) !== 0) {\n commitHydratedSuspenseBoundary(cursor);\n }\n\n cursor = cursor.sibling;\n }\n }\n\n function commitPlacementRun(firstPlaced: F, hidden: boolean): F | null {\n const lastPlaced = placementRunTail(firstPlaced);\n const afterPlaced = lastPlaced.sibling;\n const before = hostSibling(lastPlaced);\n\n for (let placed: F | null = firstPlaced; placed !== afterPlaced;) {\n if (placed === null) break;\n\n const current: F = placed;\n const next: F | null = current.sibling;\n const placedHidden = hidden || isHiddenBoundary(current);\n // Hide (suspending binds) BEFORE inserting so attach paths in the\n // host's insertBefore never run binds on hidden content; hide again\n // after, since a placement update may rewrite the inline style.\n // Preassembled subtrees also pre-hide nested hidden boundaries'\n // content, which never gets a placement of its own.\n if (placedHidden) hidePlacedNode(current);\n if (hasHiddenBoundaries && isPreassembledHostSubtree(current)) {\n hideNestedBoundaryContent(current.child);\n }\n commitHostMutation(current, () => commitPlacement(current, before));\n if (placedHidden) hidePlacedNode(current);\n if (!isPreassembledHostSubtree(current)) {\n commitMutationEffects(current.child, placedHidden);\n } else {\n commitPortalsInPreassembledSubtree(current.child, placedHidden);\n }\n placed = next;\n }\n\n return afterPlaced;\n }\n\n // setNodeVisibility keeps a hidden boundary's own subtree untouched, but a\n // FRESH hidden boundary's content was never hidden; hide its children.\n function hidePlacedNode(node: F): void {\n if (isHiddenBoundary(node)) setSubtreeVisibility(node.child, true);\n else setNodeVisibility(node, true);\n }\n\n function hideNestedBoundaryContent(node: F | null): void {\n for (let cursor = node; cursor !== null; cursor = cursor.sibling) {\n if (isHiddenBoundary(cursor)) setSubtreeVisibility(cursor.child, true);\n hideNestedBoundaryContent(cursor.child);\n }\n }\n\n function commitPortalsInPreassembledSubtree(\n node: F | null,\n hidden: boolean,\n ): void {\n for (let cursor = node; cursor !== null; cursor = cursor.sibling) {\n const cursorHidden = hidden || isHiddenBoundary(cursor);\n if (cursor.tag === PortalTag) {\n if (cursorHidden) setSubtreeVisibility(cursor.child, true);\n if (hasHiddenBoundaries) hideNestedBoundaryContent(cursor.child);\n commitHostMutation(cursor, () => commitPlacement(cursor));\n if (cursorHidden) setNodeVisibility(cursor, true);\n commitMutationEffects(cursor.child, cursorHidden);\n } else {\n commitPortalsInPreassembledSubtree(cursor.child, cursorHidden);\n }\n }\n }\n\n function commitHostMutation(source: F, mutation: () => void): void {\n try {\n mutation();\n } catch (error) {\n rootOf(source).uncaughtErrorInfo = errorInfoFor(source, error);\n throw error;\n }\n }\n\n function isPreassembledHostSubtree(node: F): boolean {\n return (node.flags & AssembledFlag) !== 0;\n }\n\n function placementRunTail(node: F): F {\n let tail = node;\n while (\n tail.sibling !== null &&\n (tail.sibling.flags & PlacementFlag) !== 0\n ) {\n tail = tail.sibling;\n }\n return tail;\n }\n\n function commitPlacement(\n node: F,\n before: HostNode<Instance, TextInstance> | null = hostSibling(node),\n ): void {\n if (isHost(node)) {\n if (node.tag === HostTag && isHoistedFiber(node)) {\n // First commit only: a move keeps the out-of-band instance in place.\n if (node.committedProps === null) acquireHoistedInstance(node);\n markHostCommitted(node);\n markHostSubtreeCommitted(node.child);\n return;\n }\n if (shouldCommitPlacementUpdate(node)) commitUpdate(node);\n host.insertBefore(hostParent(node), hostNode(node), before);\n markHostCommitted(node);\n if (isPreassembledHostSubtree(node)) markHostSubtreeCommitted(node.child);\n } else if (node.tag === PortalTag) {\n commitPortal(node);\n if (node.alternate !== null) insertPortalChildren(node);\n } else if (node.alternate !== null) {\n insertHostSubtree(node, hostParent(node), before);\n }\n }\n\n function commitPortal(node: F): void {\n host.preparePortalContainer?.(\n portalTarget(node),\n rootOf(node).container,\n hostParent(node),\n );\n }\n\n function shouldCommitPlacementUpdate(node: F): boolean {\n if ((node.flags & (UpdateFlag | TextContentFlag)) !== 0) return true;\n if (node.alternate !== null || node.tag === TextTag) return false;\n return host.finalizeInitialInstance === undefined;\n }\n\n function insertHostSubtree(\n node: F,\n parent: Parent<Container, Instance>,\n before: HostNode<Instance, TextInstance> | null,\n ): void {\n // Re-placing a reused non-host fiber can carry host subtrees that were\n // assembled inside a render that never committed (a captured Suspense\n // primary revealed later). Commit those exactly like a direct host\n // placement would: a live instance whose fiber still claims it never\n // mounted gets re-assembled in place by the next re-render, mutating\n // committed DOM during the render phase.\n visitHostNodes(node, (child) => host.insertBefore(parent, child, before));\n visitHostFibers(node, (child) => {\n if (child.committedProps !== null) return;\n if (child.tag === HostTag && isHoistedFiber(child)) {\n // Hoisted instances live out-of-band (visitHostNodes skips their\n // insertion) but still need first-commit acquisition and marking.\n acquireHoistedInstance(child);\n markHostCommitted(child);\n markHostSubtreeCommitted(child.child);\n return;\n }\n markHostCommitted(child);\n if (isPreassembledHostSubtree(child)) {\n markHostSubtreeCommitted(child.child);\n }\n });\n }\n\n // Fiber-level companion to visitHostNodes: same traversal and portal\n // boundary, but yields the topmost host fibers themselves (hoisted ones\n // included — callers decide how to commit them).\n function visitHostFibers(node: F, visitor: (child: F) => void): void {\n if (isHost(node)) {\n visitor(node);\n return;\n }\n\n if (node.tag === PortalTag) return;\n\n for (let child = node.child; child !== null; child = child.sibling) {\n visitHostFibers(child, visitor);\n }\n }\n\n function insertPortalChildren(node: F): void {\n const parent = portalTarget(node);\n for (let child = node.child; child !== null; child = child.sibling) {\n visitHostNodes(child, (hostChild) =>\n host.insertBefore(parent, hostChild, null),\n );\n }\n }\n\n function commitUpdate(node: F): void {\n if (node.tag === TextTag) {\n host.commitTextUpdate(\n node.stateNode as TextInstance,\n String(node.props.nodeValue),\n );\n } else if (node.tag === HostTag && isHoistedFiber(node)) {\n commitHoistedUpdate(node);\n } else if (\n (node.flags & HydrationFlag) !== 0 &&\n host.commitHydratedInstance !== undefined\n ) {\n host.commitHydratedInstance(node.stateNode as Instance, node.props);\n } else {\n const previousProps = previousCommittedProps(node);\n\n if ((node.flags & UpdateFlag) !== 0) {\n host.commitUpdate(\n node.stateNode as Instance,\n previousProps,\n node.props,\n );\n }\n\n if ((node.flags & TextContentFlag) !== 0) {\n commitHostTextContent(node, previousProps);\n }\n }\n\n markHostCommitted(node);\n }\n\n function commitHoistedUpdate(node: F): void {\n const hoistedHost = requireHoistedAssetHostConfig();\n const previousProps = previousCommittedProps(node);\n const instance = node.stateNode as Instance;\n const next =\n hoistedHost.updateHoistedInstance(\n instance,\n previousProps,\n node.props,\n assetResourceOwner(node),\n ) ?? instance;\n\n if (next !== instance) adoptSwappedHoistedInstance(node, next);\n }\n\n // The host returns a fully updated shared instance. Adopt it on both\n // alternates so subsequent updates and release target the live node.\n function adoptSwappedHoistedInstance(node: F, next: Instance): void {\n node.stateNode = next;\n if (node.alternate !== null) node.alternate.stateNode = next;\n }\n\n function commitHydratedSuspenseBoundary(node: F): void {\n const boundary = dehydratedSuspenseBoundary(node.alternate);\n\n if (boundary === null) return;\n host.commitHydratedSuspenseBoundary?.(boundary);\n }\n\n function commitHydratedActivityBoundary(node: F): void {\n const state = fiberActivityState(node);\n if (state?.dehydrated == null) return;\n\n requireActivityHydrationHostConfig().commitHydratedActivityBoundary(\n state.dehydrated.boundary,\n );\n state.dehydrated = null;\n }\n\n function commitHostTextContent(node: F, previousProps: Props): void {\n if (host.setTextContent === undefined || node.tag !== HostTag) return;\n\n const nextText = hostTextContent(node.props.children);\n if (nextText !== null) {\n host.setTextContent(node.stateNode as Instance, nextText);\n } else if (hostTextContent(previousProps.children) !== null) {\n host.setTextContent(node.stateNode as Instance, \"\");\n }\n }\n\n function previousCommittedProps(node: F): Props {\n return (\n node.committedProps ??\n node.alternate?.committedProps ??\n node.alternate?.memoizedProps ??\n {}\n );\n }\n\n function markHostCommitted(node: F): void {\n if (!isHost(node)) return;\n node.committedProps = node.props;\n if (node.alternate !== null) node.alternate.committedProps = node.props;\n }\n\n function markHostSubtreeCommitted(node: F | null): void {\n walkFiberForest(node, (child) => {\n // Hoisted descendants were left out of complete-time assembly; acquire\n // them on the subtree's first commit (moves find committedProps set).\n if (child.committedProps === null && isHoistedFiber(child)) {\n acquireHoistedInstance(child);\n }\n markHostCommitted(child);\n });\n }\n\n function acquireHoistedInstance(node: F): void {\n const hoistedHost = requireHoistedAssetHostConfig();\n const instance = node.stateNode as Instance;\n const resolved =\n hoistedHost.commitHoistedInstance(\n instance,\n node.props,\n assetResourceOwner(node),\n ) ?? instance;\n if (resolved === instance) return;\n\n // The identity resolved to a shared live instance (e.g. inserted while\n // this render was suspended); drop the stale duplicate.\n adoptSwappedHoistedInstance(node, resolved);\n }\n\n // Runs before the mutation walk, and owns only steady-state updates:\n // hydration commits stay in the walk (an Activity template must unpack\n // before its hydrated children bind, and Suspense boundary commits follow\n // their instances), and first commits stay with the placement/assembly\n // paths (committing an update first would set committedProps and defeat\n // hoisted acquisition and shouldCommitPlacementUpdate). Updates inside\n // subtrees the walk will place apply while those nodes are still at their\n // old position (or detached); the insertion carries them over.\n function commitHostUpdates(root: R): void {\n for (const cursor of root.commitIndex) {\n if ((cursor.flags & HostUpdateMask) === 0 || !isHost(cursor)) continue;\n if ((cursor.flags & (HydrationFlag | PlacementFlag)) !== 0) continue;\n // First commits belong to placement/assembly — except text, whose\n // first \"update\" is how hydration applies a differing value.\n if (cursor.committedProps === null && cursor.tag !== TextTag) continue;\n commitHostMutation(cursor, () => commitUpdate(cursor));\n // Prerendered mutations inside hidden trees must stay hidden.\n if (hasHiddenBoundaries && isInsideHiddenBoundary(cursor)) {\n hideHostFiber(cursor);\n }\n // Own-fiber update bits never reach subtreeFlags, so the flag-clearing\n // walk cannot be relied on to reach them; the pass owns their cleanup.\n cursor.flags &= ~HostUpdateMask;\n }\n }\n\n function assertHostUpdateCommitParity(node: F | null): void {\n walkFiberForest(node, (cursor) => {\n if (\n (cursor.flags & HostUpdateMask) !== 0 &&\n (cursor.flags & (HydrationFlag | PlacementFlag)) === 0 &&\n (cursor.committedProps !== null || cursor.tag === TextTag) &&\n isHost(cursor)\n ) {\n throw new Error(\n \"Fig internal parity error: a host fiber with pending updates \" +\n \"was missing from the commit index.\",\n );\n }\n\n return (cursor.flags & AdoptedFlag) === 0;\n });\n }\n\n function commitDeletions(root: R): void {\n const store = root.dataStore;\n for (const cursor of root.commitIndex) {\n if (cursor.deletions === null) continue;\n const parent = isHostParent(cursor)\n ? hostParentFor(cursor)\n : hostParent(cursor);\n for (const child of cursor.deletions) {\n // One walk, bounded to the deleted subtree: a deletion entry's old\n // sibling pointers still reference kept fibers whose hook state is\n // shared with the live generation, so a forest walk here would tear\n // down hooks that are still mounted.\n walkFiberSubtree(child, (deleted) => {\n deleteFiberDataOwner(deleted, store);\n abortFiberHooks(deleted, false);\n });\n // Deletion is the one event that invalidates a committed fiber\n // identity; record it at the source by severing the subtree root's\n // upward links (both generations die together). Every return chain\n // out of the deleted subtree passes through one of the root's two\n // generations, so anything that later schedules through a deleted\n // fiber — a late suspense retry, a setState from a stale closure —\n // fails root lookup and no-ops instead of marking phantom lanes.\n // Severing waits until here because the teardown above still\n // resolves roots through these chains.\n child.return = null;\n if (child.alternate !== null) child.alternate.return = null;\n remove(child, parent);\n }\n cursor.deletions = null;\n }\n }\n\n function assertDeletionCommitParity(node: F): void {\n walkFiberSubtree(node, (cursor) => {\n if (cursor.deletions !== null) {\n throw new Error(\n \"Fig internal parity error: a fiber with pending deletions was \" +\n \"missing from the commit index.\",\n );\n }\n\n return (\n (cursor.flags & AdoptedFlag) === 0 &&\n (cursor.subtreeFlags & DeletionFlag) !== 0\n );\n });\n }\n\n function commitDataDependencies(root: R): void {\n for (const cursor of root.commitIndex) {\n if (!cursor.dataDependenciesDirty) continue;\n root.dataStore.commitDataDependencies(cursor, cursor.alternate);\n cursor.dataDependenciesDirty = false;\n if (cursor.alternate !== null)\n cursor.alternate.dataDependenciesDirty = false;\n }\n }\n\n function commitAssetResourceUpdates(root: R): void {\n if (host.commitAssetResources === undefined) return;\n\n for (const cursor of root.commitIndex) {\n if ((cursor.flags & AssetFlag) === 0) continue;\n commitHostMutation(cursor, () =>\n host.commitAssetResources?.(\n (cursor.committedProps?.assets as FigAssetResourceList | undefined) ??\n null,\n cursor.props.assets as FigAssetResourceList,\n assetResourceOwner(cursor),\n ),\n );\n cursor.committedProps = cursor.props;\n if (cursor.alternate !== null) {\n cursor.alternate.committedProps = cursor.props;\n }\n cursor.flags &= ~AssetFlag;\n }\n }\n\n function assertAssetResourceCommitParity(node: F | null): void {\n walkFiberForest(node, (cursor) => {\n if ((cursor.flags & AssetFlag) !== 0) {\n throw new Error(\n \"Fig internal parity error: an Assets fiber with pending resource \" +\n \"work was missing from the commit index.\",\n );\n }\n return (cursor.flags & AdoptedFlag) === 0;\n });\n }\n\n // Every host fiber that reaches the DOM through this commit — its own\n // placement or an ancestor's subtree insertion — must leave the mutation\n // phase marked committed. A live instance whose fiber still claims it\n // never mounted is the poison behind render-phase re-assembly of\n // committed DOM (in-place-reuse trap: insertion paths that skip commit\n // marking), so fail loudly at the commit that minted it.\n function assertPlacedHostCommitParity(node: F | null, placed: boolean): void {\n for (let child = node; child !== null; child = child.sibling) {\n const childPlaced = placed || (child.flags & PlacementFlag) !== 0;\n if (childPlaced && isHost(child) && child.committedProps === null) {\n throw new Error(\n \"Fig internal parity error: a placed host fiber has no committed \" +\n \"props after the mutation phase (a subtree insertion skipped \" +\n \"commit marking).\",\n );\n }\n if (childPlaced || (child.subtreeFlags & PlacementFlag) !== 0) {\n assertPlacedHostCommitParity(child.child, childPlaced);\n }\n }\n }\n\n function assertDataDependencyCommitParity(node: F | null): void {\n walkFiberForest(node, (cursor) => {\n if (cursor.dataDependenciesDirty) {\n throw new Error(\n \"Fig internal parity error: a fiber with dirty data dependencies \" +\n \"was missing from the commit index.\",\n );\n }\n\n return (cursor.flags & AdoptedFlag) === 0;\n });\n }\n\n function deleteFiberDataTree(node: F): void {\n const store = rootOf(node).dataStore;\n walkFiberForest(node, (cursor) => {\n deleteFiberDataOwner(cursor, store);\n });\n }\n\n function deleteFiberDataOwner(node: F, store: R[\"dataStore\"]): void {\n store.releaseDataOwner(node);\n if (node.alternate !== null) store.releaseDataOwner(node.alternate);\n // A hidden boundary removed from the tree stops counting toward\n // `hasHiddenBoundaries`; both generations share the one state object.\n const state = fiberActivityState(node);\n if (state !== null) hiddenStates.delete(state);\n }\n\n function dehydratedActivityBoundary(node: F): Instance | null {\n return node.tag === ActivityTag\n ? (fiberActivityState(node)?.dehydrated?.boundary ?? null)\n : null;\n }\n\n function remove(node: F, parent: Parent<Container, Instance>): void {\n const dehydratedActivity = dehydratedActivityBoundary(node);\n if (dehydratedActivity !== null) {\n host.removeChild(parent, dehydratedActivity);\n return;\n }\n\n const boundary = dehydratedSuspenseBoundary(node);\n if (\n boundary !== null &&\n host.removeDehydratedSuspenseBoundary !== undefined\n ) {\n host.removeDehydratedSuspenseBoundary(boundary);\n return;\n }\n\n if (node.tag === PortalTag) {\n removePortalChildren(node);\n host.removePortalContainer?.(portalTarget(node));\n return;\n }\n\n if (node.tag === AssetsTag) releaseAssetResources(node);\n\n if (node.tag === HostTag && isHoistedFiber(node)) {\n if (node.committedProps !== null) {\n requireHoistedAssetHostConfig().removeHoistedInstance(\n node.stateNode as Instance,\n assetResourceOwner(node),\n );\n }\n return;\n }\n\n if (isHost(node)) {\n removePortalDescendants(node.child);\n releaseOutOfBandDescendants(node.child);\n host.removeChild(parent, hostNode(node));\n return;\n }\n\n for (let child = node.child; child !== null; child = child.sibling) {\n remove(child, parent);\n }\n }\n\n // Hoisted instances and declarative assets are not DOM descendants of the\n // removed host, so the top-node removal above never reaches them; release\n // them explicitly.\n function releaseOutOfBandDescendants(node: F | null): void {\n if (\n host.resolveHoistedInstance === undefined &&\n host.commitAssetResources === undefined\n ) {\n return;\n }\n\n for (let child = node; child !== null; child = child.sibling) {\n if (child.tag === PortalTag) continue;\n\n if (child.tag === AssetsTag) releaseAssetResources(child);\n\n if (child.tag === HostTag && isHoistedFiber(child)) {\n if (child.committedProps !== null && child.stateNode !== null) {\n requireHoistedAssetHostConfig().removeHoistedInstance(\n child.stateNode as Instance,\n assetResourceOwner(child),\n );\n }\n continue;\n }\n\n releaseOutOfBandDescendants(child.child);\n }\n }\n\n function releaseAssetResources(node: F): void {\n if (\n node.tag !== AssetsTag ||\n node.committedProps === null ||\n host.commitAssetResources === undefined\n ) {\n return;\n }\n host.commitAssetResources(\n node.committedProps.assets as FigAssetResourceList,\n null,\n assetResourceOwner(node),\n );\n node.committedProps = null;\n if (node.alternate !== null) node.alternate.committedProps = null;\n }\n\n function removePortalChildren(node: F): void {\n const parent = portalTarget(node);\n for (let child = node.child; child !== null; child = child.sibling) {\n remove(child, parent);\n }\n }\n\n function removePortalDescendants(node: F | null): void {\n for (let child = node; child !== null; child = child.sibling) {\n if (child.tag === PortalTag) {\n removePortalChildren(child);\n host.removePortalContainer?.(portalTarget(child));\n } else {\n removePortalDescendants(child.child);\n }\n }\n }\n\n function visitHostNodes(\n node: F,\n visitor: (node: HostNode<Instance, TextInstance>) => void,\n ): void {\n if (isHost(node)) {\n // Both callers insert host nodes into a position; hoisted instances\n // live out-of-band and must never be moved to a fiber position.\n if (node.tag === HostTag && isHoistedFiber(node)) return;\n visitor(hostNode(node));\n return;\n }\n\n if (node.tag === PortalTag) return;\n\n for (let child = node.child; child !== null; child = child.sibling) {\n visitHostNodes(child, visitor);\n }\n }\n\n function hostParent(node: F): Parent<Container, Instance> {\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if (isHostParent(parent)) return hostParentFor(parent);\n }\n\n throw new Error(\"Could not find a host parent for fiber.\");\n }\n\n function hostAncestorTypes(node: F): string[] {\n const ancestors: string[] = [];\n\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if (parent.tag === HostTag) {\n ancestors.push(String(parent.type));\n continue;\n }\n\n // Fiber ancestry ends at portals and roots; seed the container's own\n // tag so nesting against the render target is still validated.\n if (parent.tag === PortalTag || parent.tag === RootTag) {\n const container = host.containerType?.(hostParentFor(parent));\n if (container != null) ancestors.push(container);\n break;\n }\n }\n\n return ancestors;\n }\n\n function hostSibling(node: F): HostNode<Instance, TextInstance> | null {\n // Root hydration recovery removes every existing host sibling before\n // placement. Keep the flag live through mutations so none of those\n // detached nodes can become an insertion anchor.\n if (rootOf(node).clearContainerBeforeCommit) return null;\n\n const dehydratedBoundary = dehydratedSuspenseParent(node);\n if (dehydratedBoundary !== null) return dehydratedBoundary.start;\n\n let cursor: F = node;\n\n search: while (true) {\n while (cursor.sibling === null) {\n if (cursor.return === null || isHostParent(cursor.return)) {\n return null;\n }\n cursor = cursor.return;\n }\n\n cursor = cursor.sibling;\n\n while (!isHost(cursor)) {\n const dehydratedActivity = dehydratedActivityBoundary(cursor);\n if (dehydratedActivity !== null) return dehydratedActivity;\n\n if (\n cursor.tag === PortalTag ||\n (cursor.flags & PlacementFlag) !== 0 ||\n cursor.child === null\n ) {\n continue search;\n }\n cursor = cursor.child;\n }\n\n if ((cursor.flags & PlacementFlag) === 0 && !isHoistedFiber(cursor)) {\n return hostNode(cursor);\n }\n }\n }\n\n function dehydratedSuspenseParent(\n node: F,\n ): DehydratedSuspenseBoundary<Instance, TextInstance> | null {\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if ((parent.flags & HydrationFlag) !== 0) {\n const boundary = dehydratedSuspenseBoundary(parent.alternate);\n if (\n boundary !== null &&\n (boundary.status !== \"completed\" || boundary.forceClientRender)\n ) {\n return boundary;\n }\n }\n\n if (isHostParent(parent)) return null;\n }\n\n return null;\n }\n\n function isHostParent(node: F): boolean {\n return (\n node.tag === RootTag || node.tag === HostTag || node.tag === PortalTag\n );\n }\n\n function hostParentFor(node: F): Parent<Container, Instance> {\n if (node.tag === RootTag) return (node.stateNode as R).container;\n if (node.tag === HostTag) return node.stateNode as Instance;\n return portalTarget(node);\n }\n\n function dehydratedSuspenseBoundary(\n node: F | null | undefined,\n ): DehydratedSuspenseBoundary<Instance, TextInstance> | null {\n const state = fiberSuspenseState(node);\n return state?.kind === \"dehydrated\" ? state.boundary : null;\n }\n\n function fiberSuspenseState(\n node: F | null | undefined,\n ): SuspenseState<Container, Instance, TextInstance> | null {\n return node?.tag === SuspenseTag\n ? (node.boundaryState as SuspenseState<\n Container,\n Instance,\n TextInstance\n > | null)\n : null;\n }\n\n function fiberErrorBoundaryState(\n node: F | null | undefined,\n ): ErrorBoundaryState | null {\n return node?.tag === ErrorBoundaryTag\n ? (node.boundaryState as ErrorBoundaryState | null)\n : null;\n }\n\n function fiberActivityState(\n node: F | null | undefined,\n ): ActivityState<Instance> | null {\n return node?.tag === ActivityTag\n ? (node.boundaryState as ActivityState<Instance> | null)\n : null;\n }\n\n function ensureFiberActivityState(node: F): ActivityState<Instance> {\n const current = fiberActivityState(node);\n if (current !== null) return current;\n\n const state: ActivityState<Instance> = { hidden: false, dehydrated: null };\n node.boundaryState = state;\n return state;\n }\n\n function scheduleFiber(node: F, lane: Lane): void {\n markLanes(node, lane);\n const root = scheduleParentPath(node.return, lane);\n const alternateRoot = scheduleParentPath(\n node.alternate?.return ?? null,\n lane,\n );\n const scheduledRoot = root ?? alternateRoot;\n if (scheduledRoot === null) return;\n\n markRootPending(scheduledRoot, lane);\n scheduleOrBatchRoot(scheduledRoot);\n }\n\n function scheduleParentPath(parent: F | null, lane: Lane): R | null {\n for (; parent !== null; parent = parent.return) {\n markChildLanes(parent, lane);\n\n if (parent.tag === RootTag) {\n return parent.stateNode as R;\n }\n }\n\n return null;\n }\n\n function attachPing(root: R, thenable: Thenable, lanes: Lanes): void {\n if (lanes === NoLanes) return;\n\n const previousLanes = root.suspendedThenables.get(thenable) ?? NoLanes;\n root.suspendedThenables.set(thenable, mergeLanes(previousLanes, lanes));\n\n if (previousLanes !== NoLanes) return;\n thenable.then(\n () => ping(root, thenable),\n () => ping(root, thenable),\n );\n }\n\n function ping(root: R, thenable: object): void {\n const lanes = root.suspendedThenables.get(thenable) ?? NoLanes;\n if (lanes === NoLanes) return;\n\n root.suspendedThenables.delete(thenable);\n markRootPinged(root, lanes);\n pendingRoots.add(root);\n scheduleRoot(root);\n }\n\n function findSuspenseBoundary(node: F): F | null {\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if (parent.tag === SuspenseTag && fiberSuspenseState(parent) === null) {\n return parent;\n }\n }\n\n return null;\n }\n\n function findErrorBoundary(node: F): F | null {\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if (\n parent.tag === ErrorBoundaryTag &&\n fiberErrorBoundaryState(parent) === null\n ) {\n return parent;\n }\n }\n\n return null;\n }\n\n function captureSuspenseBoundary(boundary: F, thenable: Thenable): F | null {\n const root = rootOf(boundary);\n const lanes = root.renderLanes;\n // Two pings per suspension. The root ping is identity-free: if this\n // render never commits (preserved suspension, restart, interruption),\n // the resolved thenable revives the suspended lanes at the root, and it\n // no-ops once the lanes committed (markRootPinged masks by\n // suspendedLanes). The boundary retry is recorded here but attached only\n // at commit, to the fiber identity the commit blessed.\n attachPing(root, thenable, lanes);\n root.pendingSuspenseRetries.push({ boundary, thenable, lanes });\n rollbackCommitIndex(root.commitIndex, boundary.commitIndexCheckpoint);\n // The boundary's own deletions (e.g. the committed fallback recorded by\n // the reveal path) belong to the boundary, not its discarded subtree;\n // requeue them. Paths that discard them null boundary.deletions, which\n // leaves this entry inert.\n if (boundary.deletions !== null)\n recordCommitWork(root.commitIndex, boundary);\n\n const dehydrated = fiberSuspenseState(boundary.alternate);\n if (\n root.hydratingSuspenseBoundary === boundary &&\n dehydrated?.kind === \"dehydrated\"\n ) {\n // Hydrating this boundary suspended. Abandon the attempt and stay\n // dehydrated so the server-rendered content survives; the retry\n // recorded above re-attempts hydration once the thenable settles, so\n // commit-time dehydrated retry scheduling must skip the boundary until\n // then.\n leaveSuspenseHydration(root, boundary, dehydrated.boundary);\n boundary.boundaryState = dehydrated;\n boundary.flags &= ~HydrationFlag;\n boundary.child = null;\n abandonedHydrationBoundaries.add(boundary);\n if (boundary.alternate !== null) {\n abandonedHydrationBoundaries.add(boundary.alternate);\n }\n return completeUnit(boundary);\n }\n\n if (shouldPreserveSuspenseBoundary(root, boundary)) {\n markRootSuspended(root, lanes);\n throw PreservedSuspense;\n }\n\n const currentPrimary = suspensePrimaryFiber(boundary.alternate);\n if (currentPrimary !== null) {\n boundary.boundaryState = { kind: \"fallback\", primaryChild: null };\n boundary.deletions = null;\n restoreConsumedPendingQueuesForRetry(\n root,\n boundary.suspenseQueueStart ?? root.consumedPendingQueues.length,\n );\n hasHiddenBoundaries = true;\n const primary = suspensePrimaryWorkInProgress(\n boundary,\n currentPrimary,\n \"hidden\",\n );\n primary.child = cloneSuspendedPrimary(currentPrimary.child, primary);\n primary.flags |= VisibilityFlag;\n primary.memoizedProps = primary.props;\n // The hidden primary is committed but not begun/completed this pass, so\n // its lanes are not recomputed — clear them (and the boundary will not see\n // OffscreenLane work blocked behind the still-suspended boundary).\n primary.lanes = NoLanes;\n primary.childLanes = NoLanes;\n boundary.child = primary;\n\n const fallback = suspenseFallbackWorkInProgress(\n boundary,\n currentPrimary.sibling,\n 1,\n );\n primary.sibling = fallback;\n return fallback;\n }\n\n // There is no committed primary on an initial suspension. Keep the partial\n // render only as retry input; committing it hidden would publish an\n // incomplete host tree.\n boundary.boundaryState = {\n kind: \"fallback\",\n primaryChild:\n boundary.child?.tag === ActivityTag && boundary.child.type === null\n ? boundary.child.child\n : boundary.child,\n };\n const fallback = suspenseFallbackWorkInProgress(boundary, null, 0);\n boundary.child = fallback;\n return fallback;\n }\n\n function captureErrorBoundary(\n boundary: F,\n error: unknown,\n source: F,\n ): F | null {\n const root = rootOf(boundary);\n rollbackCommitIndex(root.commitIndex, boundary.commitIndexCheckpoint);\n recordCommitWork(root.commitIndex, boundary);\n const state = createErrorBoundaryState(error, source);\n boundary.boundaryState = state;\n reconcileCurrentChildren(boundary, errorBoundaryFallback(boundary, state));\n return boundary.child ?? completeUnit(boundary);\n }\n\n function captureCommittedErrorBoundary(\n boundary: F,\n error: unknown,\n source: F,\n ): void {\n rootOf(boundary).committedCaughtErrors.push(boundary);\n const state = createErrorBoundaryState(error, source);\n boundary.boundaryState = state;\n if (boundary.alternate !== null) boundary.alternate.boundaryState = state;\n }\n\n function createErrorBoundaryState(\n error: unknown,\n source: F,\n ): ErrorBoundaryState {\n return {\n error,\n info: errorInfoFor(source, error),\n didReport: false,\n };\n }\n\n function shouldPreserveSuspenseBoundary(root: R, boundary: F): boolean {\n return (\n boundary.alternate !== null &&\n fiberSuspenseState(boundary.alternate) === null &&\n isTransitionOrDeferredRender(root)\n );\n }\n\n // Boundary retries attach here, after the tree flipped: the recorded fiber\n // is in the committed tree by construction, so no tree-membership question\n // ever arises. A retry that fires after the boundary is deleted no-ops in\n // scheduleFiber, because deletion teardown severs the deleted subtree's\n // upward links and root lookup finds nothing.\n function attachCommittedSuspenseRetries(\n root: R,\n retries: PendingSuspenseRetry<Container, Instance, TextInstance>[],\n ): void {\n for (const { boundary, thenable, lanes } of retries) {\n // A boundary that re-suspends on a still-pending thenable in a later\n // commit would otherwise stack duplicate listeners; one per conceptual\n // boundary (either generation) is enough.\n let attached = root.attachedSuspenseRetries.get(thenable);\n if (attached === undefined) {\n attached = new WeakSet();\n root.attachedSuspenseRetries.set(thenable, attached);\n }\n if (\n attached.has(boundary) ||\n (boundary.alternate !== null && attached.has(boundary.alternate))\n ) {\n continue;\n }\n attached.add(boundary);\n\n const retry = () => scheduleFiber(boundary, suspenseRetryLane(lanes));\n thenable.then(retry, retry);\n }\n }\n\n // Context propagation is lazy: providers push new values without walking\n // their subtree, so a subtree about to be skipped is the only place a stale\n // consumer could get stranded. Every skip point (clean-childLanes bailout)\n // checks the providers above it and marks the consumers it is about to skip.\n // Consumers that are begun anyway are covered by canBailout's memoized\n // dependency check, so no eager walk is needed. Returns whether the node's\n // childLanes now intersect the render lanes; the early-false paths rely on\n // the caller only asking when childLanes were already clean.\n function lazilyPropagateParentContextChanges(node: F, root: R): boolean {\n if ((node.flags & ContextPropagationFlag) !== 0) return false;\n\n const contexts = changedParentContexts(node);\n node.flags |= ContextPropagationFlag;\n if (contexts === null) return false;\n\n const current = node.alternate;\n if (current === null) return false;\n\n for (const context of contexts) {\n if (!contextListIncludes(current.contextSubtreeDependencies, context)) {\n continue;\n }\n\n for (let child = current.child; child !== null; child = child.sibling) {\n markContextConsumers(child, current, context, root.renderLanes);\n }\n }\n\n return includesSomeLane(node.childLanes, root.renderLanes);\n }\n\n function changedParentContexts(node: F): FigContext<unknown>[] | null {\n let seen =\n node.tag === ContextProviderTag\n ? [node.type as FigContext<unknown>]\n : null;\n let changed: FigContext<unknown>[] | null = null;\n\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if ((parent.flags & ContextPropagationFlag) !== 0) break;\n if (parent.tag !== ContextProviderTag) continue;\n\n const context = parent.type as FigContext<unknown>;\n if (contextListIncludes(seen, context)) continue;\n seen = appendContext(seen, context);\n if (changedContextProvider(parent)) {\n changed = appendContext(changed, context);\n }\n }\n\n return changed;\n }\n\n function markContextConsumers(\n node: F,\n propagationRoot: F,\n context: FigContext<unknown>,\n lanes: Lanes,\n ): void {\n if (node.tag === ContextProviderTag && node.type === context) {\n return;\n }\n\n if (contextDependency(node, context) !== null) {\n markLanes(node, lanes);\n markParentPath(node, propagationRoot, lanes);\n }\n\n if (!contextListIncludes(node.contextSubtreeDependencies, context)) return;\n\n for (let child = node.child; child !== null; child = child.sibling) {\n markContextConsumers(child, propagationRoot, context, lanes);\n }\n }\n\n // Marks childLanes up to and including stopAt: stopAt is the skip point\n // whose childLanes gate whether its subtree is adopted or descended into.\n function markParentPath(node: F, stopAt: F, lanes: Lanes): void {\n for (\n let parent = node.return;\n parent !== null && parent !== stopAt;\n parent = parent.return\n ) {\n markChildLanes(parent, lanes);\n }\n\n markChildLanes(stopAt, lanes);\n }\n\n function markLanes(node: F, lane: Lane): void {\n node.lanes = mergeLanes(node.lanes, lane);\n if (node.alternate !== null) {\n node.alternate.lanes = mergeLanes(node.alternate.lanes, lane);\n }\n }\n\n function markChildLanes(node: F, lane: Lane): void {\n node.childLanes = mergeLanes(node.childLanes, lane);\n if (node.alternate !== null) {\n node.alternate.childLanes = mergeLanes(node.alternate.childLanes, lane);\n }\n }\n\n function markSubtreeFlag(node: F, flag: Flag): void {\n for (let parent = node.return; parent !== null; parent = parent.return) {\n parent.subtreeFlags |= flag;\n }\n }\n\n function createWorkInProgress(current: F, props: Props): F {\n const next =\n current.alternate ??\n fiber(current.tag, current.type, current.key, props, current.stateNode);\n\n next.props = props;\n next.memoizedProps = current.memoizedProps;\n next.committedProps = current.committedProps;\n next.assetResourceOwner = current.assetResourceOwner;\n next.memoizedState = current.memoizedState;\n next.stateNode = current.stateNode;\n next.return = current.return;\n next.child = null;\n next.sibling = null;\n next.index = current.index;\n // Exactly the hoisted bit survives the clone, in both directions:\n // - HoistedStaticFlag MUST carry. It is set once, when the instance is\n // resolved, and never re-derived; a clone without it would misroute\n // commit work — most dangerously deletion, where host.removeChild at\n // the fiber position targets an instance that lives in <head>\n // (NotFoundError in a real DOM).\n // - ViewTransitionStaticFlag MUST NOT carry. complete() re-derives it\n // for every fiber a render visits, so carrying it only matters for\n // clones that never complete (cloneSuspendedPrimary's captured hidden\n // trees): their stale bit would survive into the hidden Activity's\n // subtree summary and advertise view-transition boundaries in commits\n // that have no live view-transition work.\n next.flags = current.flags & HoistedStaticFlag;\n next.subtreeFlags = NoFlags;\n next.deletions = null;\n next.lanes = current.lanes;\n next.childLanes = current.childLanes;\n next.effects = null;\n next.contextDependencies = current.contextDependencies;\n next.contextSubtreeDependencies = current.contextSubtreeDependencies;\n next.dataDependenciesDirty = false;\n next.boundaryState = current.boundaryState;\n next.hiddenState = null;\n next.alternate = current;\n current.alternate = next;\n\n return next;\n }\n\n function cloneChildFibers(parent: F): void {\n let current = parent.alternate?.child ?? null;\n let previous: F | null = null;\n parent.child = null;\n parent.deletions = null;\n\n while (current !== null) {\n const next = createWorkInProgress(current, current.props);\n next.return = parent;\n\n previous = appendChild(parent, previous, next);\n current = current.sibling;\n }\n }\n\n function appendChild(parent: F, previous: F | null, child: F): F {\n if (previous === null) parent.child = child;\n else previous.sibling = child;\n return child;\n }\n\n function fiberFrom(child: NormalizedChild): F | null {\n if (typeof child === \"string\") {\n return fiber(TextTag, null, null, { nodeValue: child }, null);\n }\n\n if (isPortal(child)) {\n return fiber(PortalTag, null, child.key, portalProps(child), null);\n }\n\n if (isValidElement(child)) {\n return fiber(tagFor(child), child.type, child.key, child.props, null);\n }\n\n if (isThenable(child)) {\n return fiber(ThenableTag, null, null, { thenable: child }, null);\n }\n\n return null;\n }\n\n function portalTarget(node: F): Parent<Container, Instance> {\n return node.props.target as Parent<Container, Instance>;\n }\n\n function fiber(\n tag: Tag,\n type: FiberType,\n key: string | number | null,\n props: Props,\n stateNode: F[\"stateNode\"],\n ): F {\n return {\n tag,\n type,\n key,\n props,\n memoizedProps: null,\n committedProps: null,\n memoizedState: null,\n stateNode,\n return: null,\n child: null,\n sibling: null,\n index: 0,\n alternate: null,\n flags: NoFlags,\n subtreeFlags: NoFlags,\n deletions: null,\n lanes: NoLanes,\n childLanes: NoLanes,\n effects: null,\n contextDependencies: null,\n contextSubtreeDependencies: null,\n dataDependenciesDirty: false,\n assetResourceOwner: null,\n boundaryState: null,\n hiddenState: null,\n };\n }\n\n function assetResourceOwner(node: F): AssetResourceOwner {\n // Lifecycle walks can retain either fiber generation. Normalize the\n // identity on every access so acquisition and release cannot disagree.\n const owner =\n node.assetResourceOwner ??\n node.alternate?.assetResourceOwner ??\n ({} as AssetResourceOwner);\n node.assetResourceOwner = owner;\n if (node.alternate !== null) node.alternate.assetResourceOwner = owner;\n return owner;\n }\n\n function rootOf(node: F): R {\n const root = rootOfOrNull(node);\n if (root === null) throw new Error(\"Could not find a root for fiber.\");\n return root;\n }\n\n // Deletion teardown severs return pointers, so fibers held past unmount\n // (transition starters, stale closures) legitimately have no root. Paths\n // reachable from user code after unmount take this form; render- and\n // commit-time paths keep the throwing rootOf invariant.\n function rootOfOrNull(node: F): R | null {\n for (let parent: F | null = node; parent !== null; parent = parent.return) {\n if (parent.tag === RootTag) return parent.stateNode as R;\n }\n\n return null;\n }\n\n function errorInfoFor(node: F, error?: unknown): ErrorInfo {\n const dataResourceKeys =\n error === undefined ? undefined : dataResourceKeysForError(error);\n\n return dataResourceKeys === undefined\n ? { componentStack: componentStackFor(node) }\n : { componentStack: componentStackFor(node), dataResourceKeys };\n }\n\n function queueRecoverableError(\n root: R,\n node: F,\n error: unknown,\n details: RecoverableDetails,\n ): void {\n root.recoverableErrors.push({\n error,\n info: { ...details, componentStack: componentStackFor(node) },\n });\n }\n\n function componentStackFor(node: F): string {\n const frames: string[] = [];\n\n for (let fiber: F | null = node; fiber !== null; fiber = fiber.return) {\n const name = componentStackName(fiber);\n if (name !== null) frames.push(` at ${name}`);\n }\n\n return frames.length === 0 ? \"\" : `\\n${frames.join(\"\\n\")}`;\n }\n\n function componentStackName(node: F): string | null {\n switch (node.tag) {\n case FunctionTag:\n return devtoolsTypeName(node.type, \"Anonymous\");\n case ContextProviderTag:\n return `${devtoolsTypeName(node.type, \"Context\")}.Provider`;\n case SuspenseTag:\n return \"Suspense\";\n case ErrorBoundaryTag:\n return \"ErrorBoundary\";\n case ViewTransitionTag:\n return \"ViewTransition\";\n case PortalTag:\n return \"Portal\";\n case AssetsTag:\n return \"Assets\";\n default:\n return null;\n }\n }\n\n return {\n batchedUpdates,\n createRoot,\n hydrateRoot,\n hydrateTarget,\n flushSync,\n installCommitCoordinator,\n scheduleRefresh,\n };\n\n // Re-render every mounted instance of a changed component family. Updated\n // families re-render in place (hook state preserved); stale families (hook\n // signature changed) remount via their parent. The refresh runtime swaps each\n // family's `current` before calling this.\n // Each refresh function wraps its whole body in a block-form dev gate\n // (not an early return: esbuild only drops the bodies — and with them the\n // machinery — via parse-time branch elimination) so production builds ship\n // empty stubs.\n function scheduleRefresh(update: RefreshUpdate): void {\n if (__DEV__) {\n if (!hasRefreshHandler() || mountedRoots.size === 0) return;\n\n runWithStaleRefreshFamilies(update.staleFamilies, () => {\n flushSync(() => {\n for (const root of mountedRoots) {\n scheduleFamilyRefresh(root.current.child, update);\n }\n });\n });\n }\n }\n\n function scheduleFamilyRefresh(node: F | null, update: RefreshUpdate): void {\n if (__DEV__) {\n if (node === null) return;\n\n if (node.tag === FunctionTag && hasRefreshHandler()) {\n const family = refreshFamilyFor(node.type);\n if (family !== undefined) {\n if (update.staleFamilies.has(family)) {\n remountForRefresh(node);\n } else if (update.updatedFamilies.has(family)) {\n // Mark the instance dirty so render bailouts don't skip it.\n scheduleFiber(node, SyncLane);\n }\n }\n }\n\n scheduleFamilyRefresh(node.child, update);\n scheduleFamilyRefresh(node.sibling, update);\n }\n }\n\n // A stale component must drop its hook state. Re-render its parent so the\n // child reconciles as an incompatible type and remounts; for a top-level\n // component re-render the whole root.\n function remountForRefresh(node: F): void {\n if (__DEV__) {\n const parent = node.return;\n if (parent === null || parent.tag === RootTag) {\n const root = rootOf(node);\n updateRoot(root, root.element);\n } else {\n scheduleFiber(parent, SyncLane);\n }\n }\n }\n\n function findDehydratedSuspenseBoundaryForTarget(\n node: F | null,\n target: unknown,\n ): F | null {\n if (node === null || host.isTargetWithinSuspenseBoundary === undefined) {\n return null;\n }\n\n const state = fiberSuspenseState(node);\n if (\n state?.kind === \"dehydrated\" &&\n host.isTargetWithinSuspenseBoundary(target, state.boundary)\n ) {\n return node;\n }\n\n return (\n findDehydratedSuspenseBoundaryForTarget(node.child, target) ??\n findDehydratedSuspenseBoundaryForTarget(node.sibling, target)\n );\n }\n\n function isHiddenBoundary(node: F): boolean {\n return node.tag === ActivityTag && activityHidden(node.props);\n }\n\n function requireActivityHostConfig(): ActivityVisibilityHostConfig {\n if (activityHostConfig !== null) return activityHostConfig;\n\n if (\n host.hideInstance === undefined ||\n host.unhideInstance === undefined ||\n host.hideTextInstance === undefined ||\n host.unhideTextInstance === undefined\n ) {\n throw new Error(\"Activity is not supported by this renderer.\");\n }\n\n activityHostConfig = host as ActivityVisibilityHostConfig;\n return activityHostConfig;\n }\n\n function commitHiddenBoundaryVisibility(\n node: F | null,\n hidden = false,\n ): void {\n for (let cursor = node; cursor !== null; cursor = cursor.sibling) {\n if ((cursor.flags & AdoptedFlag) !== 0) continue;\n const subtreeVisibility = (cursor.subtreeFlags & VisibilityFlag) !== 0;\n\n if ((cursor.flags & VisibilityFlag) === 0 && !subtreeVisibility) {\n continue;\n }\n\n const boundary = cursor.tag === ActivityTag;\n const boundaryHidden = boundary && activityHidden(cursor.props);\n\n if (boundary && (cursor.flags & VisibilityFlag) !== 0) {\n const effectiveHidden = hidden || boundaryHidden;\n const state = fiberActivityState(cursor);\n if (state !== null) {\n state.hidden = effectiveHidden;\n if (effectiveHidden) hiddenStates.add(state);\n else hiddenStates.delete(state);\n }\n setSubtreeVisibility(cursor.child, effectiveHidden);\n if (effectiveHidden && cursor.child !== null)\n abortFiberEffects(cursor.child, true);\n if (\n !effectiveHidden &&\n includesSomeLane(cursor.childLanes, OffscreenLane)\n ) {\n // Pending hidden work upgrades to prompt processing on reveal.\n const root = rootOf(cursor);\n markRootPending(root, DefaultLane);\n markRootEntangled(root, DefaultLane | OffscreenLane);\n scheduleOrBatchRoot(root);\n }\n }\n\n if (subtreeVisibility) {\n commitHiddenBoundaryVisibility(cursor.child, hidden || boundaryHidden);\n }\n }\n }\n\n function setSubtreeVisibility(node: F | null, hidden: boolean): void {\n for (let cursor = node; cursor !== null; cursor = cursor.sibling) {\n setNodeVisibility(cursor, hidden);\n }\n }\n\n function setNodeVisibility(cursor: F, hidden: boolean): void {\n // Subtrees hidden by their own boundary keep their visibility.\n if (isHiddenBoundary(cursor)) return;\n\n if (cursor.tag === HostTag) {\n const activityHost = requireActivityHostConfig();\n if (hidden) activityHost.hideInstance(cursor.stateNode as Instance);\n else {\n activityHost.unhideInstance(cursor.stateNode as Instance, cursor.props);\n }\n } else if (cursor.tag === TextTag) {\n const activityHost = requireActivityHostConfig();\n if (hidden) {\n activityHost.hideTextInstance(cursor.stateNode as TextInstance);\n } else {\n activityHost.unhideTextInstance(\n cursor.stateNode as TextInstance,\n String(cursor.props.nodeValue),\n );\n }\n }\n\n setSubtreeVisibility(cursor.child, hidden);\n }\n\n function hideHostFiber(node: F): void {\n const activityHost = requireActivityHostConfig();\n if (node.tag === HostTag) {\n activityHost.hideInstance(node.stateNode as Instance);\n } else {\n activityHost.hideTextInstance(node.stateNode as TextInstance);\n }\n }\n\n function armRevealedHiddenBoundaries(node: F | null): void {\n for (let cursor = node; cursor !== null; cursor = cursor.sibling) {\n if ((cursor.flags & AdoptedFlag) !== 0) continue;\n const subtreeVisibility = (cursor.subtreeFlags & VisibilityFlag) !== 0;\n\n if ((cursor.flags & VisibilityFlag) === 0 && !subtreeVisibility) {\n continue;\n }\n\n if (\n cursor.tag === ActivityTag &&\n (cursor.flags & VisibilityFlag) !== 0 &&\n !activityHidden(cursor.props) &&\n cursor.child !== null\n ) {\n armDeferredEffects(cursor.child);\n }\n\n if (subtreeVisibility) armRevealedHiddenBoundaries(cursor.child);\n }\n }\n\n // Re-arms effects that were deferred or aborted while hidden so the\n // regular commit phases run them in order during the reveal commit.\n function armDeferredEffects(node: F): void {\n visitFiberHooks(node, (owner, hook) => {\n if (hook.kind === StableEventHook) {\n const state = hook.memoizedState as StableEventState;\n const instance = state.instance;\n instance.handler = state.next;\n instance.live = true;\n return;\n }\n\n if (!isEffectHook(hook.kind)) return;\n\n const effect = hook.memoizedState as Effect;\n if (effect.controller !== null) return;\n\n const effects = (owner.effects ??= []);\n if (!effects.includes(effect)) effects.push(effect);\n const root = rootOf(owner);\n recordCommitWork(root.commitIndex, owner, EffectFlag);\n markSubtreeFlag(owner, EffectFlag);\n markCommitEffectPhase(root, effect.phase);\n // Re-armed owners that did not re-render are not in the commit index\n // yet; the arming pass runs before every effect pass consumes it.\n });\n }\n\n function commitLiveHookInstances(root: R): void {\n for (const owner of root.commitIndex) {\n for (let hook = owner.memoizedState; hook !== null; hook = hook.next) {\n commitLiveHookInstance(owner, hook);\n }\n }\n }\n\n function commitLiveHookInstance(owner: F, hook: Hook): void {\n if (isStableEventHook(hook)) {\n const instance = hook.memoizedState.instance;\n instance.handler = hook.memoizedState.next;\n instance.live = !hasHiddenBoundaries || !isInsideHiddenBoundary(owner);\n }\n\n if (hook.kind === ActionStateHook) {\n const state = hook.memoizedState as ActionState<unknown, unknown[]>;\n state.instance.action = state.action;\n state.instance.value = state.value;\n }\n }\n\n // Bailed-out (cloned) fibers share their hook state objects with the last\n // rendered generation, so their instances already hold the published\n // values; the queue therefore only carries rendered fibers. This walk\n // proves that assumption on every dev commit.\n function assertLiveHookInstanceParity(node: F | null): void {\n visitRenderedFiberHooks(node, (owner, hook) => {\n if (isStableEventHook(hook)) {\n const instance = hook.memoizedState.instance;\n if (\n instance.handler !== hook.memoizedState.next ||\n instance.live !==\n (!hasHiddenBoundaries || !isInsideHiddenBoundary(owner))\n ) {\n throw new Error(\n \"Fig internal parity error: a stable-event hook was not \" +\n \"published by the commit index.\",\n );\n }\n }\n\n if (hook.kind === ActionStateHook) {\n const state = hook.memoizedState as ActionState<unknown, unknown[]>;\n if (\n state.instance.action !== state.action ||\n state.instance.value !== state.value\n ) {\n throw new Error(\n \"Fig internal parity error: an action-state hook was not \" +\n \"published by the commit index.\",\n );\n }\n }\n });\n }\n\n function isInsideHiddenBoundary(node: F): boolean {\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if (isHiddenBoundary(parent)) return true;\n }\n\n return false;\n }\n\n function isStableEventHook(hook: Hook): hook is Hook<StableEventState> {\n return hook.kind === StableEventHook;\n }\n\n function commitExternalStores(root: R): void {\n for (const cursor of root.commitIndex) {\n if ((cursor.flags & StoreConsistencyFlag) === 0) continue;\n // Subscriptions under hidden boundaries are deferred until reveal.\n if (hasHiddenBoundaries && isInsideHiddenBoundary(cursor)) continue;\n for (let hook = cursor.memoizedState; hook !== null; hook = hook.next) {\n if (isExternalStoreHook(hook))\n commitExternalStore(root, cursor, hook.memoizedState);\n }\n }\n }\n\n function assertExternalStoreCommitParity(node: F | null): void {\n walkFiberForest(node, (cursor) => {\n if ((cursor.flags & AdoptedFlag) !== 0) return false;\n\n if ((cursor.flags & StoreConsistencyFlag) !== 0) {\n for (let hook = cursor.memoizedState; hook !== null; hook = hook.next) {\n if (!isExternalStoreHook(hook)) continue;\n const state = hook.memoizedState;\n const instance = state.instance;\n if (\n instance.committedSubscribe !== state.subscribe ||\n instance.getSnapshot !== state.getSnapshot ||\n instance.owner !== cursor ||\n !Object.is(instance.value, state.value)\n ) {\n throw new Error(\n \"Fig internal parity error: an external-store hook was not \" +\n \"committed by the commit index.\",\n );\n }\n }\n }\n\n return (\n !isHiddenBoundary(cursor) &&\n (cursor.subtreeFlags & StoreConsistencyFlag) !== 0\n );\n });\n }\n\n function commitExternalStore(\n root: R,\n owner: F,\n state: ExternalStoreState<unknown, F>,\n ): void {\n const instance = state.instance;\n\n if (instance.committedSubscribe !== state.subscribe) {\n instance.unsubscribe?.();\n instance.unsubscribe = null;\n instance.committedSubscribe = state.subscribe;\n }\n\n instance.getSnapshot = state.getSnapshot;\n instance.owner = owner;\n instance.value = state.value;\n root.externalStores.add(instance);\n instance.unsubscribe ??= state.subscribe(() => {\n scheduleExternalStoreIfChanged(\n instance.owner,\n instance,\n requestExternalStoreUpdateLane(),\n );\n });\n scheduleExternalStoreIfChanged(instance.owner, instance, SyncLane);\n }\n\n function scheduleExternalStoreIfChanged(\n owner: F | null,\n instance: ExternalStoreInstance<unknown, F>,\n lane: Lane,\n ): void {\n if (owner === null) return;\n\n const latestValue = instance.getSnapshot();\n if (!Object.is(latestValue, instance.value)) scheduleFiber(owner, lane);\n }\n\n function requestExternalStoreUpdateLane(): Lane {\n const lane = requestUpdateLane();\n return lane === DefaultLane ? SyncLane : lane;\n }\n\n function commitEffects(root: R, node: F | null, phase: EffectPhase): void {\n const mask = 1 << phase;\n if ((root.commitEffectPhases & mask) === 0) return;\n\n let executed = 0;\n const runEffects = () => {\n for (const owner of root.commitIndex) {\n const effects = owner.effects;\n if (effects === null) continue;\n // Effects under hidden boundaries stay deferred until reveal.\n if (hasHiddenBoundaries && isInsideHiddenBoundary(owner)) continue;\n for (const effect of effects) {\n if (effect.phase !== phase) continue;\n if (__DEV__) executed += 1;\n runCommitEffect(effect, phase);\n }\n }\n };\n\n if (phase === BeforePaintEffect) {\n runWithPriority(SyncLane, runEffects);\n } else {\n runEffects();\n }\n root.commitEffectPhases &= ~mask;\n\n if (__DEV__) {\n let expected = 0;\n visitEffects(node, (effect) => {\n if (effect.phase === phase) expected += 1;\n });\n if (executed !== expected) {\n throw new Error(\n \"Fig internal parity error: the commit index executed \" +\n `${executed} ${hookKindNames[phase]} effect(s) where the tree ` +\n `walk found ${expected}.`,\n );\n }\n }\n }\n\n function runCommitEffect(effect: Effect, phase: EffectPhase): void {\n const previousPhase = currentCommitEffectPhase;\n currentCommitEffectPhase = phase;\n try {\n runEffect(effect);\n } finally {\n currentCommitEffectPhase = previousPhase;\n }\n }\n\n function collectReactiveEffects(root: R, node: F | null): void {\n walkFiberForest(node, (cursor) => {\n for (const effect of cursor.effects ?? []) {\n if (effect.phase === ReactiveEffect)\n root.pendingReactiveEffects.push(effect);\n }\n\n cursor.effects = null;\n const adopted = (cursor.flags & AdoptedFlag) !== 0;\n const subtreeFlags = cursor.subtreeFlags;\n // The last flag consumer in the commit clears them (static facts\n // excepted), so committed trees stay flag-clean and adopted subtrees\n // never expose stale commit state.\n clearTransientFlags(cursor);\n if (adopted) return false;\n if (isHiddenBoundary(cursor)) {\n if (subtreeFlags !== NoFlags) clearHiddenSubtreeFlags(cursor.child);\n return false;\n }\n return (subtreeFlags & ~StaticFlagsMask) !== NoFlags;\n });\n }\n\n // Hidden subtrees keep their deferred fiber.effects for reveal, but their\n // flags must still be cleared to keep committed trees flag-clean. Reveal\n // arming depends on those effect arrays surviving every commit while\n // hidden; no walk may null them below a hidden boundary.\n function clearHiddenSubtreeFlags(node: F | null): void {\n walkFiberForest(node, (cursor) => {\n const adopted = (cursor.flags & AdoptedFlag) !== 0;\n const subtreeFlags = cursor.subtreeFlags;\n clearTransientFlags(cursor);\n return !adopted && (subtreeFlags & ~StaticFlagsMask) !== NoFlags;\n });\n }\n\n function scheduleReactiveEffects(root: R): void {\n if (\n root.pendingReactiveEffects.length === 0 ||\n root.reactiveCallback !== null\n ) {\n return;\n }\n\n root.reactiveCallback = scheduleCallback(NormalPriority, () => {\n performReactiveEffects(root);\n });\n }\n\n // The standalone reactive flush has no performRoot frame around its\n // scheduler tick, so uncaught effect errors (handleEffectError rethrows\n // when no ancestor boundary exists) are routed here exactly like\n // performRoot's catch: clear the committed UI, report to onUncaughtError,\n // and keep the error out of the scheduler tick — a throw there would\n // strand queued tasks until the next scheduleCallback. Boundary-captured\n // errors never reach the catch; they schedule the boundary instead.\n function performReactiveEffects(root: R): void {\n try {\n flushReactiveEffects(root);\n } catch (error) {\n const info = root.uncaughtErrorInfo ?? errorInfoFor(root.current, error);\n clearRootAfterUncaughtError(root);\n reportUncaughtError(root, error, info);\n\n if (root.onUncaughtError === null) {\n setTimeout(() => {\n throw error;\n });\n }\n }\n }\n\n function flushPendingReactiveEffects(root: R): void {\n root.reactiveCallback?.cancel();\n flushReactiveEffects(root);\n }\n\n function flushReactiveEffects(root: R): void {\n root.reactiveCallback = null;\n\n const effects = root.pendingReactiveEffects;\n root.pendingReactiveEffects = [];\n\n for (const effect of effects) runEffect(effect);\n }\n\n function visitEffects(\n node: F | null,\n visitor: (effect: Effect) => void,\n ): void {\n walkFiberForest(node, (cursor) => {\n for (const effect of cursor.effects ?? []) visitor(effect);\n\n return (\n (cursor.flags & AdoptedFlag) === 0 &&\n !isHiddenBoundary(cursor) &&\n (cursor.subtreeFlags & EffectFlag) !== 0\n );\n });\n }\n\n // Deliberately traverses adopted subtrees: unmount aborts and commit-time\n // external store checks must reach hooks that did not re-render.\n function visitFiberHooks(\n node: F | null,\n visitor: (owner: F, hook: Hook) => void,\n ): void {\n walkFiberForest(node, (cursor) => {\n for (let hook = cursor.memoizedState; hook !== null; hook = hook.next) {\n visitor(cursor, hook);\n }\n });\n }\n\n function visitRenderedFiberHooks(\n node: F | null,\n visitor: (owner: F, hook: Hook) => void,\n ): void {\n walkFiberForest(node, (cursor) => {\n for (let hook = cursor.memoizedState; hook !== null; hook = hook.next) {\n visitor(cursor, hook);\n }\n\n return (cursor.flags & AdoptedFlag) === 0;\n });\n }\n\n function isExternalStoreHook(\n hook: Hook,\n ): hook is Hook<ExternalStoreState<unknown, F>> {\n return hook.kind === ExternalStoreHook;\n }\n\n function runEffect(effect: Effect): void {\n let runStrict = false;\n if (__DEV__) {\n // Marked before create so renders nested inside the effect carry it\n // forward and never re-enter the strict cycle.\n runStrict = !effect.strictRan;\n effect.strictRan = true;\n }\n abortEffect(effect);\n let controller = new AbortController();\n effect.controller = controller;\n // Effects run with the ambient data store set, like render and event\n // dispatch, so preloadData/invalidateData work synchronously inside them.\n const dataStore = rootOf(effect.owner as F).dataStore;\n try {\n dataStore.run(() => effect.create(controller.signal));\n if (__DEV__ && runStrict) {\n // Strict re-run: abort and re-invoke first-time effects so work that\n // ignores its AbortSignal surfaces in development.\n abortEffect(effect);\n controller = new AbortController();\n effect.controller = controller;\n dataStore.run(() => effect.create(controller.signal));\n }\n } catch (error) {\n abortEffect(effect);\n handleEffectError(effect, error);\n }\n }\n\n function handleEffectError(effect: Effect, error: unknown): void {\n const owner = effect.owner as F;\n\n const boundary = findErrorBoundary(owner);\n if (boundary !== null) {\n captureCommittedErrorBoundary(boundary, error, owner);\n scheduleFiber(boundary, DefaultLane);\n return;\n }\n\n rootOf(owner).uncaughtErrorInfo = errorInfoFor(owner, error);\n throw error;\n }\n\n // retirePending: hide keeps the tree alive, so retired transition/action\n // runs must also release their pending slots (the decrement schedules at\n // the run's lane and downgrades to the offscreen lane like any hidden\n // update); deletions and root unmount skip the scheduling — the fiber is\n // going away, so only the abort matters.\n // Walks the node AND its siblings (a hiding boundary tears down all of\n // its content children). Deletion teardown must NOT use this: deletion\n // entries' sibling pointers reference kept fibers — it walks each deleted\n // subtree itself and calls abortFiberHooks per fiber.\n function abortFiberEffects(node: F, retirePending = false): void {\n walkFiberForest(node, (cursor) => {\n abortFiberHooks(cursor, retirePending);\n });\n }\n\n function abortFiberHooks(owner: F, retirePending: boolean): void {\n for (let hook = owner.memoizedState; hook !== null; hook = hook.next) {\n if (isEffectHook(hook.kind)) abortEffect(hook.memoizedState as Effect);\n if (isExternalStoreHook(hook))\n unsubscribeExternalStore(hook.memoizedState);\n if (isStableEventHook(hook)) {\n const instance = hook.memoizedState.instance;\n instance.controller?.abort();\n instance.controller = null;\n // Calls after unmount (or while hidden) still run the last committed\n // handler, but with a signal that is already aborted.\n instance.live = false;\n }\n if (hook.kind === TransitionHook) {\n const state = hook.memoizedState as TransitionState;\n if (retireRun(state.instance) && retirePending) {\n scheduleHookUpdate(\n owner,\n hook.queue as HookQueue<TransitionState>,\n (previous) => ({\n ...previous,\n pendingCount: Math.max(0, previous.pendingCount - 1),\n }),\n DefaultLane,\n );\n }\n }\n if (hook.kind === ActionStateHook) {\n const state = hook.memoizedState as ActionState<unknown, unknown[]>;\n if (retireRun(state.instance) && retirePending) {\n scheduleHookUpdate(\n owner,\n hook.queue as HookQueue<ActionState<unknown, unknown[]>>,\n (previous) => ({\n ...previous,\n pending: Math.max(0, previous.pending - 1),\n }),\n DefaultLane,\n );\n }\n }\n }\n }\n\n function abortEffect(effect: Effect): void {\n effect.controller?.abort();\n effect.controller = null;\n }\n\n function unsubscribeExternalStore(\n state: ExternalStoreState<unknown, F>,\n ): void {\n if (state.instance.owner !== null) {\n rootOf(state.instance.owner).externalStores.delete(state.instance);\n }\n state.instance.unsubscribe?.();\n state.instance.unsubscribe = null;\n state.instance.committedSubscribe = null;\n state.instance.owner = null;\n }\n\n function restoreConsumedPendingQueues(root: R, from = 0): void {\n for (const consumed of root.consumedPendingQueues.splice(from)) {\n restoreConsumedPendingQueue(consumed);\n }\n }\n\n function restoreConsumedPendingQueuesForRetry(root: R, from: number): void {\n for (const consumed of root.consumedPendingQueues.splice(from)) {\n clearQueueLanes(consumed.pending);\n restoreConsumedPendingQueue(consumed);\n }\n }\n\n function restoreConsumedPendingQueue({\n queue,\n pending,\n }: ConsumedPendingQueue): void {\n queue.pending =\n queue.pending === null ? pending : mergeQueues(pending, queue.pending);\n }\n}\n\nfunction observeDiscardedPromiseChildren(node: FigNode): void {\n if (Array.isArray(node)) {\n for (const child of node) observeDiscardedPromiseChildren(child);\n return;\n }\n\n if (isValidElement(node)) {\n observeDiscardedPromiseChildren(node.props.children);\n return;\n }\n\n if (isPortal(node)) {\n observeDiscardedPromiseChildren(node.children);\n return;\n }\n\n if (isThenable(node)) trackThenable(node);\n}\n\nfunction activityHidden(props: Props): boolean {\n return props.mode === \"hidden\";\n}\n\n// Dev-only (inline-gated at call sites): maps a numeric kind back to its\n// public FigDevtoolsHookKind name for readable errors.\nfunction hookKindName(kind: HookKind): string | number {\n return __DEV__ ? hookKindNames[kind] : kind;\n}\n\nfunction createHook<S>(kind: HookKind, state: S): Hook<S> {\n return {\n kind,\n memoizedState: state,\n baseState: state,\n baseQueue: null,\n queue: { pending: null, dispatch: null },\n next: null,\n };\n}\n\n// Aborts and retires the instance's live run (if any): its generation is\n// invalidated so any later settlement is inert. Returns whether a run was\n// retired, so callers release its pending slot exactly once.\nfunction retireRun(instance: RunInstance): boolean {\n const controller = instance.controller;\n if (controller === null) return false;\n instance.controller = null;\n instance.generation += 1;\n controller.abort();\n return true;\n}\n\nfunction createActionState<S, Args extends unknown[]>(\n action: ActionStateAction<S, Args>,\n value: S,\n): ActionState<S, Args> {\n return {\n action,\n error: NoActionStateError,\n instance: { action, controller: null, generation: 0, runner: null, value },\n pending: 0,\n value,\n };\n}\n\nfunction resolveInitialState<S>(initialState: S | (() => S)): S {\n return typeof initialState === \"function\"\n ? (initialState as () => S)()\n : initialState;\n}\n\nfunction sameType<Container, Instance, TextInstance>(\n fiber: Fiber<Container, Instance, TextInstance>,\n child: NormalizedChild,\n): boolean {\n if (typeof child === \"string\") {\n return fiber.tag === TextTag;\n }\n\n if (isPortal(child)) {\n return fiber.tag === PortalTag && fiber.props.target === child.target;\n }\n\n if (isValidElement(child)) {\n if (__DEV__) {\n return matchesComponentFamily(fiber.type, child.type);\n }\n\n return fiber.type === child.type;\n }\n\n return isThenable(child) && fiber.tag === ThenableTag;\n}\n\nfunction propsFor(child: NormalizedChild): Props {\n if (typeof child === \"string\") {\n return { nodeValue: child };\n }\n\n if (isPortal(child)) return portalProps(child);\n if (isValidElement(child)) return child.props;\n if (isThenable(child)) return { thenable: child };\n\n throw invalidChildError(child);\n}\n\nfunction portalProps(child: FigPortal): Props {\n return { children: child.children, target: child.target };\n}\n\nfunction validateChildKey(\n child: NormalizedChild,\n seenKeys: Set<string> | null,\n): void {\n if (seenKeys === null) return;\n\n const key = childExplicitKey(child);\n if (key === null) return;\n\n if (seenKeys.has(key)) throw duplicateKeyError(key);\n seenKeys.add(key);\n}\n\nfunction sameChildKey<Container, Instance, TextInstance>(\n fiber: Fiber<Container, Instance, TextInstance>,\n child: NormalizedChild,\n index: number,\n): boolean {\n const key = childExplicitKey(child);\n return key === null\n ? fiber.key === null && fiber.index === index\n : fiber.key !== null && String(fiber.key) === key;\n}\n\nfunction childExplicitKey(child: NormalizedChild): string | null {\n return (isValidElement(child) || isPortal(child)) && child.key !== null\n ? String(child.key)\n : null;\n}\n\nfunction duplicateKeyError(key: string | number): Error {\n return new Error(`Duplicate key \"${String(key)}\" found among siblings.`);\n}\n\nfunction isHost<Container, Instance, TextInstance>(\n fiber: Fiber<Container, Instance, TextInstance>,\n): boolean {\n return fiber.tag === HostTag || fiber.tag === TextTag;\n}\n\nfunction hostNode<Container, Instance, TextInstance>(\n fiber: Fiber<Container, Instance, TextInstance>,\n): HostNode<Instance, TextInstance> {\n return fiber.stateNode as HostNode<Instance, TextInstance>;\n}\n\nfunction areHookInputsEqual(\n nextDeps: DependencyList | null,\n previousDeps: DependencyList | null,\n): boolean {\n if (nextDeps === null || previousDeps === null) return false;\n if (nextDeps.length !== previousDeps.length) return false;\n\n for (let index = 0; index < nextDeps.length; index += 1) {\n if (!Object.is(nextDeps[index], previousDeps[index])) return false;\n }\n\n return true;\n}\n\nfunction changedContextProvider<Container, Instance, TextInstance>(\n fiber: Fiber<Container, Instance, TextInstance>,\n): boolean {\n return (\n fiber.tag === ContextProviderTag &&\n fiber.alternate !== null &&\n !Object.is(fiber.props.value, fiber.alternate.memoizedProps?.value)\n );\n}\n\n// Retries of a committed fallback render at retry-lane priority rather than\n// the lane of the update that originally suspended. A boundary that suspends\n// again while retrying keeps its existing retry lane so successive retries of\n// one boundary stay grouped instead of claiming a new lane per ping.\nfunction suspenseRetryLane(lanes: Lanes): Lane {\n const retryLanes = lanes & RetryLanes;\n return retryLanes === NoLanes\n ? claimNextRetryLane()\n : getHighestPriorityLane(retryLanes);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/commit-index.ts","../src/devtools-internal.ts","../src/hook-kinds.ts","../src/hook-queue.ts","../src/host-content.ts","../src/root-data-store.ts","../src/index.ts"],"sourcesContent":["import { CommitIndexedFlag, type Flag, NoFlags } from \"./fiber-work.ts\";\n\ninterface CommitIndexNode {\n flags: Flag;\n}\n\nexport type CommitIndex<Node extends CommitIndexNode> = Node[];\n\nexport function recordCommitWork<Node extends CommitIndexNode>(\n index: CommitIndex<Node>,\n node: Node,\n flags: Flag = NoFlags,\n): void {\n node.flags |= flags;\n if ((node.flags & CommitIndexedFlag) !== 0) return;\n node.flags |= CommitIndexedFlag;\n index.push(node);\n}\n\nexport function rollbackCommitIndex<Node extends CommitIndexNode>(\n index: CommitIndex<Node>,\n checkpoint: number | undefined,\n): void {\n if (checkpoint === undefined || checkpoint >= index.length) return;\n for (let offset = checkpoint; offset < index.length; offset += 1) {\n index[offset].flags &= ~CommitIndexedFlag;\n }\n index.length = checkpoint;\n}\n\nexport function clearCommitIndex<Node extends CommitIndexNode>(\n index: CommitIndex<Node>,\n): void {\n for (const node of index) node.flags &= ~CommitIndexedFlag;\n index.length = 0;\n}\n","import { type ElementType, type FigContext, Fragment } from \"@bgub/fig\";\nimport type { FigDevtoolsGlobalHook } from \"./devtools.ts\";\n\nexport function devtoolsTypeName(\n type: ElementType | FigContext<unknown> | null,\n fallback: string,\n): string {\n if (typeof type === \"string\") return type;\n if (type === Fragment) return \"Fragment\";\n if (typeof type !== \"function\") return fallback;\n\n const namedType = type as {\n displayName?: unknown;\n name?: unknown;\n };\n\n if (typeof namedType.displayName === \"string\" && namedType.displayName !== \"\")\n return namedType.displayName;\n if (typeof namedType.name === \"string\" && namedType.name !== \"\")\n return namedType.name;\n\n return fallback;\n}\n\nexport function getFigDevtoolsGlobalHook(): FigDevtoolsGlobalHook | null {\n const globalWithHook = globalThis as typeof globalThis & {\n __FIG_DEVTOOLS_GLOBAL_HOOK__?: unknown;\n };\n const hook = globalWithHook.__FIG_DEVTOOLS_GLOBAL_HOOK__;\n\n if (\n typeof hook !== \"object\" ||\n hook === null ||\n !(\"inject\" in hook) ||\n !(\"onCommitRoot\" in hook)\n ) {\n return null;\n }\n\n const candidate = hook as Partial<FigDevtoolsGlobalHook>;\n if (\n typeof candidate.inject !== \"function\" ||\n typeof candidate.onCommitRoot !== \"function\"\n ) {\n return null;\n }\n\n return candidate as FigDevtoolsGlobalHook;\n}\n","// Effect hooks reuse their phase as their hook kind. Keeping the shared\n// numeric vocabulary here lets rendering and DevTools interpret hooks without\n// making either module depend on the other's implementation.\nexport const ReactiveEffect = 0;\nexport const BeforePaintEffect = 1;\nexport const BeforeLayoutEffect = 2;\n\nexport type EffectPhase =\n | typeof ReactiveEffect\n | typeof BeforePaintEffect\n | typeof BeforeLayoutEffect;\n\nexport const StateHook = 3;\nexport const ActionStateHook = 4;\nexport const IdHook = 5;\nexport const DeferredValueHook = 6;\nexport const ExternalStoreHook = 7;\nexport const MemoHook = 8;\nexport const TransitionHook = 9;\nexport const StableEventHook = 10;\n\nexport type HookKind = number;\n\nexport const hookKindNames = [\n \"reactive\",\n \"before-paint\",\n \"before-layout\",\n \"state\",\n \"action-state\",\n \"id\",\n \"deferred-value\",\n \"external-store\",\n \"memo\",\n \"transition\",\n \"stable-event\",\n] as const;\n\nexport function isEffectHook(kind: HookKind): boolean {\n return kind <= BeforeLayoutEffect;\n}\n","import type { StateSetter } from \"@bgub/fig\";\nimport { type Lane, NoLane } from \"./lanes.ts\";\n\nexport type StateUpdate<S> = S | ((previous: S) => S);\n\nexport class HookUpdate<S> {\n next: HookUpdate<S> = this;\n\n constructor(\n readonly action: StateUpdate<S>,\n public lane: Lane,\n ) {}\n}\n\nexport interface HookQueue<S> {\n pending: HookUpdate<S> | null;\n dispatch: StateSetter<S> | null;\n}\n\n// Hook queues are circular lists whose tail points at the first update. These\n// operations keep the pointer manipulation in one place so render retries and\n// rebasing share exactly the same ordering rules.\nexport function mergeQueues<S>(\n baseQueue: HookUpdate<S> | null,\n pendingQueue: HookUpdate<S>,\n): HookUpdate<S> {\n if (baseQueue === null) return pendingQueue;\n\n const baseFirst = baseQueue.next;\n const pendingFirst = pendingQueue.next;\n baseQueue.next = pendingFirst;\n pendingQueue.next = baseFirst;\n return pendingQueue;\n}\n\nexport function cloneUpdateNode<S>(update: HookUpdate<S>): HookUpdate<S> {\n return new HookUpdate(update.action, update.lane);\n}\n\nexport function cloneQueue<S>(\n queue: HookUpdate<S> | null,\n): HookUpdate<S> | null {\n return queue === null ? null : cloneQueueNodes(queue);\n}\n\nexport function cloneQueueNodes<S>(queue: HookUpdate<S>): HookUpdate<S> {\n const first = queue.next;\n let clone = cloneUpdateNode(first);\n let update = first.next;\n\n while (update !== first) {\n clone = mergeQueues(clone, cloneUpdateNode(update));\n update = update.next;\n }\n\n return clone;\n}\n\nexport function clearQueueLanes<S>(queue: HookUpdate<S>): void {\n let update = queue.next;\n do {\n update.lane = NoLane;\n update = update.next;\n } while (update !== queue.next);\n}\n","import { type FigNode, isValidElement, type Props } from \"@bgub/fig\";\nimport { invalidChildError, isPortal, isThenable } from \"@bgub/fig/internal\";\n\nconst EmptyHostTextContent = Symbol(\"fig.empty-host-text-content\");\nconst NonTextHostContent = Symbol(\"fig.non-text-host-content\");\n\ntype HostTextContent =\n | string\n | typeof EmptyHostTextContent\n | typeof NonTextHostContent;\n\nexport function hostTextContent(children: unknown): string | null {\n const text = hostTextContentPart(children as FigNode);\n return typeof text === \"string\" ? text : null;\n}\n\nexport function hostChildren(props: Props): FigNode {\n if (!hasUnsafeHTML(props)) return props.children as FigNode;\n if (hasRenderableChild(props.children as FigNode)) {\n throw new Error(\"Host elements cannot have both unsafeHTML and children.\");\n }\n return null;\n}\n\nexport function hasUnsafeHTML(props: Props): boolean {\n return !emptyValue(props.unsafeHTML);\n}\n\nfunction hasRenderableChild(node: FigNode): boolean {\n if (Array.isArray(node)) return node.some(hasRenderableChild);\n return !emptyChild(node);\n}\n\nfunction emptyValue(value: unknown): boolean {\n return value === null || value === undefined || value === false;\n}\n\nfunction emptyChild(value: unknown): boolean {\n return value === null || value === undefined || typeof value === \"boolean\";\n}\n\nfunction hostTextContentPart(node: FigNode): HostTextContent {\n if (Array.isArray(node)) {\n let hasText = false;\n let text = \"\";\n\n for (const child of node) {\n const childText = hostTextContentPart(child);\n if (childText === NonTextHostContent) return NonTextHostContent;\n if (childText === EmptyHostTextContent) continue;\n\n hasText = true;\n text += childText;\n }\n\n return hasText ? text : EmptyHostTextContent;\n }\n\n if (node === null || node === undefined || typeof node === \"boolean\") {\n return EmptyHostTextContent;\n }\n\n if (typeof node === \"string\" || typeof node === \"number\") {\n return String(node);\n }\n\n if (isValidElement(node) || isPortal(node) || isThenable(node)) {\n return NonTextHostContent;\n }\n\n throw invalidChildError(node);\n}\n","import type {\n DataRefreshResult,\n DataResource,\n DataResourceKey,\n FigDataHydrationEntry,\n} from \"@bgub/fig\";\nimport {\n type FigDataStore,\n type FigDataStoreFactory,\n type FigDataStoreHost,\n setCurrentDataStore,\n} from \"@bgub/fig/internal\";\n\n// Renderer bundles do not import @bgub/fig. Resources created by that package\n// carry the store factory on this symbol, so a root can buffer hydration data\n// until the first real data-resource operation installs the implementation.\nconst DataStoreFactorySymbol = Symbol.for(\"fig.data-store-factory\");\n\nexport function createRootDataStore(host: FigDataStoreHost): FigDataStore {\n let inner: FigDataStore | null = null;\n let buffered: FigDataHydrationEntry[] | null = null;\n let disposed = false;\n\n function installStore<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ): FigDataStore {\n if (inner !== null) return inner;\n if (disposed) {\n throw new Error(\"Data resource APIs require a live Fig root.\");\n }\n\n const factory = (\n resource as DataResource & Record<symbol, FigDataStoreFactory>\n )[DataStoreFactorySymbol];\n if (factory === undefined) {\n throw new Error(\"Data resource APIs require @bgub/fig.\");\n }\n\n inner = factory(host);\n if (buffered !== null) inner.hydrate(buffered);\n buffered = null;\n return inner;\n }\n\n const store: FigDataStore = {\n hydrate(entries: readonly FigDataHydrationEntry[]): void {\n if (inner !== null) {\n inner.hydrate(entries);\n return;\n }\n (buffered ??= []).push(...entries);\n },\n run<T>(callback: () => T): T {\n if (inner !== null) return inner.run(callback);\n\n const previousStore = setCurrentDataStore(store);\n try {\n return callback();\n } finally {\n setCurrentDataStore(previousStore);\n }\n },\n readData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n owner: object,\n ): TValue {\n return installStore(resource).readData(resource, args, owner);\n },\n preloadData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n ): void {\n installStore(resource).preloadData(resource, ...args);\n },\n ensureData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n ): Promise<TValue> {\n return installStore(resource).ensureData(resource, ...args);\n },\n invalidateData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n ): void {\n installStore(resource).invalidateData(resource, ...args);\n },\n invalidateDataError(error: unknown): boolean {\n return inner?.invalidateDataError(error) ?? false;\n },\n invalidateDataKey(key: DataResourceKey): void {\n inner?.invalidateDataKey(key);\n },\n invalidateDataPrefix(prefix: DataResourceKey): void {\n inner?.invalidateDataPrefix(prefix);\n },\n refreshData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n ): Promise<DataRefreshResult<TValue>> {\n return installStore(resource).refreshData(resource, ...args);\n },\n commitDataDependencies(owner: object, previousOwner: object | null): void {\n inner?.commitDataDependencies(owner, previousOwner);\n },\n deleteDataOwner(owner: object): void {\n inner?.deleteDataOwner(owner);\n },\n releaseDataOwner(owner: object): void {\n inner?.releaseDataOwner(owner);\n },\n resetDataDependencies(owner: object): void {\n inner?.resetDataDependencies(owner);\n },\n dispose(): void {\n disposed = true;\n inner?.dispose();\n inner = null;\n buffered = null;\n },\n inspectDataEntries() {\n return inner?.inspectDataEntries() ?? [];\n },\n inspectDataDependencyCanonicalKeys(owner: object) {\n return inner?.inspectDataDependencyCanonicalKeys(owner) ?? [];\n },\n snapshot() {\n return inner?.snapshot() ?? buffered?.slice() ?? [];\n },\n };\n\n return store;\n}\n","import {\n type ActionStateAction,\n type ActionStateRunner,\n type AwaitedFigNode,\n type DataResource,\n type DataResourceKeyInput,\n type DependencyList,\n type EffectCallback,\n type ElementType,\n type ErrorBoundaryProps,\n type ErrorInfo,\n type ExternalStoreSubscribe,\n type FigAssetResourceList,\n type FigContext,\n type FigDataHydrationEntry,\n type FigDataStoreController,\n type FigDataStoreHandle,\n type FigNode,\n type FigPortal,\n isValidElement,\n type Props,\n type StartTransition,\n type StateSetter,\n type TransitionOptions,\n type ViewTransitionProps,\n} from \"@bgub/fig\";\nimport {\n collectChildren,\n attachDataStore,\n dataResourceKeysForError,\n type FigDataStore,\n invalidChildError,\n isPortal,\n isThenable,\n type StableEventCallerArgs,\n type NormalizedChild,\n type RenderDispatcher,\n readThenable,\n setCurrentDataStore,\n setCurrentDispatcher,\n setTransitionHandler,\n trackThenable,\n type Thenable,\n} from \"@bgub/fig/internal\";\nimport {\n clearCommitIndex,\n type CommitIndex,\n recordCommitWork,\n rollbackCommitIndex,\n} from \"./commit-index.ts\";\nimport { emitDevtoolsCommit } from \"./devtools-snapshot.ts\";\nimport { devtoolsTypeName } from \"./devtools-internal.ts\";\nimport type {\n ReconcilerCommitContext,\n ReconcilerCommitCoordinator,\n ReconcilerWorkPriority,\n} from \"./commit-coordinator.ts\";\nimport type {\n ViewTransitionPlannerFiber,\n ViewTransitionPlannerRoot,\n ViewTransitionPlannerState,\n} from \"./view-transition-planner-types.ts\";\nimport {\n ActivityTag,\n AssetsTag,\n ContextProviderTag,\n ErrorBoundaryTag,\n FragmentTag,\n FunctionTag,\n HostTag,\n PortalTag,\n RootTag,\n SuspenseTag,\n tagFor,\n type Tag,\n TextTag,\n ThenableTag,\n ViewTransitionTag,\n} from \"./fiber-tags.ts\";\nimport { walkFiberForest, walkFiberSubtree } from \"./fiber-traversal.ts\";\nimport {\n AssetFlag,\n AdoptedFlag,\n AssembledFlag,\n childSubtreeFlags,\n clearTransientFlags,\n ContextPropagationFlag,\n DeletionFlag,\n EffectFlag,\n HoistedStaticFlag,\n type Flag,\n HostUpdateMask,\n HydrationFlag,\n MutationMask,\n NoFlags,\n PlacementFlag,\n StaticFlagsMask,\n StoreConsistencyFlag,\n TextContentFlag,\n UpdateFlag,\n ViewTransitionStaticFlag,\n VisibilityFlag,\n} from \"./fiber-work.ts\";\nimport {\n ActionStateHook,\n BeforeLayoutEffect,\n BeforePaintEffect,\n DeferredValueHook,\n type EffectPhase,\n ExternalStoreHook,\n hookKindNames,\n type HookKind,\n IdHook,\n isEffectHook,\n MemoHook,\n ReactiveEffect,\n StableEventHook,\n StateHook,\n TransitionHook,\n} from \"./hook-kinds.ts\";\nimport {\n clearQueueLanes,\n cloneQueue,\n cloneQueueNodes,\n cloneUpdateNode,\n type HookQueue,\n HookUpdate,\n mergeQueues,\n type StateUpdate,\n} from \"./hook-queue.ts\";\nimport {\n hasUnsafeHTML,\n hostChildren,\n hostTextContent,\n} from \"./host-content.ts\";\nimport {\n AllTransitionLanes,\n claimNextRetryLane,\n claimNextTransitionLane,\n createLaneMap,\n DefaultHydrationLane,\n DefaultLane,\n DeferredLane,\n getHighestPriorityLane,\n getLaneSchedulerPriority,\n getNextLanes,\n IdleLane,\n InputContinuousLane,\n includesOnlyTransitions,\n includesSomeLane,\n isSyncLane,\n type Lane,\n type LaneRoot,\n type Lanes,\n markRootEntangled,\n markRootFinished,\n markRootPinged,\n markRootSuspended,\n markRootUpdated,\n markStarvedLanesAsExpired,\n mergeLanes,\n NoLane,\n NoLanes,\n NoTimestamp,\n OffscreenLane,\n RetryLanes,\n requestUpdateLane,\n runWithPriority,\n runWithTransition,\n runWithTransitionLane,\n transitionTypeHooks,\n SelectiveHydrationLane,\n SyncLane,\n} from \"./lanes.ts\";\nimport {\n hasRefreshHandler,\n matchesComponentFamily,\n refreshFamilyFor,\n resolveLatestType,\n runWithStaleRefreshFamilies,\n} from \"./refresh-internal.ts\";\nimport type { RefreshUpdate } from \"./refresh.ts\";\nexport type { RefreshUpdate } from \"./refresh.ts\";\nimport { createRootDataStore } from \"./root-data-store.ts\";\nimport {\n NormalPriority,\n now,\n requestPaint,\n type ScheduledTask,\n scheduleCallback,\n shouldYieldToHost,\n} from \"./scheduler.ts\";\n\nexport type EventPriority = \"default\" | \"continuous\" | \"discrete\";\n\nexport function runWithEventPriority<T>(\n priority: EventPriority,\n callback: () => T,\n): T {\n return runWithPriority(eventPriorityLane(priority), callback);\n}\n\nfunction eventPriorityLane(priority: EventPriority): Lane {\n switch (priority) {\n case \"discrete\":\n return SyncLane;\n case \"continuous\":\n return InputContinuousLane;\n case \"default\":\n return DefaultLane;\n }\n}\n\nfunction hydrationLaneForPriority(priority: EventPriority): Lane {\n return priority === \"discrete\" ? SyncLane : SelectiveHydrationLane;\n}\n\ndeclare const __FIG_DEV__: boolean | undefined;\n\nconst __DEV__ = typeof __FIG_DEV__ === \"boolean\" ? __FIG_DEV__ : false;\n\nsetTransitionHandler(runWithTransition);\n\ntype Component = (props: Props & { children?: FigNode }) => FigNode;\ntype HostNode<Instance, TextInstance> = Instance | TextInstance;\ntype Parent<Container, Instance> = Container | Instance;\ntype FiberType = ElementType | FigContext<unknown> | null;\n\nexport interface DehydratedSuspenseError {\n digest?: string;\n message?: string;\n}\n\nexport interface DehydratedSuspenseBoundary<\n Instance = unknown,\n TextInstance = unknown,\n> {\n error?: DehydratedSuspenseError | null;\n id: string | null;\n start: HostNode<Instance, TextInstance>;\n end: HostNode<Instance, TextInstance>;\n status: \"completed\" | \"pending\" | \"client-rendered\";\n forceClientRender: boolean;\n}\n\ndeclare const AssetResourceOwnerBrand: unique symbol;\n\n/** Stable opaque identity for one fiber's asset-resource ownership. */\nexport interface AssetResourceOwner {\n readonly [AssetResourceOwnerBrand]: true;\n}\n\nexport interface HostConfig<Container, Instance, TextInstance> {\n createInstance(\n type: string,\n props: Props,\n parent: Parent<Container, Instance>,\n ): Instance;\n createTextInstance(text: string): TextInstance;\n validateInstanceNesting?(\n type: string,\n props: Props,\n ancestors: readonly string[],\n ): void;\n validateTextNesting?(text: string, ancestors: readonly string[]): void;\n containerType?(container: Parent<Container, Instance>): string | null;\n appendInitialChild?(\n parent: Instance,\n child: HostNode<Instance, TextInstance>,\n ): void;\n finalizeInitialInstance?(instance: Instance, props: Props): void;\n setTextContent?(instance: Instance, text: string): void;\n getFirstHydratableChild?(\n parent: Parent<Container, Instance>,\n props?: Props,\n ): HostNode<Instance, TextInstance> | null;\n getNextHydratableSibling?(\n node: HostNode<Instance, TextInstance>,\n ): HostNode<Instance, TextInstance> | null;\n canHydrateInstance?(\n node: HostNode<Instance, TextInstance>,\n type: string,\n props: Props,\n ): boolean;\n canHydrateTextInstance?(\n node: HostNode<Instance, TextInstance>,\n text: string,\n suppressHydrationWarning?: boolean,\n ): boolean;\n // True when unmatched DOM siblings at the end of this hydrated host belong\n // to an out-of-band owner and must remain outside the reconciled tree.\n canRetainHydrationTail?(instance: Instance): boolean;\n // Resolve an out-of-band host instance using the real host parent. Returning\n // an instance fixes the fiber's placement as hoisted for its lifetime: it\n // does not consume a hydration cursor node and commit acquires/releases it\n // through the hooks below instead of insertBefore/removeChild. Returning\n // null leaves the fiber on the ordinary hydrate/create path.\n resolveHoistedInstance?(\n type: string,\n props: Props,\n parent: Parent<Container, Instance>,\n ): Instance | null;\n // May return a different instance when the fiber's identity already\n // resolves to a live shared instance (e.g. one inserted while this render\n // was suspended); the fiber adopts the returned instance.\n commitHoistedInstance?(\n instance: Instance,\n props: Props,\n owner: AssetResourceOwner,\n ): Instance | void;\n removeHoistedInstance?(instance: Instance, owner: AssetResourceOwner): void;\n // Hoisted instances are shared by identity (key), so an update that\n // changes the identity must not mutate the shared instance in place; the\n // host releases the old identity and returns the instance to use, which\n // may differ from the current one.\n updateHoistedInstance?(\n instance: Instance,\n previousProps: Props,\n nextProps: Props,\n owner: AssetResourceOwner,\n ): Instance;\n // Assets fibers are transparent to host placement. This commit-time diff is\n // their complete lifecycle: null means the owner did not exist on that side\n // of the commit. The host owns normalization, dedupe, and reference counts.\n commitAssetResources?(\n previous: FigAssetResourceList | null,\n next: FigAssetResourceList | null,\n owner: AssetResourceOwner,\n ): void;\n shouldCommitUpdate?(\n type: string,\n previousProps: Props,\n nextProps: Props,\n ): boolean;\n clearContainer?(container: Container): void;\n insertBefore(\n parent: Parent<Container, Instance>,\n child: HostNode<Instance, TextInstance>,\n before: HostNode<Instance, TextInstance> | null,\n ): void;\n removeChild(\n parent: Parent<Container, Instance>,\n child: HostNode<Instance, TextInstance>,\n ): void;\n commitUpdate(\n instance: Instance,\n previousProps: Props,\n nextProps: Props,\n ): void;\n commitHydratedInstance?(instance: Instance, nextProps: Props): void;\n getActivityBoundary?(node: HostNode<Instance, TextInstance>): Instance | null;\n getFirstActivityHydratable?(\n boundary: Instance,\n ): HostNode<Instance, TextInstance> | null;\n commitHydratedActivityBoundary?(boundary: Instance): void;\n hideInstance?(instance: Instance): void;\n unhideInstance?(instance: Instance, props: Props): void;\n hideTextInstance?(instance: TextInstance): void;\n unhideTextInstance?(instance: TextInstance, text: string): void;\n getSuspenseBoundary?(\n node: HostNode<Instance, TextInstance>,\n ): DehydratedSuspenseBoundary<Instance, TextInstance> | null;\n getEnclosingSuspenseBoundaryStart?(\n target: unknown,\n ): HostNode<Instance, TextInstance> | null;\n isTargetWithinSuspenseBoundary?(\n target: unknown,\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): boolean;\n shouldRecoverSuspenseMismatchAtRoot?(\n container: Container,\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): boolean;\n registerSuspenseBoundaryRetry?(\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n retry: () => void,\n ): void;\n commitHydratedSuspenseBoundary?(\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): void;\n completeRootHydration?(container: Container): void;\n removeDehydratedSuspenseBoundary?(\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): void;\n preparePortalContainer?(\n container: Parent<Container, Instance>,\n root: Container,\n logicalParent: Parent<Container, Instance>,\n ): void;\n removePortalContainer?(container: Parent<Container, Instance>): void;\n commitTextUpdate(text: TextInstance, value: string): void;\n}\n\n// Capability types describe coherent host method groups for renderers that\n// implement them. Plain regroupings of HostConfig members do not earn aliases.\nexport type HostHydrationConfig<Container, Instance, TextInstance> = Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n | \"getFirstHydratableChild\"\n | \"getNextHydratableSibling\"\n | \"canHydrateInstance\"\n | \"canHydrateTextInstance\"\n | \"clearContainer\"\n >\n> &\n Pick<HostConfig<Container, Instance, TextInstance>, \"commitHydratedInstance\">;\n\nexport type HostActivityConfig<Container, Instance, TextInstance> = Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n | \"getActivityBoundary\"\n | \"getFirstActivityHydratable\"\n | \"commitHydratedActivityBoundary\"\n | \"hideInstance\"\n | \"unhideInstance\"\n | \"hideTextInstance\"\n | \"unhideTextInstance\"\n >\n>;\n\nexport type HostSuspenseHydrationConfig<Container, Instance, TextInstance> =\n Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n | \"getSuspenseBoundary\"\n | \"getEnclosingSuspenseBoundaryStart\"\n | \"isTargetWithinSuspenseBoundary\"\n | \"registerSuspenseBoundaryRetry\"\n | \"commitHydratedSuspenseBoundary\"\n | \"completeRootHydration\"\n | \"removeDehydratedSuspenseBoundary\"\n >\n >;\n\nexport type HostPortalConfig<Container, Instance, TextInstance> = Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n \"preparePortalContainer\" | \"removePortalContainer\"\n >\n>;\n\nexport type HostHoistedAssetConfig<Container, Instance, TextInstance> =\n Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n | \"resolveHoistedInstance\"\n | \"commitHoistedInstance\"\n | \"removeHoistedInstance\"\n | \"updateHoistedInstance\"\n >\n >;\n\nexport interface FigRoot {\n data: FigDataStoreHandle;\n render(children: FigNode): void;\n unmount(): void;\n}\n\nexport interface FigRootOptions {\n /** Adopt a store populated before the renderer root was created. */\n dataStore?: FigDataStoreController;\n dataPartition?: DataResourceKeyInput;\n initialData?: readonly FigDataHydrationEntry[];\n identifierPrefix?: string;\n devtools?: boolean;\n onRecoverableError?: (error: unknown, info: RecoverableErrorInfo) => void;\n onUncaughtError?: (error: unknown, info: ErrorInfo) => void;\n}\n\nexport interface RecoverableErrorInfo extends ErrorInfo {\n actual?: string;\n boundaryId?: string;\n componentStack: string;\n digest?: string;\n expected?: string;\n recovery: \"root\" | \"suspense\";\n source: \"hydration\" | \"server\";\n}\n\nexport type HydrationTargetResult = \"none\" | \"hydrated\" | \"blocked\";\n\nexport interface FigRenderer<Container, Instance = unknown> {\n batchedUpdates<T>(this: void, callback: () => T): T;\n createRoot(\n this: void,\n container: Container,\n options?: FigRootOptions,\n ): FigRoot;\n hydrateRoot(\n this: void,\n container: Container,\n children: FigNode,\n options?: FigRootOptions,\n ): FigRoot;\n hydrateTarget(\n this: void,\n container: Container,\n target: unknown,\n priority?: EventPriority,\n ): HydrationTargetResult;\n flushSync<T>(this: void, callback: () => T): T;\n installCommitCoordinator(\n this: void,\n coordinator: ReconcilerCommitCoordinator<Container, Instance>,\n ): void;\n scheduleRefresh(this: void, update: RefreshUpdate): void;\n}\n\ninterface Hook<S = any> {\n kind: HookKind;\n memoizedState: S;\n baseState: S;\n baseQueue: HookUpdate<S> | null;\n queue: HookQueue<S>;\n next: Hook<any> | null;\n}\n\ninterface Effect {\n phase: EffectPhase;\n create: EffectCallback;\n controller: AbortController | null;\n deps: DependencyList | null;\n owner: Fiber<unknown, unknown, unknown>;\n // Carried across renders like controller; gates the dev-only strict\n // re-run to once per hook lifetime so renders nested inside an effect\n // (e.g. flushSync) cannot re-trigger the cycle.\n strictRan: boolean;\n}\n\ntype StableEventHandler = (...args: unknown[]) => unknown;\n\ninterface StableEventInstance {\n controller: AbortController | null;\n handler: StableEventHandler | null;\n live: boolean;\n stable: StableEventHandler;\n}\n\ninterface StableEventState {\n instance: StableEventInstance;\n // Lives on the per-render hook state, not the persistent instance: commits\n // republish bailed-out fibers' hooks, so an abandoned render's handler must\n // never be reachable from the instance.\n next: StableEventHandler;\n}\n\ninterface MemoState<T> {\n value: T;\n deps: DependencyList;\n}\n\n// One cancellable run per hook: supersede/unmount/hide abort the controller\n// and bump the generation, which retires the run — retired settlements are\n// fully inert (no pending decrement, rejections swallowed).\ninterface RunInstance {\n controller: AbortController | null;\n generation: number;\n}\n\ninterface TransitionState {\n instance: RunInstance;\n pendingCount: number;\n start: StartTransition | null;\n}\n\nconst NoActionStateError = Symbol();\n\ninterface ActionStateInstance<S, Args extends unknown[]> extends RunInstance {\n action: ActionStateAction<S, Args>;\n runner: ActionStateRunner<Args> | null;\n value: S;\n}\n\ninterface ActionState<S, Args extends unknown[]> {\n error: unknown;\n instance: ActionStateInstance<S, Args>;\n pending: number;\n action: ActionStateAction<S, Args>;\n value: S;\n}\n\ntype QueuedHookKind =\n | typeof StateHook\n | typeof TransitionHook\n | typeof ActionStateHook;\n\ninterface ExternalStoreInstance<T, Owner> {\n committedSubscribe: ExternalStoreSubscribe | null;\n getSnapshot: () => T;\n owner: Owner | null;\n unsubscribe: (() => void) | null;\n value: T;\n}\n\ninterface ExternalStoreState<T, Owner> {\n getSnapshot: () => T;\n instance: ExternalStoreInstance<T, Owner>;\n subscribe: ExternalStoreSubscribe;\n value: T;\n}\n\ninterface SuspenseFallbackState<Container, Instance, TextInstance> {\n kind: \"fallback\";\n primaryChild: Fiber<Container, Instance, TextInstance> | null;\n}\n\ninterface DehydratedSuspenseState<Instance, TextInstance> {\n kind: \"dehydrated\";\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>;\n // Canonical server-tree position captured when the marker is first claimed.\n // Hydration restores this base even if updates insert or move siblings before\n // the boundary resumes.\n idPath: string;\n wasPending: boolean;\n}\n\ntype SuspenseState<Container, Instance, TextInstance> =\n | SuspenseFallbackState<Container, Instance, TextInstance>\n | DehydratedSuspenseState<Instance, TextInstance>;\n\ninterface HiddenState<Container, Instance, TextInstance> {\n currentFirstChild: Fiber<Container, Instance, TextInstance> | null;\n}\n\ninterface ErrorBoundaryState {\n error: unknown;\n info: ErrorInfo;\n didReport: boolean;\n}\n\ninterface DehydratedActivityState<Instance> {\n // The host boundary (an inert template holding server content) while the\n // Activity is dehydrated. Cleared when the content unpacks at commit.\n boundary: Instance;\n // Same snapshot as dehydrated Suspense, for hidden server content that may\n // hydrate after the surrounding client tree has changed.\n idPath: string;\n}\n\ninterface ActivityState<Instance> {\n hidden: boolean;\n dehydrated: DehydratedActivityState<Instance> | null;\n}\n\ntype BoundaryState<Container, Instance, TextInstance> =\n | SuspenseState<Container, Instance, TextInstance>\n | ErrorBoundaryState\n | ActivityState<Instance>;\n\ninterface ContextDependency {\n context: FigContext<unknown>;\n memoizedValue: unknown;\n}\n\n// A suspension recorded during render, retried through the boundary fiber\n// once a commit blesses that fiber's identity. Entries from discarded renders\n// die with the render; their thenables are covered by the root ping attached\n// at capture time.\ninterface PendingSuspenseRetry<Container, Instance, TextInstance> {\n boundary: Fiber<Container, Instance, TextInstance>;\n thenable: Thenable;\n lanes: Lanes;\n}\n\ninterface Fiber<\n Container,\n Instance,\n TextInstance,\n> extends ViewTransitionPlannerFiber {\n tag: Tag;\n type: FiberType;\n key: string | number | null;\n props: Props;\n memoizedProps: Props | null;\n committedProps: Props | null;\n memoizedState: Hook<any> | null;\n stateNode:\n | HostNode<Instance, TextInstance>\n | FiberRoot<Container, Instance, TextInstance>\n | ViewTransitionState\n | null;\n return: Fiber<Container, Instance, TextInstance> | null;\n child: Fiber<Container, Instance, TextInstance> | null;\n sibling: Fiber<Container, Instance, TextInstance> | null;\n index: number;\n alternate: Fiber<Container, Instance, TextInstance> | null;\n flags: Flag;\n subtreeFlags: Flag;\n deletions: Fiber<Container, Instance, TextInstance>[] | null;\n lanes: Lanes;\n childLanes: Lanes;\n effects: Effect[] | null;\n contextDependencies: ContextDependency[] | null;\n contextSubtreeDependencies: FigContext<unknown>[] | null;\n dataDependenciesDirty: boolean;\n // Lazily allocated only for hoisted hosts and Assets fibers. Keep cold\n // lifecycle state after the topology and work fields.\n assetResourceOwner: AssetResourceOwner | null;\n // The fiber tag discriminates this union.\n // Activity state is shared by both generations so stale return chains see\n // the committed visibility state.\n boundaryState: BoundaryState<Container, Instance, TextInstance> | null;\n suspenseQueueStart?: number;\n // Suspense/ErrorBoundary only: root commit-index length when this boundary\n // began, so a capture can truncate entries queued by its discarded subtree.\n commitIndexCheckpoint?: number;\n hiddenState: HiddenState<Container, Instance, TextInstance> | null;\n}\n\ninterface ViewTransitionState extends ViewTransitionPlannerState {\n autoName: string | null;\n}\n\ninterface FiberRoot<Container, Instance, TextInstance>\n extends LaneRoot, ViewTransitionPlannerRoot<Container> {\n container: Container;\n current: Fiber<Container, Instance, TextInstance>;\n element: FigNode;\n identifierPrefix: string;\n nextClientId: number;\n devtools: boolean;\n callback: ScheduledTask | null;\n callbackPriority: Lane;\n wip: Fiber<Container, Instance, TextInstance> | null;\n finishedWork: Fiber<Container, Instance, TextInstance> | null;\n renderLanes: Lanes;\n pendingCoordinatedCommit: boolean;\n // finishedWork is rendered but its commit waits for a coordinator-owned\n // operation to finish. Unlike pendingCoordinatedCommit (the sub-frame\n // commit window, which freezes the root), a parked root keeps rendering:\n // newer work supersedes the parked tree so the latest state commits when\n // the animation ends.\n parkedCoordinatedCommit: boolean;\n dataStore: FigDataStore;\n contextValues: Map<FigContext<unknown>, unknown>;\n contextStack: ContextStackEntry<Container, Instance, TextInstance>[];\n externalStores: Set<\n ExternalStoreInstance<unknown, Fiber<Container, Instance, TextInstance>>\n >;\n pendingReactiveEffects: Effect[];\n reactiveCallback: ScheduledTask | null;\n suspendedThenables: WeakMap<object, Lanes>;\n pendingSuspenseRetries: PendingSuspenseRetry<\n Container,\n Instance,\n TextInstance\n >[];\n attachedSuspenseRetries: WeakMap<\n object,\n WeakSet<Fiber<Container, Instance, TextInstance>>\n >;\n consumedPendingQueues: ConsumedPendingQueue[];\n onRecoverableError: (error: unknown, info: RecoverableErrorInfo) => void;\n onUncaughtError: ((error: unknown, info: ErrorInfo) => void) | null;\n recoverableErrors: RecoverableErrorRecord[];\n uncaughtErrorInfo: ErrorInfo | null;\n commitEffectPhases: number;\n needsCommitDeletions: boolean;\n // Commit work discovered during render: every fiber that rendered hooks,\n // recorded deletions, or caught an error, in begin order (pre-order over\n // the rendered region). Commit passes iterate this instead of walking the\n // tree; each pass re-checks its own per-fiber predicate, so duplicate and\n // stale entries are inert. Truncated to a boundary checkpoint when a\n // capture discards its subtree; cleared on restart and after commit.\n commitIndex: CommitIndex<Fiber<Container, Instance, TextInstance>>;\n // Boundaries that caught during the commit phase (effects, reactive\n // flushes). Kept outside the commit index: these must survive render restarts\n // until a later commit reports them.\n committedCaughtErrors: Fiber<Container, Instance, TextInstance>[];\n isHydrating: boolean;\n isHydrationRoot: boolean;\n hydrationParent: Fiber<Container, Instance, TextInstance> | null;\n hydratingSuspenseBoundary: Fiber<Container, Instance, TextInstance> | null;\n hydratingActivityBoundary: Fiber<Container, Instance, TextInstance> | null;\n dehydratedSuspenseCount: number;\n // Live dehydrated boundaries keyed by their start marker node, rebuilt in\n // the same post-commit walk that maintains dehydratedSuspenseCount, so\n // event-target lookups resolve to a fiber without searching the tree.\n dehydratedBoundaries: Map<\n HostNode<Instance, TextInstance>,\n Fiber<Container, Instance, TextInstance>\n >;\n needsRootHydrationCompletion: boolean;\n nextHydratableInstance: HostNode<Instance, TextInstance> | null;\n clearContainerBeforeCommit: boolean;\n hydrationInitialElement: FigNode | typeof NoHydrationInitialElement;\n}\n\ninterface ContextStackEntry<Container, Instance, TextInstance> {\n context: FigContext<unknown>;\n hadPrevious: boolean;\n previous: unknown;\n provider: Fiber<Container, Instance, TextInstance>;\n}\n\ninterface ConsumedPendingQueue {\n queue: HookQueue<unknown>;\n pending: HookUpdate<unknown>;\n}\n\ninterface RecoverableErrorRecord {\n error: unknown;\n info: RecoverableErrorInfo;\n}\n\ntype RecoverableDetails = Omit<RecoverableErrorInfo, \"componentStack\">;\n\nconst PreservedSuspense = Symbol(\"fig.preserved-suspense\");\nconst NoHydrationInitialElement = Symbol(\"fig.no-hydration-initial-element\");\n\nclass HydrationMismatchError extends Error {}\n\nexport function createRenderer<Container, Instance, TextInstance>(\n host: HostConfig<Container, Instance, TextInstance>,\n): FigRenderer<Container, Instance> {\n type F = Fiber<Container, Instance, TextInstance>;\n type R = FiberRoot<Container, Instance, TextInstance>;\n // Shared read-only stand-in for the common no-retries commit; never pushed\n // to (commits swap in a fresh array before recording anything).\n const noSuspenseRetries: PendingSuspenseRetry<\n Container,\n Instance,\n TextInstance\n >[] = [];\n type ActivityHydrationHostConfig = Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n | \"getActivityBoundary\"\n | \"getFirstActivityHydratable\"\n | \"commitHydratedActivityBoundary\"\n >\n >;\n type ActivityVisibilityHostConfig = Required<\n Pick<\n HostConfig<Container, Instance, TextInstance>,\n | \"hideInstance\"\n | \"unhideInstance\"\n | \"hideTextInstance\"\n | \"unhideTextInstance\"\n >\n >;\n const roots = new WeakMap<object, R>();\n // Iterable view of live roots, only populated when a refresh handler is set,\n // so a hot-reload pass can walk every mounted tree (dev-only; empty in prod).\n const mountedRoots = new Set<R>();\n const pendingRoots = new Set<R>();\n const batchedRoots = new Set<R>();\n const abandonedHydrationBoundaries = new WeakSet<object>();\n let commitCoordinator: ReconcilerCommitCoordinator<\n Container,\n Instance\n > | null = null;\n let didWarnMissingViewTransitionCoordinator = false;\n let batchDepth = 0;\n let flushingSyncWork = false;\n let commitDepth = 0;\n let needsPostCommitSyncFlush = false;\n let flushingPostCommitSyncWork = false;\n let nestedPostCommitSyncFlushes = 0;\n const nestedPostCommitSyncFlushLimit = 50;\n let currentCommitEffectPhase: EffectPhase | null = null;\n // `hasHiddenBoundaries` gates the parent-walk in `hiddenSubtreeLane`: while it\n // is false no update can need the offscreen downgrade, so the walk is skipped.\n // It is set eagerly true whenever a hidden boundary is begun (covering the\n // in-flight render before its commit) and recomputed from `hiddenStates` at\n // the end of every commit, so it resets to false once the last hidden boundary\n // is revealed or unmounted. `hiddenStates` tracks the live committed\n // `ActivityState`s that are currently hidden; keying on the state object (which\n // both fiber generations share) makes membership generation-agnostic.\n let hasHiddenBoundaries = false;\n const hiddenStates = new Set<ActivityState<Instance>>();\n let activityHostConfig: ActivityVisibilityHostConfig | null = null;\n let activityHydrationHostConfig: ActivityHydrationHostConfig | null = null;\n let hoistedAssetHostConfig: HostHoistedAssetConfig<\n Container,\n Instance,\n TextInstance\n > | null = null;\n let renderingFiber: F | null = null;\n let currentHook: Hook | null = null;\n let workInProgressHook: Hook | null = null;\n let localIdCounter = 0;\n\n function installCommitCoordinator(\n coordinator: ReconcilerCommitCoordinator<Container, Instance>,\n ): void {\n if (commitCoordinator === coordinator) return;\n if (commitCoordinator !== null) {\n throw new Error(\n `Cannot install commit coordinator \"${coordinator.name}\": commit ` +\n `coordination is already owned by \"${commitCoordinator.name}\".`,\n );\n }\n commitCoordinator = coordinator;\n }\n\n function commitPriority(lanes: Lanes): ReconcilerWorkPriority {\n const lane = getHighestPriorityLane(lanes);\n if (includesSomeLane(RetryLanes | SelectiveHydrationLane, lane)) {\n return \"suspense\";\n }\n if (includesSomeLane(AllTransitionLanes | DeferredLane, lane)) {\n return \"transition\";\n }\n if (includesSomeLane(IdleLane | OffscreenLane, lane)) return \"idle\";\n return \"blocking\";\n }\n\n // Argument-identical delegations are direct references (the function\n // declarations below are hoisted); only the effect hooks, which bind their\n // phase constant, need wrappers.\n const dispatcher: RenderDispatcher = {\n useState: updateStateHook,\n useActionState: updateActionStateHook,\n useId: updateIdHook,\n useDeferredValue: updateDeferredValueHook,\n useMemo: updateMemoHook,\n useTransition: updateTransitionHook,\n useReactive(effect: EffectCallback, deps?: DependencyList): void {\n updateEffectHook(ReactiveEffect, effect, deps);\n },\n useBeforePaint(effect: EffectCallback, deps?: DependencyList): void {\n updateEffectHook(BeforePaintEffect, effect, deps);\n },\n useBeforeLayout(effect: EffectCallback, deps?: DependencyList): void {\n updateEffectHook(BeforeLayoutEffect, effect, deps);\n },\n useSyncExternalStore: updateExternalStoreHook,\n useStableEvent: updateStableEventHook,\n readContext: readContextValue,\n readData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): TValue {\n const fiber = requireRenderingFiber();\n return rootOf(fiber).dataStore.readData(resource, args, fiber);\n },\n preloadData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): void {\n const fiber = requireRenderingFiber();\n rootOf(fiber).dataStore.preloadData(resource, ...args);\n },\n readPromise<T>(promise: PromiseLike<T>): T {\n return readThenable(promise);\n },\n };\n\n function createRoot(\n container: Container,\n options: FigRootOptions = {},\n ): FigRoot {\n return rootHandle(rootForContainer(container, { kind: \"client\", options }));\n }\n\n function hydrateRoot(\n container: Container,\n children: FigNode,\n options: FigRootOptions = {},\n ): FigRoot {\n const root = rootForContainer(container, { kind: \"hydration\", options });\n root.hydrationInitialElement = children;\n updateRoot(root, children);\n return rootHandle(root);\n }\n\n function rootForContainer(\n container: Container,\n request: {\n kind: \"client\" | \"hydration\";\n options: FigRootOptions;\n },\n ): R {\n if (roots.has(container as object)) {\n throw duplicateRootError(request.kind);\n }\n\n if (request.kind === \"hydration\") requireHydrationHostConfig();\n\n const root = createFiberRoot(container, request.options);\n roots.set(container as object, root);\n if (__DEV__) {\n if (hasRefreshHandler()) mountedRoots.add(root);\n }\n\n if (request.kind === \"hydration\") {\n root.isHydrating = true;\n root.isHydrationRoot = true;\n root.needsRootHydrationCompletion = true;\n }\n\n return root;\n }\n\n function createFiberRoot(container: Container, options: FigRootOptions): R {\n const current = fiber(RootTag, null, null, { children: null }, null);\n const dataStoreHost = {\n getLane: requestUpdateLane,\n partition: options.dataPartition,\n schedule(owner: object, lane: unknown): void {\n scheduleFiber(owner as F, hiddenSubtreeLane(owner as F, lane as Lane));\n },\n };\n const dataStore =\n options.dataStore === undefined\n ? createRootDataStore(dataStoreHost)\n : attachDataStore(\n options.dataStore,\n dataStoreHost,\n options.initialData,\n );\n const root: R = {\n container,\n current,\n element: null,\n identifierPrefix: options.identifierPrefix ?? \"\",\n nextClientId: 0,\n devtools: options.devtools ?? true,\n pendingLanes: NoLanes,\n suspendedLanes: NoLanes,\n pingedLanes: NoLanes,\n expiredLanes: NoLanes,\n entangledLanes: NoLanes,\n entanglements: createLaneMap(NoLanes),\n expirationTimes: createLaneMap(NoTimestamp),\n callback: null,\n callbackPriority: NoLane,\n wip: null,\n finishedWork: null,\n renderLanes: NoLanes,\n pendingCoordinatedCommit: false,\n parkedCoordinatedCommit: false,\n dataStore,\n contextValues: new Map(),\n contextStack: [],\n externalStores: new Set(),\n pendingReactiveEffects: [],\n reactiveCallback: null,\n suspendedThenables: new WeakMap(),\n pendingSuspenseRetries: [],\n attachedSuspenseRetries: new WeakMap(),\n consumedPendingQueues: [],\n onRecoverableError: options.onRecoverableError ?? noop,\n onUncaughtError: options.onUncaughtError ?? null,\n recoverableErrors: [],\n uncaughtErrorInfo: null,\n commitEffectPhases: 0,\n needsCommitDeletions: false,\n commitIndex: [],\n committedCaughtErrors: [],\n isHydrating: false,\n isHydrationRoot: false,\n hydrationParent: null,\n hydratingSuspenseBoundary: null,\n hydratingActivityBoundary: null,\n dehydratedSuspenseCount: 0,\n dehydratedBoundaries: new Map(),\n needsRootHydrationCompletion: false,\n nextHydratableInstance: null,\n clearContainerBeforeCommit: false,\n hydrationInitialElement: NoHydrationInitialElement,\n };\n if (options.dataStore === undefined && options.initialData !== undefined)\n dataStore.hydrate(options.initialData);\n current.stateNode = root;\n return root;\n }\n\n function duplicateRootError(kind: \"client\" | \"hydration\"): Error {\n const method = kind === \"hydration\" ? \"hydrateRoot\" : \"createRoot\";\n return new Error(\n `Cannot call ${method} on a container that already has a Fig root. Use the existing root.render(...) to update it instead.`,\n );\n }\n\n function noop(): void {}\n\n function rootHandle(root: R): FigRoot {\n let unmounted = false;\n return {\n data: root.dataStore,\n render: (children) => {\n if (unmounted) {\n throw new Error(\"Cannot update an unmounted root.\");\n }\n updateRoot(root, children);\n },\n unmount: () => {\n if (unmounted) return;\n unmounted = true;\n // Tear the tree down synchronously so per-fiber data cleanup runs while\n // the store is still live; dispose is then the final teardown step.\n flushSync(() => updateRoot(root, null));\n root.dataStore.dispose();\n // Free the container so a later createRoot/render starts a fresh root\n // instead of reusing this one's now-disposed store.\n if (roots.get(root.container as object) === root) {\n roots.delete(root.container as object);\n }\n mountedRoots.delete(root);\n },\n };\n }\n\n function hydrateTarget(\n container: Container,\n target: unknown,\n priority: EventPriority = \"default\",\n ): HydrationTargetResult {\n const lane = hydrationLaneForPriority(priority);\n const root = roots.get(container as object);\n if (root === undefined) return \"none\";\n // Before the shell's first hydration commit nothing has handlers, so\n // every target is blocked — reporting \"none\" here would let a replayed\n // event dispatch into a slot-less tree and be consumed silently. A\n // discrete interaction pulls the whole initial hydration forward\n // synchronously, exactly like it does for a dehydrated boundary.\n if (rootShellPendingHydration(root)) {\n if (isSyncLane(lane)) performRoot(root, true);\n if (rootShellPendingHydration(root)) return \"blocked\";\n }\n if (root.dehydratedSuspenseCount === 0) return \"none\";\n\n const boundary = dehydratedBoundaryForTarget(root, target);\n if (boundary === null) return \"none\";\n\n scheduleFiber(boundary, lane);\n if (isSyncLane(lane)) performRoot(root, true);\n return dehydratedBoundaryForTarget(root, target) === null\n ? \"hydrated\"\n : \"blocked\";\n }\n\n // needsRootHydrationCompletion clears when every boundary hydrated, and\n // current.child fills at the first commit — together they mean \"the shell\n // has not committed yet\" (a root rendering null clears the flag at its\n // first commit, so the conjunction still breaks).\n function rootShellPendingHydration(root: R): boolean {\n return root.needsRootHydrationCompletion && root.current.child === null;\n }\n\n function dehydratedBoundaryForTarget(root: R, target: unknown): F | null {\n if (host.getEnclosingSuspenseBoundaryStart === undefined) {\n // Fallback for hosts without target-instance lookup: search the fiber\n // tree for a dehydrated boundary whose host range contains the target.\n return findDehydratedSuspenseBoundaryForTarget(\n root.current.child,\n target,\n );\n }\n\n // A start marker with no live dehydrated fiber belongs to a boundary\n // nested inside an outer dehydrated one (its content has no fibers yet),\n // so resume the marker walk outward from that marker.\n let start = host.getEnclosingSuspenseBoundaryStart(target);\n while (start !== null) {\n const fiber = root.dehydratedBoundaries.get(start) ?? null;\n if (fiberSuspenseState(fiber)?.kind === \"dehydrated\") return fiber;\n start = host.getEnclosingSuspenseBoundaryStart(start);\n }\n\n return null;\n }\n\n function flushSync<T>(callback: () => T): T {\n if (renderingFiber !== null) {\n throw new Error(\n \"flushSync cannot be called while rendering a component.\",\n );\n }\n\n try {\n return runWithPriority(SyncLane, callback);\n } finally {\n flushSyncWork();\n }\n }\n\n function flushSyncWork(): void {\n if (commitDepth > 0) {\n needsPostCommitSyncFlush = true;\n return;\n }\n\n // Save/restore rather than force false: a nested flushSync (e.g. unmount()\n // from a commit-phase effect) must not clear the flag while an outer flush is\n // still running, or the outer flush's uncaught errors get misrouted.\n const previousFlushingSyncWork = flushingSyncWork;\n flushingSyncWork = true;\n try {\n for (const root of pendingRoots) {\n if (root.pendingLanes !== NoLanes) {\n root.callback?.cancel();\n root.callback = null;\n root.callbackPriority = NoLane;\n performRoot(root, true);\n } else {\n pendingRoots.delete(root);\n }\n }\n } finally {\n flushingSyncWork = previousFlushingSyncWork;\n }\n }\n\n function flushPostCommitSyncWork(): void {\n if (\n commitDepth > 0 ||\n !needsPostCommitSyncFlush ||\n flushingPostCommitSyncWork\n ) {\n return;\n }\n\n flushingPostCommitSyncWork = true;\n try {\n do {\n nestedPostCommitSyncFlushes += 1;\n if (nestedPostCommitSyncFlushes > nestedPostCommitSyncFlushLimit) {\n throw new Error(\"Maximum update depth exceeded.\");\n }\n needsPostCommitSyncFlush = false;\n flushSyncWork();\n } while (needsPostCommitSyncFlush);\n } finally {\n nestedPostCommitSyncFlushes = 0;\n flushingPostCommitSyncWork = false;\n }\n }\n\n function batchedUpdates<T>(callback: () => T): T {\n batchDepth += 1;\n\n try {\n return callback();\n } finally {\n batchDepth -= 1;\n if (batchDepth === 0) {\n for (const root of batchedRoots) scheduleRoot(root);\n batchedRoots.clear();\n }\n }\n }\n\n function updateRoot(root: R, children: FigNode): void {\n if (shouldClientRenderEarlyHydrationUpdate(root, children)) {\n forceClientRender(root);\n }\n\n const lane = requestUpdateLane();\n root.element = children;\n markRootPending(root, lane);\n scheduleOrBatchRoot(root);\n }\n\n function markRootPending(root: R, lane: Lane): void {\n markRootUpdated(root, lane);\n transitionTypeHooks.record?.(root, lane);\n pendingRoots.add(root);\n if (currentCommitEffectPhase === BeforePaintEffect && isSyncLane(lane)) {\n needsPostCommitSyncFlush = true;\n }\n }\n\n function markRootCompleted(root: R, remainingLanes: Lanes): void {\n markRootFinished(root, remainingLanes);\n transitionTypeHooks.complete?.(root, remainingLanes);\n }\n\n function markCommitEffectPhase(root: R, phase: EffectPhase): void {\n root.commitEffectPhases |= 1 << phase;\n }\n\n function scheduleOrBatchRoot(root: R): void {\n if (batchDepth > 0) batchedRoots.add(root);\n else scheduleRoot(root);\n }\n\n function scheduleRoot(root: R): void {\n if (root.pendingCoordinatedCommit) return;\n\n markStarvedLanesAsExpired(root, now());\n\n const nextLanes = getNextLanes(root, root.renderLanes);\n if (nextLanes === NoLanes) {\n if (root.pendingLanes === NoLanes) pendingRoots.delete(root);\n return;\n }\n\n const priorityLane = getHighestPriorityLane(nextLanes);\n if (root.callback !== null && root.callbackPriority === priorityLane)\n return;\n\n root.callback?.cancel();\n root.callbackPriority = priorityLane;\n root.callback = scheduleCallback(\n getLaneSchedulerPriority(priorityLane),\n () => {\n performRoot(root, isSyncLane(priorityLane));\n },\n );\n }\n\n function performRoot(root: R, forceSync: boolean): void {\n try {\n performRootWork(root, forceSync);\n } catch (error) {\n if (error === PreservedSuspense) {\n restartRootWork(root);\n scheduleRoot(root);\n return;\n }\n\n if (error instanceof HydrationMismatchError) {\n recoverFromHydrationMismatch(root);\n return;\n }\n\n if (isThenable(error)) {\n const suspendedLanes = root.renderLanes;\n restartRootWork(root);\n markRootSuspended(root, suspendedLanes);\n attachPing(root, error, suspendedLanes);\n scheduleRoot(root);\n return;\n }\n\n const info = root.uncaughtErrorInfo ?? errorInfoFor(root.current, error);\n restartRootWork(root);\n clearRootAfterUncaughtError(root);\n reportUncaughtError(root, error, info);\n\n // flushSync callers observe the error directly. Outside flushSync the\n // error must not escape into the scheduler tick (that would stall other\n // queued tasks), so without an onUncaughtError handler it is rethrown\n // from a detached task to surface as a global error.\n if (flushingSyncWork) throw error;\n if (root.onUncaughtError === null) {\n setTimeout(() => {\n throw error;\n });\n }\n }\n }\n\n function recoverFromHydrationMismatch(root: R): void {\n if (root.hydratingSuspenseBoundary !== null) {\n recoverFromSuspenseHydrationMismatch(\n root,\n root.hydratingSuspenseBoundary,\n );\n return;\n }\n\n markHydrationRecovery(root, \"root\");\n restartRootWork(root);\n forceClientRender(root);\n performRoot(root, true);\n }\n\n function recoverFromSuspenseHydrationMismatch(root: R, boundary: F): void {\n const current = boundary.alternate ?? boundary;\n const state = fiberSuspenseState(current);\n\n restartRootWork(root);\n\n if (state?.kind !== \"dehydrated\") {\n markHydrationRecovery(root, \"root\");\n forceClientRender(root);\n performRoot(root, true);\n return;\n }\n\n if (\n host.shouldRecoverSuspenseMismatchAtRoot?.(\n root.container,\n state.boundary,\n ) === true\n ) {\n markHydrationRecovery(root, \"root\");\n state.boundary.forceClientRender = true;\n forceClientRender(root);\n performRoot(root, true);\n return;\n }\n\n markHydrationRecovery(root, \"suspense\");\n state.boundary.forceClientRender = true;\n deactivateHydration(root);\n scheduleFiber(current, SelectiveHydrationLane);\n performRoot(root, true);\n }\n\n function markHydrationRecovery(\n root: R,\n recovery: RecoverableErrorInfo[\"recovery\"],\n ): void {\n for (const record of root.recoverableErrors) {\n if (record.info.source === \"hydration\") record.info.recovery = recovery;\n }\n }\n\n function shouldClientRenderEarlyHydrationUpdate(\n root: R,\n children: FigNode,\n ): boolean {\n return (\n root.isHydrating &&\n root.current.child === null &&\n root.hydrationInitialElement !== NoHydrationInitialElement &&\n root.hydrationInitialElement !== children\n );\n }\n\n function forceClientRender(root: R): void {\n deactivateHydration(root);\n root.clearContainerBeforeCommit = true;\n root.hydrationInitialElement = NoHydrationInitialElement;\n }\n\n function performRootWork(root: R, forceSync: boolean): void {\n if (root.pendingCoordinatedCommit) return;\n\n if (root.pendingLanes === NoLanes && root.wip === null) {\n pendingRoots.delete(root);\n return;\n }\n\n flushPendingReactiveEffects(root);\n\n if (root.parkedCoordinatedCommit) {\n root.parkedCoordinatedCommit = false;\n // The parked tree's lanes were never marked finished, so they are\n // still inside pendingLanes; anything beyond them is newer work.\n const supersededByNewerWork =\n (root.pendingLanes & ~root.renderLanes) !== NoLanes;\n if (\n !supersededByNewerWork &&\n root.wip === null &&\n root.finishedWork !== null\n ) {\n // Nothing changed while the animation ran: commit the parked tree\n // as-is (commitRoot re-parks it if yet another transition started\n // in between, e.g. a streaming reveal).\n if (commitRoot(root, root.finishedWork)) return;\n finishRootWork(root);\n flushPostCommitSyncWork();\n return;\n }\n // Newer work supersedes the parked commit — React cancels its\n // suspended commit the same way. restartRootWork restores the update\n // queues the parked render consumed, and the fresh render below\n // absorbs the parked lanes, so the latest state commits instead.\n restartRootWork(root);\n }\n\n const nextLanes = getNextLanes(root, root.renderLanes);\n if (nextLanes === NoLanes && root.wip === null) {\n root.callback = null;\n root.callbackPriority = NoLane;\n return;\n }\n\n if (\n root.wip !== null &&\n nextLanes !== NoLanes &&\n nextLanes !== root.renderLanes\n ) {\n restartRootWork(root);\n }\n\n if (root.wip === null) {\n root.renderLanes = nextLanes;\n root.consumedPendingQueues = [];\n resetContextStack(root);\n root.finishedWork = createWorkInProgress(root.current, {\n children: root.element,\n });\n root.wip = root.finishedWork;\n prepareToHydrateRoot(root);\n }\n\n while (\n root.wip !== null &&\n (forceSync ||\n isSyncLane(getHighestPriorityLane(root.renderLanes)) ||\n !shouldYieldToHost())\n ) {\n root.wip = performUnit(root.wip);\n }\n\n if (root.wip !== null) {\n root.callback = null;\n root.callbackPriority = NoLane;\n scheduleRoot(root);\n return;\n }\n\n if (root.finishedWork !== null && commitRoot(root, root.finishedWork)) {\n return;\n }\n finishRootWork(root);\n flushPostCommitSyncWork();\n }\n\n function finishRootWork(root: R): void {\n resetRootWork(root);\n\n if (root.pendingLanes !== NoLanes) scheduleRoot(root);\n else pendingRoots.delete(root);\n }\n\n function restartRootWork(root: R): void {\n restoreConsumedPendingQueues(root);\n resetRootWork(root);\n }\n\n function resetRootWork(root: R): void {\n const wasHydratingCompletedBoundary =\n root.hydrationInitialElement === NoHydrationInitialElement &&\n (root.hydratingSuspenseBoundary !== null ||\n root.hydratingActivityBoundary !== null);\n root.wip = null;\n root.finishedWork = null;\n root.renderLanes = NoLanes;\n root.callback = null;\n root.callbackPriority = NoLane;\n // Retries recorded by the discarded render die with it; their thenables\n // stay covered by the root pings attached at capture time.\n if (root.pendingSuspenseRetries.length > 0) {\n root.pendingSuspenseRetries = [];\n }\n clearCommitIndex(root.commitIndex);\n resetHydrationPointers(root);\n resetContextStack(root);\n if (wasHydratingCompletedBoundary) root.isHydrating = false;\n root.uncaughtErrorInfo = null;\n }\n\n function resetHydrationPointers(root: R): void {\n root.hydrationParent = null;\n root.hydratingSuspenseBoundary = null;\n root.hydratingActivityBoundary = null;\n root.nextHydratableInstance = null;\n }\n\n function deactivateHydration(root: R): void {\n root.isHydrating = false;\n resetHydrationPointers(root);\n }\n\n function performUnit(node: F): F | null {\n try {\n begin(node);\n } catch (error) {\n return handleThrownValue(node, error);\n }\n\n if ((node.flags & AdoptedFlag) === 0 && node.child !== null) {\n return node.child;\n }\n\n return completeUnit(node);\n }\n\n function handleThrownValue(node: F, error: unknown): F | null {\n const root = rootOf(node);\n if (root.hydratingActivityBoundary !== null) {\n abandonActivityHydration(root, error instanceof HydrationMismatchError);\n }\n\n if (isThenable(error)) {\n const boundary = findSuspenseBoundary(node);\n if (boundary !== null) {\n unwindContextTo(root, boundary);\n return captureSuspenseBoundary(boundary, error);\n }\n\n unwindContextTo(root, null);\n throw error;\n }\n\n if (error instanceof HydrationMismatchError) {\n unwindContextTo(root, null);\n throw error;\n }\n\n const boundary = findErrorBoundary(node);\n if (boundary !== null) {\n unwindContextTo(root, boundary);\n return captureErrorBoundary(boundary, error, node);\n }\n\n unwindContextTo(root, null);\n rootOf(node).uncaughtErrorInfo = errorInfoFor(node, error);\n throw error;\n }\n\n function completeUnit(node: F): F | null {\n let next: F | null = node;\n while (next !== null) {\n complete(next);\n if (next.sibling !== null) return next.sibling;\n next = next.return;\n }\n return null;\n }\n\n function begin(node: F): void {\n const root = rootOf(node);\n\n // Recorded before any path that can render descendants (including the\n // clone-and-descend bailout), so a capture always has a fresh watermark.\n if (node.tag === SuspenseTag || node.tag === ErrorBoundaryTag) {\n node.commitIndexCheckpoint = root.commitIndex.length;\n }\n\n if (canBailout(node, root)) {\n let hasChildWork = includesSomeLane(node.childLanes, root.renderLanes);\n if (!hasChildWork) {\n hasChildWork = lazilyPropagateParentContextChanges(node, root);\n }\n\n if (!hasChildWork) {\n // The whole subtree is clean: adopt the committed children without\n // cloning and skip them entirely.\n node.flags |= AdoptedFlag;\n node.child = node.alternate?.child ?? null;\n return;\n }\n\n // Descendants have work but this fiber does not: clone children and\n // descend without re-rendering, preserving child props identity.\n // Suspense always runs begin so hidden-primary retries are handled.\n if (node.tag !== SuspenseTag) {\n if (node.tag === ContextProviderTag) pushContextProvider(node, root);\n cloneChildFibers(node);\n return;\n }\n }\n\n if (node.tag === ContextProviderTag) pushContextProvider(node, root);\n\n const hasOwnWork = includesSomeLane(node.lanes, root.renderLanes);\n node.lanes &= ~root.renderLanes;\n\n if (node.tag === FunctionTag) {\n renderFunction(node, root);\n return;\n }\n\n if (node.tag === ThenableTag) {\n reconcileCurrentChildren(\n node,\n readThenable(node.props.thenable as PromiseLike<AwaitedFigNode>),\n root,\n );\n return;\n }\n\n if (node.tag === TextTag) {\n if (\n __DEV__ &&\n (node.alternate === null ||\n node.alternate.props.nodeValue !== node.props.nodeValue)\n ) {\n host.validateTextNesting?.(\n String(node.props.nodeValue),\n hostAncestorTypes(node),\n );\n }\n if (tryHydrateText(node, root)) return;\n node.stateNode ??= host.createTextInstance(String(node.props.nodeValue));\n return;\n }\n\n if (node.tag === HostTag) {\n const type = String(node.type);\n const children = hostChildren(node.props);\n const hoisted = resolveHoistedFiber(node, root);\n\n if (__DEV__) {\n let ancestors: string[] | null = null;\n\n if (\n !hoisted &&\n node.alternate === null &&\n host.validateInstanceNesting\n ) {\n ancestors = hostAncestorTypes(node);\n host.validateInstanceNesting(type, node.props, ancestors);\n }\n\n // Text that becomes Text fibers is validated by the TextTag branch.\n if (host.validateTextNesting && shouldUseHostTextContent(node, root)) {\n const textContent = hostTextContent(children);\n if (textContent !== null) {\n ancestors ??= hostAncestorTypes(node);\n ancestors.unshift(type);\n host.validateTextNesting(textContent, ancestors);\n }\n }\n }\n\n if (!hoisted && tryHydrateInstance(node, root)) {\n reconcileCurrentChildren(node, children, root);\n return;\n }\n\n if (!hoisted) {\n node.stateNode ??= host.createInstance(\n type,\n node.props,\n hostParent(node),\n );\n }\n\n reconcileCurrentChildren(\n node,\n children === null || shouldUseHostTextContent(node, root)\n ? null\n : children,\n root,\n );\n return;\n }\n\n if (node.tag === SuspenseTag) {\n beginSuspense(node, hasOwnWork);\n return;\n }\n\n if (node.tag === ErrorBoundaryTag) {\n beginErrorBoundary(node);\n return;\n }\n\n if (node.tag === ActivityTag && node.type === null) {\n beginHiddenBoundary(root, node);\n return;\n }\n\n if (node.tag === ActivityTag) {\n beginActivity(root, node);\n return;\n }\n\n if (node.tag === ViewTransitionTag) {\n beginViewTransition(node);\n return;\n }\n\n if (node.tag === PortalTag) {\n beginPortal(node);\n return;\n }\n\n reconcileCurrentChildren(node, node.props.children, root);\n }\n\n function beginViewTransition(node: F): void {\n if (__DEV__) {\n const name = (node.props as ViewTransitionProps).name;\n if (name === \"none\" || name === \"\") {\n throw new Error(\n `<ViewTransition> received the reserved name \"${name}\". ` +\n '\"none\" disables the browser feature and \"\" is not a valid ' +\n 'view-transition-name; use \"auto\" or omit the prop for a ' +\n \"generated name.\",\n );\n }\n if (\n commitCoordinator?.viewTransitions !== true &&\n !didWarnMissingViewTransitionCoordinator\n ) {\n didWarnMissingViewTransitionCoordinator = true;\n const coordinatorDescription =\n commitCoordinator === null\n ? \"this renderer has no commit coordinator with View Transition support\"\n : `the installed commit coordinator \"${commitCoordinator.name}\" does not provide View Transition support`;\n console.error(\n `A <ViewTransition> rendered, but ${coordinatorDescription}. ` +\n \"Install View Transition support for this renderer. Fig DOM \" +\n \"applications can call enableViewTransitions() from \" +\n '\"@bgub/fig-dom/view-transitions\".',\n );\n }\n }\n node.stateNode ??= { autoName: null };\n reconcileCurrentChildren(node, node.props.children);\n }\n\n function beginActivity(root: R, node: F): void {\n const hidden = activityHidden(node.props);\n if (hidden) hasHiddenBoundaries = true;\n\n const state = ensureFiberActivityState(node);\n\n if (\n state.dehydrated === null &&\n tryDehydrateActivityBoundary(root, node, state)\n ) {\n // Server-hidden content stays dehydrated; if the client wants it\n // visible, a follow-up render hydrates through.\n if (!hidden) scheduleFiber(node, DefaultLane);\n return;\n }\n\n if (state.dehydrated !== null) {\n if (hidden) return;\n hydrateDehydratedActivityBoundary(root, node);\n return;\n }\n\n beginHiddenBoundary(root, node);\n }\n\n function beginHiddenBoundary(root: R, node: F): void {\n const hidden = activityHidden(node.props);\n if (hidden) hasHiddenBoundaries = true;\n const hiddenState = node.hiddenState;\n const previousHidden =\n node.alternate === null\n ? false\n : activityHidden(node.alternate.memoizedProps ?? {});\n\n ensureFiberActivityState(node);\n\n if (hidden !== previousHidden) {\n node.flags |= VisibilityFlag;\n }\n if (!hidden && hiddenState?.currentFirstChild != null) {\n node.flags |= VisibilityFlag;\n }\n\n // A reveal with pending offscreen work expands the render lanes so the\n // revealed subtree commits already up to date. Offscreen work skipped by\n // earlier bailouts is re-marked pending after commit.\n if (!hidden && previousHidden) {\n // Deferred effects can live below otherwise unchanged wrapper components.\n // Mark the committed hidden subtree so reveal traversal does not adopt\n // those wrappers and skip the newly armed effects underneath them.\n markSubtreeLanes(node.alternate?.child ?? null, root.renderLanes);\n if (\n includesSomeLane(node.childLanes, OffscreenLane) &&\n !includesSomeLane(root.renderLanes, OffscreenLane)\n ) {\n root.renderLanes = mergeLanes(root.renderLanes, OffscreenLane);\n }\n }\n\n reconcile(\n node,\n node.props.children,\n hiddenState?.currentFirstChild ?? node.alternate?.child ?? null,\n hiddenState?.currentFirstChild != null && node.alternate === null,\n );\n node.hiddenState = null;\n }\n\n function prepareToHydrateRoot(root: R): void {\n if (!root.isHydrating) return;\n\n const hydrationHost = requireHydrationHostConfig();\n root.hydrationParent = root.finishedWork;\n root.nextHydratableInstance = hydrationHost.getFirstHydratableChild(\n root.container,\n );\n }\n\n function tryHydrateInstance(node: F, root: R): boolean {\n if (!shouldHydrateFiber(root, node)) return false;\n\n const hydrationHost = requireHydrationHostConfig();\n const hydratable = root.nextHydratableInstance;\n const type = String(node.type);\n\n if (\n hydratable === null ||\n !hydrationHost.canHydrateInstance(hydratable, type, node.props)\n ) {\n throwHydrationMismatch(root, node, `<${type}>`);\n }\n\n node.stateNode = hydratable as Instance;\n recordCommitWork(root.commitIndex, node, UpdateFlag | HydrationFlag);\n root.hydrationParent = node;\n root.nextHydratableInstance = hydrationHost.getFirstHydratableChild(\n hydratable as Instance,\n node.props,\n );\n\n return true;\n }\n\n function tryHydrateText(node: F, root: R): boolean {\n if (!shouldHydrateFiber(root, node)) return false;\n\n const hydrationHost = requireHydrationHostConfig();\n const hydratable = root.nextHydratableInstance;\n const text = String(node.props.nodeValue);\n const suppressHydrationWarning =\n (node.return?.tag === HostTag &&\n node.return.props.suppressHydrationWarning === true) ||\n canHydratePendingSuspenseTextMismatch(root);\n\n if (\n hydratable === null ||\n !hydrationHost.canHydrateTextInstance(\n hydratable,\n text,\n suppressHydrationWarning,\n )\n ) {\n throwHydrationMismatch(root, node, \"text\");\n }\n\n node.stateNode = hydratable as TextInstance;\n recordCommitWork(root.commitIndex, node, UpdateFlag);\n root.nextHydratableInstance =\n hydrationHost.getNextHydratableSibling(hydratable);\n\n return true;\n }\n\n function shouldHydrateFiber(root: R, node: F): boolean {\n return (\n root.isHydrating &&\n node.alternate === null &&\n node.stateNode === null &&\n !insideHydrationExemptHost(node)\n );\n }\n\n // A fresh host that rendered during hydration without claiming a DOM node\n // (its instance was created out-of-band) renders its subtree fresh, so\n // descendants must not consume the outer hydration cursor. The walk stops\n // at the nearest host ancestor, or at any cloned fiber: hydration only\n // occurs in fully fresh subtrees.\n function insideHydrationExemptHost(node: F): boolean {\n for (\n let parent = node.return;\n parent !== null && parent.alternate === null;\n parent = parent.return\n ) {\n if (parent.tag !== HostTag) continue;\n return hydrationBypassedHost(parent);\n }\n\n return false;\n }\n\n function completeHydration(node: F): void {\n const root = rootOf(node);\n\n if (\n node.tag === SuspenseTag &&\n (node.flags & HydrationFlag) !== 0 &&\n root.hydratingSuspenseBoundary === node\n ) {\n completeDehydratedSuspenseHydration(root, node);\n return;\n }\n\n if (\n node.tag === ActivityTag &&\n (node.flags & HydrationFlag) !== 0 &&\n root.hydratingActivityBoundary === node\n ) {\n if (root.nextHydratableInstance !== null) {\n throwHydrationMismatch(root, node, undefined, \" in Activity\");\n }\n leaveActivityHydration(root, node);\n return;\n }\n\n if (!root.isHydrating || root.hydrationParent !== node) return;\n\n if (\n root.nextHydratableInstance !== null &&\n !(\n node.tag === HostTag &&\n host.canRetainHydrationTail?.(node.stateNode as Instance) === true\n )\n ) {\n throwHydrationMismatch(root, node);\n }\n\n const hydrationHost = requireHydrationHostConfig();\n root.hydrationParent = nextHydrationParent(node.return);\n root.nextHydratableInstance =\n node.tag === HostTag\n ? hydrationHost.getNextHydratableSibling(node.stateNode as Instance)\n : null;\n }\n\n function completeDehydratedSuspenseHydration(root: R, node: F): void {\n const boundary = dehydratedSuspenseBoundary(node.alternate);\n\n if (boundary === null) return;\n\n if (\n boundary.status === \"completed\" &&\n !boundary.forceClientRender &&\n root.nextHydratableInstance !== boundary.end\n ) {\n throwHydrationMismatch(\n root,\n node,\n undefined,\n \" in Suspense\",\n boundary.id ?? undefined,\n );\n }\n\n leaveSuspenseHydration(root, node, boundary);\n }\n\n function nextHydrationParent(node: F | null): F | null {\n for (let parent = node; parent !== null; parent = parent.return) {\n if (\n parent.tag === RootTag ||\n parent.tag === HostTag ||\n (parent.tag === SuspenseTag &&\n (parent.flags & HydrationFlag) !== 0 &&\n dehydratedSuspenseBoundary(parent.alternate) !== null) ||\n (parent.tag === ActivityTag &&\n (parent.flags & HydrationFlag) !== 0 &&\n fiberActivityState(parent)?.dehydrated != null)\n ) {\n return parent;\n }\n }\n\n return null;\n }\n\n function firstWithinSuspenseBoundary(\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): HostNode<Instance, TextInstance> | null {\n const first = requireHydrationHostConfig().getNextHydratableSibling(\n boundary.start,\n );\n return first === boundary.end ? null : first;\n }\n\n function nextAfterSuspenseBoundary(\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): HostNode<Instance, TextInstance> | null {\n return requireHydrationHostConfig().getNextHydratableSibling(boundary.end);\n }\n\n function requireHydrationHostConfig(): HostHydrationConfig<\n Container,\n Instance,\n TextInstance\n > {\n if (\n host.getFirstHydratableChild === undefined ||\n host.getNextHydratableSibling === undefined ||\n host.canHydrateInstance === undefined ||\n host.canHydrateTextInstance === undefined ||\n host.clearContainer === undefined\n ) {\n throw new Error(\"Hydration is not supported by this renderer.\");\n }\n\n return host as HostHydrationConfig<Container, Instance, TextInstance>;\n }\n\n // The message and the recoverable-error fields derive from two facts: what\n // was expected (`<div>`/\"text\"; undefined means an unexpected extra node)\n // and whether the hydration cursor was empty — the expected-node throw\n // sites all test root.nextHydratableInstance directly.\n function throwHydrationMismatch(\n root: R,\n node: F,\n expected?: string,\n where = \"\",\n boundaryId?: string,\n ): never {\n const nothing = root.nextHydratableInstance === null;\n const message =\n expected === undefined\n ? `found an extra DOM node${where}`\n : nothing\n ? `expected ${expected}, but found no DOM node`\n : `expected ${expected}`;\n const error = new Error(`Hydration mismatch: ${message}.`);\n queueRecoverableError(root, node, error, {\n actual:\n expected === undefined\n ? \"extra DOM node\"\n : nothing\n ? \"nothing\"\n : \"different DOM node\",\n boundaryId,\n expected,\n recovery: \"root\",\n source: \"hydration\",\n });\n throw new HydrationMismatchError(error.message);\n }\n\n function canBailout(node: F, root: R): boolean {\n return (\n node.alternate !== null &&\n (node.flags & PlacementFlag) === 0 &&\n node.props === node.alternate.memoizedProps &&\n !includesSomeLane(node.lanes, root.renderLanes) &&\n !contextDependenciesChanged(node, root)\n );\n }\n\n function contextDependenciesChanged(node: F, root: R): boolean {\n const dependencies = node.contextDependencies;\n if (dependencies === null) return false;\n\n for (const dependency of dependencies) {\n if (\n !Object.is(\n currentContextValue(root, dependency.context),\n dependency.memoizedValue,\n )\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n function currentContextValue(root: R, context: FigContext<unknown>): unknown {\n return root.contextValues.has(context)\n ? root.contextValues.get(context)\n : context.defaultValue;\n }\n\n function shouldUseHostTextContent(node: F, root = rootOf(node)): boolean {\n return (\n host.setTextContent !== undefined &&\n // A host created out-of-band during hydration (hoisted instance)\n // renders fresh: its text must replace any server content wholesale\n // rather than match against it.\n (!root.isHydrating || hydrationBypassedHost(node)) &&\n // Hydration adopted the text as a child fiber (it had to match the\n // server's text node); keep that shape on re-renders. Collapsing to\n // textContent would delete the adopted fiber and rewrite identical\n // text — flag noise that reads as a real mutation (and made view\n // transitions animate the first post-hydration commit).\n !adoptedSingleTextChild(node) &&\n hostTextContent(node.props.children) !== null\n );\n }\n\n function adoptedSingleTextChild(node: F): boolean {\n const child = node.alternate?.child ?? node.child;\n return child !== null && child.tag === TextTag && child.sibling === null;\n }\n\n function hydrationBypassedHost(node: F): boolean {\n return (\n node.alternate === null &&\n node.stateNode !== null &&\n (node.flags & HydrationFlag) === 0\n );\n }\n\n function resolveHoistedFiber(node: F, root: R): boolean {\n if (isHoistedFiber(node)) return true;\n if (\n node.tag !== HostTag ||\n node.stateNode !== null ||\n host.resolveHoistedInstance === undefined\n ) {\n return false;\n }\n\n const hydrating = shouldHydrateFiber(root, node);\n const instance = host.resolveHoistedInstance(\n String(node.type),\n node.props,\n hostParent(node),\n );\n if (instance === null) return false;\n\n requireHoistedAssetHostConfig();\n node.stateNode = instance;\n node.flags |= HoistedStaticFlag;\n // The resource lives out-of-band, so leave the hydration cursor for the\n // next ordinary sibling and route acquisition through placement commit.\n if (hydrating) node.flags |= PlacementFlag;\n return true;\n }\n\n function isHoistedFiber(node: F): boolean {\n return node.tag === HostTag && (node.flags & HoistedStaticFlag) !== 0;\n }\n\n function requireHoistedAssetHostConfig(): HostHoistedAssetConfig<\n Container,\n Instance,\n TextInstance\n > {\n if (hoistedAssetHostConfig !== null) return hoistedAssetHostConfig;\n\n if (\n host.resolveHoistedInstance === undefined ||\n host.commitHoistedInstance === undefined ||\n host.removeHoistedInstance === undefined ||\n host.updateHoistedInstance === undefined\n ) {\n throw new Error(\"Hoisted assets are not supported by this renderer.\");\n }\n\n hoistedAssetHostConfig = host as HostHoistedAssetConfig<\n Container,\n Instance,\n TextInstance\n >;\n return hoistedAssetHostConfig;\n }\n\n function renderFunction(node: F, root: R): void {\n // Hot reload: run the latest version of this component's family. In\n // production the whole block strips out.\n if (__DEV__) {\n if (hasRefreshHandler()) {\n node.type = resolveLatestType(node.type) as F[\"type\"];\n }\n }\n prepareHookRender(node, root);\n\n const previousDispatcher = setCurrentDispatcher(dispatcher);\n const previousDataStore = setCurrentDataStore(root.dataStore);\n try {\n if (__DEV__) {\n // Strict shadow pass: invoke the component once and discard every\n // trace so impure renders surface in development. Skipping\n // reconciliation keeps the pass free of child and deletion effects.\n const consumedBefore = root.consumedPendingQueues.length;\n const nextClientIdBefore = root.nextClientId;\n const shadowResult = (node.type as Component)(node.props);\n // Discarded promise children can still reject. Observe them without\n // comparing identities: mount-time useMemo intentionally recomputes\n // between the passes, while the committed result owns rendering.\n observeDiscardedPromiseChildren(shadowResult);\n if (currentHook !== null) throw hookOrderError(\"fewer\");\n restoreConsumedPendingQueues(root, consumedBefore);\n // Client ids are attempt-scoped during the strict shadow pass: the\n // real invocation must observe the same allocation sequence.\n root.nextClientId = nextClientIdBefore;\n prepareHookRender(node, root);\n node.effects = null;\n }\n reconcileCurrentChildren(\n node,\n (node.type as Component)(node.props),\n root,\n );\n if (currentHook !== null) throw hookOrderError(\"fewer\");\n } finally {\n setCurrentDataStore(previousDataStore);\n setCurrentDispatcher(previousDispatcher);\n renderingFiber = null;\n currentHook = null;\n workInProgressHook = null;\n localIdCounter = 0;\n }\n }\n\n function prepareHookRender(node: F, root: R): void {\n renderingFiber = node;\n currentHook = node.alternate?.memoizedState ?? null;\n workInProgressHook = null;\n localIdCounter = 0;\n node.memoizedState = null;\n node.contextDependencies = null;\n root.dataStore.resetDataDependencies(node);\n node.dataDependenciesDirty = true;\n recordCommitWork(root.commitIndex, node);\n }\n\n function beginSuspense(node: F, hasOwnWork: boolean): void {\n const root = rootOf(node);\n const previousSuspenseState = fiberSuspenseState(node.alternate);\n\n node.boundaryState = null;\n\n if (previousSuspenseState?.kind === \"dehydrated\") {\n if (!hasOwnWork) {\n node.boundaryState = previousSuspenseState;\n return;\n }\n hydrateDehydratedSuspenseBoundary(node, previousSuspenseState);\n return;\n }\n\n if (tryDehydrateSuspenseBoundary(node)) return;\n\n node.suspenseQueueStart = root.consumedPendingQueues.length;\n\n if (previousSuspenseState === null) {\n beginSuspensePrimary(node, suspensePrimaryFiber(node.alternate));\n return;\n }\n\n const currentPrimary = suspensePrimaryFiber(node.alternate);\n if (currentPrimary !== null) {\n // Reveal of a re-suspended boundary: the committed primary was kept hidden\n // and its lanes were cleared (so blocked offscreen work could not busy-loop\n // the scheduler while suspended). Updates dispatched during the fallback\n // were parked in their hook queues. Mark the kept-hidden subtree with the\n // current render lanes so it re-renders instead of bailing out and adopting\n // the frozen clone — that re-render is what applies the parked updates.\n markSubtreeLanes(currentPrimary.child, root.renderLanes);\n }\n beginSuspensePrimary(\n node,\n currentPrimary,\n previousSuspenseState.primaryChild,\n );\n appendDeletions(node, suspenseFallbackFiber(node.alternate));\n }\n\n function markSubtreeLanes(node: F | null, lanes: Lanes): void {\n for (let child = node; child !== null; child = child.sibling) {\n child.lanes = mergeLanes(child.lanes, lanes);\n child.childLanes = mergeLanes(child.childLanes, lanes);\n markSubtreeLanes(child.child, lanes);\n }\n }\n\n function beginSuspensePrimary(\n boundary: F,\n currentPrimary: F | null,\n capturedPrimary: F | null = null,\n ): void {\n if (capturedPrimary !== null) hasHiddenBoundaries = true;\n const primary = suspensePrimaryWorkInProgress(\n boundary,\n currentPrimary,\n \"visible\",\n capturedPrimary,\n );\n boundary.child = primary;\n }\n\n function suspensePrimaryWorkInProgress(\n boundary: F,\n currentPrimary: F | null,\n mode: \"visible\" | \"hidden\",\n capturedPrimary: F | null = null,\n ): F {\n const props: Props = { mode, children: boundary.props.children };\n\n const primary =\n currentPrimary === null\n ? fiber(ActivityTag, null, null, props, null)\n : createWorkInProgress(currentPrimary, props);\n\n primary.hiddenState = {\n currentFirstChild: capturedPrimary,\n };\n primary.index = 0;\n primary.return = boundary;\n primary.sibling = null;\n return primary;\n }\n\n function suspenseFallbackWorkInProgress(\n boundary: F,\n currentFallback: F | null,\n index: number,\n ): F {\n const props: Props = { children: boundary.props.fallback };\n const fallback =\n currentFallback?.tag === FragmentTag\n ? createWorkInProgress(currentFallback, props)\n : fiber(FragmentTag, null, null, props, null);\n\n fallback.index = index;\n fallback.return = boundary;\n fallback.sibling = null;\n if (currentFallback === null) fallback.flags |= PlacementFlag;\n return fallback;\n }\n\n function suspensePrimaryFiber(node: F | null | undefined): F | null {\n const child = node?.child ?? null;\n return child?.tag === ActivityTag && child.type === null ? child : null;\n }\n\n function suspenseFallbackFiber(node: F | null | undefined): F | null {\n const primary = suspensePrimaryFiber(node);\n return primary === null ? (node?.child ?? null) : primary.sibling;\n }\n\n function cloneSuspendedPrimary(node: F | null, parent: F): F | null {\n let first: F | null = null;\n let previous: F | null = null;\n\n for (let current = node; current !== null; current = current.sibling) {\n const clone = createWorkInProgress(current, current.props);\n clone.return = parent;\n clone.child = cloneSuspendedPrimary(current.child, clone);\n clone.sibling = null;\n // The cloned primary is committed hidden while the boundary stays\n // suspended; it has no schedulable work. Any pending update inside it is\n // parked in its hook queue (restored as NoLane) and applied when the\n // suspense ping retries the reveal — clearing the lanes here keeps a\n // downgraded (OffscreenLane) update from busy-looping the scheduler via\n // the post-commit \"let idle retries proceed\" re-mark.\n clone.lanes = NoLanes;\n clone.childLanes = NoLanes;\n if (previous === null) first = clone;\n else previous.sibling = clone;\n previous = clone;\n }\n\n return first;\n }\n\n function tryDehydrateSuspenseBoundary(node: F): boolean {\n const root = rootOf(node);\n if (!shouldHydrateFiber(root, node)) return false;\n if (host.getSuspenseBoundary === undefined) return false;\n\n const hydratable = root.nextHydratableInstance;\n if (hydratable === null) return false;\n\n const boundary = host.getSuspenseBoundary(hydratable);\n if (boundary === null) return false;\n\n node.boundaryState = {\n boundary,\n idPath: hydrationIdPath(root, node),\n kind: \"dehydrated\",\n wasPending: boundary.status === \"pending\",\n };\n host.registerSuspenseBoundaryRetry?.(boundary, () =>\n scheduleFiber(node, DefaultLane),\n );\n root.nextHydratableInstance = nextAfterSuspenseBoundary(boundary);\n return true;\n }\n\n function hydrateDehydratedSuspenseBoundary(\n node: F,\n state: DehydratedSuspenseState<Instance, TextInstance>,\n ): void {\n const boundary = state.boundary;\n abandonedHydrationBoundaries.delete(node);\n if (node.alternate !== null) {\n abandonedHydrationBoundaries.delete(node.alternate);\n }\n\n if (!boundary.forceClientRender) {\n if (boundary.status === \"completed\") {\n enterSuspenseHydration(node, boundary);\n node.boundaryState = null;\n node.flags |= HydrationFlag;\n beginSuspensePrimary(node, suspensePrimaryFiber(node.alternate));\n return;\n }\n\n if (boundary.status === \"pending\") {\n node.boundaryState = state;\n return;\n }\n }\n\n if (boundary.status === \"client-rendered\") {\n queueClientRenderedSuspenseError(rootOf(node), node, boundary);\n }\n\n node.boundaryState = null;\n node.flags |= HydrationFlag;\n beginSuspensePrimary(node, suspensePrimaryFiber(node.alternate));\n }\n\n function queueClientRenderedSuspenseError(\n root: R,\n node: F,\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): void {\n const boundaryError = boundary.error;\n const error = new Error(\n boundaryError?.message ??\n \"The server could not finish this Suspense boundary. Switched to client rendering.\",\n );\n if (boundaryError?.digest !== undefined) {\n (error as Error & { digest?: string }).digest = boundaryError.digest;\n }\n queueRecoverableError(root, node, error, {\n boundaryId: boundary.id ?? undefined,\n digest: boundaryError?.digest,\n recovery: \"suspense\",\n source: \"server\",\n });\n }\n\n function canHydratePendingSuspenseTextMismatch(root: R): boolean {\n const boundary = root.hydratingSuspenseBoundary;\n const state = fiberSuspenseState(boundary?.alternate);\n return state?.kind === \"dehydrated\" && state.wasPending;\n }\n\n function requireActivityHydrationHostConfig(): ActivityHydrationHostConfig {\n if (activityHydrationHostConfig !== null)\n return activityHydrationHostConfig;\n\n if (\n host.getActivityBoundary === undefined ||\n host.getFirstActivityHydratable === undefined ||\n host.commitHydratedActivityBoundary === undefined\n ) {\n throw new Error(\n \"Activity hydration requires getActivityBoundary, getFirstActivityHydratable, and commitHydratedActivityBoundary.\",\n );\n }\n\n activityHydrationHostConfig = host as ActivityHydrationHostConfig;\n return activityHydrationHostConfig;\n }\n\n function tryDehydrateActivityBoundary(\n root: R,\n node: F,\n state: ActivityState<Instance>,\n ): boolean {\n if (!shouldHydrateFiber(root, node)) return false;\n if (host.getActivityBoundary === undefined) return false;\n\n const hydratable = root.nextHydratableInstance;\n if (hydratable === null) return false;\n\n const boundary = host.getActivityBoundary(hydratable);\n if (boundary === null) return false;\n\n // A detected boundary commits the host to the full lifecycle; partial\n // configs fail loudly here instead of silently never revealing content.\n requireActivityHydrationHostConfig();\n\n hasHiddenBoundaries = true;\n state.dehydrated = {\n boundary,\n idPath: hydrationIdPath(root, node),\n };\n root.nextHydratableInstance =\n requireHydrationHostConfig().getNextHydratableSibling(boundary);\n return true;\n }\n\n function hydrateDehydratedActivityBoundary(root: R, node: F): void {\n enterActivityHydration(root, node);\n node.flags |= HydrationFlag | VisibilityFlag;\n reconcile(node, node.props.children, null, false);\n }\n\n function enterActivityHydration(root: R, node: F): void {\n const boundary = dehydratedActivityBoundary(node);\n if (boundary === null) {\n throw new Error(\"Expected a dehydrated Activity boundary.\");\n }\n\n root.isHydrating = true;\n root.hydrationParent = node;\n root.hydratingActivityBoundary = node;\n root.nextHydratableInstance =\n requireActivityHydrationHostConfig().getFirstActivityHydratable(boundary);\n }\n\n function leaveActivityHydration(root: R, node: F): void {\n root.hydrationParent = nextHydrationParent(node.return);\n root.nextHydratableInstance = null;\n root.hydratingActivityBoundary = null;\n root.isHydrating = false;\n }\n\n // Any throw while hydrating a dehydrated Activity abandons the attempt. For\n // mismatches, clear the dehydrated template before root recovery so the\n // forced client render cannot recurse into the same failed hydration.\n function abandonActivityHydration(root: R, forceClientRender = false): void {\n if (forceClientRender) {\n const state = fiberActivityState(root.hydratingActivityBoundary);\n if (state !== null) state.dehydrated = null;\n }\n deactivateHydration(root);\n }\n\n function enterSuspenseHydration(\n node: F,\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): void {\n const root = rootOf(node);\n root.isHydrating = true;\n root.hydrationParent = node;\n root.hydratingSuspenseBoundary = node;\n root.nextHydratableInstance = firstWithinSuspenseBoundary(boundary);\n }\n\n function leaveSuspenseHydration(\n root: R,\n node: F,\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): void {\n root.hydrationParent = nextHydrationParent(node.return);\n root.nextHydratableInstance = nextAfterSuspenseBoundary(boundary);\n root.hydratingSuspenseBoundary = null;\n root.isHydrating = false;\n }\n\n function beginErrorBoundary(node: F): void {\n const previousErrorState = fiberErrorBoundaryState(node.alternate);\n\n node.boundaryState = previousErrorState;\n\n reconcileCurrentChildren(\n node,\n previousErrorState === null\n ? node.props.children\n : errorBoundaryFallback(node, previousErrorState),\n );\n }\n\n function errorBoundaryFallback(node: F, state: ErrorBoundaryState): FigNode {\n const fallback = node.props.fallback as ErrorBoundaryProps[\"fallback\"];\n return typeof fallback === \"function\" && !isThenable(fallback)\n ? fallback(state.error, state.info)\n : (fallback as FigNode);\n }\n\n function beginPortal(node: F): void {\n reconcileCurrentChildren(node, node.props.children as FigNode);\n }\n\n function updateStateHook<S>(\n initialState: S | (() => S),\n ): [S, StateSetter<S>] {\n const hook = updateQueuedHook(StateHook, initialState);\n const queue = hook.queue;\n const fiber = requireRenderingFiber();\n\n // The queue object persists across renders, so the dispatch created on\n // mount is always present afterwards.\n queue.dispatch ??= (action: StateUpdate<S>) => {\n if (renderingFiber !== null) {\n throw new Error(\n \"State updates are not allowed while rendering a component.\",\n );\n }\n\n scheduleHookUpdate(fiber, queue, action, requestUpdateLane());\n };\n\n return [hook.memoizedState, queue.dispatch];\n }\n\n function updateActionStateHook<S, Args extends unknown[]>(\n action: ActionStateAction<S, Args>,\n initialState: S,\n ): [S, ActionStateRunner<Args>, boolean] {\n const hook: Hook<ActionState<S, Args>> = updateQueuedHook(\n ActionStateHook,\n () => createActionState(action, initialState),\n );\n const queue = hook.queue;\n const fiber = requireRenderingFiber();\n const instance = hook.memoizedState.instance;\n const nextState = { ...hook.memoizedState, action };\n hook.memoizedState = nextState;\n if (hook.baseQueue === null) {\n hook.baseState = nextState;\n } else {\n hook.baseState = { ...hook.baseState, action };\n }\n\n if (instance.runner === null) {\n const updatePending = (delta: 1 | -1, lane: Lane) => {\n scheduleHookUpdate(\n fiber,\n queue,\n (state) => ({\n ...state,\n pending: Math.max(0, state.pending + delta),\n }),\n lane,\n );\n };\n const finish = (lane: Lane, error: unknown, ...value: [] | [S]) => {\n scheduleHookUpdate(\n fiber,\n queue,\n (state) => ({\n ...state,\n error,\n pending: Math.max(0, state.pending - 1),\n value: value.length === 0 ? state.value : value[0],\n }),\n lane,\n );\n };\n\n instance.runner = (...args: Args) => {\n if (renderingFiber !== null) {\n throw new Error(\n \"Action state updates are not allowed during render.\",\n );\n }\n\n // Last-run-wins: a new run aborts and retires the previous one,\n // releasing its pending slot now (on DefaultLane — the retired run's\n // held transition lane may never render). A retired run's settlement\n // — value or rejection — never touches state, error, or pending.\n runLatest(\n instance,\n fiber,\n (signal) => instance.action(instance.value, ...args, signal),\n updatePending,\n (lane, value, failed) => {\n if (failed) finish(lane, value);\n else finish(lane, NoActionStateError, value as S);\n },\n );\n };\n }\n\n if (hook.memoizedState.error !== NoActionStateError) {\n throw hook.memoizedState.error;\n }\n\n return [\n hook.memoizedState.value,\n instance.runner,\n hook.memoizedState.pending > 0,\n ];\n }\n\n function updateIdHook(): string {\n const fiber = requireRenderingFiber();\n const oldHook = updateHook(IdHook) as Hook<string> | null;\n const id =\n oldHook === null\n ? createFiberId(rootOf(fiber), fiber, localIdCounter)\n : oldHook.memoizedState;\n localIdCounter += 1;\n\n appendHook(createHook(IdHook, id));\n return id;\n }\n\n function updateMemoHook<T>(calculate: () => T, deps: DependencyList): T {\n requireRenderingFiber();\n const previous = (updateHook(MemoHook) as Hook<MemoState<T>> | null)\n ?.memoizedState;\n const state =\n previous !== undefined && areHookInputsEqual(deps, previous.deps)\n ? previous\n : { deps, value: calculate() };\n\n appendHook(createHook(MemoHook, state));\n return state.value;\n }\n\n function updateDeferredValueHook<T>(\n value: T,\n initialValue: T | undefined,\n hasInitialValue: boolean,\n ): T {\n const fiber = requireRenderingFiber();\n const oldHook = updateHook(DeferredValueHook) as Hook<T> | null;\n let next =\n oldHook === null\n ? initialDeferredValue(value, initialValue, hasInitialValue)\n : oldHook.memoizedState;\n\n if (!Object.is(next, value)) {\n if (isTransitionOrDeferredRender(rootOf(fiber))) {\n next = value;\n } else {\n scheduleFiber(fiber, DeferredLane);\n }\n }\n\n appendHook(createHook(DeferredValueHook, next));\n return next;\n }\n\n function initialDeferredValue<T>(\n value: T,\n initialValue: T | undefined,\n hasInitialValue: boolean,\n ): T {\n return hasInitialValue ? (initialValue as T) : value;\n }\n\n function isTransitionOrDeferredRender(root: R): boolean {\n return (\n includesOnlyTransitions(root.renderLanes) ||\n includesSomeLane(root.renderLanes, DeferredLane)\n );\n }\n\n function updateTransitionHook(): [boolean, StartTransition] {\n const initialState: TransitionState = {\n instance: { controller: null, generation: 0 },\n pendingCount: 0,\n start: null,\n };\n const hook: Hook<TransitionState> = updateQueuedHook(\n TransitionHook,\n initialState,\n );\n const queue = hook.queue;\n\n let start = hook.memoizedState.start;\n if (start === null) {\n const fiber = requireRenderingFiber();\n const updatePending = (delta: 1 | -1, lane: Lane) => {\n scheduleHookUpdate(\n fiber,\n queue,\n (state) => ({\n ...state,\n pendingCount: Math.max(0, state.pendingCount + delta),\n }),\n lane,\n );\n };\n\n const instance = hook.memoizedState.instance;\n start = (\n callback: (signal: AbortSignal) => void | PromiseLike<void>,\n options?: TransitionOptions,\n ) => {\n if (renderingFiber !== null) {\n throw new Error(\n \"Transitions cannot be started while rendering a component.\",\n );\n }\n\n // One cancellation domain per hook: a new start aborts and retires\n // the previous pending run, releasing its pending slot now so an\n // ignored signal or hung promise can never pin isPending. The\n // decrement goes to DefaultLane — the retired run's own transition\n // lane is held until its callback settles (possibly never), and a\n // cancelled run has nothing to commit atomically with.\n runLatest(\n instance,\n fiber,\n callback,\n updatePending,\n (lane, value, failed, asynchronous) => {\n updatePending(-1, lane);\n if (failed) {\n if (!asynchronous) throw value;\n queueMicrotask(() => {\n throw value;\n });\n }\n },\n options,\n );\n };\n hook.memoizedState.start = start;\n }\n\n return [hook.memoizedState.pendingCount > 0, start];\n }\n\n // A transition and an action are the same cancellable effect up to how\n // their result is folded into state. This owns the shared protocol: one\n // scope, one generation token, and settlements from only the latest run.\n function runLatest<T>(\n instance: RunInstance,\n fiber: F,\n run: (signal: AbortSignal) => T | PromiseLike<T>,\n updatePending: (delta: 1 | -1, lane: Lane) => void,\n settled: (\n lane: Lane,\n value: unknown,\n failed: boolean,\n asynchronous: boolean,\n ) => void,\n options?: TransitionOptions,\n ): void {\n if (retireRun(instance)) updatePending(-1, DefaultLane);\n const lane = claimNextTransitionLane();\n const controller = new AbortController();\n const generation = (instance.generation += 1);\n instance.controller = controller;\n updatePending(1, SyncLane);\n\n const settle = (\n value: unknown,\n failed: boolean,\n asynchronous: boolean,\n ): void => {\n if (generation !== instance.generation) return;\n instance.controller = null;\n settled(lane, value, failed, asynchronous);\n };\n\n // A run started after the owner unmounted (deletion severs the fiber's\n // root path) still executes for its side effects, just without an\n // ambient data store; its settlements schedule into the void.\n const store = rootOfOrNull(fiber)?.dataStore;\n let result: T | PromiseLike<T>;\n try {\n const invoke = () =>\n runWithTransitionLane(lane, () => run(controller.signal), options);\n result = store === undefined ? invoke() : store.run(invoke);\n } catch (error) {\n settle(error, true, false);\n return;\n }\n\n if (!isThenable(result)) {\n settle(result, false, false);\n return;\n }\n\n result.then(\n (value) => settle(value, false, true),\n (error: unknown) => settle(error, true, true),\n );\n }\n\n function requireRenderingFiber(): F {\n if (renderingFiber === null) {\n throw new Error(\"Hooks can only be called while rendering a component.\");\n }\n\n return renderingFiber;\n }\n\n function updateQueuedHook<S>(\n kind: QueuedHookKind,\n initialState: S | (() => S),\n ): Hook<S> {\n const fiber = requireRenderingFiber();\n const oldHook = updateHook(kind) as Hook<S> | null;\n const hook: Hook<S> =\n oldHook === null\n ? createHook(kind, resolveInitialState(initialState))\n : { ...oldHook, next: null };\n\n appendHook(hook);\n\n const root = rootOf(fiber);\n const pending = hook.queue.pending;\n if (pending !== null) {\n hook.baseQueue = consumePendingHookQueue(root, hook, pending);\n }\n\n if (hook.baseQueue !== null) {\n processHookQueue(hook, root.renderLanes);\n }\n\n return hook;\n }\n\n function updateExternalStoreHook<T>(\n subscribe: ExternalStoreSubscribe,\n getSnapshot: () => T,\n getServerSnapshot?: () => T,\n ): T {\n const fiber = requireRenderingFiber();\n const oldHook = updateHook(ExternalStoreHook) as Hook<\n ExternalStoreState<T, F>\n > | null;\n const root = rootOf(fiber);\n const value = readExternalStoreSnapshot(\n root,\n getSnapshot,\n getServerSnapshot,\n );\n const instance = oldHook?.memoizedState.instance ?? {\n committedSubscribe: null,\n getSnapshot,\n owner: null,\n unsubscribe: null,\n value,\n };\n const state: ExternalStoreState<T, F> = {\n getSnapshot,\n instance,\n subscribe,\n value,\n };\n\n recordCommitWork(root.commitIndex, fiber, StoreConsistencyFlag);\n appendHook(createHook(ExternalStoreHook, state));\n return value;\n }\n\n function updateStableEventHook<Args extends unknown[], Result>(\n handler: (...args: Args) => Result,\n ): (...args: StableEventCallerArgs<Args>) => Result {\n requireRenderingFiber();\n const oldHook = updateHook(\n StableEventHook,\n ) as Hook<StableEventState> | null;\n const instance =\n oldHook?.memoizedState.instance ?? createStableEventInstance();\n\n appendHook(\n createHook(StableEventHook, {\n instance,\n next: handler as StableEventHandler,\n }),\n );\n return instance.stable as (...args: StableEventCallerArgs<Args>) => Result;\n }\n\n function createStableEventInstance(): StableEventInstance {\n const instance: StableEventInstance = {\n controller: null,\n handler: null,\n live: false,\n stable: (...args) => {\n if (renderingFiber !== null) {\n throw new Error(\n \"Stable events cannot be called while rendering a component.\",\n );\n }\n\n const handler = instance.handler;\n if (handler === null) {\n throw new Error(\n \"Stable events cannot be called before their first commit.\",\n );\n }\n\n instance.controller?.abort();\n instance.controller = new AbortController();\n if (!instance.live) instance.controller.abort();\n return handler(...args, instance.controller.signal);\n },\n };\n\n return instance;\n }\n\n function readExternalStoreSnapshot<T>(\n root: R,\n getSnapshot: () => T,\n getServerSnapshot?: () => T,\n ): T {\n if (!root.isHydrating) return getSnapshot();\n\n if (getServerSnapshot === undefined) {\n throw new Error(\n \"useSyncExternalStore requires getServerSnapshot during hydration.\",\n );\n }\n\n return getServerSnapshot();\n }\n\n function processHookQueue<S>(hook: Hook<S>, renderLanes: Lanes): void {\n const baseQueue = hook.baseQueue;\n if (baseQueue === null) return;\n\n let state = hook.baseState;\n let newBaseState = state;\n let newBaseQueue: HookUpdate<S> | null = null;\n let update = baseQueue.next;\n\n do {\n if (\n update.lane !== NoLane &&\n !includesSomeLane(renderLanes, update.lane)\n ) {\n const cloneUpdate = cloneUpdateNode(update);\n // Pin the rebase point at the FIRST skipped update (mergeQueues\n // returns the appended tail, so comparing against cloneUpdate would\n // re-snapshot on every skip and lose earlier skipped reductions).\n if (newBaseQueue === null) newBaseState = state;\n newBaseQueue = mergeQueues(newBaseQueue, cloneUpdate);\n } else {\n state =\n typeof update.action === \"function\"\n ? (update.action as (previousState: S) => S)(state)\n : update.action;\n\n if (newBaseQueue !== null) {\n const cloneUpdate = cloneUpdateNode(update);\n cloneUpdate.lane = NoLane;\n newBaseQueue = mergeQueues(newBaseQueue, cloneUpdate);\n }\n }\n update = update.next;\n } while (update !== baseQueue.next);\n\n hook.memoizedState = state;\n hook.baseState = newBaseQueue === null ? state : newBaseState;\n hook.baseQueue = newBaseQueue;\n }\n\n function scheduleHookUpdate<S>(\n fiber: F,\n queue: HookQueue<S>,\n action: StateUpdate<S>,\n lane: Lane,\n ): void {\n if (__DEV__ && currentCommitEffectPhase === BeforeLayoutEffect) {\n throw new Error(\n \"State updates are not allowed from useBeforeLayout effects.\",\n );\n }\n\n lane = hiddenSubtreeLane(fiber, lane);\n const update = new HookUpdate(action, lane);\n queue.pending = mergeQueues(queue.pending, update);\n scheduleFiber(fiber, lane);\n }\n\n // Updates inside hidden boundaries are downgraded to the\n // offscreen lane at schedule time, so normal renders never descend for\n // hidden work and idle renders prerender it. A boundary mid-transition\n // (generations disagree) is treated as visible so updates are never\n // wrongly deferred.\n function hiddenSubtreeLane(node: F, lane: Lane): Lane {\n if (!hasHiddenBoundaries || lane === OffscreenLane) return lane;\n\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if (\n parent.tag === ActivityTag &&\n fiberActivityState(parent)?.hidden === true\n ) {\n return OffscreenLane;\n }\n }\n\n return lane;\n }\n\n function createFiberId(root: R, fiber: F, localId: number): string {\n if (!root.isHydrating || insideHydrationExemptHost(fiber)) {\n const id = root.nextClientId;\n root.nextClientId += 1;\n // Server paths contain only lowercase base-32 segments. The uppercase\n // client discriminator therefore cannot collide with hydrated ids.\n return `${root.identifierPrefix}fig-C-${id.toString(32)}`;\n }\n\n return `${root.identifierPrefix}fig-${hydrationIdPath(root, fiber)}-${localId.toString(32)}`;\n }\n\n function hydrationIdPath(root: R, fiber: F): string {\n const suspense = root.hydratingSuspenseBoundary;\n if (suspense !== null) {\n const state = fiberSuspenseState(suspense.alternate);\n if (state?.kind === \"dehydrated\") {\n return appendIdPath(state.idPath, fiberPath(fiber, suspense));\n }\n }\n\n const activity = root.hydratingActivityBoundary;\n if (activity !== null) {\n const base = fiberActivityState(activity)?.dehydrated?.idPath ?? null;\n if (base !== null) {\n return appendIdPath(base, fiberPath(fiber, activity));\n }\n }\n\n return fiberPath(fiber, null);\n }\n\n function appendIdPath(base: string, relative: string): string {\n return relative === \"\" ? base : `${base}-${relative}`;\n }\n\n function fiberPath(fiber: F, stopBefore: F | null): string {\n const parts: string[] = [];\n\n for (\n let node: F | null = fiber;\n node !== null && node !== stopBefore && node.tag !== RootTag;\n node = node.return\n ) {\n // Suspense inserts a private Activity fiber around its primary tree.\n // The server has no corresponding element, so it is transparent to the\n // canonical id path just like React's implementation-only indirections.\n if (node.tag !== ActivityTag || node.type !== null) {\n parts.push(node.index.toString(32));\n }\n }\n\n return parts.reverse().join(\"-\");\n }\n\n function consumePendingHookQueue<S>(\n root: R,\n hook: Hook<S>,\n pending: HookUpdate<S>,\n ): HookUpdate<S> | null {\n const queue = hook.queue;\n queue.pending = null;\n root.consumedPendingQueues.push({\n queue: queue as HookQueue<unknown>,\n pending: pending as HookUpdate<unknown>,\n });\n return mergeQueues(cloneQueue(hook.baseQueue), cloneQueueNodes(pending));\n }\n\n function appendHook(hook: Hook): void {\n if (renderingFiber === null) return;\n\n if (workInProgressHook === null) {\n renderingFiber.memoizedState = hook;\n } else {\n workInProgressHook.next = hook;\n }\n\n workInProgressHook = hook;\n }\n\n function updateEffectHook(\n phase: EffectPhase,\n create: EffectCallback,\n deps?: DependencyList,\n ): void {\n const fiber = requireRenderingFiber();\n const oldHook = updateHook(phase) as Hook<Effect> | null;\n const nextDeps = deps ?? null;\n const previousEffect = oldHook?.memoizedState ?? null;\n const hasChanged =\n previousEffect === null ||\n previousEffect.controller === null ||\n previousEffect.controller.signal.aborted ||\n !areHookInputsEqual(nextDeps, previousEffect.deps);\n const effect: Effect = {\n phase,\n create,\n controller: previousEffect?.controller ?? null,\n deps: nextDeps,\n owner: fiber as Fiber<unknown, unknown, unknown>,\n strictRan: __DEV__ && previousEffect?.strictRan === true,\n };\n const hook = createHook(phase, effect);\n\n appendHook(hook);\n\n if (hasChanged) {\n fiber.effects ??= [];\n fiber.effects.push(effect);\n const root = rootOf(fiber);\n recordCommitWork(root.commitIndex, fiber, EffectFlag);\n markCommitEffectPhase(root, phase);\n }\n }\n\n function readContextValue<T>(context: FigContext<T>): T {\n if (renderingFiber === null) {\n throw new Error(\n \"readContext can only be called while rendering a component.\",\n );\n }\n\n const root = rootOf(renderingFiber);\n const contextKey = context as FigContext<unknown>;\n const value = currentContextValue(root, contextKey);\n\n addContextDependency(renderingFiber, contextKey, value);\n return value as T;\n }\n\n function pushContextProvider(node: F, root = rootOf(node)): void {\n const context = node.type as FigContext<unknown>;\n const values = root.contextValues;\n const hadPrevious = values.has(context);\n const previous = values.get(context);\n values.set(context, node.props.value);\n root.contextStack.push({ context, hadPrevious, previous, provider: node });\n }\n\n function popContextProvider(node: F): void {\n const root = rootOf(node);\n const entry = root.contextStack.pop();\n if (entry === undefined || entry.provider !== node) {\n resetContextStack(root);\n return;\n }\n restoreContextEntry(root, entry);\n }\n\n function unwindContextTo(root: R, node: F | null): void {\n while (root.contextStack.length > 0) {\n const entry = root.contextStack[root.contextStack.length - 1];\n if (node !== null && isAncestorOf(entry.provider, node)) return;\n restoreContextEntry(\n root,\n root.contextStack.pop() as ContextStackEntry<\n Container,\n Instance,\n TextInstance\n >,\n );\n }\n }\n\n function restoreContextEntry(\n root: R,\n entry: ContextStackEntry<Container, Instance, TextInstance>,\n ): void {\n if (entry.hadPrevious) {\n root.contextValues.set(entry.context, entry.previous);\n } else {\n root.contextValues.delete(entry.context);\n }\n }\n\n function resetContextStack(root: R): void {\n root.contextValues = new Map();\n root.contextStack = [];\n }\n\n function isAncestorOf(ancestor: F, node: F): boolean {\n for (let parent: F | null = node; parent !== null; parent = parent.return) {\n if (parent === ancestor) return true;\n }\n return false;\n }\n\n function addContextDependency(\n node: F,\n context: FigContext<unknown>,\n memoizedValue: unknown,\n ): void {\n node.contextDependencies ??= [];\n const dependency = contextDependency(node, context);\n\n if (dependency === null) {\n node.contextDependencies.push({ context, memoizedValue });\n } else {\n dependency.memoizedValue = memoizedValue;\n }\n }\n\n function contextDependency(\n node: F,\n context: FigContext<unknown>,\n ): ContextDependency | null {\n return (\n node.contextDependencies?.find(\n (dependency) => dependency.context === context,\n ) ?? null\n );\n }\n\n function appendContextDependencies(\n list: FigContext<unknown>[] | null,\n dependencies: ContextDependency[] | null,\n ): FigContext<unknown>[] | null {\n if (dependencies === null) return list;\n\n let next = list;\n for (const dependency of dependencies) {\n next = appendContext(next, dependency.context);\n }\n return next;\n }\n\n function appendContextList(\n list: FigContext<unknown>[] | null,\n contexts: FigContext<unknown>[] | null,\n ): FigContext<unknown>[] | null {\n if (contexts === null) return list;\n\n let next = list;\n for (const context of contexts) next = appendContext(next, context);\n return next;\n }\n\n function appendContext(\n list: FigContext<unknown>[] | null,\n context: FigContext<unknown>,\n ): FigContext<unknown>[] {\n if (list === null) return [context];\n if (!list.includes(context)) list.push(context);\n return list;\n }\n\n function contextListIncludes(\n list: FigContext<unknown>[] | null,\n context: FigContext<unknown>,\n ): boolean {\n return list?.includes(context) === true;\n }\n\n function updateHook(kind: HookKind): Hook | null {\n const hook = currentHook;\n\n if (hook === null) {\n if (didRenderBefore(renderingFiber)) throw hookOrderError(\"more\");\n return null;\n }\n\n if (hook.kind !== kind) {\n throw new Error(\n `Hook order changed: expected ${hookKindName(hook.kind)}, ` +\n `received ${hookKindName(kind)}.`,\n );\n }\n\n currentHook = hook.next;\n return hook;\n }\n\n function didRenderBefore(node: F | null): boolean {\n const previous = node?.alternate ?? null;\n return previous !== null && previous.memoizedProps !== null;\n }\n\n function hookOrderError(direction: \"fewer\" | \"more\"): Error {\n return new Error(\n `Rendered ${direction} hooks than during the previous render.`,\n );\n }\n\n function complete(node: F): void {\n completeHydration(node);\n\n let child = node.child;\n let childLanes = NoLanes;\n let subtreeFlags = NoFlags;\n let contextSubtreeDependencies: FigContext<unknown>[] | null = null;\n\n while (child !== null) {\n childLanes = mergeLanes(childLanes, child.lanes);\n childLanes = mergeLanes(childLanes, child.childLanes);\n subtreeFlags |= childSubtreeFlags(child);\n contextSubtreeDependencies = appendContextDependencies(\n contextSubtreeDependencies,\n child.contextDependencies,\n );\n contextSubtreeDependencies = appendContextList(\n contextSubtreeDependencies,\n child.contextSubtreeDependencies,\n );\n child = child.sibling;\n }\n\n if (isNewHostInstance(node)) {\n host.finalizeInitialInstance?.(node.stateNode as Instance, node.props);\n if (!setInitialHostTextContent(node)) {\n // A reused instance (re-assembled on Suspense reveal) may still hold\n // stale children from before the fallback; clear before re-appending.\n // Gated on a reused node (alternate) with child fibers, so fresh mounts\n // and content set via props (innerHTML/textarea) are left untouched.\n if (node.alternate !== null && node.child !== null) {\n host.setTextContent?.(node.stateNode as Instance, \"\");\n }\n appendAllHostChildren(node.stateNode as Instance, node.child);\n }\n if (host.appendInitialChild !== undefined) node.flags |= AssembledFlag;\n }\n\n if (node.tag === ViewTransitionTag) node.flags |= ViewTransitionStaticFlag;\n\n if (\n node.tag === AssetsTag &&\n host.commitAssetResources !== undefined &&\n (node.committedProps === null ||\n node.committedProps.assets !== node.props.assets)\n ) {\n recordCommitWork(rootOf(node).commitIndex, node, AssetFlag);\n }\n\n node.childLanes = childLanes;\n node.subtreeFlags = subtreeFlags;\n node.contextSubtreeDependencies = contextSubtreeDependencies;\n node.memoizedProps = node.props;\n if (node.tag === ContextProviderTag && (node.flags & AdoptedFlag) === 0) {\n popContextProvider(node);\n }\n }\n\n function isNewHostInstance(node: F): boolean {\n // A host instance needs initial assembly until it has actually committed —\n // tracked by committedProps, not by alternate. A reused fiber from a\n // never-committed render (e.g. a Suspense primary subtree captured when a\n // child suspended, then revealed) has an alternate but null committedProps:\n // its host children were never appended into it, so it must assemble like a\n // fresh instance or its non-suspending descendants are dropped on reveal.\n return (\n node.tag === HostTag &&\n node.committedProps === null &&\n (node.flags & HydrationFlag) === 0\n );\n }\n\n function setInitialHostTextContent(node: F): boolean {\n const text = hostTextContent(node.props.children);\n if (text === null || host.setTextContent === undefined) return false;\n\n host.setTextContent(node.stateNode as Instance, text);\n return true;\n }\n\n function appendAllHostChildren(parent: Instance, child: F | null): void {\n if (host.appendInitialChild === undefined) return;\n\n for (let node = child; node !== null; node = node.sibling) {\n if (node.tag === PortalTag) continue;\n // Hoisted instances live out-of-band; commit acquires them instead.\n if (isHoistedFiber(node)) continue;\n\n if (node.tag === HostTag || node.tag === TextTag) {\n host.appendInitialChild(parent, hostNode(node));\n } else {\n appendAllHostChildren(parent, node.child);\n }\n }\n }\n\n function reconcileCurrentChildren(\n parent: F,\n children: FigNode,\n root = rootOf(parent),\n ): void {\n reconcile(parent, children, parent.alternate?.child ?? null, false, root);\n }\n\n function reconcile(\n parent: F,\n children: FigNode,\n currentFirstChild: F | null,\n forcePlacement: boolean,\n root = rootOf(parent),\n ): void {\n const nextChildren = collectChildren(children);\n const seenKeys = __DEV__ ? new Set<string>() : null;\n\n parent.child = null;\n parent.deletions = null;\n\n let previous: F | null = null;\n let old: F | null = currentFirstChild;\n let index = 0;\n let lastPlacedIndex = 0;\n const isHydratingNewTree =\n parent.tag !== PortalTag &&\n root.isHydrating &&\n currentFirstChild === null;\n\n for (; old !== null && index < nextChildren.length; index += 1) {\n const child = nextChildren[index];\n if (!sameChildKey(old, child, index) || !sameType(old, child)) {\n break;\n }\n validateChildKey(child, seenKeys);\n\n const next = createWorkInProgress(old, propsFor(child));\n next.index = index;\n next.return = parent;\n\n const updateFlags = hostUpdateFlags(old, next.props);\n if (updateFlags !== NoFlags) {\n recordCommitWork(root.commitIndex, next, updateFlags);\n }\n if (forcePlacement) {\n next.flags |= PlacementFlag;\n } else {\n lastPlacedIndex = old.index;\n }\n\n previous = appendChild(parent, previous, next);\n old = old.sibling;\n }\n\n if (index === nextChildren.length) {\n appendDeletions(parent, old);\n return;\n }\n\n if (old === null) {\n for (; index < nextChildren.length; index += 1) {\n validateChildKey(nextChildren[index], seenKeys);\n const next = fiberFrom(nextChildren[index]);\n if (next === null) continue;\n\n next.index = index;\n next.return = parent;\n if (!isHydratingNewTree) next.flags |= PlacementFlag;\n previous = appendChild(parent, previous, next);\n }\n return;\n }\n\n let existingByKey: Map<string, F> | null = null;\n let existingByIndex: Map<number, F> | null = null;\n for (; old !== null; old = old.sibling) {\n if (old.key === null) {\n (existingByIndex ??= new Map()).set(old.index, old);\n } else {\n (existingByKey ??= new Map()).set(String(old.key), old);\n }\n }\n\n for (; index < nextChildren.length; index += 1) {\n const child = nextChildren[index];\n validateChildKey(child, seenKeys);\n const key = childExplicitKey(child);\n const matched =\n key === null ? existingByIndex?.get(index) : existingByKey?.get(key);\n const canReuse = matched !== undefined && sameType(matched, child);\n const next = canReuse\n ? createWorkInProgress(matched, propsFor(child))\n : fiberFrom(child);\n\n if (next === null) continue;\n\n next.index = index;\n next.return = parent;\n\n if (canReuse) {\n if (key === null) {\n existingByIndex?.delete(index);\n } else {\n existingByKey?.delete(key);\n }\n const updateFlags = hostUpdateFlags(matched, next.props);\n if (updateFlags !== NoFlags) {\n recordCommitWork(root.commitIndex, next, updateFlags);\n }\n if (forcePlacement || matched.index < lastPlacedIndex) {\n next.flags |= PlacementFlag;\n } else {\n lastPlacedIndex = matched.index;\n }\n } else {\n if (!isHydratingNewTree) next.flags |= PlacementFlag;\n }\n\n previous = appendChild(parent, previous, next);\n }\n\n if (existingByKey !== null) {\n for (const child of existingByKey.values()) appendDeletion(parent, child);\n }\n if (existingByIndex !== null) {\n for (const child of existingByIndex.values()) {\n appendDeletion(parent, child);\n }\n }\n }\n\n function appendDeletions(parent: F, firstChild: F | null): void {\n for (let child = firstChild; child !== null; child = child.sibling) {\n appendDeletion(parent, child);\n }\n }\n\n function appendDeletion(parent: F, child: F): void {\n const root = rootOf(parent);\n parent.deletions ??= [];\n parent.deletions.push(child);\n root.needsCommitDeletions = true;\n recordCommitWork(root.commitIndex, parent, DeletionFlag);\n }\n\n function hostUpdateFlags(current: F, nextProps: Props): Flag {\n if (current.tag === TextTag) {\n return current.committedProps?.nodeValue !== nextProps.nodeValue\n ? UpdateFlag\n : NoFlags;\n }\n\n if (current.tag !== HostTag) return NoFlags;\n\n const previousProps = current.committedProps ?? {};\n let flags = NoFlags;\n\n if (hostPropsChanged(previousProps, nextProps)) {\n flags |= UpdateFlag;\n }\n if (\n host.shouldCommitUpdate?.(String(current.type), previousProps, nextProps)\n ) {\n flags |= UpdateFlag;\n }\n if (hostTextContentChanged(current, previousProps, nextProps)) {\n flags |= TextContentFlag;\n }\n\n return flags;\n }\n\n function hostTextContentChanged(\n current: F,\n previous: Props,\n next: Props,\n ): boolean {\n if (host.setTextContent === undefined) return false;\n if (hasUnsafeHTML(next)) return false;\n // Hydration-adopted single-text children keep their fiber shape: the\n // text fiber owns updates (commitTextUpdate). Setting textContent here\n // would replace the very node that fiber points at.\n if (adoptedSingleTextChild(current)) return false;\n\n const previousText = hostTextContent(previous.children);\n const nextText = hostTextContent(next.children);\n\n return (\n previousText !== nextText || (nextText !== null && current.child !== null)\n );\n }\n\n function hostPropsChanged(previous: Props, next: Props): boolean {\n let previousCount = 0;\n\n for (const key in previous) {\n if (!Object.hasOwn(previous, key)) continue;\n if (!committedHostProp(key)) continue;\n previousCount += 1;\n if (!(key in next) || previous[key] !== next[key]) return true;\n }\n\n let nextCount = 0;\n\n for (const key in next) {\n if (!Object.hasOwn(next, key)) continue;\n if (committedHostProp(key)) nextCount += 1;\n }\n\n return previousCount !== nextCount;\n }\n\n function committedHostProp(name: string): boolean {\n return name !== \"children\";\n }\n\n function commitRoot(root: R, finishedWork: F): boolean {\n if (\n !root.pendingCoordinatedCommit &&\n commitCoordinator?.suspend?.(root, () => scheduleRoot(root)) === true\n ) {\n parkCoordinatedCommit(root);\n return true;\n }\n\n commitDepth += 1;\n try {\n // Taken before any commit step runs: the closures below may defer\n // completion across ticks (view transitions), and a later render must\n // not see or clear this commit's retries. Most commits carry none —\n // the shared empty list avoids a per-commit allocation, and holding\n // root's own (empty) array instead would let a later render's pushes\n // leak into this commit's deferred attach.\n let suspenseRetries = noSuspenseRetries;\n if (root.pendingSuspenseRetries.length > 0) {\n suspenseRetries = root.pendingSuspenseRetries;\n root.pendingSuspenseRetries = [];\n }\n commitLiveHookInstances(root);\n if (__DEV__) assertLiveHookInstanceParity(finishedWork.child);\n if (hasHiddenBoundaries) armRevealedHiddenBoundaries(finishedWork.child);\n commitEffects(root, finishedWork.child, BeforeLayoutEffect);\n const commitHostChanges = () => {\n const recoveringHydration = root.clearContainerBeforeCommit;\n if (recoveringHydration) {\n requireHydrationHostConfig().clearContainer(root.container);\n }\n if (root.needsCommitDeletions) {\n commitDeletions(root);\n root.needsCommitDeletions = false;\n }\n if (__DEV__) assertDeletionCommitParity(finishedWork);\n if (!recoveringHydration) {\n commitAssetResourceUpdates(root);\n if (__DEV__) assertAssetResourceCommitParity(finishedWork.child);\n }\n commitDataDependencies(root);\n if (__DEV__) assertDataDependencyCommitParity(finishedWork.child);\n commitHostUpdates(root);\n if (__DEV__) assertHostUpdateCommitParity(finishedWork.child);\n commitMutationEffects(finishedWork.child);\n if (hasHiddenBoundaries)\n commitHiddenBoundaryVisibility(finishedWork.child);\n if (__DEV__) assertPlacedHostCommitParity(finishedWork.child, false);\n // Root hydration recovery clears the old document before placement.\n // Wait until the replacement <head> exists before acquiring assets.\n if (recoveringHydration) {\n commitAssetResourceUpdates(root);\n if (__DEV__) assertAssetResourceCommitParity(finishedWork.child);\n }\n root.clearContainerBeforeCommit = false;\n };\n const completeCommit = () => {\n // Recompute from committed reality: the eager render-time set is sticky, so\n // once the last hidden boundary reveals or unmounts this clears the flag and\n // the per-update parent-walk is skipped again.\n hasHiddenBoundaries = hiddenStates.size > 0;\n root.current = finishedWork;\n deactivateHydration(root);\n root.hydrationInitialElement = NoHydrationInitialElement;\n root.consumedPendingQueues = [];\n // Remaining work is read from the committed tree, not just from\n // pendingLanes minus renderLanes: an update dispatched after its fiber\n // rendered but before this line (setState in a commit-phase effect, or a\n // same-lane update while a time-sliced render of that lane was yielded)\n // lands on a lane inside renderLanes, and stripping it here would park it\n // in its hook queue forever. markLanes/markChildLanes recorded such\n // updates on the finishedWork fibers (begin cleared the lanes that\n // actually rendered), so merging finishedWork.lanes | childLanes revives\n // exactly the work still owed without resurrecting completed lanes.\n markRootCompleted(\n root,\n (root.pendingLanes & ~root.renderLanes) |\n finishedWork.lanes |\n finishedWork.childLanes,\n );\n if (includesSomeLane(finishedWork.childLanes, OffscreenLane)) {\n markRootPending(root, OffscreenLane);\n // A suspension after reveal lane expansion may have marked offscreen\n // work suspended alongside the visible lanes; let idle retries proceed.\n root.suspendedLanes &= ~OffscreenLane;\n }\n try {\n commitExternalStores(root);\n if (__DEV__) assertExternalStoreCommitParity(finishedWork.child);\n attachCommittedSuspenseRetries(root, suspenseRetries);\n scheduleDehydratedSuspenseRetries(root);\n commitEffects(root, finishedWork.child, BeforePaintEffect);\n flushCaughtBoundaryErrors(root);\n if (__DEV__) assertCaughtBoundaryErrorParity(finishedWork.child);\n } finally {\n // Once the tree is current its flags must be cleared even when a\n // commit step throws, or a later render would adopt stale flags.\n collectReactiveEffects(root, finishedWork.child);\n clearTransientFlags(finishedWork);\n scheduleReactiveEffects(root);\n clearCommitIndex(root.commitIndex);\n }\n if (__DEV__ && root.devtools) {\n emitDevtoolsCommit(host, root);\n }\n flushRecoverableErrors(root);\n // Host mutations just landed: make the work loop yield at its next check\n // so the host paints before further scheduled work (React does the same\n // from commitRoot).\n requestPaint();\n };\n const finishDeferredCommit = () => {\n if (!root.pendingCoordinatedCommit) return;\n root.pendingCoordinatedCommit = false;\n finishRootWork(root);\n flushPostCommitSyncWork();\n };\n if (commitCoordinator !== null) {\n let didRunMutation = false;\n let didFinishCapture = false;\n const context: ReconcilerCommitContext<Container> = {\n container: root.container,\n finishedWork,\n priority: commitPriority(root.renderLanes),\n root,\n captureFinished() {\n if (!didRunMutation) {\n throw new Error(\n \"A commit coordinator cannot finish capture before running the mutation transaction.\",\n );\n }\n didFinishCapture = true;\n finishDeferredCommit();\n },\n runMutation(afterMutation) {\n if (didRunMutation) {\n throw new Error(\n \"A commit coordinator may run its mutation transaction only once.\",\n );\n }\n didRunMutation = true;\n const isDeferredCommit = root.pendingCoordinatedCommit;\n if (isDeferredCommit) commitDepth += 1;\n try {\n commitHostChanges();\n completeCommit();\n return afterMutation();\n } catch (error) {\n if (!isDeferredCommit) throw error;\n const info =\n root.uncaughtErrorInfo ?? errorInfoFor(root.current, error);\n restartRootWork(root);\n clearRootAfterUncaughtError(root);\n reportUncaughtError(root, error, info);\n if (root.onUncaughtError === null) {\n setTimeout(() => {\n throw error;\n });\n }\n return undefined;\n } finally {\n if (isDeferredCommit) commitDepth -= 1;\n }\n },\n };\n switch (commitCoordinator.commit(context)) {\n case false:\n if (didRunMutation) {\n throw new Error(\n \"A commit coordinator returned false after running the mutation transaction.\",\n );\n }\n break;\n case \"committed\":\n if (!didRunMutation) {\n throw new Error(\n 'A commit coordinator returned \"committed\" without running the mutation transaction.',\n );\n }\n return false;\n case \"deferred\":\n root.pendingCoordinatedCommit = true;\n root.callback = null;\n root.callbackPriority = NoLane;\n if (didFinishCapture) finishDeferredCommit();\n return true;\n }\n }\n commitHostChanges();\n completeCommit();\n return false;\n } finally {\n commitDepth -= 1;\n }\n }\n\n function parkCoordinatedCommit(root: R): void {\n root.parkedCoordinatedCommit = true;\n // The scheduler callback that carried this attempt is spent; clear it so\n // the coordinator's resume callback (or a newer update) is not deduped.\n root.callback = null;\n root.callbackPriority = NoLane;\n }\n\n function scheduleDehydratedSuspenseRetries(root: R): void {\n if (\n !root.isHydrationRoot &&\n root.dehydratedSuspenseCount === 0 &&\n !root.needsRootHydrationCompletion\n ) {\n root.dehydratedBoundaries = new Map();\n return;\n }\n\n const boundaries: F[] = [];\n root.dehydratedBoundaries = new Map();\n const dehydratedSuspenseCount = collectDehydratedSuspense(\n root.current.child,\n boundaries,\n root.dehydratedBoundaries,\n );\n updateDehydratedSuspenseCount(root, dehydratedSuspenseCount);\n if (boundaries.length === 0) return;\n\n queueMicrotask(() => {\n for (const boundary of boundaries) {\n const state = fiberSuspenseState(boundary);\n if (state?.kind !== \"dehydrated\") continue;\n\n const lane = dehydratedSuspenseRetryLane(state.boundary);\n if (lane !== NoLane) scheduleFiber(boundary, lane);\n }\n });\n }\n\n function collectDehydratedSuspense(\n node: F | null,\n boundaries: F[],\n byStartMarker: Map<HostNode<Instance, TextInstance>, F>,\n ): number {\n let count = 0;\n walkFiberForest(node, (cursor) => {\n const state = fiberSuspenseState(cursor);\n if (state?.kind === \"dehydrated\") {\n count += 1;\n byStartMarker.set(state.boundary.start, cursor);\n // A dehydrated boundary has no live children to descend into, but its\n // siblings may be retriable too (e.g. several boundaries inside one\n // revealed Activity), so keep walking the sibling chain.\n if (\n !abandonedHydrationBoundaries.has(cursor) &&\n dehydratedSuspenseRetryLane(state.boundary) !== NoLane\n ) {\n boundaries.push(cursor);\n }\n return false;\n }\n return true;\n });\n return count;\n }\n\n function updateDehydratedSuspenseCount(root: R, count: number): void {\n const previous = root.dehydratedSuspenseCount;\n root.dehydratedSuspenseCount = count;\n if ((previous > 0 || root.needsRootHydrationCompletion) && count === 0) {\n root.needsRootHydrationCompletion = false;\n host.completeRootHydration?.(root.container);\n }\n }\n\n function dehydratedSuspenseRetryLane(\n boundary: DehydratedSuspenseBoundary<Instance, TextInstance>,\n ): Lane {\n if (boundary.forceClientRender) return DefaultLane;\n if (boundary.status === \"completed\") return DefaultHydrationLane;\n if (boundary.status === \"client-rendered\") return DefaultLane;\n return NoLane;\n }\n\n function flushRecoverableErrors(root: R): void {\n const errors = root.recoverableErrors;\n if (errors.length === 0) return;\n\n root.recoverableErrors = [];\n\n for (const { error, info } of errors) {\n try {\n root.onRecoverableError(error, info);\n } catch {\n // Recoverable error reporting should not break a successful commit.\n }\n }\n }\n\n function flushCaughtBoundaryErrors(root: R): void {\n if (root.committedCaughtErrors.length > 0) {\n const boundaries = root.committedCaughtErrors;\n root.committedCaughtErrors = [];\n for (const boundary of boundaries) {\n flushCaughtBoundaryError(root, boundary);\n }\n }\n\n for (const boundary of root.commitIndex) {\n flushCaughtBoundaryError(root, boundary);\n }\n }\n\n function assertCaughtBoundaryErrorParity(node: F | null): void {\n walkFiberForest(node, (cursor) => {\n const state = fiberErrorBoundaryState(cursor);\n if (state !== null && !state.didReport) {\n throw new Error(\n \"Fig internal parity error: a caught boundary error was missing \" +\n \"from the commit index.\",\n );\n }\n });\n }\n\n function flushCaughtBoundaryError(root: R, node: F): void {\n const state = fiberErrorBoundaryState(node);\n if (state === null || state.didReport) return;\n\n state.didReport = true;\n if (node.alternate !== null) node.alternate.boundaryState = state;\n\n const onError = node.props.onError;\n if (typeof onError !== \"function\") return;\n\n try {\n (onError as (error: unknown, info: ErrorInfo) => void)(\n state.error,\n state.info,\n );\n } catch (error) {\n reportUncaughtError(root, error, errorInfoFor(node, error));\n }\n }\n\n function reportUncaughtError(root: R, error: unknown, info: ErrorInfo): void {\n try {\n root.onUncaughtError?.(error, info);\n } catch {\n // Error reporting should not corrupt already-failed recovery work.\n }\n }\n\n function clearRootAfterUncaughtError(root: R): void {\n root.reactiveCallback?.cancel();\n root.reactiveCallback = null;\n root.pendingReactiveEffects = [];\n root.element = null;\n\n if (root.current.child !== null) {\n deleteFiberDataTree(root.current.child);\n abortFiberEffects(root.current);\n }\n\n if (host.clearContainer !== undefined) {\n removePortalDescendants(root.current.child);\n releaseOutOfBandDescendants(root.current.child);\n host.clearContainer(root.container);\n } else if (root.current.child !== null) {\n let child: F | null = root.current.child;\n while (child !== null) {\n const next: F | null = child.sibling;\n remove(child, root.container);\n child = next;\n }\n }\n\n const current = fiber(RootTag, null, null, { children: null }, root);\n current.memoizedProps = current.props;\n current.committedProps = current.props;\n root.current = current;\n resetRootWork(root);\n root.clearContainerBeforeCommit = false;\n root.hydrationInitialElement = NoHydrationInitialElement;\n root.consumedPendingQueues = [];\n root.commitEffectPhases = 0;\n root.needsCommitDeletions = false;\n root.committedCaughtErrors.length = 0;\n markRootCompleted(root, NoLanes);\n pendingRoots.delete(root);\n }\n\n function commitMutationEffects(node: F | null, hidden = false): void {\n let cursor = node;\n\n while (cursor !== null) {\n const subtreeMutation = (cursor.subtreeFlags & MutationMask) !== 0;\n\n if ((cursor.flags & MutationMask) === 0 && !subtreeMutation) {\n cursor = cursor.sibling;\n continue;\n }\n\n if ((cursor.flags & PlacementFlag) !== 0) {\n cursor = commitPlacementRun(cursor, hidden);\n continue;\n }\n\n if (cursor.tag === PortalTag) {\n commitPortal(cursor);\n }\n\n if (cursor.tag === ActivityTag && (cursor.flags & HydrationFlag) !== 0) {\n commitHydratedActivityBoundary(cursor);\n }\n\n // Hydration commits are position-sensitive (Activity templates unpack\n // above, Suspense boundaries commit below), so they stay in the walk\n // rather than the host-update queue pass.\n if (\n (cursor.flags & HydrationFlag) !== 0 &&\n (cursor.flags & HostUpdateMask) !== 0 &&\n isHost(cursor)\n ) {\n const hostFiber = cursor;\n commitHostMutation(hostFiber, () => commitUpdate(hostFiber));\n if (hidden) hideHostFiber(hostFiber);\n }\n\n if ((cursor.flags & AdoptedFlag) === 0 && subtreeMutation) {\n commitMutationEffects(cursor.child, hidden || isHiddenBoundary(cursor));\n }\n\n if (cursor.tag === SuspenseTag && (cursor.flags & HydrationFlag) !== 0) {\n commitHydratedSuspenseBoundary(cursor);\n }\n\n cursor = cursor.sibling;\n }\n }\n\n function commitPlacementRun(firstPlaced: F, hidden: boolean): F | null {\n const lastPlaced = placementRunTail(firstPlaced);\n const afterPlaced = lastPlaced.sibling;\n const before = hostSibling(lastPlaced);\n\n for (let placed: F | null = firstPlaced; placed !== afterPlaced;) {\n if (placed === null) break;\n\n const current: F = placed;\n const next: F | null = current.sibling;\n const placedHidden = hidden || isHiddenBoundary(current);\n // Hide (suspending binds) BEFORE inserting so attach paths in the\n // host's insertBefore never run binds on hidden content; hide again\n // after, since a placement update may rewrite the inline style.\n // Preassembled subtrees also pre-hide nested hidden boundaries'\n // content, which never gets a placement of its own.\n if (placedHidden) hidePlacedNode(current);\n if (hasHiddenBoundaries && isPreassembledHostSubtree(current)) {\n hideNestedBoundaryContent(current.child);\n }\n commitHostMutation(current, () => commitPlacement(current, before));\n if (placedHidden) hidePlacedNode(current);\n if (!isPreassembledHostSubtree(current)) {\n commitMutationEffects(current.child, placedHidden);\n } else {\n commitPortalsInPreassembledSubtree(current.child, placedHidden);\n }\n placed = next;\n }\n\n return afterPlaced;\n }\n\n // setNodeVisibility keeps a hidden boundary's own subtree untouched, but a\n // FRESH hidden boundary's content was never hidden; hide its children.\n function hidePlacedNode(node: F): void {\n if (isHiddenBoundary(node)) setSubtreeVisibility(node.child, true);\n else setNodeVisibility(node, true);\n }\n\n function hideNestedBoundaryContent(node: F | null): void {\n for (let cursor = node; cursor !== null; cursor = cursor.sibling) {\n if (isHiddenBoundary(cursor)) setSubtreeVisibility(cursor.child, true);\n hideNestedBoundaryContent(cursor.child);\n }\n }\n\n function commitPortalsInPreassembledSubtree(\n node: F | null,\n hidden: boolean,\n ): void {\n for (let cursor = node; cursor !== null; cursor = cursor.sibling) {\n const cursorHidden = hidden || isHiddenBoundary(cursor);\n if (cursor.tag === PortalTag) {\n if (cursorHidden) setSubtreeVisibility(cursor.child, true);\n if (hasHiddenBoundaries) hideNestedBoundaryContent(cursor.child);\n commitHostMutation(cursor, () => commitPlacement(cursor));\n if (cursorHidden) setNodeVisibility(cursor, true);\n commitMutationEffects(cursor.child, cursorHidden);\n } else {\n commitPortalsInPreassembledSubtree(cursor.child, cursorHidden);\n }\n }\n }\n\n function commitHostMutation(source: F, mutation: () => void): void {\n try {\n mutation();\n } catch (error) {\n rootOf(source).uncaughtErrorInfo = errorInfoFor(source, error);\n throw error;\n }\n }\n\n function isPreassembledHostSubtree(node: F): boolean {\n return (node.flags & AssembledFlag) !== 0;\n }\n\n function placementRunTail(node: F): F {\n let tail = node;\n while (\n tail.sibling !== null &&\n (tail.sibling.flags & PlacementFlag) !== 0\n ) {\n tail = tail.sibling;\n }\n return tail;\n }\n\n function commitPlacement(\n node: F,\n before: HostNode<Instance, TextInstance> | null = hostSibling(node),\n ): void {\n if (isHost(node)) {\n if (node.tag === HostTag && isHoistedFiber(node)) {\n // First commit only: a move keeps the out-of-band instance in place.\n if (node.committedProps === null) acquireHoistedInstance(node);\n markHostCommitted(node);\n markHostSubtreeCommitted(node.child);\n return;\n }\n if (shouldCommitPlacementUpdate(node)) commitUpdate(node);\n host.insertBefore(hostParent(node), hostNode(node), before);\n markHostCommitted(node);\n if (isPreassembledHostSubtree(node)) markHostSubtreeCommitted(node.child);\n } else if (node.tag === PortalTag) {\n commitPortal(node);\n if (node.alternate !== null) insertPortalChildren(node);\n } else if (node.alternate !== null) {\n insertHostSubtree(node, hostParent(node), before);\n }\n }\n\n function commitPortal(node: F): void {\n host.preparePortalContainer?.(\n portalTarget(node),\n rootOf(node).container,\n hostParent(node),\n );\n }\n\n function shouldCommitPlacementUpdate(node: F): boolean {\n if ((node.flags & (UpdateFlag | TextContentFlag)) !== 0) return true;\n if (node.alternate !== null || node.tag === TextTag) return false;\n return host.finalizeInitialInstance === undefined;\n }\n\n function insertHostSubtree(\n node: F,\n parent: Parent<Container, Instance>,\n before: HostNode<Instance, TextInstance> | null,\n ): void {\n // Re-placing a reused non-host fiber can carry host subtrees that were\n // assembled inside a render that never committed (a captured Suspense\n // primary revealed later). Commit those exactly like a direct host\n // placement would: a live instance whose fiber still claims it never\n // mounted gets re-assembled in place by the next re-render, mutating\n // committed DOM during the render phase.\n visitHostNodes(node, (child) => host.insertBefore(parent, child, before));\n visitHostFibers(node, (child) => {\n if (child.committedProps !== null) return;\n if (child.tag === HostTag && isHoistedFiber(child)) {\n // Hoisted instances live out-of-band (visitHostNodes skips their\n // insertion) but still need first-commit acquisition and marking.\n acquireHoistedInstance(child);\n markHostCommitted(child);\n markHostSubtreeCommitted(child.child);\n return;\n }\n markHostCommitted(child);\n if (isPreassembledHostSubtree(child)) {\n markHostSubtreeCommitted(child.child);\n }\n });\n }\n\n // Fiber-level companion to visitHostNodes: same traversal and portal\n // boundary, but yields the topmost host fibers themselves (hoisted ones\n // included — callers decide how to commit them).\n function visitHostFibers(node: F, visitor: (child: F) => void): void {\n if (isHost(node)) {\n visitor(node);\n return;\n }\n\n if (node.tag === PortalTag) return;\n\n for (let child = node.child; child !== null; child = child.sibling) {\n visitHostFibers(child, visitor);\n }\n }\n\n function insertPortalChildren(node: F): void {\n const parent = portalTarget(node);\n for (let child = node.child; child !== null; child = child.sibling) {\n visitHostNodes(child, (hostChild) =>\n host.insertBefore(parent, hostChild, null),\n );\n }\n }\n\n function commitUpdate(node: F): void {\n if (node.tag === TextTag) {\n host.commitTextUpdate(\n node.stateNode as TextInstance,\n String(node.props.nodeValue),\n );\n } else if (node.tag === HostTag && isHoistedFiber(node)) {\n commitHoistedUpdate(node);\n } else if (\n (node.flags & HydrationFlag) !== 0 &&\n host.commitHydratedInstance !== undefined\n ) {\n host.commitHydratedInstance(node.stateNode as Instance, node.props);\n } else {\n const previousProps = previousCommittedProps(node);\n\n if ((node.flags & UpdateFlag) !== 0) {\n host.commitUpdate(\n node.stateNode as Instance,\n previousProps,\n node.props,\n );\n }\n\n if ((node.flags & TextContentFlag) !== 0) {\n commitHostTextContent(node, previousProps);\n }\n }\n\n markHostCommitted(node);\n }\n\n function commitHoistedUpdate(node: F): void {\n const hoistedHost = requireHoistedAssetHostConfig();\n const previousProps = previousCommittedProps(node);\n const instance = node.stateNode as Instance;\n const next =\n hoistedHost.updateHoistedInstance(\n instance,\n previousProps,\n node.props,\n assetResourceOwner(node),\n ) ?? instance;\n\n if (next !== instance) adoptSwappedHoistedInstance(node, next);\n }\n\n // The host returns a fully updated shared instance. Adopt it on both\n // alternates so subsequent updates and release target the live node.\n function adoptSwappedHoistedInstance(node: F, next: Instance): void {\n node.stateNode = next;\n if (node.alternate !== null) node.alternate.stateNode = next;\n }\n\n function commitHydratedSuspenseBoundary(node: F): void {\n const boundary = dehydratedSuspenseBoundary(node.alternate);\n\n if (boundary === null) return;\n host.commitHydratedSuspenseBoundary?.(boundary);\n }\n\n function commitHydratedActivityBoundary(node: F): void {\n const state = fiberActivityState(node);\n if (state?.dehydrated == null) return;\n\n requireActivityHydrationHostConfig().commitHydratedActivityBoundary(\n state.dehydrated.boundary,\n );\n state.dehydrated = null;\n }\n\n function commitHostTextContent(node: F, previousProps: Props): void {\n if (host.setTextContent === undefined || node.tag !== HostTag) return;\n\n const nextText = hostTextContent(node.props.children);\n if (nextText !== null) {\n host.setTextContent(node.stateNode as Instance, nextText);\n } else if (hostTextContent(previousProps.children) !== null) {\n host.setTextContent(node.stateNode as Instance, \"\");\n }\n }\n\n function previousCommittedProps(node: F): Props {\n return (\n node.committedProps ??\n node.alternate?.committedProps ??\n node.alternate?.memoizedProps ??\n {}\n );\n }\n\n function markHostCommitted(node: F): void {\n if (!isHost(node)) return;\n node.committedProps = node.props;\n if (node.alternate !== null) node.alternate.committedProps = node.props;\n }\n\n function markHostSubtreeCommitted(node: F | null): void {\n walkFiberForest(node, (child) => {\n // Hoisted descendants were left out of complete-time assembly; acquire\n // them on the subtree's first commit (moves find committedProps set).\n if (child.committedProps === null && isHoistedFiber(child)) {\n acquireHoistedInstance(child);\n }\n markHostCommitted(child);\n });\n }\n\n function acquireHoistedInstance(node: F): void {\n const hoistedHost = requireHoistedAssetHostConfig();\n const instance = node.stateNode as Instance;\n const resolved =\n hoistedHost.commitHoistedInstance(\n instance,\n node.props,\n assetResourceOwner(node),\n ) ?? instance;\n if (resolved === instance) return;\n\n // The identity resolved to a shared live instance (e.g. inserted while\n // this render was suspended); drop the stale duplicate.\n adoptSwappedHoistedInstance(node, resolved);\n }\n\n // Runs before the mutation walk, and owns only steady-state updates:\n // hydration commits stay in the walk (an Activity template must unpack\n // before its hydrated children bind, and Suspense boundary commits follow\n // their instances), and first commits stay with the placement/assembly\n // paths (committing an update first would set committedProps and defeat\n // hoisted acquisition and shouldCommitPlacementUpdate). Updates inside\n // subtrees the walk will place apply while those nodes are still at their\n // old position (or detached); the insertion carries them over.\n function commitHostUpdates(root: R): void {\n for (const cursor of root.commitIndex) {\n if ((cursor.flags & HostUpdateMask) === 0 || !isHost(cursor)) continue;\n if ((cursor.flags & (HydrationFlag | PlacementFlag)) !== 0) continue;\n // First commits belong to placement/assembly — except text, whose\n // first \"update\" is how hydration applies a differing value.\n if (cursor.committedProps === null && cursor.tag !== TextTag) continue;\n commitHostMutation(cursor, () => commitUpdate(cursor));\n // Prerendered mutations inside hidden trees must stay hidden.\n if (hasHiddenBoundaries && isInsideHiddenBoundary(cursor)) {\n hideHostFiber(cursor);\n }\n // Own-fiber update bits never reach subtreeFlags, so the flag-clearing\n // walk cannot be relied on to reach them; the pass owns their cleanup.\n cursor.flags &= ~HostUpdateMask;\n }\n }\n\n function assertHostUpdateCommitParity(node: F | null): void {\n walkFiberForest(node, (cursor) => {\n if (\n (cursor.flags & HostUpdateMask) !== 0 &&\n (cursor.flags & (HydrationFlag | PlacementFlag)) === 0 &&\n (cursor.committedProps !== null || cursor.tag === TextTag) &&\n isHost(cursor)\n ) {\n throw new Error(\n \"Fig internal parity error: a host fiber with pending updates \" +\n \"was missing from the commit index.\",\n );\n }\n\n return (cursor.flags & AdoptedFlag) === 0;\n });\n }\n\n function commitDeletions(root: R): void {\n const store = root.dataStore;\n for (const cursor of root.commitIndex) {\n if (cursor.deletions === null) continue;\n const parent = isHostParent(cursor)\n ? hostParentFor(cursor)\n : hostParent(cursor);\n for (const child of cursor.deletions) {\n // One walk, bounded to the deleted subtree: a deletion entry's old\n // sibling pointers still reference kept fibers whose hook state is\n // shared with the live generation, so a forest walk here would tear\n // down hooks that are still mounted.\n walkFiberSubtree(child, (deleted) => {\n deleteFiberDataOwner(deleted, store);\n abortFiberHooks(deleted, false);\n });\n // Deletion is the one event that invalidates a committed fiber\n // identity; record it at the source by severing the subtree root's\n // upward links (both generations die together). Every return chain\n // out of the deleted subtree passes through one of the root's two\n // generations, so anything that later schedules through a deleted\n // fiber — a late suspense retry, a setState from a stale closure —\n // fails root lookup and no-ops instead of marking phantom lanes.\n // Severing waits until here because the teardown above still\n // resolves roots through these chains.\n child.return = null;\n if (child.alternate !== null) child.alternate.return = null;\n remove(child, parent);\n }\n cursor.deletions = null;\n }\n }\n\n function assertDeletionCommitParity(node: F): void {\n walkFiberSubtree(node, (cursor) => {\n if (cursor.deletions !== null) {\n throw new Error(\n \"Fig internal parity error: a fiber with pending deletions was \" +\n \"missing from the commit index.\",\n );\n }\n\n return (\n (cursor.flags & AdoptedFlag) === 0 &&\n (cursor.subtreeFlags & DeletionFlag) !== 0\n );\n });\n }\n\n function commitDataDependencies(root: R): void {\n for (const cursor of root.commitIndex) {\n if (!cursor.dataDependenciesDirty) continue;\n root.dataStore.commitDataDependencies(cursor, cursor.alternate);\n cursor.dataDependenciesDirty = false;\n if (cursor.alternate !== null)\n cursor.alternate.dataDependenciesDirty = false;\n }\n }\n\n function commitAssetResourceUpdates(root: R): void {\n if (host.commitAssetResources === undefined) return;\n\n for (const cursor of root.commitIndex) {\n if ((cursor.flags & AssetFlag) === 0) continue;\n commitHostMutation(cursor, () =>\n host.commitAssetResources?.(\n (cursor.committedProps?.assets as FigAssetResourceList | undefined) ??\n null,\n cursor.props.assets as FigAssetResourceList,\n assetResourceOwner(cursor),\n ),\n );\n cursor.committedProps = cursor.props;\n if (cursor.alternate !== null) {\n cursor.alternate.committedProps = cursor.props;\n }\n cursor.flags &= ~AssetFlag;\n }\n }\n\n function assertAssetResourceCommitParity(node: F | null): void {\n walkFiberForest(node, (cursor) => {\n if ((cursor.flags & AssetFlag) !== 0) {\n throw new Error(\n \"Fig internal parity error: an Assets fiber with pending resource \" +\n \"work was missing from the commit index.\",\n );\n }\n return (cursor.flags & AdoptedFlag) === 0;\n });\n }\n\n // Every host fiber that reaches the DOM through this commit — its own\n // placement or an ancestor's subtree insertion — must leave the mutation\n // phase marked committed. A live instance whose fiber still claims it\n // never mounted is the poison behind render-phase re-assembly of\n // committed DOM (in-place-reuse trap: insertion paths that skip commit\n // marking), so fail loudly at the commit that minted it.\n function assertPlacedHostCommitParity(node: F | null, placed: boolean): void {\n for (let child = node; child !== null; child = child.sibling) {\n const childPlaced = placed || (child.flags & PlacementFlag) !== 0;\n if (childPlaced && isHost(child) && child.committedProps === null) {\n throw new Error(\n \"Fig internal parity error: a placed host fiber has no committed \" +\n \"props after the mutation phase (a subtree insertion skipped \" +\n \"commit marking).\",\n );\n }\n if (childPlaced || (child.subtreeFlags & PlacementFlag) !== 0) {\n assertPlacedHostCommitParity(child.child, childPlaced);\n }\n }\n }\n\n function assertDataDependencyCommitParity(node: F | null): void {\n walkFiberForest(node, (cursor) => {\n if (cursor.dataDependenciesDirty) {\n throw new Error(\n \"Fig internal parity error: a fiber with dirty data dependencies \" +\n \"was missing from the commit index.\",\n );\n }\n\n return (cursor.flags & AdoptedFlag) === 0;\n });\n }\n\n function deleteFiberDataTree(node: F): void {\n const store = rootOf(node).dataStore;\n walkFiberForest(node, (cursor) => {\n deleteFiberDataOwner(cursor, store);\n });\n }\n\n function deleteFiberDataOwner(node: F, store: R[\"dataStore\"]): void {\n store.releaseDataOwner(node);\n if (node.alternate !== null) store.releaseDataOwner(node.alternate);\n // A hidden boundary removed from the tree stops counting toward\n // `hasHiddenBoundaries`; both generations share the one state object.\n const state = fiberActivityState(node);\n if (state !== null) hiddenStates.delete(state);\n }\n\n function dehydratedActivityBoundary(node: F): Instance | null {\n return node.tag === ActivityTag\n ? (fiberActivityState(node)?.dehydrated?.boundary ?? null)\n : null;\n }\n\n function remove(node: F, parent: Parent<Container, Instance>): void {\n const dehydratedActivity = dehydratedActivityBoundary(node);\n if (dehydratedActivity !== null) {\n host.removeChild(parent, dehydratedActivity);\n return;\n }\n\n const boundary = dehydratedSuspenseBoundary(node);\n if (\n boundary !== null &&\n host.removeDehydratedSuspenseBoundary !== undefined\n ) {\n host.removeDehydratedSuspenseBoundary(boundary);\n return;\n }\n\n if (node.tag === PortalTag) {\n removePortalChildren(node);\n host.removePortalContainer?.(portalTarget(node));\n return;\n }\n\n if (node.tag === AssetsTag) releaseAssetResources(node);\n\n if (node.tag === HostTag && isHoistedFiber(node)) {\n if (node.committedProps !== null) {\n requireHoistedAssetHostConfig().removeHoistedInstance(\n node.stateNode as Instance,\n assetResourceOwner(node),\n );\n }\n return;\n }\n\n if (isHost(node)) {\n removePortalDescendants(node.child);\n releaseOutOfBandDescendants(node.child);\n host.removeChild(parent, hostNode(node));\n return;\n }\n\n for (let child = node.child; child !== null; child = child.sibling) {\n remove(child, parent);\n }\n }\n\n // Hoisted instances and declarative assets are not DOM descendants of the\n // removed host, so the top-node removal above never reaches them; release\n // them explicitly.\n function releaseOutOfBandDescendants(node: F | null): void {\n if (\n host.resolveHoistedInstance === undefined &&\n host.commitAssetResources === undefined\n ) {\n return;\n }\n\n for (let child = node; child !== null; child = child.sibling) {\n if (child.tag === PortalTag) continue;\n\n if (child.tag === AssetsTag) releaseAssetResources(child);\n\n if (child.tag === HostTag && isHoistedFiber(child)) {\n if (child.committedProps !== null && child.stateNode !== null) {\n requireHoistedAssetHostConfig().removeHoistedInstance(\n child.stateNode as Instance,\n assetResourceOwner(child),\n );\n }\n continue;\n }\n\n releaseOutOfBandDescendants(child.child);\n }\n }\n\n function releaseAssetResources(node: F): void {\n if (\n node.tag !== AssetsTag ||\n node.committedProps === null ||\n host.commitAssetResources === undefined\n ) {\n return;\n }\n host.commitAssetResources(\n node.committedProps.assets as FigAssetResourceList,\n null,\n assetResourceOwner(node),\n );\n node.committedProps = null;\n if (node.alternate !== null) node.alternate.committedProps = null;\n }\n\n function removePortalChildren(node: F): void {\n const parent = portalTarget(node);\n for (let child = node.child; child !== null; child = child.sibling) {\n remove(child, parent);\n }\n }\n\n function removePortalDescendants(node: F | null): void {\n for (let child = node; child !== null; child = child.sibling) {\n if (child.tag === PortalTag) {\n removePortalChildren(child);\n host.removePortalContainer?.(portalTarget(child));\n } else {\n removePortalDescendants(child.child);\n }\n }\n }\n\n function visitHostNodes(\n node: F,\n visitor: (node: HostNode<Instance, TextInstance>) => void,\n ): void {\n if (isHost(node)) {\n // Both callers insert host nodes into a position; hoisted instances\n // live out-of-band and must never be moved to a fiber position.\n if (node.tag === HostTag && isHoistedFiber(node)) return;\n visitor(hostNode(node));\n return;\n }\n\n if (node.tag === PortalTag) return;\n\n for (let child = node.child; child !== null; child = child.sibling) {\n visitHostNodes(child, visitor);\n }\n }\n\n function hostParent(node: F): Parent<Container, Instance> {\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if (isHostParent(parent)) return hostParentFor(parent);\n }\n\n throw new Error(\"Could not find a host parent for fiber.\");\n }\n\n function hostAncestorTypes(node: F): string[] {\n const ancestors: string[] = [];\n\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if (parent.tag === HostTag) {\n ancestors.push(String(parent.type));\n continue;\n }\n\n // Fiber ancestry ends at portals and roots; seed the container's own\n // tag so nesting against the render target is still validated.\n if (parent.tag === PortalTag || parent.tag === RootTag) {\n const container = host.containerType?.(hostParentFor(parent));\n if (container != null) ancestors.push(container);\n break;\n }\n }\n\n return ancestors;\n }\n\n function hostSibling(node: F): HostNode<Instance, TextInstance> | null {\n // Root hydration recovery removes every existing host sibling before\n // placement. Keep the flag live through mutations so none of those\n // detached nodes can become an insertion anchor.\n if (rootOf(node).clearContainerBeforeCommit) return null;\n\n const dehydratedBoundary = dehydratedSuspenseParent(node);\n if (dehydratedBoundary !== null) return dehydratedBoundary.start;\n\n let cursor: F = node;\n\n search: while (true) {\n while (cursor.sibling === null) {\n if (cursor.return === null || isHostParent(cursor.return)) {\n return null;\n }\n cursor = cursor.return;\n }\n\n cursor = cursor.sibling;\n\n while (!isHost(cursor)) {\n const dehydratedActivity = dehydratedActivityBoundary(cursor);\n if (dehydratedActivity !== null) return dehydratedActivity;\n\n if (\n cursor.tag === PortalTag ||\n (cursor.flags & PlacementFlag) !== 0 ||\n cursor.child === null\n ) {\n continue search;\n }\n cursor = cursor.child;\n }\n\n if ((cursor.flags & PlacementFlag) === 0 && !isHoistedFiber(cursor)) {\n return hostNode(cursor);\n }\n }\n }\n\n function dehydratedSuspenseParent(\n node: F,\n ): DehydratedSuspenseBoundary<Instance, TextInstance> | null {\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if ((parent.flags & HydrationFlag) !== 0) {\n const boundary = dehydratedSuspenseBoundary(parent.alternate);\n if (\n boundary !== null &&\n (boundary.status !== \"completed\" || boundary.forceClientRender)\n ) {\n return boundary;\n }\n }\n\n if (isHostParent(parent)) return null;\n }\n\n return null;\n }\n\n function isHostParent(node: F): boolean {\n return (\n node.tag === RootTag || node.tag === HostTag || node.tag === PortalTag\n );\n }\n\n function hostParentFor(node: F): Parent<Container, Instance> {\n if (node.tag === RootTag) return (node.stateNode as R).container;\n if (node.tag === HostTag) return node.stateNode as Instance;\n return portalTarget(node);\n }\n\n function dehydratedSuspenseBoundary(\n node: F | null | undefined,\n ): DehydratedSuspenseBoundary<Instance, TextInstance> | null {\n const state = fiberSuspenseState(node);\n return state?.kind === \"dehydrated\" ? state.boundary : null;\n }\n\n function fiberSuspenseState(\n node: F | null | undefined,\n ): SuspenseState<Container, Instance, TextInstance> | null {\n return node?.tag === SuspenseTag\n ? (node.boundaryState as SuspenseState<\n Container,\n Instance,\n TextInstance\n > | null)\n : null;\n }\n\n function fiberErrorBoundaryState(\n node: F | null | undefined,\n ): ErrorBoundaryState | null {\n return node?.tag === ErrorBoundaryTag\n ? (node.boundaryState as ErrorBoundaryState | null)\n : null;\n }\n\n function fiberActivityState(\n node: F | null | undefined,\n ): ActivityState<Instance> | null {\n return node?.tag === ActivityTag\n ? (node.boundaryState as ActivityState<Instance> | null)\n : null;\n }\n\n function ensureFiberActivityState(node: F): ActivityState<Instance> {\n const current = fiberActivityState(node);\n if (current !== null) return current;\n\n const state: ActivityState<Instance> = { hidden: false, dehydrated: null };\n node.boundaryState = state;\n return state;\n }\n\n function scheduleFiber(node: F, lane: Lane): void {\n markLanes(node, lane);\n const root = scheduleParentPath(node.return, lane);\n const alternateRoot = scheduleParentPath(\n node.alternate?.return ?? null,\n lane,\n );\n const scheduledRoot = root ?? alternateRoot;\n if (scheduledRoot === null) return;\n\n markRootPending(scheduledRoot, lane);\n scheduleOrBatchRoot(scheduledRoot);\n }\n\n function scheduleParentPath(parent: F | null, lane: Lane): R | null {\n for (; parent !== null; parent = parent.return) {\n markChildLanes(parent, lane);\n\n if (parent.tag === RootTag) {\n return parent.stateNode as R;\n }\n }\n\n return null;\n }\n\n function attachPing(root: R, thenable: Thenable, lanes: Lanes): void {\n if (lanes === NoLanes) return;\n\n const previousLanes = root.suspendedThenables.get(thenable) ?? NoLanes;\n root.suspendedThenables.set(thenable, mergeLanes(previousLanes, lanes));\n\n if (previousLanes !== NoLanes) return;\n thenable.then(\n () => ping(root, thenable),\n () => ping(root, thenable),\n );\n }\n\n function ping(root: R, thenable: object): void {\n const lanes = root.suspendedThenables.get(thenable) ?? NoLanes;\n if (lanes === NoLanes) return;\n\n root.suspendedThenables.delete(thenable);\n markRootPinged(root, lanes);\n pendingRoots.add(root);\n scheduleRoot(root);\n }\n\n function findSuspenseBoundary(node: F): F | null {\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if (parent.tag === SuspenseTag && fiberSuspenseState(parent) === null) {\n return parent;\n }\n }\n\n return null;\n }\n\n function findErrorBoundary(node: F): F | null {\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if (\n parent.tag === ErrorBoundaryTag &&\n fiberErrorBoundaryState(parent) === null\n ) {\n return parent;\n }\n }\n\n return null;\n }\n\n function captureSuspenseBoundary(boundary: F, thenable: Thenable): F | null {\n const root = rootOf(boundary);\n const lanes = root.renderLanes;\n // Two pings per suspension. The root ping is identity-free: if this\n // render never commits (preserved suspension, restart, interruption),\n // the resolved thenable revives the suspended lanes at the root, and it\n // no-ops once the lanes committed (markRootPinged masks by\n // suspendedLanes). The boundary retry is recorded here but attached only\n // at commit, to the fiber identity the commit blessed.\n attachPing(root, thenable, lanes);\n root.pendingSuspenseRetries.push({ boundary, thenable, lanes });\n rollbackCommitIndex(root.commitIndex, boundary.commitIndexCheckpoint);\n // The boundary's own deletions (e.g. the committed fallback recorded by\n // the reveal path) belong to the boundary, not its discarded subtree;\n // requeue them. Paths that discard them null boundary.deletions, which\n // leaves this entry inert.\n if (boundary.deletions !== null)\n recordCommitWork(root.commitIndex, boundary);\n\n const dehydrated = fiberSuspenseState(boundary.alternate);\n if (\n root.hydratingSuspenseBoundary === boundary &&\n dehydrated?.kind === \"dehydrated\"\n ) {\n // Hydrating this boundary suspended. Abandon the attempt and stay\n // dehydrated so the server-rendered content survives; the retry\n // recorded above re-attempts hydration once the thenable settles, so\n // commit-time dehydrated retry scheduling must skip the boundary until\n // then.\n leaveSuspenseHydration(root, boundary, dehydrated.boundary);\n boundary.boundaryState = dehydrated;\n boundary.flags &= ~HydrationFlag;\n boundary.child = null;\n abandonedHydrationBoundaries.add(boundary);\n if (boundary.alternate !== null) {\n abandonedHydrationBoundaries.add(boundary.alternate);\n }\n return completeUnit(boundary);\n }\n\n if (shouldPreserveSuspenseBoundary(root, boundary)) {\n markRootSuspended(root, lanes);\n throw PreservedSuspense;\n }\n\n const currentPrimary = suspensePrimaryFiber(boundary.alternate);\n if (currentPrimary !== null) {\n boundary.boundaryState = { kind: \"fallback\", primaryChild: null };\n boundary.deletions = null;\n restoreConsumedPendingQueuesForRetry(\n root,\n boundary.suspenseQueueStart ?? root.consumedPendingQueues.length,\n );\n hasHiddenBoundaries = true;\n const primary = suspensePrimaryWorkInProgress(\n boundary,\n currentPrimary,\n \"hidden\",\n );\n primary.child = cloneSuspendedPrimary(currentPrimary.child, primary);\n primary.flags |= VisibilityFlag;\n primary.memoizedProps = primary.props;\n // The hidden primary is committed but not begun/completed this pass, so\n // its lanes are not recomputed — clear them (and the boundary will not see\n // OffscreenLane work blocked behind the still-suspended boundary).\n primary.lanes = NoLanes;\n primary.childLanes = NoLanes;\n boundary.child = primary;\n\n const fallback = suspenseFallbackWorkInProgress(\n boundary,\n currentPrimary.sibling,\n 1,\n );\n primary.sibling = fallback;\n return fallback;\n }\n\n // There is no committed primary on an initial suspension. Keep the partial\n // render only as retry input; committing it hidden would publish an\n // incomplete host tree.\n boundary.boundaryState = {\n kind: \"fallback\",\n primaryChild:\n boundary.child?.tag === ActivityTag && boundary.child.type === null\n ? boundary.child.child\n : boundary.child,\n };\n const fallback = suspenseFallbackWorkInProgress(boundary, null, 0);\n boundary.child = fallback;\n return fallback;\n }\n\n function captureErrorBoundary(\n boundary: F,\n error: unknown,\n source: F,\n ): F | null {\n const root = rootOf(boundary);\n rollbackCommitIndex(root.commitIndex, boundary.commitIndexCheckpoint);\n recordCommitWork(root.commitIndex, boundary);\n const state = createErrorBoundaryState(error, source);\n boundary.boundaryState = state;\n reconcileCurrentChildren(boundary, errorBoundaryFallback(boundary, state));\n return boundary.child ?? completeUnit(boundary);\n }\n\n function captureCommittedErrorBoundary(\n boundary: F,\n error: unknown,\n source: F,\n ): void {\n rootOf(boundary).committedCaughtErrors.push(boundary);\n const state = createErrorBoundaryState(error, source);\n boundary.boundaryState = state;\n if (boundary.alternate !== null) boundary.alternate.boundaryState = state;\n }\n\n function createErrorBoundaryState(\n error: unknown,\n source: F,\n ): ErrorBoundaryState {\n return {\n error,\n info: errorInfoFor(source, error),\n didReport: false,\n };\n }\n\n function shouldPreserveSuspenseBoundary(root: R, boundary: F): boolean {\n return (\n boundary.alternate !== null &&\n fiberSuspenseState(boundary.alternate) === null &&\n isTransitionOrDeferredRender(root)\n );\n }\n\n // Boundary retries attach here, after the tree flipped: the recorded fiber\n // is in the committed tree by construction, so no tree-membership question\n // ever arises. A retry that fires after the boundary is deleted no-ops in\n // scheduleFiber, because deletion teardown severs the deleted subtree's\n // upward links and root lookup finds nothing.\n function attachCommittedSuspenseRetries(\n root: R,\n retries: PendingSuspenseRetry<Container, Instance, TextInstance>[],\n ): void {\n for (const { boundary, thenable, lanes } of retries) {\n // A boundary that re-suspends on a still-pending thenable in a later\n // commit would otherwise stack duplicate listeners; one per conceptual\n // boundary (either generation) is enough.\n let attached = root.attachedSuspenseRetries.get(thenable);\n if (attached === undefined) {\n attached = new WeakSet();\n root.attachedSuspenseRetries.set(thenable, attached);\n }\n if (\n attached.has(boundary) ||\n (boundary.alternate !== null && attached.has(boundary.alternate))\n ) {\n continue;\n }\n attached.add(boundary);\n\n const retry = () => scheduleFiber(boundary, suspenseRetryLane(lanes));\n thenable.then(retry, retry);\n }\n }\n\n // Context propagation is lazy: providers push new values without walking\n // their subtree, so a subtree about to be skipped is the only place a stale\n // consumer could get stranded. Every skip point (clean-childLanes bailout)\n // checks the providers above it and marks the consumers it is about to skip.\n // Consumers that are begun anyway are covered by canBailout's memoized\n // dependency check, so no eager walk is needed. Returns whether the node's\n // childLanes now intersect the render lanes; the early-false paths rely on\n // the caller only asking when childLanes were already clean.\n function lazilyPropagateParentContextChanges(node: F, root: R): boolean {\n if ((node.flags & ContextPropagationFlag) !== 0) return false;\n\n const contexts = changedParentContexts(node);\n node.flags |= ContextPropagationFlag;\n if (contexts === null) return false;\n\n const current = node.alternate;\n if (current === null) return false;\n\n for (const context of contexts) {\n if (!contextListIncludes(current.contextSubtreeDependencies, context)) {\n continue;\n }\n\n for (let child = current.child; child !== null; child = child.sibling) {\n markContextConsumers(child, current, context, root.renderLanes);\n }\n }\n\n return includesSomeLane(node.childLanes, root.renderLanes);\n }\n\n function changedParentContexts(node: F): FigContext<unknown>[] | null {\n let seen =\n node.tag === ContextProviderTag\n ? [node.type as FigContext<unknown>]\n : null;\n let changed: FigContext<unknown>[] | null = null;\n\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if ((parent.flags & ContextPropagationFlag) !== 0) break;\n if (parent.tag !== ContextProviderTag) continue;\n\n const context = parent.type as FigContext<unknown>;\n if (contextListIncludes(seen, context)) continue;\n seen = appendContext(seen, context);\n if (changedContextProvider(parent)) {\n changed = appendContext(changed, context);\n }\n }\n\n return changed;\n }\n\n function markContextConsumers(\n node: F,\n propagationRoot: F,\n context: FigContext<unknown>,\n lanes: Lanes,\n ): void {\n if (node.tag === ContextProviderTag && node.type === context) {\n return;\n }\n\n if (contextDependency(node, context) !== null) {\n markLanes(node, lanes);\n markParentPath(node, propagationRoot, lanes);\n }\n\n if (!contextListIncludes(node.contextSubtreeDependencies, context)) return;\n\n for (let child = node.child; child !== null; child = child.sibling) {\n markContextConsumers(child, propagationRoot, context, lanes);\n }\n }\n\n // Marks childLanes up to and including stopAt: stopAt is the skip point\n // whose childLanes gate whether its subtree is adopted or descended into.\n function markParentPath(node: F, stopAt: F, lanes: Lanes): void {\n for (\n let parent = node.return;\n parent !== null && parent !== stopAt;\n parent = parent.return\n ) {\n markChildLanes(parent, lanes);\n }\n\n markChildLanes(stopAt, lanes);\n }\n\n function markLanes(node: F, lane: Lane): void {\n node.lanes = mergeLanes(node.lanes, lane);\n if (node.alternate !== null) {\n node.alternate.lanes = mergeLanes(node.alternate.lanes, lane);\n }\n }\n\n function markChildLanes(node: F, lane: Lane): void {\n node.childLanes = mergeLanes(node.childLanes, lane);\n if (node.alternate !== null) {\n node.alternate.childLanes = mergeLanes(node.alternate.childLanes, lane);\n }\n }\n\n function markSubtreeFlag(node: F, flag: Flag): void {\n for (let parent = node.return; parent !== null; parent = parent.return) {\n parent.subtreeFlags |= flag;\n }\n }\n\n function createWorkInProgress(current: F, props: Props): F {\n const next =\n current.alternate ??\n fiber(current.tag, current.type, current.key, props, current.stateNode);\n\n next.props = props;\n next.memoizedProps = current.memoizedProps;\n next.committedProps = current.committedProps;\n next.assetResourceOwner = current.assetResourceOwner;\n next.memoizedState = current.memoizedState;\n next.stateNode = current.stateNode;\n next.return = current.return;\n next.child = null;\n next.sibling = null;\n next.index = current.index;\n // Exactly the hoisted bit survives the clone, in both directions:\n // - HoistedStaticFlag MUST carry. It is set once, when the instance is\n // resolved, and never re-derived; a clone without it would misroute\n // commit work — most dangerously deletion, where host.removeChild at\n // the fiber position targets an instance that lives in <head>\n // (NotFoundError in a real DOM).\n // - ViewTransitionStaticFlag MUST NOT carry. complete() re-derives it\n // for every fiber a render visits, so carrying it only matters for\n // clones that never complete (cloneSuspendedPrimary's captured hidden\n // trees): their stale bit would survive into the hidden Activity's\n // subtree summary and advertise view-transition boundaries in commits\n // that have no live view-transition work.\n next.flags = current.flags & HoistedStaticFlag;\n next.subtreeFlags = NoFlags;\n next.deletions = null;\n next.lanes = current.lanes;\n next.childLanes = current.childLanes;\n next.effects = null;\n next.contextDependencies = current.contextDependencies;\n next.contextSubtreeDependencies = current.contextSubtreeDependencies;\n next.dataDependenciesDirty = false;\n next.boundaryState = current.boundaryState;\n next.hiddenState = null;\n next.alternate = current;\n current.alternate = next;\n\n return next;\n }\n\n function cloneChildFibers(parent: F): void {\n let current = parent.alternate?.child ?? null;\n let previous: F | null = null;\n parent.child = null;\n parent.deletions = null;\n\n while (current !== null) {\n const next = createWorkInProgress(current, current.props);\n next.return = parent;\n\n previous = appendChild(parent, previous, next);\n current = current.sibling;\n }\n }\n\n function appendChild(parent: F, previous: F | null, child: F): F {\n if (previous === null) parent.child = child;\n else previous.sibling = child;\n return child;\n }\n\n function fiberFrom(child: NormalizedChild): F | null {\n if (typeof child === \"string\") {\n return fiber(TextTag, null, null, { nodeValue: child }, null);\n }\n\n if (isPortal(child)) {\n return fiber(PortalTag, null, child.key, portalProps(child), null);\n }\n\n if (isValidElement(child)) {\n return fiber(tagFor(child), child.type, child.key, child.props, null);\n }\n\n if (isThenable(child)) {\n return fiber(ThenableTag, null, null, { thenable: child }, null);\n }\n\n return null;\n }\n\n function portalTarget(node: F): Parent<Container, Instance> {\n return node.props.target as Parent<Container, Instance>;\n }\n\n function fiber(\n tag: Tag,\n type: FiberType,\n key: string | number | null,\n props: Props,\n stateNode: F[\"stateNode\"],\n ): F {\n return {\n tag,\n type,\n key,\n props,\n memoizedProps: null,\n committedProps: null,\n memoizedState: null,\n stateNode,\n return: null,\n child: null,\n sibling: null,\n index: 0,\n alternate: null,\n flags: NoFlags,\n subtreeFlags: NoFlags,\n deletions: null,\n lanes: NoLanes,\n childLanes: NoLanes,\n effects: null,\n contextDependencies: null,\n contextSubtreeDependencies: null,\n dataDependenciesDirty: false,\n assetResourceOwner: null,\n boundaryState: null,\n hiddenState: null,\n };\n }\n\n function assetResourceOwner(node: F): AssetResourceOwner {\n // Lifecycle walks can retain either fiber generation. Normalize the\n // identity on every access so acquisition and release cannot disagree.\n const owner =\n node.assetResourceOwner ??\n node.alternate?.assetResourceOwner ??\n ({} as AssetResourceOwner);\n node.assetResourceOwner = owner;\n if (node.alternate !== null) node.alternate.assetResourceOwner = owner;\n return owner;\n }\n\n function rootOf(node: F): R {\n const root = rootOfOrNull(node);\n if (root === null) throw new Error(\"Could not find a root for fiber.\");\n return root;\n }\n\n // Deletion teardown severs return pointers, so fibers held past unmount\n // (transition starters, stale closures) legitimately have no root. Paths\n // reachable from user code after unmount take this form; render- and\n // commit-time paths keep the throwing rootOf invariant.\n function rootOfOrNull(node: F): R | null {\n for (let parent: F | null = node; parent !== null; parent = parent.return) {\n if (parent.tag === RootTag) return parent.stateNode as R;\n }\n\n return null;\n }\n\n function errorInfoFor(node: F, error?: unknown): ErrorInfo {\n const dataResourceKeys =\n error === undefined ? undefined : dataResourceKeysForError(error);\n\n return dataResourceKeys === undefined\n ? { componentStack: componentStackFor(node) }\n : { componentStack: componentStackFor(node), dataResourceKeys };\n }\n\n function queueRecoverableError(\n root: R,\n node: F,\n error: unknown,\n details: RecoverableDetails,\n ): void {\n root.recoverableErrors.push({\n error,\n info: { ...details, componentStack: componentStackFor(node) },\n });\n }\n\n function componentStackFor(node: F): string {\n const frames: string[] = [];\n\n for (let fiber: F | null = node; fiber !== null; fiber = fiber.return) {\n const name = componentStackName(fiber);\n if (name !== null) frames.push(` at ${name}`);\n }\n\n return frames.length === 0 ? \"\" : `\\n${frames.join(\"\\n\")}`;\n }\n\n function componentStackName(node: F): string | null {\n switch (node.tag) {\n case FunctionTag:\n return devtoolsTypeName(node.type, \"Anonymous\");\n case ContextProviderTag:\n return `${devtoolsTypeName(node.type, \"Context\")}.Provider`;\n case SuspenseTag:\n return \"Suspense\";\n case ErrorBoundaryTag:\n return \"ErrorBoundary\";\n case ViewTransitionTag:\n return \"ViewTransition\";\n case PortalTag:\n return \"Portal\";\n case AssetsTag:\n return \"Assets\";\n default:\n return null;\n }\n }\n\n return {\n batchedUpdates,\n createRoot,\n hydrateRoot,\n hydrateTarget,\n flushSync,\n installCommitCoordinator,\n scheduleRefresh,\n };\n\n // Re-render every mounted instance of a changed component family. Updated\n // families re-render in place (hook state preserved); stale families (hook\n // signature changed) remount via their parent. The refresh runtime swaps each\n // family's `current` before calling this.\n // Each refresh function wraps its whole body in a block-form dev gate\n // (not an early return: esbuild only drops the bodies — and with them the\n // machinery — via parse-time branch elimination) so production builds ship\n // empty stubs.\n function scheduleRefresh(update: RefreshUpdate): void {\n if (__DEV__) {\n if (!hasRefreshHandler() || mountedRoots.size === 0) return;\n\n runWithStaleRefreshFamilies(update.staleFamilies, () => {\n flushSync(() => {\n for (const root of mountedRoots) {\n scheduleFamilyRefresh(root.current.child, update);\n }\n });\n });\n }\n }\n\n function scheduleFamilyRefresh(node: F | null, update: RefreshUpdate): void {\n if (__DEV__) {\n if (node === null) return;\n\n if (node.tag === FunctionTag && hasRefreshHandler()) {\n const family = refreshFamilyFor(node.type);\n if (family !== undefined) {\n if (update.staleFamilies.has(family)) {\n remountForRefresh(node);\n } else if (update.updatedFamilies.has(family)) {\n // Mark the instance dirty so render bailouts don't skip it.\n scheduleFiber(node, SyncLane);\n }\n }\n }\n\n scheduleFamilyRefresh(node.child, update);\n scheduleFamilyRefresh(node.sibling, update);\n }\n }\n\n // A stale component must drop its hook state. Re-render its parent so the\n // child reconciles as an incompatible type and remounts; for a top-level\n // component re-render the whole root.\n function remountForRefresh(node: F): void {\n if (__DEV__) {\n const parent = node.return;\n if (parent === null || parent.tag === RootTag) {\n const root = rootOf(node);\n updateRoot(root, root.element);\n } else {\n scheduleFiber(parent, SyncLane);\n }\n }\n }\n\n function findDehydratedSuspenseBoundaryForTarget(\n node: F | null,\n target: unknown,\n ): F | null {\n if (node === null || host.isTargetWithinSuspenseBoundary === undefined) {\n return null;\n }\n\n const state = fiberSuspenseState(node);\n if (\n state?.kind === \"dehydrated\" &&\n host.isTargetWithinSuspenseBoundary(target, state.boundary)\n ) {\n return node;\n }\n\n return (\n findDehydratedSuspenseBoundaryForTarget(node.child, target) ??\n findDehydratedSuspenseBoundaryForTarget(node.sibling, target)\n );\n }\n\n function isHiddenBoundary(node: F): boolean {\n return node.tag === ActivityTag && activityHidden(node.props);\n }\n\n function requireActivityHostConfig(): ActivityVisibilityHostConfig {\n if (activityHostConfig !== null) return activityHostConfig;\n\n if (\n host.hideInstance === undefined ||\n host.unhideInstance === undefined ||\n host.hideTextInstance === undefined ||\n host.unhideTextInstance === undefined\n ) {\n throw new Error(\"Activity is not supported by this renderer.\");\n }\n\n activityHostConfig = host as ActivityVisibilityHostConfig;\n return activityHostConfig;\n }\n\n function commitHiddenBoundaryVisibility(\n node: F | null,\n hidden = false,\n ): void {\n for (let cursor = node; cursor !== null; cursor = cursor.sibling) {\n if ((cursor.flags & AdoptedFlag) !== 0) continue;\n const subtreeVisibility = (cursor.subtreeFlags & VisibilityFlag) !== 0;\n\n if ((cursor.flags & VisibilityFlag) === 0 && !subtreeVisibility) {\n continue;\n }\n\n const boundary = cursor.tag === ActivityTag;\n const boundaryHidden = boundary && activityHidden(cursor.props);\n\n if (boundary && (cursor.flags & VisibilityFlag) !== 0) {\n const effectiveHidden = hidden || boundaryHidden;\n const state = fiberActivityState(cursor);\n if (state !== null) {\n state.hidden = effectiveHidden;\n if (effectiveHidden) hiddenStates.add(state);\n else hiddenStates.delete(state);\n }\n setSubtreeVisibility(cursor.child, effectiveHidden);\n if (effectiveHidden && cursor.child !== null)\n abortFiberEffects(cursor.child, true);\n if (\n !effectiveHidden &&\n includesSomeLane(cursor.childLanes, OffscreenLane)\n ) {\n // Pending hidden work upgrades to prompt processing on reveal.\n const root = rootOf(cursor);\n markRootPending(root, DefaultLane);\n markRootEntangled(root, DefaultLane | OffscreenLane);\n scheduleOrBatchRoot(root);\n }\n }\n\n if (subtreeVisibility) {\n commitHiddenBoundaryVisibility(cursor.child, hidden || boundaryHidden);\n }\n }\n }\n\n function setSubtreeVisibility(node: F | null, hidden: boolean): void {\n for (let cursor = node; cursor !== null; cursor = cursor.sibling) {\n setNodeVisibility(cursor, hidden);\n }\n }\n\n function setNodeVisibility(cursor: F, hidden: boolean): void {\n // Subtrees hidden by their own boundary keep their visibility.\n if (isHiddenBoundary(cursor)) return;\n\n if (cursor.tag === HostTag) {\n const activityHost = requireActivityHostConfig();\n if (hidden) activityHost.hideInstance(cursor.stateNode as Instance);\n else {\n activityHost.unhideInstance(cursor.stateNode as Instance, cursor.props);\n }\n } else if (cursor.tag === TextTag) {\n const activityHost = requireActivityHostConfig();\n if (hidden) {\n activityHost.hideTextInstance(cursor.stateNode as TextInstance);\n } else {\n activityHost.unhideTextInstance(\n cursor.stateNode as TextInstance,\n String(cursor.props.nodeValue),\n );\n }\n }\n\n setSubtreeVisibility(cursor.child, hidden);\n }\n\n function hideHostFiber(node: F): void {\n const activityHost = requireActivityHostConfig();\n if (node.tag === HostTag) {\n activityHost.hideInstance(node.stateNode as Instance);\n } else {\n activityHost.hideTextInstance(node.stateNode as TextInstance);\n }\n }\n\n function armRevealedHiddenBoundaries(node: F | null): void {\n for (let cursor = node; cursor !== null; cursor = cursor.sibling) {\n if ((cursor.flags & AdoptedFlag) !== 0) continue;\n const subtreeVisibility = (cursor.subtreeFlags & VisibilityFlag) !== 0;\n\n if ((cursor.flags & VisibilityFlag) === 0 && !subtreeVisibility) {\n continue;\n }\n\n if (\n cursor.tag === ActivityTag &&\n (cursor.flags & VisibilityFlag) !== 0 &&\n !activityHidden(cursor.props) &&\n cursor.child !== null\n ) {\n armDeferredEffects(cursor.child);\n }\n\n if (subtreeVisibility) armRevealedHiddenBoundaries(cursor.child);\n }\n }\n\n // Re-arms effects that were deferred or aborted while hidden so the\n // regular commit phases run them in order during the reveal commit.\n function armDeferredEffects(node: F): void {\n visitFiberHooks(node, (owner, hook) => {\n if (hook.kind === StableEventHook) {\n const state = hook.memoizedState as StableEventState;\n const instance = state.instance;\n instance.handler = state.next;\n instance.live = true;\n return;\n }\n\n if (!isEffectHook(hook.kind)) return;\n\n const effect = hook.memoizedState as Effect;\n if (effect.controller !== null) return;\n\n const effects = (owner.effects ??= []);\n if (!effects.includes(effect)) effects.push(effect);\n const root = rootOf(owner);\n recordCommitWork(root.commitIndex, owner, EffectFlag);\n markSubtreeFlag(owner, EffectFlag);\n markCommitEffectPhase(root, effect.phase);\n // Re-armed owners that did not re-render are not in the commit index\n // yet; the arming pass runs before every effect pass consumes it.\n });\n }\n\n function commitLiveHookInstances(root: R): void {\n for (const owner of root.commitIndex) {\n for (let hook = owner.memoizedState; hook !== null; hook = hook.next) {\n commitLiveHookInstance(owner, hook);\n }\n }\n }\n\n function commitLiveHookInstance(owner: F, hook: Hook): void {\n if (isStableEventHook(hook)) {\n const instance = hook.memoizedState.instance;\n instance.handler = hook.memoizedState.next;\n instance.live = !hasHiddenBoundaries || !isInsideHiddenBoundary(owner);\n }\n\n if (hook.kind === ActionStateHook) {\n const state = hook.memoizedState as ActionState<unknown, unknown[]>;\n state.instance.action = state.action;\n state.instance.value = state.value;\n }\n }\n\n // Bailed-out (cloned) fibers share their hook state objects with the last\n // rendered generation, so their instances already hold the published\n // values; the queue therefore only carries rendered fibers. This walk\n // proves that assumption on every dev commit.\n function assertLiveHookInstanceParity(node: F | null): void {\n visitRenderedFiberHooks(node, (owner, hook) => {\n if (isStableEventHook(hook)) {\n const instance = hook.memoizedState.instance;\n if (\n instance.handler !== hook.memoizedState.next ||\n instance.live !==\n (!hasHiddenBoundaries || !isInsideHiddenBoundary(owner))\n ) {\n throw new Error(\n \"Fig internal parity error: a stable-event hook was not \" +\n \"published by the commit index.\",\n );\n }\n }\n\n if (hook.kind === ActionStateHook) {\n const state = hook.memoizedState as ActionState<unknown, unknown[]>;\n if (\n state.instance.action !== state.action ||\n state.instance.value !== state.value\n ) {\n throw new Error(\n \"Fig internal parity error: an action-state hook was not \" +\n \"published by the commit index.\",\n );\n }\n }\n });\n }\n\n function isInsideHiddenBoundary(node: F): boolean {\n for (let parent = node.return; parent !== null; parent = parent.return) {\n if (isHiddenBoundary(parent)) return true;\n }\n\n return false;\n }\n\n function isStableEventHook(hook: Hook): hook is Hook<StableEventState> {\n return hook.kind === StableEventHook;\n }\n\n function commitExternalStores(root: R): void {\n for (const cursor of root.commitIndex) {\n if ((cursor.flags & StoreConsistencyFlag) === 0) continue;\n // Subscriptions under hidden boundaries are deferred until reveal.\n if (hasHiddenBoundaries && isInsideHiddenBoundary(cursor)) continue;\n for (let hook = cursor.memoizedState; hook !== null; hook = hook.next) {\n if (isExternalStoreHook(hook))\n commitExternalStore(root, cursor, hook.memoizedState);\n }\n }\n }\n\n function assertExternalStoreCommitParity(node: F | null): void {\n walkFiberForest(node, (cursor) => {\n if ((cursor.flags & AdoptedFlag) !== 0) return false;\n\n if ((cursor.flags & StoreConsistencyFlag) !== 0) {\n for (let hook = cursor.memoizedState; hook !== null; hook = hook.next) {\n if (!isExternalStoreHook(hook)) continue;\n const state = hook.memoizedState;\n const instance = state.instance;\n if (\n instance.committedSubscribe !== state.subscribe ||\n instance.getSnapshot !== state.getSnapshot ||\n instance.owner !== cursor ||\n !Object.is(instance.value, state.value)\n ) {\n throw new Error(\n \"Fig internal parity error: an external-store hook was not \" +\n \"committed by the commit index.\",\n );\n }\n }\n }\n\n return (\n !isHiddenBoundary(cursor) &&\n (cursor.subtreeFlags & StoreConsistencyFlag) !== 0\n );\n });\n }\n\n function commitExternalStore(\n root: R,\n owner: F,\n state: ExternalStoreState<unknown, F>,\n ): void {\n const instance = state.instance;\n\n if (instance.committedSubscribe !== state.subscribe) {\n instance.unsubscribe?.();\n instance.unsubscribe = null;\n instance.committedSubscribe = state.subscribe;\n }\n\n instance.getSnapshot = state.getSnapshot;\n instance.owner = owner;\n instance.value = state.value;\n root.externalStores.add(instance);\n instance.unsubscribe ??= state.subscribe(() => {\n scheduleExternalStoreIfChanged(\n instance.owner,\n instance,\n requestExternalStoreUpdateLane(),\n );\n });\n scheduleExternalStoreIfChanged(instance.owner, instance, SyncLane);\n }\n\n function scheduleExternalStoreIfChanged(\n owner: F | null,\n instance: ExternalStoreInstance<unknown, F>,\n lane: Lane,\n ): void {\n if (owner === null) return;\n\n const latestValue = instance.getSnapshot();\n if (!Object.is(latestValue, instance.value)) scheduleFiber(owner, lane);\n }\n\n function requestExternalStoreUpdateLane(): Lane {\n const lane = requestUpdateLane();\n return lane === DefaultLane ? SyncLane : lane;\n }\n\n function commitEffects(root: R, node: F | null, phase: EffectPhase): void {\n const mask = 1 << phase;\n if ((root.commitEffectPhases & mask) === 0) return;\n\n let executed = 0;\n const runEffects = () => {\n for (const owner of root.commitIndex) {\n const effects = owner.effects;\n if (effects === null) continue;\n // Effects under hidden boundaries stay deferred until reveal.\n if (hasHiddenBoundaries && isInsideHiddenBoundary(owner)) continue;\n for (const effect of effects) {\n if (effect.phase !== phase) continue;\n if (__DEV__) executed += 1;\n runCommitEffect(effect, phase);\n }\n }\n };\n\n if (phase === BeforePaintEffect) {\n runWithPriority(SyncLane, runEffects);\n } else {\n runEffects();\n }\n root.commitEffectPhases &= ~mask;\n\n if (__DEV__) {\n let expected = 0;\n visitEffects(node, (effect) => {\n if (effect.phase === phase) expected += 1;\n });\n if (executed !== expected) {\n throw new Error(\n \"Fig internal parity error: the commit index executed \" +\n `${executed} ${hookKindNames[phase]} effect(s) where the tree ` +\n `walk found ${expected}.`,\n );\n }\n }\n }\n\n function runCommitEffect(effect: Effect, phase: EffectPhase): void {\n const previousPhase = currentCommitEffectPhase;\n currentCommitEffectPhase = phase;\n try {\n runEffect(effect);\n } finally {\n currentCommitEffectPhase = previousPhase;\n }\n }\n\n function collectReactiveEffects(root: R, node: F | null): void {\n walkFiberForest(node, (cursor) => {\n for (const effect of cursor.effects ?? []) {\n if (effect.phase === ReactiveEffect)\n root.pendingReactiveEffects.push(effect);\n }\n\n cursor.effects = null;\n const adopted = (cursor.flags & AdoptedFlag) !== 0;\n const subtreeFlags = cursor.subtreeFlags;\n // The last flag consumer in the commit clears them (static facts\n // excepted), so committed trees stay flag-clean and adopted subtrees\n // never expose stale commit state.\n clearTransientFlags(cursor);\n if (adopted) return false;\n if (isHiddenBoundary(cursor)) {\n if (subtreeFlags !== NoFlags) clearHiddenSubtreeFlags(cursor.child);\n return false;\n }\n return (subtreeFlags & ~StaticFlagsMask) !== NoFlags;\n });\n }\n\n // Hidden subtrees keep their deferred fiber.effects for reveal, but their\n // flags must still be cleared to keep committed trees flag-clean. Reveal\n // arming depends on those effect arrays surviving every commit while\n // hidden; no walk may null them below a hidden boundary.\n function clearHiddenSubtreeFlags(node: F | null): void {\n walkFiberForest(node, (cursor) => {\n const adopted = (cursor.flags & AdoptedFlag) !== 0;\n const subtreeFlags = cursor.subtreeFlags;\n clearTransientFlags(cursor);\n return !adopted && (subtreeFlags & ~StaticFlagsMask) !== NoFlags;\n });\n }\n\n function scheduleReactiveEffects(root: R): void {\n if (\n root.pendingReactiveEffects.length === 0 ||\n root.reactiveCallback !== null\n ) {\n return;\n }\n\n root.reactiveCallback = scheduleCallback(NormalPriority, () => {\n performReactiveEffects(root);\n });\n }\n\n // The standalone reactive flush has no performRoot frame around its\n // scheduler tick, so uncaught effect errors (handleEffectError rethrows\n // when no ancestor boundary exists) are routed here exactly like\n // performRoot's catch: clear the committed UI, report to onUncaughtError,\n // and keep the error out of the scheduler tick — a throw there would\n // strand queued tasks until the next scheduleCallback. Boundary-captured\n // errors never reach the catch; they schedule the boundary instead.\n function performReactiveEffects(root: R): void {\n try {\n flushReactiveEffects(root);\n } catch (error) {\n const info = root.uncaughtErrorInfo ?? errorInfoFor(root.current, error);\n clearRootAfterUncaughtError(root);\n reportUncaughtError(root, error, info);\n\n if (root.onUncaughtError === null) {\n setTimeout(() => {\n throw error;\n });\n }\n }\n }\n\n function flushPendingReactiveEffects(root: R): void {\n root.reactiveCallback?.cancel();\n flushReactiveEffects(root);\n }\n\n function flushReactiveEffects(root: R): void {\n root.reactiveCallback = null;\n\n const effects = root.pendingReactiveEffects;\n root.pendingReactiveEffects = [];\n\n for (const effect of effects) runEffect(effect);\n }\n\n function visitEffects(\n node: F | null,\n visitor: (effect: Effect) => void,\n ): void {\n walkFiberForest(node, (cursor) => {\n for (const effect of cursor.effects ?? []) visitor(effect);\n\n return (\n (cursor.flags & AdoptedFlag) === 0 &&\n !isHiddenBoundary(cursor) &&\n (cursor.subtreeFlags & EffectFlag) !== 0\n );\n });\n }\n\n // Deliberately traverses adopted subtrees: unmount aborts and commit-time\n // external store checks must reach hooks that did not re-render.\n function visitFiberHooks(\n node: F | null,\n visitor: (owner: F, hook: Hook) => void,\n ): void {\n walkFiberForest(node, (cursor) => {\n for (let hook = cursor.memoizedState; hook !== null; hook = hook.next) {\n visitor(cursor, hook);\n }\n });\n }\n\n function visitRenderedFiberHooks(\n node: F | null,\n visitor: (owner: F, hook: Hook) => void,\n ): void {\n walkFiberForest(node, (cursor) => {\n for (let hook = cursor.memoizedState; hook !== null; hook = hook.next) {\n visitor(cursor, hook);\n }\n\n return (cursor.flags & AdoptedFlag) === 0;\n });\n }\n\n function isExternalStoreHook(\n hook: Hook,\n ): hook is Hook<ExternalStoreState<unknown, F>> {\n return hook.kind === ExternalStoreHook;\n }\n\n function runEffect(effect: Effect): void {\n let runStrict = false;\n if (__DEV__) {\n // Marked before create so renders nested inside the effect carry it\n // forward and never re-enter the strict cycle.\n runStrict = !effect.strictRan;\n effect.strictRan = true;\n }\n abortEffect(effect);\n let controller = new AbortController();\n effect.controller = controller;\n // Effects run with the ambient data store set, like render and event\n // dispatch, so preloadData/invalidateData work synchronously inside them.\n const dataStore = rootOf(effect.owner as F).dataStore;\n try {\n dataStore.run(() => effect.create(controller.signal));\n if (__DEV__ && runStrict) {\n // Strict re-run: abort and re-invoke first-time effects so work that\n // ignores its AbortSignal surfaces in development.\n abortEffect(effect);\n controller = new AbortController();\n effect.controller = controller;\n dataStore.run(() => effect.create(controller.signal));\n }\n } catch (error) {\n abortEffect(effect);\n handleEffectError(effect, error);\n }\n }\n\n function handleEffectError(effect: Effect, error: unknown): void {\n const owner = effect.owner as F;\n\n const boundary = findErrorBoundary(owner);\n if (boundary !== null) {\n captureCommittedErrorBoundary(boundary, error, owner);\n scheduleFiber(boundary, DefaultLane);\n return;\n }\n\n rootOf(owner).uncaughtErrorInfo = errorInfoFor(owner, error);\n throw error;\n }\n\n // retirePending: hide keeps the tree alive, so retired transition/action\n // runs must also release their pending slots (the decrement schedules at\n // the run's lane and downgrades to the offscreen lane like any hidden\n // update); deletions and root unmount skip the scheduling — the fiber is\n // going away, so only the abort matters.\n // Walks the node AND its siblings (a hiding boundary tears down all of\n // its content children). Deletion teardown must NOT use this: deletion\n // entries' sibling pointers reference kept fibers — it walks each deleted\n // subtree itself and calls abortFiberHooks per fiber.\n function abortFiberEffects(node: F, retirePending = false): void {\n walkFiberForest(node, (cursor) => {\n abortFiberHooks(cursor, retirePending);\n });\n }\n\n function abortFiberHooks(owner: F, retirePending: boolean): void {\n for (let hook = owner.memoizedState; hook !== null; hook = hook.next) {\n if (isEffectHook(hook.kind)) abortEffect(hook.memoizedState as Effect);\n if (isExternalStoreHook(hook))\n unsubscribeExternalStore(hook.memoizedState);\n if (isStableEventHook(hook)) {\n const instance = hook.memoizedState.instance;\n instance.controller?.abort();\n instance.controller = null;\n // Calls after unmount (or while hidden) still run the last committed\n // handler, but with a signal that is already aborted.\n instance.live = false;\n }\n if (hook.kind === TransitionHook) {\n const state = hook.memoizedState as TransitionState;\n if (retireRun(state.instance) && retirePending) {\n scheduleHookUpdate(\n owner,\n hook.queue as HookQueue<TransitionState>,\n (previous) => ({\n ...previous,\n pendingCount: Math.max(0, previous.pendingCount - 1),\n }),\n DefaultLane,\n );\n }\n }\n if (hook.kind === ActionStateHook) {\n const state = hook.memoizedState as ActionState<unknown, unknown[]>;\n if (retireRun(state.instance) && retirePending) {\n scheduleHookUpdate(\n owner,\n hook.queue as HookQueue<ActionState<unknown, unknown[]>>,\n (previous) => ({\n ...previous,\n pending: Math.max(0, previous.pending - 1),\n }),\n DefaultLane,\n );\n }\n }\n }\n }\n\n function abortEffect(effect: Effect): void {\n effect.controller?.abort();\n effect.controller = null;\n }\n\n function unsubscribeExternalStore(\n state: ExternalStoreState<unknown, F>,\n ): void {\n if (state.instance.owner !== null) {\n rootOf(state.instance.owner).externalStores.delete(state.instance);\n }\n state.instance.unsubscribe?.();\n state.instance.unsubscribe = null;\n state.instance.committedSubscribe = null;\n state.instance.owner = null;\n }\n\n function restoreConsumedPendingQueues(root: R, from = 0): void {\n for (const consumed of root.consumedPendingQueues.splice(from)) {\n restoreConsumedPendingQueue(consumed);\n }\n }\n\n function restoreConsumedPendingQueuesForRetry(root: R, from: number): void {\n for (const consumed of root.consumedPendingQueues.splice(from)) {\n clearQueueLanes(consumed.pending);\n restoreConsumedPendingQueue(consumed);\n }\n }\n\n function restoreConsumedPendingQueue({\n queue,\n pending,\n }: ConsumedPendingQueue): void {\n queue.pending =\n queue.pending === null ? pending : mergeQueues(pending, queue.pending);\n }\n}\n\nfunction observeDiscardedPromiseChildren(node: FigNode): void {\n if (Array.isArray(node)) {\n for (const child of node) observeDiscardedPromiseChildren(child);\n return;\n }\n\n if (isValidElement(node)) {\n observeDiscardedPromiseChildren(node.props.children);\n return;\n }\n\n if (isPortal(node)) {\n observeDiscardedPromiseChildren(node.children);\n return;\n }\n\n if (isThenable(node)) trackThenable(node);\n}\n\nfunction activityHidden(props: Props): boolean {\n return props.mode === \"hidden\";\n}\n\n// Dev-only (inline-gated at call sites): maps a numeric kind back to its\n// public FigDevtoolsHookKind name for readable errors.\nfunction hookKindName(kind: HookKind): string | number {\n return __DEV__ ? hookKindNames[kind] : kind;\n}\n\nfunction createHook<S>(kind: HookKind, state: S): Hook<S> {\n return {\n kind,\n memoizedState: state,\n baseState: state,\n baseQueue: null,\n queue: { pending: null, dispatch: null },\n next: null,\n };\n}\n\n// Aborts and retires the instance's live run (if any): its generation is\n// invalidated so any later settlement is inert. Returns whether a run was\n// retired, so callers release its pending slot exactly once.\nfunction retireRun(instance: RunInstance): boolean {\n const controller = instance.controller;\n if (controller === null) return false;\n instance.controller = null;\n instance.generation += 1;\n controller.abort();\n return true;\n}\n\nfunction createActionState<S, Args extends unknown[]>(\n action: ActionStateAction<S, Args>,\n value: S,\n): ActionState<S, Args> {\n return {\n action,\n error: NoActionStateError,\n instance: { action, controller: null, generation: 0, runner: null, value },\n pending: 0,\n value,\n };\n}\n\nfunction resolveInitialState<S>(initialState: S | (() => S)): S {\n return typeof initialState === \"function\"\n ? (initialState as () => S)()\n : initialState;\n}\n\nfunction sameType<Container, Instance, TextInstance>(\n fiber: Fiber<Container, Instance, TextInstance>,\n child: NormalizedChild,\n): boolean {\n if (typeof child === \"string\") {\n return fiber.tag === TextTag;\n }\n\n if (isPortal(child)) {\n return fiber.tag === PortalTag && fiber.props.target === child.target;\n }\n\n if (isValidElement(child)) {\n if (__DEV__) {\n return matchesComponentFamily(fiber.type, child.type);\n }\n\n return fiber.type === child.type;\n }\n\n return isThenable(child) && fiber.tag === ThenableTag;\n}\n\nfunction propsFor(child: NormalizedChild): Props {\n if (typeof child === \"string\") {\n return { nodeValue: child };\n }\n\n if (isPortal(child)) return portalProps(child);\n if (isValidElement(child)) return child.props;\n if (isThenable(child)) return { thenable: child };\n\n throw invalidChildError(child);\n}\n\nfunction portalProps(child: FigPortal): Props {\n return { children: child.children, target: child.target };\n}\n\nfunction validateChildKey(\n child: NormalizedChild,\n seenKeys: Set<string> | null,\n): void {\n if (seenKeys === null) return;\n\n const key = childExplicitKey(child);\n if (key === null) return;\n\n if (seenKeys.has(key)) throw duplicateKeyError(key);\n seenKeys.add(key);\n}\n\nfunction sameChildKey<Container, Instance, TextInstance>(\n fiber: Fiber<Container, Instance, TextInstance>,\n child: NormalizedChild,\n index: number,\n): boolean {\n const key = childExplicitKey(child);\n return key === null\n ? fiber.key === null && fiber.index === index\n : fiber.key !== null && String(fiber.key) === key;\n}\n\nfunction childExplicitKey(child: NormalizedChild): string | null {\n return (isValidElement(child) || isPortal(child)) && child.key !== null\n ? String(child.key)\n : null;\n}\n\nfunction duplicateKeyError(key: string | number): Error {\n return new Error(`Duplicate key \"${String(key)}\" found among siblings.`);\n}\n\nfunction isHost<Container, Instance, TextInstance>(\n fiber: Fiber<Container, Instance, TextInstance>,\n): boolean {\n return fiber.tag === HostTag || fiber.tag === TextTag;\n}\n\nfunction hostNode<Container, Instance, TextInstance>(\n fiber: Fiber<Container, Instance, TextInstance>,\n): HostNode<Instance, TextInstance> {\n return fiber.stateNode as HostNode<Instance, TextInstance>;\n}\n\nfunction areHookInputsEqual(\n nextDeps: DependencyList | null,\n previousDeps: DependencyList | null,\n): boolean {\n if (nextDeps === null || previousDeps === null) return false;\n if (nextDeps.length !== previousDeps.length) return false;\n\n for (let index = 0; index < nextDeps.length; index += 1) {\n if (!Object.is(nextDeps[index], previousDeps[index])) return false;\n }\n\n return true;\n}\n\nfunction changedContextProvider<Container, Instance, TextInstance>(\n fiber: Fiber<Container, Instance, TextInstance>,\n): boolean {\n return (\n fiber.tag === ContextProviderTag &&\n fiber.alternate !== null &&\n !Object.is(fiber.props.value, fiber.alternate.memoizedProps?.value)\n );\n}\n\n// Retries of a committed fallback render at retry-lane priority rather than\n// the lane of the update that originally suspended. A boundary that suspends\n// again while retrying keeps its existing retry lane so successive retries of\n// one boundary stay grouped instead of claiming a new lane per ping.\nfunction suspenseRetryLane(lanes: Lanes): Lane {\n const retryLanes = lanes & RetryLanes;\n return retryLanes === NoLanes\n ? claimNextRetryLane()\n : getHighestPriorityLane(retryLanes);\n}\n"],"mappings":"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"}
|