@tanstack/redact 0.0.20 → 0.1.0

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.
Files changed (253) hide show
  1. package/dist/core/attributes.js +2 -1
  2. package/dist/core/attributes.js.map +2 -2
  3. package/dist/core/browser.d.ts +9 -0
  4. package/dist/core/browser.js +35 -0
  5. package/dist/core/browser.js.map +7 -0
  6. package/dist/core/index.d.ts +2 -2
  7. package/dist/core/index.js +3 -3
  8. package/dist/core/internal.d.ts +31 -8
  9. package/dist/core/internal.js +3 -1
  10. package/dist/core/internal.js.map +2 -2
  11. package/dist/core/resource-hints.d.ts +7 -0
  12. package/dist/core/resource-hints.js +19 -0
  13. package/dist/core/resource-hints.js.map +7 -0
  14. package/dist/core/types.js +1 -1
  15. package/dist/dom/_all.d.ts +11 -16
  16. package/dist/dom/_all.js +9 -20
  17. package/dist/dom/_all.js.map +2 -2
  18. package/dist/dom/client.d.ts +4 -4
  19. package/dist/dom/client.js +4 -4
  20. package/dist/dom/commit.d.ts +23 -0
  21. package/dist/dom/commit.js +191 -0
  22. package/dist/dom/commit.js.map +7 -0
  23. package/dist/dom/dispatcher.d.ts +4 -22
  24. package/dist/dom/dispatcher.js +184 -126
  25. package/dist/dom/dispatcher.js.map +3 -3
  26. package/dist/dom/dom.d.ts +2 -0
  27. package/dist/dom/dom.js +72 -52
  28. package/dist/dom/dom.js.map +2 -2
  29. package/dist/dom/error-info.d.ts +2 -0
  30. package/dist/dom/error-info.js +16 -0
  31. package/dist/dom/error-info.js.map +7 -0
  32. package/dist/dom/event-replay.js +1 -1
  33. package/dist/dom/features/activity/full.d.ts +1 -0
  34. package/dist/dom/features/activity/full.js +162 -0
  35. package/dist/dom/features/activity/full.js.map +7 -0
  36. package/dist/dom/features/activity/index.d.ts +1 -0
  37. package/dist/dom/features/activity/index.js +3 -0
  38. package/dist/dom/features/activity/index.js.map +7 -0
  39. package/dist/dom/features/activity/stub.d.ts +1 -0
  40. package/dist/dom/features/activity/stub.js +12 -0
  41. package/dist/dom/features/activity/stub.js.map +7 -0
  42. package/dist/dom/features/class/full.js +87 -21
  43. package/dist/dom/features/class/full.js.map +2 -2
  44. package/dist/dom/features/class/index.d.ts +1 -1
  45. package/dist/dom/features/class/index.js +2 -2
  46. package/dist/dom/features/class/stub.js +3 -3
  47. package/dist/dom/features/context/full.d.ts +4 -1
  48. package/dist/dom/features/context/full.js +69 -9
  49. package/dist/dom/features/context/full.js.map +2 -2
  50. package/dist/dom/features/context/index.d.ts +1 -1
  51. package/dist/dom/features/context/index.js +2 -2
  52. package/dist/dom/features/context/stub.d.ts +4 -1
  53. package/dist/dom/features/context/stub.js +15 -4
  54. package/dist/dom/features/context/stub.js.map +2 -2
  55. package/dist/dom/features/forward-ref/full.js +12 -21
  56. package/dist/dom/features/forward-ref/full.js.map +2 -2
  57. package/dist/dom/features/forward-ref/index.d.ts +1 -1
  58. package/dist/dom/features/forward-ref/index.js +2 -2
  59. package/dist/dom/features/forward-ref/stub.js +4 -4
  60. package/dist/dom/features/fragment-refs/index.d.ts +1 -0
  61. package/dist/dom/features/fragment-refs/index.js +8 -0
  62. package/dist/dom/features/fragment-refs/index.js.map +7 -0
  63. package/dist/dom/features/fragment-refs/stub.d.ts +3 -0
  64. package/dist/dom/features/fragment-refs/stub.js +14 -0
  65. package/dist/dom/features/fragment-refs/stub.js.map +7 -0
  66. package/dist/dom/features/hydration/full.d.ts +11 -6
  67. package/dist/dom/features/hydration/full.js +76 -76
  68. package/dist/dom/features/hydration/full.js.map +2 -2
  69. package/dist/dom/features/hydration/index.d.ts +1 -1
  70. package/dist/dom/features/hydration/index.js +2 -2
  71. package/dist/dom/features/hydration/stub.d.ts +7 -2
  72. package/dist/dom/features/hydration/stub.js +1 -1
  73. package/dist/dom/features/hydration/stub.js.map +1 -1
  74. package/dist/dom/features/index.d.ts +8 -7
  75. package/dist/dom/features/index.js +9 -8
  76. package/dist/dom/features/index.js.map +2 -2
  77. package/dist/dom/features/lazy/full.js +4 -4
  78. package/dist/dom/features/lazy/index.d.ts +1 -1
  79. package/dist/dom/features/lazy/index.js +2 -2
  80. package/dist/dom/features/lazy/stub.js +4 -4
  81. package/dist/dom/features/memo/full.js +8 -6
  82. package/dist/dom/features/memo/full.js.map +2 -2
  83. package/dist/dom/features/memo/index.d.ts +1 -1
  84. package/dist/dom/features/memo/index.js +2 -2
  85. package/dist/dom/features/memo/stub.js +4 -4
  86. package/dist/dom/features/portal/full.js +4 -4
  87. package/dist/dom/features/portal/index.d.ts +1 -1
  88. package/dist/dom/features/portal/index.js +2 -2
  89. package/dist/dom/features/portal/stub.js +4 -4
  90. package/dist/dom/features/suspense/full.js +192 -47
  91. package/dist/dom/features/suspense/full.js.map +2 -2
  92. package/dist/dom/features/suspense/index.d.ts +1 -1
  93. package/dist/dom/features/suspense/index.js +2 -2
  94. package/dist/dom/features/suspense/stub.js +4 -4
  95. package/dist/dom/features/view-transition/full.d.ts +6 -0
  96. package/dist/dom/features/view-transition/full.js +280 -0
  97. package/dist/dom/features/view-transition/full.js.map +7 -0
  98. package/dist/dom/features/view-transition/index.d.ts +1 -0
  99. package/dist/dom/features/view-transition/index.js +3 -0
  100. package/dist/dom/features/view-transition/index.js.map +7 -0
  101. package/dist/dom/features/view-transition/resources.d.ts +11 -0
  102. package/dist/dom/features/view-transition/resources.js +108 -0
  103. package/dist/dom/features/view-transition/resources.js.map +7 -0
  104. package/dist/dom/features/view-transition/stub.d.ts +6 -0
  105. package/dist/dom/features/view-transition/stub.js +22 -0
  106. package/dist/dom/features/view-transition/stub.js.map +7 -0
  107. package/dist/dom/features/view-transition/visual.d.ts +14 -0
  108. package/dist/dom/features/view-transition/visual.js +356 -0
  109. package/dist/dom/features/view-transition/visual.js.map +7 -0
  110. package/dist/dom/fragment-instance.d.ts +40 -0
  111. package/dist/dom/fragment-instance.js +324 -0
  112. package/dist/dom/fragment-instance.js.map +7 -0
  113. package/dist/dom/index.d.ts +11 -11
  114. package/dist/dom/index.js +11 -18
  115. package/dist/dom/index.js.map +3 -3
  116. package/dist/dom/portal.d.ts +2 -2
  117. package/dist/dom/portal.js +2 -2
  118. package/dist/dom/portal.js.map +1 -1
  119. package/dist/dom/reconcile.d.ts +32 -3
  120. package/dist/dom/reconcile.js +686 -222
  121. package/dist/dom/reconcile.js.map +2 -2
  122. package/dist/dom/resource-hints.d.ts +6 -0
  123. package/dist/dom/resource-hints.js +115 -0
  124. package/dist/dom/resource-hints.js.map +7 -0
  125. package/dist/dom/resource-store.d.ts +13 -0
  126. package/dist/dom/resource-store.js +43 -0
  127. package/dist/dom/resource-store.js.map +7 -0
  128. package/dist/dom/resources.d.ts +1 -0
  129. package/dist/dom/resources.js +44 -0
  130. package/dist/dom/resources.js.map +7 -0
  131. package/dist/dom/retained-effects.d.ts +6 -0
  132. package/dist/dom/retained-effects.js +49 -0
  133. package/dist/dom/retained-effects.js.map +7 -0
  134. package/dist/dom/root-internal.d.ts +4 -4
  135. package/dist/dom/root-internal.js +2 -2
  136. package/dist/dom/root-internal.js.map +2 -2
  137. package/dist/dom/root.d.ts +5 -5
  138. package/dist/dom/root.js +11 -11
  139. package/dist/dom/root.js.map +2 -2
  140. package/dist/dom/test-utils.js +1 -1
  141. package/dist/react/activity.d.ts +7 -0
  142. package/dist/react/activity.js +8 -0
  143. package/dist/react/activity.js.map +7 -0
  144. package/dist/react/children.d.ts +1 -1
  145. package/dist/react/children.js +3 -3
  146. package/dist/react/children.js.map +1 -1
  147. package/dist/react/class.d.ts +1 -1
  148. package/dist/react/class.js +3 -3
  149. package/dist/react/class.js.map +1 -1
  150. package/dist/react/compiler-runtime.js +2 -2
  151. package/dist/react/context.d.ts +1 -1
  152. package/dist/react/context.js +3 -3
  153. package/dist/react/context.js.map +1 -1
  154. package/dist/react/element.d.ts +6 -3
  155. package/dist/react/element.js +2 -2
  156. package/dist/react/element.js.map +2 -2
  157. package/dist/react/hooks.d.ts +26 -7
  158. package/dist/react/hooks.js +13 -3
  159. package/dist/react/hooks.js.map +2 -2
  160. package/dist/react/index.d.ts +39 -24
  161. package/dist/react/index.js +39 -19
  162. package/dist/react/index.js.map +3 -3
  163. package/dist/react/jsx-runtime.d.ts +2 -2
  164. package/dist/react/jsx-runtime.js +3 -3
  165. package/dist/react/memo.d.ts +1 -1
  166. package/dist/react/memo.js +1 -1
  167. package/dist/react/portal.js +1 -1
  168. package/dist/react/shared-internals.d.ts +15 -5
  169. package/dist/react/shared-internals.js +2 -3
  170. package/dist/react/shared-internals.js.map +2 -2
  171. package/dist/react/suspense.js +1 -1
  172. package/dist/react/view-transition.d.ts +32 -0
  173. package/dist/react/view-transition.js +13 -0
  174. package/dist/react/view-transition.js.map +7 -0
  175. package/dist/scheduler/index.js +1 -1
  176. package/dist/server/bootstrap-script.d.ts +1 -23
  177. package/dist/server/bootstrap-script.js +7 -6
  178. package/dist/server/bootstrap-script.js.map +2 -2
  179. package/dist/server/dispatcher.d.ts +28 -6
  180. package/dist/server/dispatcher.js +33 -15
  181. package/dist/server/dispatcher.js.map +2 -2
  182. package/dist/server/escape.js +16 -15
  183. package/dist/server/escape.js.map +2 -2
  184. package/dist/server/index.d.ts +6 -6
  185. package/dist/server/index.js +7 -7
  186. package/dist/server/renderToString.d.ts +1 -1
  187. package/dist/server/renderToString.js +12 -8
  188. package/dist/server/renderToString.js.map +2 -2
  189. package/dist/server/resource-hints.d.ts +22 -0
  190. package/dist/server/resource-hints.js +148 -0
  191. package/dist/server/resource-hints.js.map +7 -0
  192. package/dist/server/stream.d.ts +15 -2
  193. package/dist/server/stream.js +155 -63
  194. package/dist/server/stream.js.map +2 -2
  195. package/dist/server/walk.d.ts +15 -2
  196. package/dist/server/walk.js +143 -96
  197. package/dist/server/walk.js.map +2 -2
  198. package/dist/vite/index.d.ts +6 -0
  199. package/dist/vite/index.js +22 -6
  200. package/dist/vite/index.js.map +2 -2
  201. package/package.json +1 -1
  202. package/src/core/attributes.ts +1 -0
  203. package/src/core/browser.ts +33 -0
  204. package/src/core/internal.ts +24 -6
  205. package/src/core/resource-hints.ts +36 -0
  206. package/src/dom/_all.ts +1 -7
  207. package/src/dom/commit.ts +186 -0
  208. package/src/dom/dispatcher.ts +190 -134
  209. package/src/dom/dom.ts +70 -54
  210. package/src/dom/error-info.ts +15 -0
  211. package/src/dom/features/activity/full.ts +166 -0
  212. package/src/dom/features/activity/index.ts +1 -0
  213. package/src/dom/features/activity/stub.ts +14 -0
  214. package/src/dom/features/class/full.ts +72 -21
  215. package/src/dom/features/context/full.ts +66 -4
  216. package/src/dom/features/context/stub.ts +6 -0
  217. package/src/dom/features/forward-ref/full.ts +9 -19
  218. package/src/dom/features/fragment-refs/index.ts +1 -0
  219. package/src/dom/features/fragment-refs/stub.ts +3 -0
  220. package/src/dom/features/hydration/full.ts +84 -82
  221. package/src/dom/features/hydration/stub.ts +1 -1
  222. package/src/dom/features/index.ts +1 -0
  223. package/src/dom/features/memo/full.ts +4 -3
  224. package/src/dom/features/suspense/full.ts +187 -50
  225. package/src/dom/features/view-transition/full.ts +288 -0
  226. package/src/dom/features/view-transition/index.ts +1 -0
  227. package/src/dom/features/view-transition/resources.ts +107 -0
  228. package/src/dom/features/view-transition/stub.ts +7 -0
  229. package/src/dom/features/view-transition/visual.ts +406 -0
  230. package/src/dom/fragment-instance.ts +337 -0
  231. package/src/dom/index.ts +6 -7
  232. package/src/dom/portal.ts +1 -1
  233. package/src/dom/reconcile.ts +691 -244
  234. package/src/dom/resource-hints.ts +115 -0
  235. package/src/dom/resource-store.ts +52 -0
  236. package/src/dom/resources.ts +39 -0
  237. package/src/dom/retained-effects.ts +38 -0
  238. package/src/dom/root-internal.ts +4 -4
  239. package/src/dom/root.ts +12 -14
  240. package/src/react/activity.ts +10 -0
  241. package/src/react/element.ts +6 -2
  242. package/src/react/hooks.ts +12 -3
  243. package/src/react/index.ts +18 -0
  244. package/src/react/shared-internals.ts +3 -3
  245. package/src/react/view-transition.ts +41 -0
  246. package/src/server/bootstrap-script.ts +36 -5
  247. package/src/server/dispatcher.ts +35 -13
  248. package/src/server/escape.ts +15 -12
  249. package/src/server/renderToString.ts +7 -5
  250. package/src/server/resource-hints.ts +165 -0
  251. package/src/server/stream.ts +154 -62
  252. package/src/server/walk.ts +72 -11
  253. package/src/vite/index.ts +30 -13
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/dom/reconcile.ts"],
4
- "sourcesContent": ["import {\n FiberTag,\n createFiber,\n REACT_ELEMENT_TYPE,\n REACT_LEGACY_ELEMENT_TYPE,\n REACT_FRAGMENT_TYPE,\n type Fiber,\n type FiberRoot,\n type ReactElement,\n type ReactNode,\n type Hook,\n type Effect,\n} from '../core'\nimport {\n ReactSharedInternals,\n REACT_LAZY_TYPE,\n REACT_STRICT_MODE_TYPE,\n REACT_PROFILER_TYPE,\n} from '../react'\nimport { createHostNode, setProp } from './dom'\nimport { makeDispatcher } from './dispatcher'\nimport {\n adoptHostDom,\n adoptTextDom,\n setHydrationCursor,\n getHydrationCursor,\n clearHydrationCursor,\n findHostParent as findHydrationHost,\n abortHydration,\n recoverHydration,\n} from './features/hydration'\n\n// ---------------------------------------------------------------------------\n// Render scheduling\n// ---------------------------------------------------------------------------\n\nlet currentRoot: FiberRoot | null = null\nlet flushing = false\nlet isBatching = false\nconst pendingRoots = new Set<FiberRoot>()\n\n// Set by rerenderFiber to identify the exact memo-tagged fiber whose INTERNAL\n// state (hook update, useSyncExternalStore notification) triggered this render\n// pass. renderMemo checks this to bypass its prop-equality gate for that fiber.\n// Without the bypass, a memo bail would swallow state changes: React's memo is\n// only a parent-triggered gate \u2014 state-driven rerenders must always run the\n// inner function. Router-adjacent components (Outlet, Match, MatchInner) are\n// all memo-wrapped and subscribe to stores; missing this bypass breaks nav\n// content updates even though the URL changes.\nlet forceRerenderingFiber: Fiber | null = null\n\nexport function scheduleUpdate(fiber: Fiber): void {\n // Drop updates scheduled on already-um fibers. Subscribers (router,\n // query, any external store) can fire after unmount if their cleanup was\n // missed, and letting those reach rerenderFiber mounts zombie DOM into the\n // old .parent's DOM (which stays reachable via the stale pointer).\n if (fiber.um) return\n const root = findRoot(fiber)\n if (!root) return\n root.p.add(fiber)\n fiber.dy = true\n pendingRoots.add(root)\n if (isBatching) return\n if (!root.s) {\n root.s = true\n queueMicrotask(flushPending)\n }\n}\n\nexport function flushSyncWork(fn: () => void): void {\n const wasBatching = isBatching\n isBatching = true\n try {\n fn()\n } finally {\n isBatching = wasBatching\n }\n flushPending()\n}\n\nexport function batchedUpdates<T>(fn: () => T): T {\n const wasBatching = isBatching\n isBatching = true\n try {\n return fn()\n } finally {\n isBatching = wasBatching\n if (!wasBatching) flushPending()\n }\n}\n\nfunction flushPending(): void {\n if (flushing) return\n flushing = true\n try {\n let guard = 0\n while (pendingRoots.size > 0) {\n if (++guard > 50) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('flushPending exceeded 50 iterations \u2014 suspected infinite update loop.')\n }\n throw new Error()\n }\n const roots = [...pendingRoots]\n pendingRoots.clear()\n for (const root of roots) {\n root.s = false\n // Render each pending fiber from shallowest first so an ancestor's\n // cascade reaches descendants before we try to render them directly.\n // Descendants rendered via cascade still have `dy=true` (only\n // rerenderFiber clears it); when we later reach them in this loop,\n // rerenderFiber's own `if (!dy) return` is our short-circuit. We\n // previously filtered descendants of dy ancestors here, but that\n // loses updates whenever an ancestor's render doesn't actually reach\n // the descendant \u2014 e.g. React.memo bailing on equal props. Keep all\n // dy fibers and let rerenderFiber de-dupe via its dy check.\n const pending = [...root.p]\n root.p.clear()\n pending.sort((a, b) => fiberDepth(a) - fiberDepth(b))\n for (const fiber of pending) {\n try {\n rerenderFiber(fiber, root)\n } catch (error) {\n if (!recoverHydration(root, error)) throw error\n break\n }\n }\n runEffects(root)\n }\n }\n } finally {\n flushing = false\n }\n}\n\nexport function discardPendingWork(root: FiberRoot): void {\n root.p.clear()\n root.s = false\n pendingRoots.delete(root)\n}\n\nfunction fiberDepth(fiber: Fiber): number {\n let d = 0\n let p: Fiber | null = fiber.parent\n while (p) {\n d++\n p = p.parent\n }\n return d\n}\n\nexport function findRoot(fiber: Fiber): FiberRoot | null {\n let f: Fiber | null = fiber\n while (f) {\n if (f.root) return f.root\n f = f.parent\n }\n return null\n}\n\n// ---------------------------------------------------------------------------\n// Entry points (called by createRoot)\n// ---------------------------------------------------------------------------\n\nexport function renderRoot(root: FiberRoot, children: ReactNode): void {\n const rootFiber = root.r\n rootFiber.pp = { children }\n currentRoot = root\n try {\n reconcileChildren(rootFiber, childrenToArray(children), root.c as Node, null)\n rootFiber.mp = rootFiber.pp\n rootFiber.dy = false\n } finally {\n currentRoot = null\n }\n runEffects(root)\n}\n\nfunction rerenderFiber(fiber: Fiber, root: FiberRoot): void {\n if (!fiber.dy) return\n // Skip fibers that were um between scheduling and flush. Without this,\n // the flush loop re-enters a zombie fiber whose .parent is still set; its\n // render mounts fresh DOM into the old parent's still-attached DOM (since\n // unmountFiber only clears fiber.child, not fiber.parent). Visible as route\n // content from a previous location staying on screen after nav, because a\n // pending rerender on the old route's LibraryLandingPage (um during\n // Outlet's shallow-first render) still fires from root.pending.\n if (fiber.um) return\n // Clear BEFORE rendering so a scheduleUpdate() triggered mid-render (e.g.\n // error boundary catching a descendant throw) marks us dy for the next\n // flush iteration instead of being wiped out when render() completes.\n fiber.dy = false\n currentRoot = root\n // If this rerender is resuming a hydration that was deferred by a suspension,\n // re-activate hydration mode for its duration so descendants adopt DOM\n // instead of re-creating it.\n const resumeHydration =\n fiber.ms && (fiber.ms as any).p === true\n const prevHydrating = root.h\n if (resumeHydration) {\n delete (fiber.ms as any).p\n root.h = true\n }\n const prevForcing = forceRerenderingFiber\n forceRerenderingFiber = fiber\n try {\n renderFiber(fiber, getHostParent(fiber), getAnchor(fiber))\n } finally {\n forceRerenderingFiber = prevForcing\n if (resumeHydration) {\n root.h = prevHydrating\n // Deferred hydration completed \u2014 detach the preserved cursor so future\n // updates (post-hydration state changes) don't try to adopt stale DOM.\n clearHydrationCursor(fiber)\n }\n currentRoot = null\n }\n}\n\n// ---------------------------------------------------------------------------\n// Element \u2192 children normalization\n// ---------------------------------------------------------------------------\n\n// Text children pass through as raw strings \u2014 no wrapper. The previous\n// `{_text: string}` shape allocated tens of thousands of objects per\n// stable-list re-render and dominated minor-GC pressure. `typeof === 'string'`\n// is also robust to RSC renderable proxies (which have `has` traps that\n// would fool a `'_text' in child` predicate but can't fool `typeof`).\ntype NormalizedChild = ReactElement | string | null\n\nfunction isTextChild(child: Exclude<NormalizedChild, null>): child is string {\n return typeof child === 'string'\n}\n\nexport function childrenToArray(children: ReactNode): NormalizedChild[] {\n const out: NormalizedChild[] = []\n pushChildren(children, out)\n return out\n}\n\nfunction pushChildren(node: ReactNode, out: NormalizedChild[]): void {\n if (node == null || typeof node === 'boolean') return\n if (typeof node === 'string') {\n // Empty strings render no text node (matches React + the `<!-- -->`\n // separator elision on the SSR side so server/client agree).\n if (node === '') return\n out.push(node)\n return\n }\n if (typeof node === 'number') {\n out.push('' + node)\n return\n }\n if (Array.isArray(node)) {\n for (let i = 0; i < node.length; i++) pushChildren(node[i], out)\n return\n }\n if (isIterable(node)) {\n for (const item of node as Iterable<ReactNode>) pushChildren(item, out)\n return\n }\n if (typeof node === 'object') {\n const t = (node as any).$$typeof\n if (ACCEPTED_ELEMENT_MARKERS.has(t)) {\n out.push(node as ReactElement)\n return\n }\n // Raw React.lazy as a child. RSC Flight encodes 'use client' components\n // (CodeBlock, CodeExplorer, etc.) as bare Lazy objects in the tree, not\n // wrapped in REACT_ELEMENT_TYPE. Dropping them made code snippets\n // disappear from docs pages. The RSC decoder pre-awaits payloads via\n // `awaitLazyElements`, so by render time the status is 'fulfilled' and\n // `_init()` returns the resolved element synchronously.\n if (t === REACT_LAZY_TYPE) {\n const lazy = node as any\n const resolved = lazy._init(lazy._payload)\n pushChildren(resolved, out)\n return\n }\n }\n}\n\nfunction isIterable(obj: any): boolean {\n return obj != null && typeof obj[Symbol.iterator] == 'function'\n}\n\nfunction getKeyOf(child: NormalizedChild, index: number): string {\n if (!child) return 'n' + index\n if (isTextChild(child)) return '$t' + index\n if (child.key != null) return 'k' + child.key\n return 'i' + index\n}\n\nfunction sameType(fiber: Fiber, child: NormalizedChild): boolean {\n if (!child) return false\n if (isTextChild(child)) return fiber.tag === FiberTag.Text\n return fiber.type === child.type && sameKey(fiber.key, child.key)\n}\n\nfunction sameKey(a: string | null, b: string | null | undefined): boolean {\n return (a ?? null) === (b ?? null)\n}\n\n// ---------------------------------------------------------------------------\n// Fiber creation\n// ---------------------------------------------------------------------------\n\nfunction fiberFromChild(child: NormalizedChild, parent: Fiber): Fiber {\n if (!child) return createFiber(FiberTag.Fragment, null, null)\n if (isTextChild(child)) {\n const f = createFiber(FiberTag.Text, null, null)\n f.pp = child\n f.parent = parent\n return f\n }\n const type = child.type\n let tag: FiberTag = FiberTag.Host\n const marker = type && (type as any).$$typeof\n if (typeof type === 'string') tag = FiberTag.Host\n else if (type === REACT_FRAGMENT_TYPE) tag = FiberTag.Fragment\n else if (type === REACT_STRICT_MODE_TYPE || type === REACT_PROFILER_TYPE) tag = FiberTag.Fragment\n else {\n // Feature-registered type matchers (Portal, future extractions). Features\n // that carry the symbol as element.type directly (rather than wrapping in\n // REACT_ELEMENT_TYPE) match here by type identity.\n let matched: FiberTag | null = null\n for (const m of TYPE_MATCHERS) {\n matched = m(type, marker)\n if (matched !== null) break\n }\n if (matched !== null) tag = matched\n else if (typeof type == 'function') {\n tag = type.prototype && type.prototype.isReactComponent ? FiberTag.Class : FiberTag.Function\n }\n }\n const f = createFiber(tag, type, child.key ?? null)\n f.ref = (child as any).ref ?? null\n f.pp = child.props\n f.parent = parent\n return f\n}\n\n// ---------------------------------------------------------------------------\n// Reconciliation\n// ---------------------------------------------------------------------------\n\n/**\n * Reconcile a parent fiber's child list against new normalized children.\n * Mutates parent.child and the sibling chain.\n * Mounts new host DOM into `domParent` before `anchor` (or appends if anchor === null).\n */\nexport function reconcileChildren(\n parent: Fiber,\n newChildren: NormalizedChild[],\n domParent: Node,\n anchor: Node | null,\n): void {\n // Fast path: unkeyed positional steady-state. Walk the existing sibling\n // chain and newChildren in lockstep, validating AND committing in one pass.\n // On any divergence we fall back to the slow path, which rebuilds the\n // sibling chain anyway \u2014 partial pp writes are idempotent.\n // Skips the Map / Set / existing-array allocation entirely.\n if (!currentRoot?.h) {\n let f: Fiber | null = parent.child\n let ok = true\n for (let i = 0; i < newChildren.length; i++) {\n const child = newChildren[i]\n if (child == null || !f || f.key != null) { ok = false; break }\n if (typeof child === 'string') {\n if (f.tag !== FiberTag.Text) { ok = false; break }\n f.pp = child\n } else {\n if ((child as ReactElement).key != null) { ok = false; break }\n if (f.type !== (child as ReactElement).type) { ok = false; break }\n f.pp = (child as ReactElement).props\n f.ref = (child as any).ref ?? null\n }\n f = f.sibling\n }\n if (ok && f === null) {\n // Pass 2: render forward with per-child anchors. Identical to the slow\n // path's pass 2.\n for (let r: Fiber | null = parent.child; r; r = r.sibling) {\n let a = anchor\n for (let s: Fiber | null = r.sibling; s; s = s.sibling) {\n const d = firstDomNode(s)\n if (d && d.parentNode === domParent) { a = d; break }\n }\n renderFiber(r, domParent, a)\n }\n return\n }\n }\n\n const existing = collectChildren(parent)\n const keyed = new Map<string, Fiber>()\n for (const f of existing) {\n if (f.key != null) keyed.set('k' + f.key, f)\n }\n\n let prevNewFiber: Fiber | null = null\n const claimed = new Set<Fiber>()\n let structurallyChanged = false\n // Budget-guided positional matching. We walk `existing` (unkeyed only) with a\n // single cursor `existingIdx` and, on a type mismatch, choose insert vs delete\n // based on the remaining length delta (`budget`):\n // budget > 0: more new than old remain \u2192 treat slot as an INSERTION: keep\n // the old cursor and create a fresh fiber for new[i].\n // budget < 0: more old than new remain \u2192 treat slot as a DELETION: advance\n // the old cursor past the mismatched fiber (it'll be um\n // in the unclaimed pass) and retry.\n // budget == 0: equal remaining \u2192 treat as REPLACE by preferring delete\n // until budget flips positive or we hit a match.\n // This avoids greedy forward scans that steal a later same-type fiber for a\n // newly inserted leading sibling (e.g. smallMenu flipping null \u2192 <div>\n // stealing the content <div>'s fiber and tearing down the drawer fragment).\n let existingIdx = 0\n let unkeyedOld = 0\n for (const f of existing) if (f.key == null) unkeyedOld++\n let unkeyedNew = 0\n for (const c of newChildren) if (c != null) unkeyedNew++\n let budget = unkeyedNew - unkeyedOld\n\n // Pass 1 (this loop): match against existing fibers and build the sibling\n // chain. Pass 2 (after the loop) renders each fiber with the correct\n // per-child anchor \u2014 the firstDomNode of its next still-mounted sibling,\n // or the parent's own anchor for the rightmost. Without per-child anchors\n // a child whose render output type changes from no-DOM (Portal, null) to\n // an in-flow host gets appended to the end of domParent (every child\n // would otherwise share the parent's anchor) and never moves before its\n // later siblings. Hit by the t3code Sidebar swap from a portal-rendering\n // <Sheet> to a <div data-slot=sidebar> when isMobile flips during a\n // Provider re-render.\n for (let i = 0; i < newChildren.length; i++) {\n const child = newChildren[i]\n if (child == null) continue\n\n let match: Fiber | null = null\n\n // key-based match\n if (child && typeof child === 'object' && !isTextChild(child) && (child as ReactElement).key != null) {\n const k = 'k' + (child as ReactElement).key\n const m = keyed.get(k)\n if (m && m.type === (child as ReactElement).type) {\n match = m\n keyed.delete(k)\n }\n }\n\n if (!match) {\n while (existingIdx < existing.length) {\n const cand = existing[existingIdx]!\n if (claimed.has(cand) || cand.key != null) {\n existingIdx++\n continue\n }\n if (sameType(cand, child)) {\n match = cand\n existingIdx++\n break\n }\n // Type mismatch at the cursor. Resolve via budget.\n if (budget > 0) {\n // Insertion: leave cand in place, create new for child.\n break\n }\n // Deletion (or replace-as-delete-first): advance past cand. It remains\n // unclaimed and will be um at the end.\n existingIdx++\n budget++\n }\n }\n\n // Detect reorder: matched fiber is not at its original position\n if (match && existing[i] !== match) structurallyChanged = true\n\n let fiber: Fiber\n if (match) {\n claimed.add(match)\n fiber = match\n if (isTextChild(child!)) {\n fiber.pp = child\n } else {\n fiber.type = (child as ReactElement).type\n fiber.pp = (child as ReactElement).props\n fiber.ref = (child as any).ref ?? null\n }\n } else {\n fiber = fiberFromChild(child, parent)\n structurallyChanged = true\n if (budget > 0) budget--\n }\n\n fiber.parent = parent\n fiber.sibling = null\n if (prevNewFiber) prevNewFiber.sibling = fiber\n else parent.child = fiber\n prevNewFiber = fiber\n }\n\n // Pass 2: walk the sibling chain we just built and render each fiber\n // forward with the correct per-child anchor. During hydration the cursor\n // walks DOM forward and each renderFiber adopts the next existing node,\n // so per-child anchors are moot \u2014 fall back to the parent's anchor.\n const hydrating = !!currentRoot?.h\n for (let f: Fiber | null = parent.child; f; f = f.sibling) {\n let a = anchor\n if (!hydrating) {\n // Find the firstDomNode of the next still-mounted sibling, if any.\n for (let s: Fiber | null = f.sibling; s; s = s.sibling) {\n const d = firstDomNode(s)\n if (d && d.parentNode === domParent) { a = d; break }\n }\n }\n renderFiber(f, domParent, a)\n }\n\n if (!prevNewFiber) parent.child = null\n else prevNewFiber.sibling = null\n\n // Head content is additive \u2014 server may inject metadata/stylesheets (Vite\n // dev styles, Sentry, analytics) that aren't in the React tree. Unmounting\n // them on every reconcile thrashes styles and causes flash of unstyled\n // content. Keep existing head children that weren't matched this pass.\n const parentIsHeadHost =\n parent.tag === FiberTag.Host &&\n typeof parent.type === 'string' &&\n (parent.type as string).toLowerCase() === 'head'\n\n if (!parentIsHeadHost) {\n // Unmount unclaimed\n for (const f of existing) {\n if (!claimed.has(f)) {\n unmountFiber(f, domParent)\n structurallyChanged = true\n }\n }\n // Leftover keyed\n for (const f of keyed.values()) {\n if (!claimed.has(f)) {\n unmountFiber(f, domParent)\n structurallyChanged = true\n }\n }\n }\n\n // During hydration, DOM is already in document order from the cursor-driven\n // adoption walk. Running placeChildrenInOrder here would reappend nodes to\n // the end of domParent when the true anchor (often an end marker comment)\n // isn't reflected in `anchor`. Skip it in hydration mode.\n //\n // For <head>, skip always \u2014 HeadContent re-renders routinely (route match\n // changes, providers updating), and reordering every <link>/<style>/<meta>\n // on each re-render causes stylesheet flash and re-download. Head element\n // ordering is semantically fluid; the browser doesn't care about exact\n // order within <head>.\n const parentIsHead = (domParent as Element).nodeName === 'HEAD'\n if (structurallyChanged && !currentRoot?.h && !parentIsHead) {\n placeChildrenInOrder(parent, domParent, anchor)\n }\n}\n\nfunction placeChildrenInOrder(parent: Fiber, domParent: Node, anchor: Node | null): void {\n const doms: Node[] = []\n let c = parent.child\n while (c) {\n collectHostDoms(c, doms)\n c = c.sibling\n }\n\n // Pre-check: if our fiber-owned DOM is already in document order within\n // domParent AND the trailing anchor matches, no reorder is needed. This is\n // the common case on stable re-renders, and avoids detaching/re-attaching\n // subtrees (which cancels CSS animations and triggers layout).\n if (doms.length > 0) {\n let current: Node | null = doms[0]!\n let inOrder = current.parentNode === domParent\n for (let i = 1; inOrder && i < doms.length; i++) {\n current = current!.nextSibling\n // Skip foreign nodes (SSR-injected scripts, dev-styles) between owned\n // fiber DOMs \u2014 they should stay where they are.\n while (current && !doms.includes(current as Node)) {\n current = current.nextSibling\n }\n if (current !== doms[i]) inOrder = false\n }\n // Also verify the LAST dom's next sibling lines up with `anchor`. A\n // single-dom collection (or correctly-internally-ordered doms) can sit\n // at the WRONG absolute position in domParent and still pass the\n // relative-order check above. This happens when a fiber's render output\n // changes from no-DOM (e.g. a Portal-using <Sheet>, or null) to an\n // in-flow host element: the new host is appended to the end of\n // domParent (because the parent reconcileChildren loop hands every\n // child the same anchor \u2014 typically null), and without this trailing\n // check it would never get moved before its later siblings.\n if (inOrder) {\n let last: Node | null = doms[doms.length - 1]!.nextSibling\n while (last && !doms.includes(last as Node) && last !== anchor) {\n last = last.nextSibling\n }\n if (last !== anchor) inOrder = false\n }\n if (inOrder) return\n }\n\n // Reverse-iterate, anchoring each node before the one that should follow it.\n // This works because by the time we're placing doms[i], doms[i+1] is already\n // in its final slot. Forward iteration is buggy: insertBefore(doms[i],\n // doms[i+1]) pulls doms[i] forward past any nodes that SHOULD move behind\n // it, leaving those nodes mis-anchored (app-starter Analyze/Lucky swap, npm\n // stats library dropdown reorder \u2014 both reported by users).\n //\n // Concrete example: start=[A, R, L], target=[A, L, R]. Forward pass gives\n // [L, A, R] (wrong). Reverse pass moves R to end, then L and A are already\n // correct \u2014 1 move, matches target.\n //\n // Skip nodes already in their target position so CSS transitions on stable\n // siblings aren't cancelled (e.g. drawer slide animation).\n for (let i = doms.length - 1; i >= 0; i--) {\n const d = doms[i]!\n const targetNext: Node | null = i + 1 < doms.length ? doms[i + 1]! : anchor\n if (d.parentNode !== domParent || d.nextSibling !== targetNext) {\n domParent.insertBefore(d, targetNext)\n }\n }\n}\n\nfunction collectHostDoms(fiber: Fiber, out: Node[]): void {\n if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) {\n if (fiber.dom) out.push(fiber.dom)\n return\n }\n if (fiber.tag === FiberTag.Portal) return\n let c = fiber.child\n while (c) {\n collectHostDoms(c, out)\n c = c.sibling\n }\n}\n\nfunction collectChildren(parent: Fiber): Fiber[] {\n const out: Fiber[] = []\n let c = parent.child\n while (c) {\n out.push(c)\n c = c.sibling\n }\n return out\n}\n\n// ---------------------------------------------------------------------------\n// Rendering per fiber tag\n// ---------------------------------------------------------------------------\n\nexport type RenderFn = (fiber: Fiber, domParent: Node, anchor: Node | null) => void\nexport type TypeMatcher = (type: any, marker: any) => FiberTag | null\n\n// Mutable renderer registry indexed by FiberTag. Feature modules install their\n// renderer via registerRenderer(); unregistered features render as no-ops. The\n// initial registrations below rely on function-declaration hoisting \u2014 every\n// render* function is declared with `function` later in this file.\nconst RENDERERS: Array<RenderFn | undefined> = new Array(13)\n\n// Element-marker allowlist for child normalization (pushChildren). Core-always\n// markers are seeded here; features add their own via registerElementMarker.\nconst ACCEPTED_ELEMENT_MARKERS = new Set<symbol>([\n REACT_ELEMENT_TYPE as symbol,\n REACT_LEGACY_ELEMENT_TYPE as symbol,\n])\n\n// Type-to-tag matchers tried in registration order from fiberFromChild's\n// fallback branch. Features register here for element types that aren't\n// marker-based (e.g. Portal, where element.type IS the symbol).\nconst TYPE_MATCHERS: TypeMatcher[] = []\n\nexport function registerRenderer(tag: FiberTag, fn: RenderFn): void {\n RENDERERS[tag] = fn\n}\n\nexport function registerTypeMatcher(m: TypeMatcher): void {\n TYPE_MATCHERS.push(m)\n}\n\nexport function registerElementMarker(sym: symbol): void {\n ACCEPTED_ELEMENT_MARKERS.add(sym)\n}\n\n// Accessor + scoped setter for the module-level `currentRoot`. Feature modules\n// need these to participate in the render loop (e.g. Suspense re-hydration\n// must temporarily set the root while rebuilding a boundary subtree).\nexport function getCurrentRoot(): FiberRoot | null {\n return currentRoot\n}\n\nexport function withCurrentRoot<T>(root: FiberRoot | null, fn: () => T): T {\n const prev = currentRoot\n currentRoot = root\n try {\n return fn()\n } finally {\n currentRoot = prev\n }\n}\n\n// The memo feature uses this to bypass its prop-equality gate on state-driven\n// rerenders of the memoized fiber itself (hook update / subscribed store),\n// where props haven't changed by definition.\nexport function getForceRerenderingFiber(): Fiber | null {\n return forceRerenderingFiber\n}\n\nregisterRenderer(FiberTag.Text, renderText)\nregisterRenderer(FiberTag.Host, renderHost)\nregisterRenderer(FiberTag.Function, renderFunction)\nregisterRenderer(FiberTag.Fragment, renderFragment)\n\nexport function renderFiber(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const fn = RENDERERS[fiber.tag]\n if (fn) fn(fiber, domParent, anchor)\n}\n\nfunction renderText(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const text = fiber.pp as string\n // Identity-unchanged fast path: skip the native Text.data write entirely.\n if (fiber.dom && fiber.mp === text) return\n if (!fiber.dom) {\n const hydrated = currentRoot?.h ? adoptTextDom(fiber, fiber.parent!, text) : false\n if (!hydrated) {\n fiber.dom = document.createTextNode(text)\n insertInto(domParent, fiber.dom, anchor)\n }\n } else {\n // Past the fast path, and adoptTextDom already realigned `.data` on\n // hydration \u2014 `.data !== text` here is guaranteed, so write directly.\n ;(fiber.dom as Text).data = text\n }\n fiber.mp = text\n // dy cleared at rerender start; leaving true lets mid-render schedule persist\n}\n\nfunction renderHost(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const props = fiber.pp ?? {}\n const prev = fiber.mp ?? {}\n const type = fiber.type as string\n const isSvg = type === 'svg' || (domParent as Element).namespaceURI === 'http://www.w3.org/2000/svg'\n\n // <select value> must be applied AFTER children mount \u2014 setting `.value`\n // on a `<select>` with no matching `<option>` yet resets it to empty. Same\n // for `defaultValue` on first mount. Stash and replay.\n const isSelect = type === 'select'\n const deferredSelectValue =\n isSelect && (props.value !== undefined || props.defaultValue !== undefined)\n ? props.value !== undefined ? props.value : props.defaultValue\n : undefined\n\n if (!fiber.dom) {\n const hydrated = currentRoot?.h ? adoptHostDom(fiber, fiber.parent!) : false\n if (!hydrated) {\n fiber.dom = createHostNode(type, isSvg)\n // Two passes so form-control attributes (notably <input type>) are in\n // place before event handlers attach. setEventHandler reads the\n // element's runtime state to decide the DOM event name (e.g. onChange\n // \u2192 `input` vs `change`); binding before `type` is applied would\n // attach to the wrong event for checkbox/radio/file inputs.\n for (const k in props) {\n if (isSelect && (k === 'value' || k === 'defaultValue')) continue\n if (isEventProp(k)) continue\n setProp(fiber.dom as Element, k, props[k], undefined, isSvg)\n }\n for (const k in props) {\n if (!isEventProp(k)) continue\n setProp(fiber.dom as Element, k, props[k], undefined, isSvg)\n }\n insertInto(domParent, fiber.dom, anchor)\n }\n attachRef(fiber, fiber.dom)\n } else if (prev !== props) {\n const el = fiber.dom as Element\n // Single-pass diff. Defer changed event props into a small array so the\n // `type-before-events` invariant the mount path needs (setEventHandler\n // reads `el.type` to resolve onChange\u2192input vs change) still holds when\n // a render flips both `type` and an event handler in the same pass.\n // The vast majority of host updates have no events at all (e.g. data-*\n // attributes flipping on a stable list), so the deferred array stays\n // null and we collapse to one for-in over `props`.\n let deferredEvents: string[] | null = null\n for (const k in props) {\n if (isSelect && (k === 'value' || k === 'defaultValue')) continue\n if (isEventProp(k)) {\n if (prev[k] !== props[k]) {\n deferredEvents ||= []\n deferredEvents.push(k)\n }\n continue\n }\n if (prev[k] !== props[k]) setProp(el, k, props[k], prev[k], isSvg)\n }\n // Removals \u2014 keys present in prev but not in props.\n for (const k in prev) {\n if (!(k in props)) setProp(el, k, undefined, prev[k], isSvg)\n }\n if (deferredEvents) {\n for (let i = 0; i < deferredEvents.length; i++) {\n const k = deferredEvents[i]!\n setProp(el, k, props[k], prev[k], isSvg)\n }\n }\n syncRefIfChanged(fiber, fiber.dom)\n }\n\n // Children go into this DOM node\n reconcileChildren(fiber, childrenToArray(props.children), fiber.dom!, null)\n\n // During hydration, if after reconciling all client-expected children we\n // still have server DOM left in the cursor for this host, that's a\n // structural mismatch (server produced more than client wants). Report.\n // <head>/<html> are position-insensitive \u2014 leftover here is normal\n // (Vite dev-style injections, SSR-only scripts, etc.).\n if (currentRoot?.h) {\n const parentTag = (fiber.type as string).toLowerCase()\n const hasOpaqueHydrationChildren =\n props.dangerouslySetInnerHTML != null ||\n (parentTag === 'textarea' && (props.value != null || props.defaultValue != null))\n if (\n parentTag !== 'head' &&\n parentTag !== 'html' &&\n parentTag !== 'body' &&\n !hasOpaqueHydrationChildren\n ) {\n const cursor = getHydrationCursor(fiber)\n if (cursor) {\n if (cursor.has()) {\n const error = new Error(\n process.env.NODE_ENV !== 'production'\n ? `Hydration mismatch: server rendered extra nodes inside <${parentTag}>.`\n : 'Hydration mismatch.',\n )\n if (currentRoot.re) currentRoot.re(error)\n abortHydration(error, fiber)\n }\n }\n }\n }\n\n // Apply <select> value after options are mounted.\n if (isSelect && deferredSelectValue !== undefined) {\n const select = fiber.dom as HTMLSelectElement\n if (Array.isArray(deferredSelectValue)) {\n const asStrings = deferredSelectValue.map((v) => '' + v)\n for (const opt of Array.from(select.options)) {\n opt.selected = asStrings.includes(opt.value)\n }\n } else {\n select.value = '' + deferredSelectValue\n }\n }\n\n fiber.mp = props\n // dy cleared at rerender start; leaving true lets mid-render schedule persist\n}\n\nfunction renderFunction(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const prevDispatcher = ReactSharedInternals.H\n const prevFiber = ReactSharedInternals.F\n const prevHook = ReactSharedInternals.K\n const prevIndex = ReactSharedInternals.I\n\n ReactSharedInternals.H = makeDispatcher()\n ReactSharedInternals.F = fiber\n ReactSharedInternals.K = null\n ReactSharedInternals.I = 0\n\n let rendered: ReactNode\n let deferredForHydration = false\n try {\n rendered = (fiber.type as Function)(fiber.pp ?? {})\n } catch (e: any) {\n if (isThenable(e)) {\n if (deferHydration(fiber, e)) {\n deferredForHydration = true\n } else {\n CAPABILITIES.handleSuspended(fiber, e)\n rendered = null\n }\n } else {\n handleErrorInRender(fiber, e)\n return\n }\n } finally {\n ReactSharedInternals.H = prevDispatcher\n ReactSharedInternals.F = prevFiber\n ReactSharedInternals.K = prevHook\n ReactSharedInternals.I = prevIndex\n }\n\n if (deferredForHydration) return\n\n reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor)\n fiber.mp = fiber.pp\n // dy cleared at rerender start; leaving true lets mid-render schedule persist\n}\n\nfunction hasAncestorHydrationCursor(_fiber: Fiber): boolean {\n // Reserved for future per-Suspense-boundary hydration deferral. For now the\n // top-level hydration path is all we need to special-case.\n return false\n}\n\nexport function deferHydration(fiber: Fiber, thenable: Promise<any>): boolean {\n if (!currentRoot?.h) return false\n const hostParent = findHydrationHost(fiber)\n const inheritedCursor = getHydrationCursor(hostParent)\n if (inheritedCursor) setHydrationCursor(fiber, inheritedCursor)\n ;((fiber.ms ??= {}) as any).p = true\n let sus: Fiber | null = fiber.parent\n while (sus && sus.tag !== FiberTag.Suspense) sus = sus.parent\n if (sus && sus.ms) {\n ;(sus.ms as any).a = true\n }\n const clearAwait = () => {\n if (sus && sus.ms) {\n ;(sus.ms as any).a = false\n }\n scheduleUpdate(fiber)\n }\n thenable.then(clearAwait, clearAwait)\n return true\n}\n\nfunction renderFragment(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const props = fiber.pp ?? {}\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n fiber.mp = props\n // dy cleared at rerender start; leaving true lets mid-render schedule persist\n}\n\n// ---------------------------------------------------------------------------\n// Error handling + default Suspense capability\n// ---------------------------------------------------------------------------\n\n// Default handler when the Suspense feature isn't installed: just schedule\n// a re-render when the thrown thenable settles. No boundary walk, no\n// fallback swap \u2014 children render empty during the pending window.\nfunction defaultHandleSuspended(fiber: Fiber, thenable: Promise<any>): void {\n thenable.then(\n () => scheduleUpdate(fiber),\n () => scheduleUpdate(fiber),\n )\n}\n\n// ---------------------------------------------------------------------------\n// Capability hooks \u2014 cross-cutting behaviors that features override.\n// Defaults here preserve today's behavior so the indirection is transparent\n// when all features are loaded. A feature's full-module can install its own\n// implementation via installCapability(); stubs leave the default in place,\n// where the default may intentionally degrade (e.g. a no-Context build's\n// readContext never walks the tree because no Provider fibers exist).\n// ---------------------------------------------------------------------------\n\nexport interface Capabilities {\n handleSuspended: (fiber: Fiber, thenable: Promise<any>) => void\n readContext: (fiber: Fiber, ctx: any) => any\n}\n\nconst CAPABILITIES: Capabilities = {\n handleSuspended: defaultHandleSuspended,\n readContext: defaultReadContext,\n}\n\nexport function installCapability<K extends keyof Capabilities>(\n name: K,\n fn: Capabilities[K],\n): void {\n CAPABILITIES[name] = fn\n}\n\n// Wrapper for features that catch thrown thenables inside their render\n// functions. Delegates to the installed Suspense capability.\nexport function handleSuspended(fiber: Fiber, thenable: Promise<any>): void {\n CAPABILITIES.handleSuspended(fiber, thenable)\n}\n\nexport function handleErrorInRender(fiber: Fiber, err: any): void {\n if (currentRoot?.h) {\n abortHydration(err, fiber)\n }\n // Bubble to nearest class boundary with getDerivedStateFromError / componentDidCatch\n let f: Fiber | null = fiber.parent\n while (f) {\n if (f.tag === FiberTag.Class) {\n const Ctor = f.type as any\n const instance = f.sn\n if (Ctor.getDerivedStateFromError) {\n const update = Ctor.getDerivedStateFromError(err)\n instance.state = { ...instance.state, ...update }\n }\n if (instance.componentDidCatch) {\n try {\n instance.componentDidCatch(err, { componentStack: '' })\n } catch {}\n }\n scheduleUpdate(f)\n return\n }\n f = f.parent\n }\n // No boundary \u2014 report to root\n if (currentRoot?.ue) currentRoot.ue(err)\n else throw err\n}\n\nexport function isThenable(x: any): x is Promise<any> {\n return x != null && typeof x.then == 'function'\n}\n\n// ---------------------------------------------------------------------------\n// Unmount\n// ---------------------------------------------------------------------------\n\nexport function unmountFiber(fiber: Fiber, domParent: Node): void {\n fiber.um = true\n // Recurse first\n let c = fiber.child\n while (c) {\n const next = c.sibling\n unmountFiber(c, fiber.tag === FiberTag.Host ? fiber.dom! : domParent)\n c = next\n }\n fiber.child = null\n\n // Run cu (fx + layout fx)\n if (fiber.cu) {\n for (const cleanup of fiber.cu) {\n try {\n cleanup()\n } catch (e) {\n if (currentRoot?.re) currentRoot.re(e)\n }\n }\n fiber.cu = null\n }\n\n if (fiber.tag === FiberTag.Class && fiber.sn?.componentWillUnmount) {\n try {\n fiber.sn.componentWillUnmount()\n } catch (e) {\n if (currentRoot?.re) currentRoot.re(e)\n }\n fiber.sn._fiber = null\n fiber.sn._enqueueUpdate = null\n fiber.sn._forceUpdate = null\n }\n\n // Detach ref\n if (fiber.ref) detachRef(fiber.ref)\n\n // Remove DOM if host\n if (fiber.tag === FiberTag.Host && fiber.dom && fiber.dom.parentNode) {\n fiber.dom.parentNode.removeChild(fiber.dom)\n } else if (fiber.tag === FiberTag.Text && fiber.dom && fiber.dom.parentNode) {\n fiber.dom.parentNode.removeChild(fiber.dom)\n }\n}\n\nexport function unmountAllChildren(parent: Fiber, domParent: Node): void {\n let c = parent.child\n while (c) {\n const next = c.sibling\n unmountFiber(c, domParent)\n c = next\n }\n parent.child = null\n}\n\n// ---------------------------------------------------------------------------\n// DOM navigation helpers\n// ---------------------------------------------------------------------------\n\nfunction insertInto(parent: Node, node: Node, anchor: Node | null): void {\n const projectedHeadParent = getDocumentHeadInsertionParent(parent, node)\n if (projectedHeadParent) {\n projectedHeadParent.appendChild(node)\n return\n }\n\n // Anchor may have been removed or moved since it was computed (mutations\n // from unmount, boundary reveal, user code, HMR). If it's no longer a child\n // of `parent`, fall back to append \u2014 trying to insertBefore a non-child\n // throws NotFoundError and dev-loops the reconciler.\n if (anchor && anchor.parentNode === parent) {\n parent.insertBefore(node, anchor)\n } else {\n parent.appendChild(node)\n }\n}\n\nconst DOCUMENT_HEAD_TAGS = new Set(['base', 'link', 'meta', 'script', 'style', 'title'])\n\nfunction getDocumentHeadInsertionParent(parent: Node, node: Node): HTMLHeadElement | null {\n if (parent.nodeType !== 9 || node.nodeType !== 1) return null\n const tag = (node as Element).tagName.toLowerCase()\n if (!DOCUMENT_HEAD_TAGS.has(tag)) return null\n return (parent as Document).head\n}\n\nfunction getHostParent(fiber: Fiber): Node {\n let p = fiber.parent\n while (p) {\n if (p.tag === FiberTag.Host) return p.dom!\n if (p.tag === FiberTag.Root)\n return (p.sn as Node) || (p.dom as Node) || (p.root?.c as Node)\n if (p.tag === FiberTag.Portal) {\n // Portal renders its children into the `container` prop, not into any\n // DOM element the portal fiber \"owns\". Read the container from the\n // portal's own props so a rerenderFiber triggered on a descendant\n // (e.g. a Floating-UI-positioned popper in a Radix Portal) finds its\n // host parent \u2014 otherwise getHostParent returns undefined and the\n // next renderHost crashes reading `.namespaceURI` on undefined.\n const props = (p.pp ?? p.mp) as { container?: Element } | null\n return (props?.container as Node) || (p.sn as Node) || (p.dom as Node) || (p.root?.c as Node)\n }\n p = p.parent\n }\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('No host parent found.')\n }\n throw new Error()\n}\n\nfunction getAnchor(fiber: Fiber): Node | null {\n // Return the first DOM node that comes after this fiber within the host parent\n let f: Fiber | null = fiber.sibling\n while (f) {\n const d = firstDomNode(f)\n if (d) return d\n f = f.sibling\n }\n // Ascend\n let p = fiber.parent\n while (p && p.tag !== FiberTag.Host && p.tag !== FiberTag.Root && p.tag !== FiberTag.Portal) {\n if (p.sibling) {\n const d = firstDomNode(p.sibling)\n if (d) return d\n }\n p = p.parent\n }\n return null\n}\n\nfunction firstDomNode(fiber: Fiber): Node | null {\n if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) return fiber.dom\n let c = fiber.child\n while (c) {\n const d = firstDomNode(c)\n if (d) return d\n c = c.sibling\n }\n return null\n}\n\n// ---------------------------------------------------------------------------\n// Context read \u2014 exported for dispatcher.ts (useContext, use()). Delegates to\n// the installed capability so the Context feature can override with a walking\n// implementation that finds the nearest Provider fiber. When the feature is\n// stubbed, the default here returns ctx._currentValue \u2014 correct because no\n// Provider fibers exist in the tree (Provider element \u2192 Fragment via the\n// stub's type matcher).\n// ---------------------------------------------------------------------------\n\nexport function readContext(fiber: Fiber, ctx: any): any {\n return CAPABILITIES.readContext(fiber, ctx)\n}\n\nfunction defaultReadContext(_fiber: Fiber, ctx: any): any {\n return ctx._currentValue\n}\n\n// ---------------------------------------------------------------------------\n// Refs\n// ---------------------------------------------------------------------------\n\nfunction attachRef(fiber: Fiber, value: any): void {\n const ref = fiber.ref ?? (fiber.pp?.ref ?? null)\n if (!ref) return\n if (typeof ref == 'function') {\n // Match React's commit-phase semantics: callback refs run after render\n // (during the layout/commit phase), not during render. Calling them\n // synchronously here breaks libraries that assert no event handlers run\n // during render (e.g. base-ui's useStableCallback trampoline).\n scheduleLifecycle(fiber, () => {\n const cleanup = ref(value)\n fiber.cu ||= []\n fiber.cu.push(typeof cleanup == 'function' ? cleanup : () => ref(null))\n })\n } else {\n ref.current = value\n }\n}\n\nfunction syncRefIfChanged(fiber: Fiber, value: any): void {\n const ref = fiber.ref ?? (fiber.pp?.ref ?? null)\n if (!ref) return\n if (typeof ref === 'object' && ref.current !== value) ref.current = value\n}\n\nfunction detachRef(ref: any): void {\n // Function refs are handled via fiber.cu (queued in attachRef during\n // the commit phase): the cleanup either invokes the user-returned cleanup\n // fn or calls ref(null). Calling ref(null) here would double-fire it.\n if (ref && typeof ref === 'object') {\n ref.current = null\n }\n}\n\n// ---------------------------------------------------------------------------\n// Effects\n// ---------------------------------------------------------------------------\n\nconst pendingEffects: Array<[Fiber, Effect]> = []\nconst pendingLayoutEffects: Array<[Fiber, Effect]> = []\nconst pendingLifecycles: Array<() => void> = []\n\nexport function enqueueEffect(fiber: Fiber, effect: Effect): void {\n if (effect.t) {\n pendingLayoutEffects.push([fiber, effect])\n } else {\n pendingEffects.push([fiber, effect])\n }\n}\n\nexport function scheduleLifecycle(_fiber: Fiber, fn: () => void): void {\n pendingLifecycles.push(fn)\n}\n\nexport function runEffects(root: FiberRoot): void {\n // Layout fx synchronously\n while (pendingLayoutEffects.length) {\n const [fiber, effect] = pendingLayoutEffects.shift()!\n runEffect(fiber, effect, root)\n }\n // Then lifecycles\n while (pendingLifecycles.length) {\n const fn = pendingLifecycles.shift()!\n try {\n fn()\n } catch (e) {\n if (root.ce) root.ce(e)\n }\n }\n // Passive fx on microtask\n if (pendingEffects.length) {\n const batch = pendingEffects.splice(0)\n queueMicrotask(() => {\n for (const [fiber, effect] of batch) runEffect(fiber, effect, root)\n })\n }\n}\n\nfunction runEffect(fiber: Fiber, effect: Effect, root: FiberRoot): void {\n try {\n const cleanup = effect.c()\n if (typeof cleanup == 'function') {\n fiber.cu ||= []\n fiber.cu.push(cleanup)\n }\n } catch (e) {\n if (root.ce) root.ce(e)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Utilities\n// ---------------------------------------------------------------------------\n\nfunction isEventProp(name: string): boolean {\n return (\n name.length > 2 &&\n name.charCodeAt(0) === 111 /* o */ &&\n name.charCodeAt(1) === 110 /* n */ &&\n name.charCodeAt(2) >= 65 /* 'A'-ish: any uppercase start (onClick, onChange, \u2026) */\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n FiberTag,\n createFiber,\n REACT_ELEMENT_TYPE,\n REACT_LEGACY_ELEMENT_TYPE,\n REACT_FRAGMENT_TYPE,\n type Fiber,\n type FiberRoot,\n type ReactElement,\n type ReactNode,\n type Effect,\n type Hook,\n} from '../core'\nimport {\n ReactSharedInternals,\n REACT_LAZY_TYPE,\n REACT_STRICT_MODE_TYPE,\n REACT_PROFILER_TYPE,\n REACT_VIEW_TRANSITION_TYPE,\n} from '../react'\nimport { createHostNode, setProp, syncInputValue, syncTextareaValue } from './dom'\nimport { HOOK_BAILOUT, renderWithHooks } from './dispatcher'\nimport { rememberRetainedEffect, setLayoutDisconnected } from './retained-effects'\nimport { componentStack } from './error-info'\nimport { resourceKind } from '../core/resource-hints'\nimport { acquireResource } from './resources'\nimport { currentCommit, commitSynchronously, queueMutation, queueText, queueCommitEffects, setCommitCheckpointHook, onCommitRollback, onCommitFailure, checkpointCommit, rewindCommit, rememberChildList } from './commit'\nimport { markTransitionUpdate, deferTransition, cancelTransitions, deferTransitionLayout, deferTransitionPassive } from './features/view-transition'\nimport { createFragmentInstance, updateFragmentHost, refreshFragmentInstances } from './features/fragment-refs'\nimport {\n adoptHostDom,\n adoptTextDom,\n setHydrationCursor,\n getHydrationCursor,\n clearHydrationCursor,\n findHostParent as findHydrationHost,\n abortHydration,\n recoverHydration,\n isHydrationBailout,\n} from './features/hydration'\n\n// ---------------------------------------------------------------------------\n// Render scheduling\n// ---------------------------------------------------------------------------\n\nlet currentRoot: FiberRoot | null = null\nlet preparedParent: Node | null = null\nlet flushing = false\nlet isBatching = false\nconst pendingRoots = new Set<FiberRoot>()\n\n// Set by rerenderFiber to identify the exact memo-tagged fiber whose INTERNAL\n// state (hook update, useSyncExternalStore notification) triggered this render\n// pass. renderMemo checks this to bypass its prop-equality gate for that fiber.\n// Without the bypass, a memo bail would swallow state changes: React's memo is\n// only a parent-triggered gate \u2014 state-driven rerenders must always run the\n// inner function. Router-adjacent components (Outlet, Match, MatchInner) are\n// all memo-wrapped and subscribe to stores; missing this bypass breaks nav\n// content updates even though the URL changes.\nlet forceRerenderingFiber: Fiber | null = null\n\nexport function scheduleUpdate(fiber: Fiber): void {\n // Drop updates scheduled on already-um fibers. Subscribers (router,\n // query, any external store) can fire after unmount if their cleanup was\n // missed, and letting those reach rerenderFiber mounts zombie DOM into the\n // old .parent's DOM (which stays reachable via the stale pointer).\n if (fiber.um || fiber.pd) return\n fiber.dy = true\n // A component finishes its render-phase updates before reconciling children.\n if (ReactSharedInternals.F === fiber) return\n const root = findRoot(fiber)\n if (!root) return\n // Retained Suspense primaries must retry their boundary, not commit a child\n // against the older props preserved by the failed attempt.\n while (fiber.su) {\n fiber = fiber.su\n fiber.ms.u = true\n fiber.dy = true\n }\n markTransitionUpdate(root)\n root.p.add(fiber)\n pendingRoots.add(root)\n if (isBatching) return\n if (!root.s) {\n root.s = true\n queueMicrotask(flushPending)\n }\n}\n\nexport function flushSyncWork(fn: () => void): void {\n cancelTransitions()\n const transition = ReactSharedInternals.T\n ReactSharedInternals.T = null\n const wasBatching = isBatching\n isBatching = true\n try {\n fn()\n isBatching = wasBatching\n flushPending()\n } finally {\n isBatching = wasBatching\n ReactSharedInternals.T = transition\n }\n}\n\nexport function batchedUpdates<T>(fn: () => T): T {\n const wasBatching = isBatching\n isBatching = true\n try {\n return fn()\n } finally {\n isBatching = wasBatching\n if (!wasBatching) flushPending()\n }\n}\n\nfunction flushPending(): void {\n if (flushing) return\n flushing = true\n try {\n let guard = 0\n while (pendingRoots.size > 0) {\n if (++guard > 50) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('flushPending exceeded 50 iterations \u2014 suspected infinite update loop.')\n }\n throw new Error()\n }\n const roots = [...pendingRoots]\n pendingRoots.clear()\n for (const root of roots) {\n root.s = false\n const render = () => flushRoot(root)\n if (!deferTransition(root, render, flushPending)) {\n try { commitSynchronously(render) }\n catch (error) { if (!recoverRootError(error)) throw error }\n }\n }\n }\n } finally {\n flushing = false\n }\n}\n\nfunction flushRoot(root: FiberRoot): void {\n if (root.er) {\n flushRootErrors(root)\n return\n }\n const render = root.u\n root.u = undefined\n if (render) render()\n // Ancestors run first, but keep descendants in the queue: an ancestor can\n // bail out without reaching a descendant's independently scheduled update.\n const pending = [...root.p]\n root.p.clear()\n pending.sort((a, b) => fiberDepth(a) - fiberDepth(b))\n for (const fiber of pending) {\n if (!fiber.dy || fiber.um || fiber.pd) continue\n const boundary = root.eb && findErrorBoundary(fiber)\n const checkpoint = boundary || (root.sp && findSuspenseBoundary(fiber)) ? checkpointCommit(fiber) : -1\n try {\n rerenderFiber(fiber, root)\n } catch (error) {\n if (error instanceof RenderSuspenseCapture) {\n rewindCommit(checkpoint)\n error.boundary.ms.u = true\n scheduleUpdate(error.boundary)\n continue\n }\n if (error instanceof RenderErrorCapture) {\n if (error.boundary.tag === FiberTag.Root) throw error\n rewindCommit(checkpoint)\n captureError(error)\n continue\n }\n if (!recoverHydration(root, error)) throw error\n break\n }\n }\n runEffects(root)\n}\n\nexport function scheduleRootRender(root: FiberRoot, render: () => void): void {\n markTransitionUpdate(root)\n root.u = render\n pendingRoots.add(root)\n if (isBatching) return\n flushPending()\n}\n\nexport function discardPendingWork(root: FiberRoot): void {\n root.u = undefined\n root.p.clear()\n root.s = false\n pendingRoots.delete(root)\n}\n\nexport function discardPendingEffects(root: FiberRoot): void {\n for (const queue of [pendingEffects, pendingInsertionEffects, pendingCommits]) {\n for (let index = queue.length - 1; index >= 0; index--) {\n if (findRoot(queue[index]![0]) === root) removePendingEffect(queue, index)\n }\n }\n for (const fiber of stagedCommits.keys()) {\n if (findRoot(fiber) === root) removeStagedCommits(fiber)\n }\n}\n\nfunction fiberDepth(fiber: Fiber): number {\n // Reused fibers keep their parent and root, including keyed sibling moves.\n return fiber.depth ??= fiber.parent ? fiberDepth(fiber.parent) + 1 : 0\n}\n\nexport function findRoot(fiber: Fiber): FiberRoot | null {\n let f: Fiber | null = fiber\n while (f) {\n if (f.root) return fiber.root = f.root\n f = f.parent\n }\n return null\n}\n\n// ---------------------------------------------------------------------------\n// Entry points (called by createRoot)\n// ---------------------------------------------------------------------------\n\nexport function renderRoot(root: FiberRoot, children: ReactNode): void {\n if (!currentCommit) return commitSynchronously(() => renderRoot(root, children))\n const rootFiber = root.r\n rootFiber.pp = { children }\n currentRoot = root\n try {\n reconcileChildren(rootFiber, childrenToArray(children), root.c as Node, null)\n rootFiber.mp = rootFiber.pp\n rootFiber.dy = false\n } finally {\n currentRoot = null\n }\n runEffects(root)\n}\n\nfunction rerenderFiber(fiber: Fiber, root: FiberRoot): void {\n if (!fiber.dy) return\n // Skip fibers that were um between scheduling and flush. Without this,\n // the flush loop re-enters a zombie fiber whose .parent is still set; its\n // render mounts fresh DOM into the old parent's still-attached DOM (since\n // unmountFiber only clears fiber.child, not fiber.parent). Visible as route\n // content from a previous location staying on screen after nav, because a\n // pending rerender on the old route's LibraryLandingPage (um during\n // Outlet's shallow-first render) still fires from root.pending.\n if (fiber.um || fiber.pd) return\n // Clear BEFORE rendering so a scheduleUpdate() triggered mid-render (e.g.\n // error boundary catching a descendant throw) marks us dy for the next\n // flush iteration instead of being wiped out when render() completes.\n fiber.dy = false\n currentRoot = root\n // If this rerender is resuming a hydration that was deferred by a suspension,\n // re-activate hydration mode for its duration so descendants adopt DOM\n // instead of re-creating it.\n const resumeHydration =\n fiber.ms && (fiber.ms as any).p === true\n const prevHydrating = root.h\n if (resumeHydration) {\n delete (fiber.ms as any).p\n root.h = true\n }\n const prevForcing = forceRerenderingFiber\n forceRerenderingFiber = fiber\n try {\n const domParent = getHostParent(fiber)\n renderFiber(fiber, domParent, getAnchor(fiber, domParent))\n } finally {\n forceRerenderingFiber = prevForcing\n if (resumeHydration) {\n root.h = prevHydrating\n // Deferred hydration completed \u2014 detach the preserved cursor so future\n // updates (post-hydration state changes) don't try to adopt stale DOM.\n clearHydrationCursor(fiber)\n }\n currentRoot = null\n }\n}\n\n// ---------------------------------------------------------------------------\n// Element \u2192 children normalization\n// ---------------------------------------------------------------------------\n\n// Text children pass through as raw strings \u2014 no wrapper. The previous\n// `{_text: string}` shape allocated tens of thousands of objects per\n// stable-list re-render and dominated minor-GC pressure. `typeof === 'string'`\n// is also robust to RSC renderable proxies (which have `has` traps that\n// would fool a `'_text' in child` predicate but can't fool `typeof`).\ntype NormalizedChild = ReactElement | string | null\n\nfunction isTextChild(child: Exclude<NormalizedChild, null>): child is string {\n return typeof child === 'string'\n}\n\nexport function childrenToArray(children: ReactNode): NormalizedChild[] {\n const out: NormalizedChild[] = []\n pushChildren(children, out)\n return out\n}\n\nfunction pushChildren(node: ReactNode, out: NormalizedChild[]): void {\n if (node == null || typeof node === 'boolean') return\n if (typeof node === 'string') {\n // Empty strings render no text node (matches React + the `<!-- -->`\n // separator elision on the SSR side so server/client agree).\n if (node === '') return\n out.push(node)\n return\n }\n if (typeof node === 'number') {\n out.push('' + node)\n return\n }\n if (Array.isArray(node)) {\n for (let i = 0; i < node.length; i++) pushChildren(node[i], out)\n return\n }\n if (typeof node === 'object') {\n const t = (node as any).$$typeof\n if (ACCEPTED_ELEMENT_MARKERS.has(t)) {\n out.push(node as ReactElement)\n return\n }\n // Raw React.lazy as a child. RSC Flight encodes 'use client' components\n // (CodeBlock, CodeExplorer, etc.) as bare Lazy objects in the tree, not\n // wrapped in REACT_ELEMENT_TYPE. Dropping them made code snippets\n // disappear from docs pages. The RSC decoder pre-awaits payloads via\n // `awaitLazyElements`, so by render time the status is 'fulfilled' and\n // `_init()` returns the resolved element synchronously.\n if (t === REACT_LAZY_TYPE) {\n const lazy = node as any\n const resolved = lazy._init(lazy._payload)\n pushChildren(resolved, out)\n return\n }\n }\n if (isIterable(node)) {\n for (const item of node as Iterable<ReactNode>) pushChildren(item, out)\n }\n}\n\nfunction isIterable(obj: any): boolean {\n return obj != null && typeof obj[Symbol.iterator] == 'function'\n}\n\nfunction getKeyOf(child: NormalizedChild, index: number): string {\n if (!child) return 'n' + index\n if (isTextChild(child)) return '$t' + index\n if (child.key != null) return 'k' + child.key\n return 'i' + index\n}\n\nfunction sameType(fiber: Fiber, child: NormalizedChild): boolean {\n if (!child) return false\n if (isTextChild(child)) return fiber.tag === FiberTag.Text\n return fiber.type === child.type && sameKey(fiber.key, child.key)\n}\n\nfunction sameKey(a: string | null, b: string | null | undefined): boolean {\n return (a ?? null) === (b ?? null)\n}\n\n// ---------------------------------------------------------------------------\n// Fiber creation\n// ---------------------------------------------------------------------------\n\nfunction fiberFromChild(child: NormalizedChild, parent: Fiber): Fiber {\n if (!child) return createFiber(FiberTag.Fragment, null, null)\n if (isTextChild(child)) {\n const f = createFiber(FiberTag.Text, null, null)\n f.pp = child\n f.parent = parent\n return f\n }\n const type = child.type\n let tag: FiberTag = FiberTag.Host\n const marker = type && (type as any).$$typeof\n if (typeof type === 'string') tag = FiberTag.Host\n else if (type === REACT_FRAGMENT_TYPE) tag = FiberTag.Fragment\n else if (type === REACT_STRICT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_VIEW_TRANSITION_TYPE) tag = FiberTag.Fragment\n else {\n // Feature-registered type matchers (Portal, future extractions). Features\n // that carry the symbol as element.type directly (rather than wrapping in\n // REACT_ELEMENT_TYPE) match here by type identity.\n let matched: FiberTag | null = null\n for (const m of TYPE_MATCHERS) {\n matched = m(type, marker)\n if (matched !== null) break\n }\n if (matched !== null) tag = matched\n else if (typeof type == 'function') {\n tag = type.prototype && type.prototype.isReactComponent ? FiberTag.Class : FiberTag.Function\n }\n }\n const f = createFiber(tag, type, child.key ?? null)\n f.ref = (child as any).ref ?? null\n f.pp = child.props\n f.parent = parent\n return f\n}\n\n// ---------------------------------------------------------------------------\n// Reconciliation\n// ---------------------------------------------------------------------------\n\n/**\n * Reconcile a parent fiber's child list against new normalized children.\n * Mutates parent.child and the sibling chain.\n * Mounts new host DOM into `domParent` before `anchor` (or appends if anchor === null).\n */\nexport function reconcileChildren(\n parent: Fiber,\n newChildren: NormalizedChild[],\n domParent: Node,\n anchor: Node | null,\n): void {\n // Fast path: positional steady-state, including unchanged keyed lists.\n // Walk the sibling chain and newChildren in lockstep, validating and\n // committing in one pass.\n // On any divergence we fall back to the slow path, which rebuilds the\n // sibling chain anyway \u2014 partial pp writes are idempotent.\n // Skips the Map / Set / existing-array allocation entirely.\n if (!currentRoot?.h) {\n let f: Fiber | null = parent.child\n let ok = true\n for (let i = 0; i < newChildren.length; i++) {\n const child = newChildren[i]\n if (child == null || !f) { ok = false; break }\n if (typeof child === 'string') {\n if (f.tag !== FiberTag.Text || f.key != null) { ok = false; break }\n f.pp = child\n } else {\n if (!sameKey(f.key, (child as ReactElement).key)) { ok = false; break }\n if (f.type !== (child as ReactElement).type) { ok = false; break }\n f.pp = (child as ReactElement).props\n f.ref = (child as any).ref ?? null\n }\n f = f.sibling\n }\n if (ok && f === null) {\n // Pass 2: render forward with per-child anchors. Identical to the slow\n // path's pass 2.\n renderChildChain(parent, domParent, anchor, false)\n return\n }\n }\n\n if (!parent.child) {\n // Build every sibling before rendering, just like the matching path.\n // A first mount has no old fibers to index, claim or remove.\n rememberChildList(parent)\n let previous: Fiber | null = null\n for (const child of newChildren) {\n if (child == null) continue\n const fiber = fiberFromChild(child, parent)\n if (previous) previous.sibling = fiber\n else parent.child = fiber\n previous = fiber\n }\n renderChildChain(parent, domParent, anchor, true)\n if (previous && !currentRoot?.h && domParent.nodeName !== 'HEAD') {\n placeChildrenInOrder(parent, domParent, anchor)\n }\n return\n }\n\n const existing = collectChildren(parent)\n rememberChildList(parent, existing)\n const keyed = new Map<string, Fiber>()\n for (const f of existing) {\n if (f.key != null) keyed.set('k' + f.key, f)\n }\n\n let prevNewFiber: Fiber | null = null\n const claimed = new Set<Fiber>()\n let structurallyChanged = false\n // Budget-guided positional matching. We walk `existing` (unkeyed only) with a\n // single cursor `existingIdx` and, on a type mismatch, choose insert vs delete\n // based on the remaining length delta (`budget`):\n // budget > 0: more new than old remain \u2192 treat slot as an INSERTION: keep\n // the old cursor and create a fresh fiber for new[i].\n // budget < 0: more old than new remain \u2192 treat slot as a DELETION: advance\n // the old cursor past the mismatched fiber (it'll be um\n // in the unclaimed pass) and retry.\n // budget == 0: equal remaining \u2192 treat as REPLACE by preferring delete\n // until budget flips positive or we hit a match.\n // This avoids greedy forward scans that steal a later same-type fiber for a\n // newly inserted leading sibling (e.g. smallMenu flipping null \u2192 <div>\n // stealing the content <div>'s fiber and tearing down the drawer fragment).\n let existingIdx = 0\n let unkeyedOld = 0\n for (const f of existing) if (f.key == null) unkeyedOld++\n let unkeyedNew = 0\n for (const c of newChildren) if (c != null) unkeyedNew++\n let budget = unkeyedNew - unkeyedOld\n\n // Pass 1 (this loop): match against existing fibers and build the sibling\n // chain. Pass 2 (after the loop) renders each fiber with the correct\n // per-child anchor \u2014 the firstDomNode of its next still-mounted sibling,\n // or the parent's own anchor for the rightmost. Without per-child anchors\n // a child whose render output type changes from no-DOM (Portal, null) to\n // an in-flow host gets appended to the end of domParent (every child\n // would otherwise share the parent's anchor) and never moves before its\n // later siblings. Hit by the t3code Sidebar swap from a portal-rendering\n // <Sheet> to a <div data-slot=sidebar> when isMobile flips during a\n // Provider re-render.\n for (let i = 0; i < newChildren.length; i++) {\n const child = newChildren[i]\n if (child == null) continue\n\n let match: Fiber | null = null\n\n // key-based match\n if (child && typeof child === 'object' && !isTextChild(child) && (child as ReactElement).key != null) {\n const k = 'k' + (child as ReactElement).key\n const m = keyed.get(k)\n if (m && m.type === (child as ReactElement).type) {\n match = m\n keyed.delete(k)\n }\n }\n\n if (!match) {\n while (existingIdx < existing.length) {\n const cand = existing[existingIdx]!\n if (cand.key != null) {\n existingIdx++\n continue\n }\n if (sameType(cand, child)) {\n match = cand\n existingIdx++\n break\n }\n // Type mismatch at the cursor. Resolve via budget.\n if (budget > 0) {\n // Insertion: leave cand in place, create new for child.\n break\n }\n // Deletion (or replace-as-delete-first): advance past cand. It remains\n // unclaimed and will be um at the end.\n existingIdx++\n budget++\n }\n }\n\n // Detect reorder: matched fiber is not at its original position\n if (match && existing[i] !== match) structurallyChanged = true\n\n let fiber: Fiber\n if (match) {\n claimed.add(match)\n fiber = match\n if (isTextChild(child!)) {\n fiber.pp = child\n } else {\n fiber.type = (child as ReactElement).type\n fiber.pp = (child as ReactElement).props\n fiber.ref = (child as any).ref ?? null\n }\n } else {\n fiber = fiberFromChild(child, parent)\n structurallyChanged = true\n if (budget > 0) budget--\n }\n\n fiber.parent = parent\n fiber.sibling = null\n if (prevNewFiber) prevNewFiber.sibling = fiber\n else parent.child = fiber\n prevNewFiber = fiber\n }\n\n // Pass 2: walk the sibling chain we just built and render each fiber\n // forward with the correct per-child anchor. During hydration the cursor\n // walks DOM forward and each renderFiber adopts the next existing node,\n // so per-child anchors are moot \u2014 fall back to the parent's anchor.\n const hydrating = !!currentRoot?.h\n // New siblings have no DOM yet, so searching them for an anchor cannot help.\n // An empty replacement has no new chain. The old children remain linked\n // until cleanup below, and must not render again on their way out.\n if (prevNewFiber) renderChildChain(parent, domParent, anchor, hydrating || existing.length === 0)\n\n if (!prevNewFiber) parent.child = null\n else prevNewFiber.sibling = null\n\n // Head content is additive \u2014 server may inject metadata/stylesheets (Vite\n // dev styles, Sentry, analytics) that aren't in the React tree. Unmounting\n // them on every reconcile thrashes styles and causes flash of unstyled\n // content. Keep existing head children that weren't matched this pass.\n const parentIsHeadHost =\n parent.tag === FiberTag.Host &&\n typeof parent.type === 'string' &&\n (parent.type as string).toLowerCase() === 'head'\n\n if (!parentIsHeadHost) {\n // Unmount unclaimed\n for (const f of existing) {\n if (!claimed.has(f)) {\n unmountFiber(f, domParent)\n structurallyChanged = true\n }\n }\n }\n\n // During hydration, DOM is already in document order from the cursor-driven\n // adoption walk. Running placeChildrenInOrder here would reappend nodes to\n // the end of domParent when the true anchor (often an end marker comment)\n // isn't reflected in `anchor`. Skip it in hydration mode.\n //\n // For <head>, skip always \u2014 HeadContent re-renders routinely (route match\n // changes, providers updating), and reordering every <link>/<style>/<meta>\n // on each re-render causes stylesheet flash and re-download. Head element\n // ordering is semantically fluid; the browser doesn't care about exact\n // order within <head>.\n const parentIsHead = (domParent as Element).nodeName === 'HEAD'\n if (structurallyChanged && !currentRoot?.h && !parentIsHead) {\n placeChildrenInOrder(parent, domParent, anchor)\n }\n}\n\nfunction renderChildChain(\n parent: Fiber,\n domParent: Node,\n anchor: Node | null,\n skipAnchors: boolean,\n): void {\n for (let f = parent.child; f; f = f.sibling) {\n let nextAnchor = anchor\n if (!skipAnchors) {\n for (let sibling = f.sibling; sibling; sibling = sibling.sibling) {\n const dom = firstDomNode(sibling, domParent)\n if (dom) {\n nextAnchor = dom\n break\n }\n }\n }\n renderFiber(f, domParent, nextAnchor)\n }\n}\n\nfunction placeChildrenInOrder(parent: Fiber, domParent: Node, anchor: Node | null): void {\n let c = parent.child\n // One direct DOM child already at its exact anchor needs no collection.\n if ((!currentCommit || domParent === preparedParent) && c && !c.sibling && (c.tag === FiberTag.Host || c.tag === FiberTag.Text) &&\n c.dom?.parentNode === domParent && c.dom.nextSibling === anchor) return\n const doms: Node[] = []\n while (c) {\n collectHostDoms(c, doms)\n c = c.sibling\n }\n\n if (currentCommit && domParent !== preparedParent) {\n if (doms.length) queuePlacement(doms, domParent, anchor)\n } else placeDomsInOrder(doms, domParent, anchor)\n}\n\nfunction queuePlacement(doms: Node[], parent: Node, anchor: Node | null): void {\n queueMutation(() => placeDomsInOrder(doms, parent, anchor))\n}\n\nfunction placeDomsInOrder(doms: Node[], domParent: Node, anchor: Node | null): void {\n\n // Pre-check: if our fiber-owned DOM is already in document order within\n // domParent AND the trailing anchor matches, no reorder is needed. This is\n // the common case on stable re-renders, and avoids detaching/re-attaching\n // subtrees (which cancels CSS animations and triggers layout).\n if (doms.length > 0) {\n let current: Node | null = doms[0]!\n let inOrder = current.parentNode === domParent\n for (let i = 1; inOrder && i < doms.length; i++) {\n current = current!.nextSibling\n // Skip foreign nodes (SSR-injected scripts, dev-styles) between owned\n // fiber DOMs \u2014 they should stay where they are.\n while (current && current !== doms[i] && !doms.includes(current as Node)) {\n current = current.nextSibling\n }\n if (current !== doms[i]) inOrder = false\n }\n // Also verify the LAST dom's next sibling lines up with `anchor`. A\n // single-dom collection (or correctly-internally-ordered doms) can sit\n // at the WRONG absolute position in domParent and still pass the\n // relative-order check above. This happens when a fiber's render output\n // changes from no-DOM (e.g. a Portal-using <Sheet>, or null) to an\n // in-flow host element: the new host is appended to the end of\n // domParent (because the parent reconcileChildren loop hands every\n // child the same anchor \u2014 typically null), and without this trailing\n // check it would never get moved before its later siblings.\n if (inOrder) {\n let last: Node | null = doms[doms.length - 1]!.nextSibling\n while (last && !doms.includes(last as Node) && last !== anchor) {\n last = last.nextSibling\n }\n if (last !== anchor) inOrder = false\n }\n if (inOrder) return\n }\n\n // Reverse-iterate, anchoring each node before the one that should follow it.\n // This works because by the time we're placing doms[i], doms[i+1] is already\n // in its final slot. Forward iteration is buggy: insertBefore(doms[i],\n // doms[i+1]) pulls doms[i] forward past any nodes that SHOULD move behind\n // it, leaving those nodes mis-anchored (app-starter Analyze/Lucky swap, npm\n // stats library dropdown reorder \u2014 both reported by users).\n //\n // Concrete example: start=[A, R, L], target=[A, L, R]. Forward pass gives\n // [L, A, R] (wrong). Reverse pass moves R to end, then L and A are already\n // correct \u2014 1 move, matches target.\n //\n // Skip nodes already in their target position so CSS transitions on stable\n // siblings aren't cancelled (e.g. drawer slide animation).\n for (let i = doms.length - 1; i >= 0; i--) {\n const d = doms[i]!\n const targetNext: Node | null = i + 1 < doms.length ? doms[i + 1]! : anchor\n if (d.parentNode !== domParent || d.nextSibling !== targetNext) {\n domParent.insertBefore(d, targetNext)\n }\n }\n}\n\nfunction collectHostDoms(fiber: Fiber, out: Node[]): void {\n if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) {\n if (fiber.dom) out.push(fiber.dom)\n return\n }\n if (fiber.tag === FiberTag.Portal) return\n let c = fiber.child\n while (c) {\n collectHostDoms(c, out)\n c = c.sibling\n }\n if (fiber.tag === FiberTag.Suspense && fiber.ms?.f) collectHostDoms(fiber.ms.f, out)\n}\n\nfunction collectChildren(parent: Fiber): Fiber[] {\n const out: Fiber[] = []\n let c = parent.child\n while (c) {\n out.push(c)\n c = c.sibling\n }\n return out\n}\n\n// ---------------------------------------------------------------------------\n// Rendering per fiber tag\n// ---------------------------------------------------------------------------\n\nexport type RenderFn = (fiber: Fiber, domParent: Node, anchor: Node | null) => void\nexport type TypeMatcher = (type: any, marker: any) => FiberTag | null\n\n// Mutable renderer registry indexed by FiberTag. Feature modules install their\n// renderer via registerRenderer(); unregistered features render as no-ops. The\n// initial registrations below rely on function-declaration hoisting \u2014 every\n// render* function is declared with `function` later in this file.\nconst RENDERERS: Array<RenderFn | undefined> = new Array(13)\n\n// Element-marker allowlist for child normalization (pushChildren). Core-always\n// markers are seeded here; features add their own via registerElementMarker.\nconst ACCEPTED_ELEMENT_MARKERS = new Set<symbol>([\n REACT_ELEMENT_TYPE as symbol,\n REACT_LEGACY_ELEMENT_TYPE as symbol,\n])\n\n// Type-to-tag matchers tried in registration order from fiberFromChild's\n// fallback branch. Features register here for element types that aren't\n// marker-based (e.g. Portal, where element.type IS the symbol).\nconst TYPE_MATCHERS: TypeMatcher[] = []\n\nexport function registerRenderer(tag: FiberTag, fn: RenderFn): void {\n RENDERERS[tag] = fn\n}\n\nexport function registerTypeMatcher(m: TypeMatcher): void {\n TYPE_MATCHERS.push(m)\n}\n\nexport function registerElementMarker(sym: symbol): void {\n ACCEPTED_ELEMENT_MARKERS.add(sym)\n}\n\n// Accessor + scoped setter for the module-level `currentRoot`. Feature modules\n// need these to participate in the render loop (e.g. Suspense re-hydration\n// must temporarily set the root while rebuilding a boundary subtree).\nexport function getCurrentRoot(): FiberRoot | null {\n return currentRoot\n}\n\nexport function withCurrentRoot<T>(root: FiberRoot | null, fn: () => T): T {\n const prev = currentRoot\n currentRoot = root\n try {\n return fn()\n } finally {\n currentRoot = prev\n }\n}\n\n// The memo feature uses this to bypass its prop-equality gate on state-driven\n// rerenders of the memoized fiber itself (hook update / subscribed store),\n// where props haven't changed by definition.\nexport function getForceRerenderingFiber(): Fiber | null {\n return forceRerenderingFiber\n}\n\nregisterRenderer(FiberTag.Text, renderText)\nregisterRenderer(FiberTag.Host, renderHost)\nregisterRenderer(FiberTag.Resource, renderHost)\nregisterRenderer(FiberTag.Function, renderFunction)\nregisterRenderer(FiberTag.Fragment, renderFragment)\n\nexport function renderFiber(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n // Memo consumes pending state when it delegates to its inner renderer.\n if (fiber.tag !== FiberTag.Memo) fiber.dy = false\n fiber.root ||= currentRoot || findRoot(fiber)\n if (fiber.root?.sp && fiber.parent?.ld && fiber.mp === null) setLayoutDisconnected(fiber, true)\n if (fiber.root?.a) CAPABILITIES.prepareActivityFiber(fiber)\n const fn = RENDERERS[fiber.tag]\n try {\n if (fn) fn(fiber, domParent, anchor)\n } catch (error) {\n removeStagedCommits(fiber)\n if (currentRoot?.h || error instanceof RenderErrorCapture || error instanceof RenderSuspenseCapture || isHydrationBailout(error)) throw error\n if (isThenable(error)) handleSuspended(fiber, error)\n else handleErrorInRender(fiber, error)\n }\n if (fiber.root?.a) CAPABILITIES.syncActivity(fiber)\n if (lastStagedFiber === fiber) flushFiberCommits(fiber)\n}\n\nfunction renderText(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const text = fiber.pp as string\n // Identity-unchanged fast path: skip the native Text.data write entirely.\n if (fiber.dom && fiber.mp === text) return\n if (!fiber.dom) {\n const hydrated = currentRoot?.h ? adoptTextDom(fiber, fiber.parent!, text) : false\n if (!hydrated) {\n fiber.dom = document.createTextNode(text)\n insertInto(domParent, fiber.dom, anchor)\n }\n updateFragmentHost(fiber, true)\n } else {\n // Past the fast path, and adoptTextDom already realigned `.data` on\n // hydration \u2014 `.data !== text` here is guaranteed, so write directly.\n queueText(fiber.dom as Text, text)\n }\n fiber.mp = text\n // dy cleared at rerender start; leaving true lets mid-render schedule persist\n}\n\nfunction renderHost(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const hadDom = !!fiber.dom\n const props = fiber.pp ?? {}\n const prev = fiber.mp ?? {}\n const type = fiber.type as string\n const isSvg = type === 'svg' || (domParent as Element).namespaceURI === 'http://www.w3.org/2000/svg'\n const isResource = fiber.tag === FiberTag.Resource\n const canAcquire = !isSvg && (isResource || !fiber.mp) && resourceKind(type, props)\n if (isResource || canAcquire) {\n fiber.tag = FiberTag.Resource\n if (canAcquire) {\n let container: Node = domParent.nodeType === 9 ? domParent : domParent.ownerDocument!\n if (type !== 'script') {\n // Host assembly may still be detached. Style ownership follows the\n // logical root or nearest portal, not that temporary DOM tree.\n container = fiber.root?.c || domParent\n for (let parent = fiber.parent; parent; parent = parent.parent) {\n if (parent.tag === FiberTag.Portal) { container = parent.pp.container; break }\n }\n }\n queueMutation(() => {\n const resource = acquireResource(type, props, container)\n fiber.sn ||= resource\n })\n }\n if (fiber.mp) syncRefIfChanged(fiber, fiber.sn)\n else attachRef(fiber, null)\n fiber.mp = props\n return\n }\n\n // <select value> must be applied AFTER children mount \u2014 setting `.value`\n // on a `<select>` with no matching `<option>` yet resets it to empty. Same\n // for `defaultValue` on first mount. Stash and replay.\n const isSelect = type === 'select'\n const isInput = !isSvg && type === 'input'\n const isTextarea = !isSvg && type === 'textarea'\n const deferValue = isSelect || isInput || isTextarea\n let hydrated = false\n const deferredSelectValue =\n isSelect && (props.value !== undefined || props.defaultValue !== undefined)\n ? props.value !== undefined ? props.value : props.defaultValue\n : undefined\n\n if (!fiber.dom) {\n hydrated = currentRoot?.h ? adoptHostDom(fiber, fiber.parent!) : false\n if (!hydrated) {\n fiber.dom = createHostNode(type, isSvg)\n // Two passes so form-control attributes (notably <input type>) are in\n // place before event handlers attach. setEventHandler reads the\n // element's runtime state to decide the DOM event name (e.g. onChange\n // \u2192 `input` vs `change`); binding before `type` is applied would\n // attach to the wrong event for checkbox/radio/file inputs.\n for (const k in props) {\n if ((deferValue && (k === 'value' || k === 'defaultValue')) || (isInput && (k === 'checked' || k === 'defaultChecked' || k === 'name'))) continue\n if (isEventProp(k)) continue\n setProp(fiber.dom as Element, k, props[k], undefined, isSvg)\n }\n for (const k in props) {\n if (!isEventProp(k)) continue\n setProp(fiber.dom as Element, k, props[k], undefined, isSvg)\n }\n if (isInput) {\n syncInputValue(fiber.dom as HTMLInputElement, props)\n setProp(fiber.dom as Element, 'name', props.name, undefined, false)\n }\n if (isTextarea) syncTextareaValue(fiber.dom as HTMLTextAreaElement, props, true)\n insertInto(domParent, fiber.dom, anchor)\n }\n updateFragmentHost(fiber, true)\n attachRef(fiber, fiber.dom)\n } else if (prev !== props && (isInput || isTextarea || hostNeedsUpdate(props, prev))) {\n queueHostProps(fiber.dom as Element, props, prev, isSvg, isInput, isTextarea, deferValue)\n }\n if (hadDom) syncRefIfChanged(fiber, fiber.dom)\n\n // Children go into this DOM node\n // Textarea's value/defaultValue owns its text node, not child fibers.\n if (!hadDom && !hydrated) {\n // Only a host allocated by this render is safe to assemble eagerly.\n // User-owned detached roots and portal containers still commit normally.\n const previous = preparedParent\n preparedParent = fiber.dom\n try { reconcileChildren(fiber, isTextarea ? [] : childrenToArray(props.children), fiber.dom!, null) }\n finally { preparedParent = previous }\n } else reconcileChildren(fiber, isTextarea ? [] : childrenToArray(props.children), fiber.dom!, null)\n\n // During hydration, if after reconciling all client-expected children we\n // still have server DOM left in the cursor for this host, that's a\n // structural mismatch (server produced more than client wants). Report.\n // <head>/<html> are position-insensitive \u2014 leftover here is normal\n // (Vite dev-style injections, SSR-only scripts, etc.).\n if (currentRoot?.h) {\n const parentTag = (fiber.type as string).toLowerCase()\n const hasOpaqueHydrationChildren =\n props.dangerouslySetInnerHTML != null ||\n isTextarea\n if (\n parentTag !== 'head' &&\n parentTag !== 'html' &&\n parentTag !== 'body' &&\n !hasOpaqueHydrationChildren\n ) {\n const cursor = getHydrationCursor(fiber)\n if (cursor) {\n if (cursor.has()) {\n const error = new Error(\n process.env.NODE_ENV !== 'production'\n ? `Hydration mismatch: server rendered extra nodes inside <${parentTag}>.`\n : 'Hydration mismatch.',\n )\n if (currentRoot.re) currentRoot.re(error, { componentStack: null })\n abortHydration(error, fiber)\n }\n }\n }\n }\n\n // Apply <select> value after options are mounted.\n if (isSelect && !hydrated && deferredSelectValue !== undefined) {\n queueSelectValue(fiber.dom as HTMLSelectElement, deferredSelectValue)\n }\n\n fiber.mp = props\n // dy cleared at rerender start; leaving true lets mid-render schedule persist\n}\n\nfunction queueSelectValue(select: HTMLSelectElement, value: any): void {\n queueMutation(() => {\n if (Array.isArray(value)) {\n const selected = new Set(value.map((v) => '' + v))\n const options = select.options\n for (let i = 0; i < options.length; i++) {\n const opt = options[i]!\n opt.selected = selected.has(opt.value)\n }\n } else {\n select.value = '' + value\n }\n })\n}\n\nfunction hostNeedsUpdate(props: any, previous: any): boolean {\n for (const key in props) {\n if (props[key] !== previous[key] && key !== 'children' && key !== 'ref' && key !== 'key') return true\n }\n for (const key in previous) {\n if (key !== 'children' && key !== 'ref' && key !== 'key' && !(key in props)) return true\n }\n return false\n}\n\nfunction queueHostProps(el: Element, props: any, prev: any, isSvg: boolean, isInput: boolean, isTextarea: boolean, deferValue: boolean): void {\n queueMutation(() => {\n // Radio groups stay disconnected until type, value and checked agree.\n if (isInput) setProp(el, 'name', '', undefined, false)\n let events: string[] | undefined\n for (const key in props) {\n const next = props[key], previous = prev[key]\n if (next === previous || key === 'children' || key === 'ref' || key === 'key' || (deferValue && (key === 'value' || key === 'defaultValue')) || (isInput && (key === 'checked' || key === 'defaultChecked' || key === 'name'))) continue\n if (isEventProp(key)) {\n (events ||= []).push(key)\n } else setProp(el, key, next, previous, isSvg)\n }\n for (const key in prev) {\n if (key === 'children' || key === 'ref' || key === 'key' || ((isInput || isTextarea) && (key === 'value' || key === 'defaultValue')) || (isInput && (key === 'checked' || key === 'defaultChecked' || key === 'name'))) continue\n if (!(key in props)) setProp(el, key, undefined, prev[key], isSvg)\n }\n // Event resolution sees the new input type, as it does on mount.\n if (events) for (const key of events) setProp(el, key, props[key], prev[key], isSvg)\n if (isInput) {\n syncInputValue(el as HTMLInputElement, props, prev)\n setProp(el, 'name', props.name, prev.name, false)\n } else if (isTextarea) syncTextareaValue(el as HTMLTextAreaElement, props)\n })\n}\n\nfunction renderFunction(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const canBail = fiber === forceRerenderingFiber && fiber.pp === fiber.mp\n fiber.cx?.clear()\n let rendered: ReactNode | typeof HOOK_BAILOUT\n let deferredForHydration = false\n try {\n rendered = renderWithHooks(fiber, fiber.type, fiber.pp ?? {}, undefined, canBail)\n } catch (e: any) {\n if (isThenable(e)) {\n if (deferHydration(fiber, e)) {\n deferredForHydration = true\n } else {\n handleSuspended(fiber, e)\n return\n }\n } else {\n handleErrorInRender(fiber, e)\n return\n }\n }\n\n if (deferredForHydration || rendered === HOOK_BAILOUT) return\n\n reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor)\n fiber.mp = fiber.pp\n // dy cleared at rerender start; leaving true lets mid-render schedule persist\n}\n\nfunction hasAncestorHydrationCursor(_fiber: Fiber): boolean {\n // Reserved for future per-Suspense-boundary hydration deferral. For now the\n // top-level hydration path is all we need to special-case.\n return false\n}\n\nexport function deferHydration(fiber: Fiber, thenable: Promise<any>): boolean {\n if (!currentRoot?.h) return false\n const hostParent = findHydrationHost(fiber)\n const inheritedCursor = getHydrationCursor(hostParent)\n if (inheritedCursor) setHydrationCursor(fiber, inheritedCursor)\n ;((fiber.ms ??= {}) as any).p = true\n let sus: Fiber | null = fiber.parent\n while (sus && sus.tag !== FiberTag.Suspense) sus = sus.parent\n if (sus && sus.ms) {\n ;(sus.ms as any).a = true\n }\n const clearAwait = () => {\n if (sus && sus.ms) {\n ;(sus.ms as any).a = false\n }\n scheduleUpdate(fiber)\n }\n thenable.then(clearAwait, clearAwait)\n return true\n}\n\nfunction renderFragment(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const props = fiber.pp ?? {}\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n if (fiber.type === REACT_FRAGMENT_TYPE) {\n if (fiber.ref && !fiber.sn) fiber.sn = createFragmentInstance(fiber)\n const previous = fiber.ms?.ref\n if (previous !== fiber.ref) {\n if (fiber.cu) {\n const cleanups = fiber.cu\n queueMutation(() => {\n for (const cleanup of cleanups) {\n try { cleanup() } catch (error) { handleCommitError(fiber, error) }\n }\n })\n fiber.cu = null\n }\n detachRef(previous, fiber)\n fiber.ms = { ...fiber.ms, ref: fiber.ref }\n if (fiber.sn) attachRef(fiber, fiber.sn)\n }\n }\n fiber.mp = props\n // dy cleared at rerender start; leaving true lets mid-render schedule persist\n}\n\n// ---------------------------------------------------------------------------\n// Error handling + default Suspense capability\n// ---------------------------------------------------------------------------\n\n// Default handler when the Suspense feature isn't installed: just schedule\n// a re-render when the thrown thenable settles. No boundary walk, no\n// fallback swap \u2014 children render empty during the pending window.\nfunction defaultHandleSuspended(fiber: Fiber, thenable: Promise<any>): void {\n thenable.then(\n () => scheduleUpdate(fiber),\n () => scheduleUpdate(fiber),\n )\n}\n\n// ---------------------------------------------------------------------------\n// Capability hooks \u2014 cross-cutting behaviors that features override.\n// Defaults here preserve today's behavior so the indirection is transparent\n// when all features are loaded. A feature's full-module can install its own\n// implementation via installCapability(); stubs leave the default in place,\n// where the default may intentionally degrade (e.g. a no-Context build's\n// readContext never walks the tree because no Provider fibers exist).\n// ---------------------------------------------------------------------------\n\nexport interface Capabilities {\n handleSuspended: (fiber: Fiber, thenable: Promise<any>) => void\n readContext: (fiber: Fiber, ctx: any) => any\n isActivityHidden: (fiber: Fiber) => boolean\n activityIsDisconnected: (fiber: Fiber) => boolean\n prepareActivityFiber: (fiber: Fiber) => void\n syncActivity: (fiber: Fiber) => void\n}\n\nconst CAPABILITIES: Capabilities = {\n handleSuspended: defaultHandleSuspended,\n readContext: defaultReadContext,\n isActivityHidden: () => false,\n activityIsDisconnected: () => false,\n prepareActivityFiber: () => {},\n syncActivity: () => {},\n}\n\nexport function isActivityHidden(fiber: Fiber): boolean {\n return !!(fiber.root ?? currentRoot ?? findRoot(fiber))?.a && CAPABILITIES.isActivityHidden(fiber)\n}\n\nexport function activityIsDisconnected(fiber: Fiber): boolean {\n return !!fiber.root?.a && CAPABILITIES.activityIsDisconnected(fiber)\n}\n\nexport function layoutIsDisconnected(fiber: Fiber): boolean {\n return !!fiber.ld || activityIsDisconnected(fiber)\n}\n\nexport function rememberActivityEffect(fiber: Fiber, hook: Hook, effect: Effect): void {\n if (fiber.root?.a || (fiber.root?.sp && effect.t === 1 && !effect.s)) rememberRetainedEffect(fiber, hook, effect)\n}\n\nexport function installCapability<K extends keyof Capabilities>(\n name: K,\n fn: Capabilities[K],\n): void {\n CAPABILITIES[name] = fn\n}\n\n// Wrapper for features that catch thrown thenables inside their render\n// functions. Delegates to the installed Suspense capability.\nexport function handleSuspended(fiber: Fiber, thenable: Promise<any>): void {\n if (isActivityHidden(fiber) && !findSuspenseBoundary(fiber)) {\n defaultHandleSuspended(fiber, thenable)\n return\n }\n CAPABILITIES.handleSuspended(fiber, thenable)\n}\n\nexport class RenderSuspenseCapture {\n constructor(public boundary: Fiber) {}\n}\n\nexport function findSuspenseBoundary(fiber: Fiber): Fiber | null {\n let child = fiber\n for (let parent = fiber.parent; parent; parent = parent.parent) {\n if (parent.tag === FiberTag.Suspense && parent.ms?.f !== child) return parent\n // Hidden prerendering cannot activate a fallback outside its Activity.\n if (parent.tag === FiberTag.Activity && parent.pp?.mode === 'hidden') return null\n child = parent\n }\n return null\n}\n\nexport class RenderErrorCapture {\n stack: string\n constructor(public boundary: Fiber, public error: unknown, source: Fiber = boundary) {\n this.stack = componentStack(source)\n }\n}\n\nfunction captureError(capture: RenderErrorCapture): void {\n const fiber = capture.boundary\n fiber.ms = { ...fiber.ms, error: capture }\n scheduleUpdate(fiber)\n}\n\nfunction findErrorBoundary(fiber: Fiber): Fiber | null {\n for (let parent = fiber.parent; parent; parent = parent.parent) {\n if (parent.um || parent.pd) continue\n const instance = parent.sn\n if (instance?._fiber === parent && (parent.ms?.b?.getDerivedStateFromError || instance.componentDidCatch)) return parent\n }\n return null\n}\n\nfunction captureRootError(root: FiberRoot, stack: string, error: unknown): void {\n const errors = root.er ||= []\n if (!errors.length) root.u = undefined\n errors.push({ error, stack })\n scheduleUpdate(root.r)\n}\n\nfunction flushRootErrors(root: FiberRoot): void {\n const errors = root.er!\n root.er = undefined\n if (root.r.mp === null) queueMutation(() => { root.c.textContent = '' })\n renderRoot(root, null)\n queueCommitEffects(() => {\n for (const captured of errors) {\n try {\n if (root.ue) root.ue(captured.error, { componentStack: captured.stack })\n else if (typeof reportError === 'function') reportError(captured.error)\n else queueMicrotask(() => { throw captured.error })\n } catch (error) { setTimeout(() => { throw error }) }\n }\n })\n if (root.u) pendingRoots.add(root)\n}\n\nexport function recoverRootError(error: unknown, abort?: () => void): boolean {\n if (!(error instanceof RenderErrorCapture) || error.boundary.tag !== FiberTag.Root) return false\n const root = error.boundary.root!\n abort?.()\n discardPendingWork(root)\n discardPendingEffects(root)\n captureRootError(root, error.stack, error.error)\n return true\n}\n\nexport function handleCommitError(fiber: Fiber, error: unknown): void {\n const boundary = findErrorBoundary(fiber)\n if (boundary) {\n captureError(new RenderErrorCapture(boundary, error, fiber))\n return\n }\n const root = findRoot(fiber)\n if (root) captureRootError(root, componentStack(fiber), error)\n else queueMicrotask(() => { throw error })\n}\n\nexport function handleErrorInRender(fiber: Fiber, err: any): void {\n if (err instanceof RenderErrorCapture) throw err\n removeStagedCommits(fiber)\n for (const queue of [pendingEffects, pendingInsertionEffects, pendingCommits]) {\n for (let index = queue.length - 1; index >= 0; index--) {\n if (queue[index]![0] === fiber) removePendingEffect(queue, index)\n }\n }\n if (currentRoot?.h) {\n abortHydration(err, fiber)\n }\n // Bubble to nearest class boundary with getDerivedStateFromError / componentDidCatch\n const boundary = findErrorBoundary(fiber)\n if (boundary) {\n const capture = new RenderErrorCapture(boundary, err, fiber)\n if (currentCommit) throw capture\n captureError(capture)\n return\n }\n // Abort the prepared render. Its mutation/effect queues must not commit\n // before the root is cleared and the error callback runs.\n const root = currentRoot ?? findRoot(fiber)\n if (root && currentCommit && (flushing || root.ue)) throw new RenderErrorCapture(root.r, err, fiber)\n if (root?.ue) root.ue(err, { componentStack: componentStack(fiber) })\n else throw err\n}\n\nexport function isThenable(x: any): x is Promise<any> {\n return x != null && typeof x.then == 'function'\n}\n\n// ---------------------------------------------------------------------------\n// Unmount\n// ---------------------------------------------------------------------------\n\nexport function unmountFiber(fiber: Fiber, domParent: Node, remove = true): void {\n if (fiber.um) return\n if (currentCommit) return queueUnmount(fiber, domParent, remove)\n removeStagedCommits(fiber)\n if (fiber.type === REACT_FRAGMENT_TYPE && fiber.sn) {\n if (fiber.cu) {\n for (const cleanup of fiber.cu) {\n try { cleanup() } catch (error) { handleCommitError(fiber, error) }\n }\n fiber.cu = null\n }\n detachRef(fiber.cr ?? fiber.ref, fiber)\n }\n fiber.um = true\n if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) updateFragmentHost(fiber, false)\n if (fiber.type === REACT_FRAGMENT_TYPE && fiber.sn) fiber.sn.dispose()\n if (fiber.tag === FiberTag.Suspense && fiber.ms?.f) {\n unmountFiber(fiber.ms.f, domParent, remove)\n fiber.ms.f = null\n }\n // Run cu (fx + layout fx)\n if (fiber.cu) {\n const cleanups = fiber.cu\n fiber.cu = null\n for (const cleanup of cleanups) {\n try {\n cleanup()\n } catch (e) {\n handleCommitError(fiber, e)\n }\n }\n }\n\n if (fiber.sn?._fiber === fiber) {\n const committed = fiber.ms?.c\n if (committed) { fiber.sn.props = committed.props; fiber.sn.state = committed.state }\n if (fiber.sn.componentWillUnmount && !layoutIsDisconnected(fiber)) {\n try {\n fiber.sn.componentWillUnmount()\n } catch (e) {\n handleCommitError(fiber, e)\n }\n }\n fiber.sn._fiber = null\n fiber.sn._enqueueUpdate = null\n fiber.sn._forceUpdate = null\n }\n\n // Detach ref\n if (fiber.cr ?? fiber.ref) detachRef(fiber.cr ?? fiber.ref, fiber)\n\n let c = fiber.child\n while (c) {\n const next = c.sibling\n unmountFiber(c, fiber.tag === FiberTag.Host ? fiber.dom! : domParent, fiber.tag === FiberTag.Portal || (remove && fiber.tag !== FiberTag.Host))\n c = next\n }\n fiber.child = null\n\n // Remove DOM if host\n if (remove && (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) && fiber.dom?.parentNode) {\n fiber.dom.parentNode.removeChild(fiber.dom)\n }\n}\n\nfunction queueUnmount(fiber: Fiber, domParent: Node, remove: boolean): void {\n if (fiber.pd) return\n // Keep committed DOM available for snapshots, but stop deleted work now.\n const deleted: Fiber[] = []\n markPendingDeletion(fiber, deleted)\n const restore = () => { for (const child of deleted) child.pd = false }\n onCommitRollback(restore)\n onCommitFailure(restore)\n queueMutation(() => unmountFiber(fiber, domParent, remove))\n}\n\nfunction markPendingDeletion(fiber: Fiber, deleted: Fiber[]): void {\n if (fiber.pd) return\n fiber.pd = true\n deleted.push(fiber)\n for (let child = fiber.child; child; child = child.sibling) markPendingDeletion(child, deleted)\n if (fiber.tag === FiberTag.Suspense && fiber.ms?.f) markPendingDeletion(fiber.ms.f, deleted)\n}\n\nexport function unmountAllChildren(parent: Fiber, domParent: Node): void {\n let c = parent.child\n while (c) {\n const next = c.sibling\n unmountFiber(c, domParent)\n c = next\n }\n parent.child = null\n}\n\n// ---------------------------------------------------------------------------\n// DOM navigation helpers\n// ---------------------------------------------------------------------------\n\nfunction insertInto(parent: Node, node: Node, anchor: Node | null): void {\n if (currentCommit && parent !== preparedParent) return queueInsertion(parent, node, anchor)\n const projectedHeadParent = getDocumentHeadInsertionParent(parent, node)\n if (projectedHeadParent) {\n projectedHeadParent.appendChild(node)\n return\n }\n\n // Anchor may have been removed or moved since it was computed (mutations\n // from unmount, boundary reveal, user code, HMR). If it's no longer a child\n // of `parent`, fall back to append \u2014 trying to insertBefore a non-child\n // throws NotFoundError and dev-loops the reconciler.\n if (anchor && anchor.parentNode === parent) {\n parent.insertBefore(node, anchor)\n } else {\n parent.appendChild(node)\n }\n}\n\nfunction queueInsertion(parent: Node, node: Node, anchor: Node | null): void {\n queueMutation(() => insertInto(parent, node, anchor))\n}\n\nconst DOCUMENT_HEAD_TAGS = new Set(['base', 'link', 'meta', 'script', 'style', 'title'])\n\nfunction getDocumentHeadInsertionParent(parent: Node, node: Node): HTMLHeadElement | null {\n if (parent.nodeType !== 9 || node.nodeType !== 1) return null\n const tag = (node as Element).tagName.toLowerCase()\n if (!DOCUMENT_HEAD_TAGS.has(tag)) return null\n return (parent as Document).head\n}\n\nexport function getHostParent(fiber: Fiber): Node {\n let p = fiber.parent\n while (p) {\n if (p.tag === FiberTag.Host) return p.dom!\n if (p.tag === FiberTag.Root)\n return (p.sn as Node) || (p.dom as Node) || (p.root?.c as Node)\n if (p.tag === FiberTag.Portal) {\n // Portal renders its children into the `container` prop, not into any\n // DOM element the portal fiber \"owns\". Read the container from the\n // portal's own props so a rerenderFiber triggered on a descendant\n // (e.g. a Floating-UI-positioned popper in a Radix Portal) finds its\n // host parent \u2014 otherwise getHostParent returns undefined and the\n // next renderHost crashes reading `.namespaceURI` on undefined.\n const props = (p.pp ?? p.mp) as { container?: Element } | null\n return (props?.container as Node) || (p.sn as Node) || (p.dom as Node) || (p.root?.c as Node)\n }\n p = p.parent\n }\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('No host parent found.')\n }\n throw new Error()\n}\n\nexport function getAnchor(fiber: Fiber, domParent: Node): Node | null {\n let p: Fiber | null = fiber\n while (p) {\n let sibling = p.sibling\n while (sibling) {\n const d = firstDomNode(sibling, domParent)\n if (d) return d\n sibling = sibling.sibling\n }\n p = p.parent\n if (p?.tag === FiberTag.Host || p?.tag === FiberTag.Root || p?.tag === FiberTag.Portal) break\n }\n return null\n}\n\nfunction firstDomNode(fiber: Fiber, domParent: Node): Node | null {\n if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) {\n return fiber.dom?.parentNode === domParent ? fiber.dom : null\n }\n let c = fiber.child\n while (c) {\n const d = firstDomNode(c, domParent)\n if (d) return d\n c = c.sibling\n }\n return fiber.tag === FiberTag.Suspense && fiber.ms?.f ? firstDomNode(fiber.ms.f, domParent) : null\n}\n\n// ---------------------------------------------------------------------------\n// Context read \u2014 exported for dispatcher.ts (useContext, use()). Delegates to\n// the installed capability so the Context feature can override with a walking\n// implementation that finds the nearest Provider fiber. When the feature is\n// stubbed, the default here returns ctx._currentValue \u2014 correct because no\n// Provider fibers exist in the tree (Provider element \u2192 Fragment via the\n// stub's type matcher).\n// ---------------------------------------------------------------------------\n\nexport function readContext(fiber: Fiber, ctx: any): any {\n return CAPABILITIES.readContext(fiber, ctx)\n}\n\nfunction defaultReadContext(_fiber: Fiber, ctx: any): any {\n return ctx._currentValue\n}\n\n// ---------------------------------------------------------------------------\n// Refs\n// ---------------------------------------------------------------------------\n\nexport function attachRef(fiber: Fiber, value: any): void {\n const ref = fiber.ref ?? (fiber.pp?.ref ?? null)\n if (!ref) return\n if (isActivityHidden(fiber) || layoutIsDisconnected(fiber)) return\n stageCommit(fiber, () => {\n if (fiber.tag === FiberTag.Resource) value = fiber.sn\n fiber.cr = ref\n if (typeof ref == 'function') {\n // Callback refs run during commit, after insertion effects install\n // event callback implementations and in subtree layout order.\n const cleanup = ref(value)\n fiber.cu ||= []\n const detach = typeof cleanup == 'function' ? cleanup : () => ref(null)\n fiber.rc = detach\n fiber.cu.push(detach)\n } else {\n ref.current = value\n }\n }, true)\n}\n\nexport function syncRefIfChanged(fiber: Fiber, value: any): void {\n const ref = fiber.ref ?? (fiber.pp?.ref ?? null)\n if (!ref && !fiber.cr) return\n if (isActivityHidden(fiber) || layoutIsDisconnected(fiber)) return\n const previous = fiber.cr ?? null\n if (previous !== ref) {\n const cleanup = fiber.rc\n queueMutation(() => {\n if (cleanup) {\n const index = fiber.cu?.indexOf(cleanup) ?? -1\n if (index >= 0) fiber.cu!.splice(index, 1)\n fiber.rc = null\n try { cleanup() } catch (error) { handleCommitError(fiber, error) }\n }\n detachRef(previous, fiber)\n fiber.cr = null\n })\n attachRef(fiber, value)\n } else if (ref && typeof ref === 'object' && ref.current !== value) attachRef(fiber, value)\n}\n\nexport function detachRef(ref: any, fiber?: Fiber): void {\n // Function refs are handled via fiber.cu (queued in attachRef during\n // the commit phase): the cleanup either invokes the user-returned cleanup\n // fn or calls ref(null). Calling ref(null) here would double-fire it.\n if (ref && typeof ref === 'object') {\n queueMutation(() => {\n try { ref.current = null }\n catch (error) { if (fiber) handleCommitError(fiber, error); else throw error }\n })\n }\n}\n\n// ---------------------------------------------------------------------------\n// Effects\n// ---------------------------------------------------------------------------\n\nconst pendingEffects: Array<[Fiber, Effect]> = []\nconst pendingInsertionEffects: Array<[Fiber, Effect]> = []\ntype LayoutCommit = [Fiber, Effect | (() => void), boolean]\nconst pendingCommits: LayoutCommit[] = []\nconst stagedCommits = new Map<Fiber, LayoutCommit[]>()\n// Track only fibers with queued work. A ref-less descendant can finish with\n// one identity check, even while an ancestor has a pending layout effect.\nconst stagedFibers: Fiber[] = []\nlet lastStagedFiber: Fiber | undefined\n\n// Appends are covered by checkpoint lengths. Only removals need to retain\n// the affected entry, and only while a render has a rollback checkpoint.\nfunction removePendingEffect(queue: Array<[Fiber, Effect] | LayoutCommit>, index: number): void {\n const entry = queue[index]!\n queue.splice(index, 1)\n if (currentCommit?.c.length) onCommitRollback(() => { queue.splice(index, 0, entry) })\n}\n\nfunction stageCommit(fiber: Fiber, work: Effect | (() => void), ref = false): void {\n let entries = stagedCommits.get(fiber)\n if (!entries) {\n stagedCommits.set(fiber, entries = [])\n stagedFibers.push(fiber)\n lastStagedFiber = fiber\n }\n entries.push([fiber, work, ref])\n}\n\nfunction removeStagedCommits(fiber: Fiber): void {\n if (!stagedCommits.delete(fiber)) return\n if (lastStagedFiber === fiber) stagedFibers.pop()\n else stagedFibers.splice(stagedFibers.lastIndexOf(fiber), 1)\n lastStagedFiber = stagedFibers[stagedFibers.length - 1]\n}\n\n// Rendering already visits the tree in order. Completing a fiber stages its\n// layout work after its children, without another tree walk at commit time.\nexport function flushFiberCommits(fiber: Fiber): void {\n const entries = stagedCommits.get(fiber)\n if (!entries) return\n removeStagedCommits(fiber)\n if (fiber.type === REACT_FRAGMENT_TYPE) {\n // React attaches Fragment refs before their descendants. Only referenced\n // Fragments need to locate this insertion point among queued commits.\n let index = pendingCommits.length\n outer: for (let i = 0; i < pendingCommits.length; i++) {\n for (let parent = pendingCommits[i]![0].parent; parent; parent = parent.parent) {\n if (parent === fiber) { index = i; break outer }\n }\n }\n if (index < pendingCommits.length && currentCommit?.c.length) {\n const count = entries.length\n onCommitRollback(() => { pendingCommits.splice(index, count) })\n }\n pendingCommits.splice(index, 0, ...entries)\n } else if (fiber.tag === FiberTag.Class || fiber.sn?._fiber === fiber) {\n for (const entry of entries) if (!entry[2]) pendingCommits.push(entry)\n for (const entry of entries) if (entry[2]) pendingCommits.push(entry)\n } else {\n for (const entry of entries) pendingCommits.push(entry)\n }\n}\n\nexport function enqueueEffect(fiber: Fiber, effect: Effect): void {\n if (effect.t !== 2 && (isActivityHidden(fiber) || activityIsDisconnected(fiber) || (effect.t === 1 && !effect.s && fiber.ld))) return\n if (effect.t === 2) pendingInsertionEffects.push([fiber, effect])\n else if (effect.t === 1) stageCommit(fiber, effect)\n else pendingEffects.push([fiber, effect])\n}\n\nexport function scheduleLifecycle(fiber: Fiber, fn: () => void): void {\n if (isActivityHidden(fiber) || layoutIsDisconnected(fiber)) return\n stageCommit(fiber, fn)\n}\n\nexport function runEffects(root: FiberRoot): void {\n if (root.fr) refreshFragmentInstances(root)\n if (!pendingInsertionEffects.length && !pendingCommits.length && !pendingEffects.length) return\n flushEffects(root)\n}\n\nfunction flushEffects(root: FiberRoot): void {\n const insertion = pendingInsertionEffects.splice(0)\n const layout = pendingCommits.splice(0)\n const batch = pendingEffects.splice(0)\n if (currentCommit?.c.length) onCommitRollback(() => {\n // A nested render can drain these queues before an enclosing attempt\n // fails. Reuse the captured batches, then older checkpoints trim tails.\n pendingInsertionEffects.unshift(...insertion)\n pendingCommits.unshift(...layout)\n pendingEffects.unshift(...batch)\n })\n queueCommitEffects(() => {\n for (const [fiber, effect] of insertion) runEffect(fiber, effect, root)\n if (layout.length) {\n for (const [fiber, work] of layout) {\n if (typeof work !== 'function' && !fiber.um && !isActivityHidden(fiber) && !layoutIsDisconnected(fiber)) work.d?.()\n }\n const runLayout = () => {\n for (const [fiber, work] of layout) {\n if (typeof work !== 'function') runEffect(fiber, work, root)\n else if (!fiber.um && !isActivityHidden(fiber) && !layoutIsDisconnected(fiber)) {\n try { work() } catch (error) { handleCommitError(fiber, error) }\n }\n }\n }\n if (!deferTransitionLayout(runLayout)) runLayout()\n }\n // Passive fx on microtask\n if (batch.length) {\n const passive = () => {\n for (const [fiber, effect] of batch) runEffect(fiber, effect, root)\n }\n if (!deferTransitionPassive(passive)) queueMicrotask(passive)\n }\n })\n}\n\nsetCommitCheckpointHook(() => {\n // A parent allocated before this savepoint can contain eager insertions\n // from an abandoned child render. Restore only that new, detached host.\n const parent = preparedParent as Element | null\n const children = parent && Array.from(parent.childNodes)\n const effects = pendingEffects.length, insertion = pendingInsertionEffects.length, commits = pendingCommits.length\n const staged = new Map([...stagedCommits].map(([fiber, work]) => [fiber, work.slice()]))\n const stack = stagedFibers.slice(), last = lastStagedFiber\n onCommitRollback(() => {\n if (parent) parent.replaceChildren(...children!)\n pendingEffects.length = effects\n pendingInsertionEffects.length = insertion\n pendingCommits.length = commits\n stagedCommits.clear()\n for (const [fiber, work] of staged) stagedCommits.set(fiber, work)\n stagedFibers.splice(0, stagedFibers.length, ...stack)\n lastStagedFiber = last\n })\n})\n\nfunction runEffect(fiber: Fiber, effect: Effect, root: FiberRoot): void {\n if (fiber.um) return\n if (effect.t !== 2 && (isActivityHidden(fiber) || activityIsDisconnected(fiber) || (effect.t === 1 && !effect.s && fiber.ld))) return\n try {\n const cleanup = effect.c()\n if (typeof cleanup == 'function') {\n fiber.cu ||= []\n fiber.cu.push(cleanup)\n }\n } catch (e) {\n handleCommitError(fiber, e)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Utilities\n// ---------------------------------------------------------------------------\n\nfunction isEventProp(name: string): boolean {\n return (\n name.length > 2 &&\n name.charCodeAt(0) === 111 /* o */ &&\n name.charCodeAt(1) === 110 /* n */ &&\n name.charCodeAt(2) >= 65 /* 'A'-ish: any uppercase start (onClick, onChange, \u2026) */\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["f"]
7
7
  }
@@ -0,0 +1,6 @@
1
+ export declare function prefetchDNS(href: string): void;
2
+ export declare function preconnect(href: string, input?: any): void;
3
+ export declare function preload(href: string, input?: any): void;
4
+ export declare function preinit(href: string, input?: any): void;
5
+ export declare function preloadModule(href: string, input?: any): void;
6
+ export declare function preinitModule(href: string, input?: any): void;
@@ -0,0 +1,115 @@
1
+ // src/dom/resource-hints.ts
2
+ import { resourceHintDispatcher, resourceURL } from "../core/resource-hints.js";
3
+ import { adoptResourceProps, getResources, insertResource, resourceAttribute, resourceSelector } from "./resource-store.js";
4
+ var requestOptions = "integrity fetchPriority";
5
+ function options(input, fields, as) {
6
+ const result = {};
7
+ for (const name of fields ? fields.split(" ") : []) {
8
+ const value = input?.[name];
9
+ if (typeof value === "string") result[name] = value;
10
+ }
11
+ const crossOrigin = input?.crossOrigin;
12
+ if (as === "font" || typeof crossOrigin === "string") {
13
+ result.crossOrigin = as !== "font" && crossOrigin === "use-credentials" ? crossOrigin : "";
14
+ }
15
+ return result;
16
+ }
17
+ function scriptDestination(as) {
18
+ return /^(script|audioworklet|paintworklet|serviceworker|sharedworker|worker)$/.test(as);
19
+ }
20
+ function emit(kind, href, props) {
21
+ if (!href || resourceHintDispatcher.emit?.(kind, href, props) || typeof document === "undefined") return;
22
+ const resources = getResources(document);
23
+ const style = kind === "stylesheet";
24
+ const script = kind === "script" || kind === "module-script";
25
+ const preload2 = kind === "preload" || kind === "modulepreload";
26
+ const as = props.as || "script";
27
+ let selector;
28
+ let tag = "link";
29
+ if (style || script) {
30
+ selector = resourceSelector(href, style ? "style" : "script");
31
+ if (resources.instances.has(selector)) return;
32
+ const existing = document.querySelector(selector);
33
+ if (existing) {
34
+ resources.instances.set(selector, existing);
35
+ return;
36
+ }
37
+ adoptResourceProps(props, resources.preloads.get(selector), script);
38
+ if (style) {
39
+ props = { rel: "stylesheet", href, "data-precedence": props.precedence, ...props };
40
+ delete props.precedence;
41
+ } else {
42
+ tag = "script";
43
+ props = { src: href, async: "", ...kind === "module-script" ? { type: "module" } : {}, ...props };
44
+ }
45
+ } else {
46
+ selector = `link[rel="${kind}"]`;
47
+ let resource = "";
48
+ if (preload2) {
49
+ selector += resourceAttribute("as", as);
50
+ if (as === "image" && props.imageSrcSet) {
51
+ selector += resourceAttribute("imagesrcset", props.imageSrcSet);
52
+ if (typeof props.imageSizes === "string") selector += resourceAttribute("imagesizes", props.imageSizes);
53
+ } else selector += resourceAttribute("href", href);
54
+ resource = (kind === "preload" ? as === "script" || as === "style" : scriptDestination(as)) ? resourceSelector(href, as) : "";
55
+ } else {
56
+ selector += resourceAttribute("href", href);
57
+ if (props.crossOrigin != null) selector += resourceAttribute("crossorigin", props.crossOrigin);
58
+ }
59
+ const key = resource || selector;
60
+ if (resources.preloads.has(key)) return;
61
+ resources.preloads.set(key, props);
62
+ if (document.querySelector(selector) || resource && document.querySelector(resource)) return;
63
+ props = { rel: kind, ...kind === "preload" && as === "image" && props.imageSrcSet ? {} : { href }, ...props };
64
+ }
65
+ const node = document.createElement(tag);
66
+ for (const name in props) {
67
+ const value = props[name];
68
+ node.setAttribute(name.toLowerCase(), name === "href" || name === "src" ? resourceURL(value) : value);
69
+ }
70
+ if (style || script) resources.instances.set(selector, node);
71
+ insertResource(node, style ? props["data-precedence"] : void 0);
72
+ }
73
+ function prefetchDNS(href) {
74
+ if (typeof href === "string") emit("dns-prefetch", href, {});
75
+ }
76
+ function preconnect(href, input) {
77
+ if (typeof href === "string") emit("preconnect", href, options(input, ""));
78
+ }
79
+ function preload(href, input) {
80
+ if (typeof href === "string" && input && typeof input === "object" && typeof input.as === "string" && input.as) {
81
+ emit("preload", href, options(input, "as nonce type referrerPolicy imageSrcSet imageSizes media " + requestOptions, input.as));
82
+ }
83
+ }
84
+ function preinit(href, input) {
85
+ if (typeof href === "string" && input) {
86
+ if (input.as === "style") {
87
+ const props = options(input, "precedence " + requestOptions);
88
+ props.precedence ||= "default";
89
+ emit("stylesheet", href, props);
90
+ } else if (input.as === "script") {
91
+ emit("script", href, options(input, "nonce " + requestOptions));
92
+ }
93
+ }
94
+ }
95
+ function preloadModule(href, input) {
96
+ if (typeof href === "string") {
97
+ const props = options(input, "as nonce " + requestOptions, input?.as);
98
+ if (props.as === "script") delete props.as;
99
+ emit("modulepreload", href, props);
100
+ }
101
+ }
102
+ function preinitModule(href, input) {
103
+ if (typeof href === "string" && (input == null || typeof input === "object" && (input.as == null || input.as === "script"))) {
104
+ emit("module-script", href, options(input, "nonce " + requestOptions));
105
+ }
106
+ }
107
+ export {
108
+ preconnect,
109
+ prefetchDNS,
110
+ preinit,
111
+ preinitModule,
112
+ preload,
113
+ preloadModule
114
+ };
115
+ //# sourceMappingURL=resource-hints.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/dom/resource-hints.ts"],
4
+ "sourcesContent": ["import { resourceHintDispatcher, resourceURL, type ResourceHintKind, type ResourceHintOptions } from '../core/resource-hints'\nimport { adoptResourceProps, getResources, insertResource, resourceAttribute, resourceSelector } from './resource-store'\nconst requestOptions = 'integrity fetchPriority'\n\nfunction options(input: any, fields: string, as?: string): ResourceHintOptions {\n const result: ResourceHintOptions = {}\n for (const name of fields ? fields.split(' ') : []) {\n const value = input?.[name]\n if (typeof value === 'string') result[name] = value\n }\n const crossOrigin = input?.crossOrigin\n if (as === 'font' || typeof crossOrigin === 'string') {\n result.crossOrigin = as !== 'font' && crossOrigin === 'use-credentials' ? crossOrigin : ''\n }\n return result\n}\n\nfunction scriptDestination(as: string): boolean {\n return /^(script|audioworklet|paintworklet|serviceworker|sharedworker|worker)$/.test(as)\n}\n\nfunction emit(kind: ResourceHintKind, href: string, props: ResourceHintOptions): void {\n if (!href || resourceHintDispatcher.emit?.(kind, href, props) || typeof document === 'undefined') return\n const resources = getResources(document)\n\n const style = kind === 'stylesheet'\n const script = kind === 'script' || kind === 'module-script'\n const preload = kind === 'preload' || kind === 'modulepreload'\n const as = props.as || 'script'\n let selector: string\n let tag = 'link'\n if (style || script) {\n selector = resourceSelector(href, style ? 'style' : 'script')\n if (resources.instances.has(selector)) return\n const existing = document.querySelector(selector)\n if (existing) { resources.instances.set(selector, existing); return }\n adoptResourceProps(props, resources.preloads.get(selector), script)\n if (style) {\n props = { rel: 'stylesheet', href, 'data-precedence': props.precedence!, ...props }\n delete props.precedence\n } else {\n tag = 'script'\n props = { src: href, async: '', ...(kind === 'module-script' ? { type: 'module' } : {}), ...props }\n }\n } else {\n selector = `link[rel=\"${kind}\"]`\n let resource = ''\n if (preload) {\n selector += resourceAttribute('as', as)\n if (as === 'image' && props.imageSrcSet) {\n selector += resourceAttribute('imagesrcset', props.imageSrcSet)\n if (typeof props.imageSizes === 'string') selector += resourceAttribute('imagesizes', props.imageSizes)\n } else selector += resourceAttribute('href', href)\n resource = (kind === 'preload' ? as === 'script' || as === 'style' : scriptDestination(as))\n ? resourceSelector(href, as)\n : ''\n } else {\n selector += resourceAttribute('href', href)\n if (props.crossOrigin != null) selector += resourceAttribute('crossorigin', props.crossOrigin)\n }\n const key = resource || selector\n if (resources.preloads.has(key)) return\n resources.preloads.set(key, props)\n if (document.querySelector(selector) || resource && document.querySelector(resource)) return\n props = { rel: kind, ...(kind === 'preload' && as === 'image' && props.imageSrcSet ? {} : { href }), ...props }\n }\n\n const node = document.createElement(tag)\n for (const name in props) {\n const value = props[name]!\n node.setAttribute(name.toLowerCase(), name === 'href' || name === 'src' ? resourceURL(value) : value)\n }\n if (style || script) resources.instances.set(selector, node)\n insertResource(node, style ? props['data-precedence'] : undefined)\n}\n\nexport function prefetchDNS(href: string): void {\n if (typeof href === 'string') emit('dns-prefetch', href, {})\n}\n\nexport function preconnect(href: string, input?: any): void {\n if (typeof href === 'string') emit('preconnect', href, options(input, ''))\n}\n\nexport function preload(href: string, input?: any): void {\n if (typeof href === 'string' && input && typeof input === 'object' && typeof input.as === 'string' && input.as) {\n emit('preload', href, options(input, 'as nonce type referrerPolicy imageSrcSet imageSizes media ' + requestOptions, input.as))\n }\n}\n\nexport function preinit(href: string, input?: any): void {\n if (typeof href === 'string' && input) {\n if (input.as === 'style') {\n const props = options(input, 'precedence ' + requestOptions)\n props.precedence ||= 'default'\n emit('stylesheet', href, props)\n } else if (input.as === 'script') {\n emit('script', href, options(input, 'nonce ' + requestOptions))\n }\n }\n}\n\nexport function preloadModule(href: string, input?: any): void {\n if (typeof href === 'string') {\n const props = options(input, 'as nonce ' + requestOptions, input?.as)\n if (props.as === 'script') delete props.as\n emit('modulepreload', href, props)\n }\n}\n\nexport function preinitModule(href: string, input?: any): void {\n if (typeof href === 'string' && (input == null || typeof input === 'object' && (input.as == null || input.as === 'script'))) {\n emit('module-script', href, options(input, 'nonce ' + requestOptions))\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["preload"]
7
+ }
@@ -0,0 +1,13 @@
1
+ import type { ResourceHintOptions } from "../core/resource-hints.js";
2
+ interface Resources {
3
+ preloads: Map<string, ResourceHintOptions>;
4
+ instances: Map<string, Element>;
5
+ }
6
+ export type ResourceRoot = Document | DocumentFragment;
7
+ export declare const createdStylesheets: WeakSet<Element>;
8
+ export declare function resourceAttribute(name: string, value: string): string;
9
+ export declare function resourceSelector(href: string, as: string): string;
10
+ export declare function getResources(root: ResourceRoot): Resources;
11
+ export declare function adoptResourceProps(props: any, prior: ResourceHintOptions | undefined, script: boolean): void;
12
+ export declare function insertResource(node: Element, precedence?: string, root?: ResourceRoot): void;
13
+ export {};
@@ -0,0 +1,43 @@
1
+ // src/dom/resource-store.ts
2
+ var roots = /* @__PURE__ */ new WeakMap();
3
+ var createdStylesheets = /* @__PURE__ */ new WeakSet();
4
+ function resourceAttribute(name, value) {
5
+ return `[${name}="${value.replace(/[\n"\\]/g, (char) => "\\" + char.charCodeAt(0).toString(16) + " ")}"]`;
6
+ }
7
+ function resourceSelector(href, as) {
8
+ return as === "style" ? 'link[rel="stylesheet"]' + resourceAttribute("href", href) : "script[async]" + resourceAttribute("src", href);
9
+ }
10
+ function getResources(root) {
11
+ let resources = roots.get(root);
12
+ if (!resources) roots.set(root, resources = { preloads: /* @__PURE__ */ new Map(), instances: /* @__PURE__ */ new Map() });
13
+ return resources;
14
+ }
15
+ function adoptResourceProps(props, prior, script) {
16
+ if (prior) for (const name of ["crossOrigin", "referrerPolicy", script ? "integrity" : "title"]) {
17
+ if (props[name] == null && prior[name] != null) props[name] = prior[name];
18
+ }
19
+ }
20
+ function insertResource(node, precedence, root = node.ownerDocument) {
21
+ const container = root.nodeType === 9 ? root.head : root;
22
+ if (precedence != null) {
23
+ if (node.localName === "link") createdStylesheets.add(node);
24
+ let previous;
25
+ let matched = false;
26
+ for (const sibling of root.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]')) {
27
+ if (sibling.getAttribute("data-precedence") === precedence) matched = true;
28
+ else if (matched) break;
29
+ previous = sibling;
30
+ }
31
+ if (previous) previous.parentNode.insertBefore(node, previous.nextSibling);
32
+ else container.insertBefore(node, container.firstChild);
33
+ } else container.appendChild(node);
34
+ }
35
+ export {
36
+ adoptResourceProps,
37
+ createdStylesheets,
38
+ getResources,
39
+ insertResource,
40
+ resourceAttribute,
41
+ resourceSelector
42
+ };
43
+ //# sourceMappingURL=resource-store.js.map