@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,19 +1,27 @@
1
- // packages/redact/src/dom/reconcile.ts
1
+ // src/dom/reconcile.ts
2
2
  import {
3
3
  FiberTag,
4
4
  createFiber,
5
5
  REACT_ELEMENT_TYPE,
6
6
  REACT_LEGACY_ELEMENT_TYPE,
7
7
  REACT_FRAGMENT_TYPE
8
- } from "../core";
8
+ } from "../core/index.js";
9
9
  import {
10
10
  ReactSharedInternals,
11
11
  REACT_LAZY_TYPE,
12
12
  REACT_STRICT_MODE_TYPE,
13
- REACT_PROFILER_TYPE
14
- } from "../react";
15
- import { createHostNode, setProp } from "./dom";
16
- import { makeDispatcher } from "./dispatcher";
13
+ REACT_PROFILER_TYPE,
14
+ REACT_VIEW_TRANSITION_TYPE
15
+ } from "../react/index.js";
16
+ import { createHostNode, setProp, syncInputValue, syncTextareaValue } from "./dom.js";
17
+ import { HOOK_BAILOUT, renderWithHooks } from "./dispatcher.js";
18
+ import { rememberRetainedEffect, setLayoutDisconnected } from "./retained-effects.js";
19
+ import { componentStack } from "./error-info.js";
20
+ import { resourceKind } from "../core/resource-hints.js";
21
+ import { acquireResource } from "./resources.js";
22
+ import { currentCommit, commitSynchronously, queueMutation, queueText, queueCommitEffects, setCommitCheckpointHook, onCommitRollback, onCommitFailure, checkpointCommit, rewindCommit, rememberChildList } from "./commit.js";
23
+ import { markTransitionUpdate, deferTransition, cancelTransitions, deferTransitionLayout, deferTransitionPassive } from "./features/view-transition/index.js";
24
+ import { createFragmentInstance, updateFragmentHost, refreshFragmentInstances } from "./features/fragment-refs/index.js";
17
25
  import {
18
26
  adoptHostDom,
19
27
  adoptTextDom,
@@ -22,19 +30,28 @@ import {
22
30
  clearHydrationCursor,
23
31
  findHostParent as findHydrationHost,
24
32
  abortHydration,
25
- recoverHydration
26
- } from "./features/hydration";
33
+ recoverHydration,
34
+ isHydrationBailout
35
+ } from "./features/hydration/index.js";
27
36
  var currentRoot = null;
37
+ var preparedParent = null;
28
38
  var flushing = false;
29
39
  var isBatching = false;
30
40
  var pendingRoots = /* @__PURE__ */ new Set();
31
41
  var forceRerenderingFiber = null;
32
42
  function scheduleUpdate(fiber) {
33
- if (fiber.um) return;
43
+ if (fiber.um || fiber.pd) return;
44
+ fiber.dy = true;
45
+ if (ReactSharedInternals.F === fiber) return;
34
46
  const root = findRoot(fiber);
35
47
  if (!root) return;
48
+ while (fiber.su) {
49
+ fiber = fiber.su;
50
+ fiber.ms.u = true;
51
+ fiber.dy = true;
52
+ }
53
+ markTransitionUpdate(root);
36
54
  root.p.add(fiber);
37
- fiber.dy = true;
38
55
  pendingRoots.add(root);
39
56
  if (isBatching) return;
40
57
  if (!root.s) {
@@ -43,14 +60,19 @@ function scheduleUpdate(fiber) {
43
60
  }
44
61
  }
45
62
  function flushSyncWork(fn) {
63
+ cancelTransitions();
64
+ const transition = ReactSharedInternals.T;
65
+ ReactSharedInternals.T = null;
46
66
  const wasBatching = isBatching;
47
67
  isBatching = true;
48
68
  try {
49
69
  fn();
70
+ isBatching = wasBatching;
71
+ flushPending();
50
72
  } finally {
51
73
  isBatching = wasBatching;
74
+ ReactSharedInternals.T = transition;
52
75
  }
53
- flushPending();
54
76
  }
55
77
  function batchedUpdates(fn) {
56
78
  const wasBatching = isBatching;
@@ -69,7 +91,7 @@ function flushPending() {
69
91
  let guard = 0;
70
92
  while (pendingRoots.size > 0) {
71
93
  if (++guard > 50) {
72
- if (true) {
94
+ if (process.env.NODE_ENV !== "production") {
73
95
  throw new Error("flushPending exceeded 50 iterations \u2014 suspected infinite update loop.");
74
96
  }
75
97
  throw new Error();
@@ -78,47 +100,92 @@ function flushPending() {
78
100
  pendingRoots.clear();
79
101
  for (const root of roots) {
80
102
  root.s = false;
81
- const pending = [...root.p];
82
- root.p.clear();
83
- pending.sort((a, b) => fiberDepth(a) - fiberDepth(b));
84
- for (const fiber of pending) {
103
+ const render = () => flushRoot(root);
104
+ if (!deferTransition(root, render, flushPending)) {
85
105
  try {
86
- rerenderFiber(fiber, root);
106
+ commitSynchronously(render);
87
107
  } catch (error) {
88
- if (!recoverHydration(root, error)) throw error;
89
- break;
108
+ if (!recoverRootError(error)) throw error;
90
109
  }
91
110
  }
92
- runEffects(root);
93
111
  }
94
112
  }
95
113
  } finally {
96
114
  flushing = false;
97
115
  }
98
116
  }
117
+ function flushRoot(root) {
118
+ if (root.er) {
119
+ flushRootErrors(root);
120
+ return;
121
+ }
122
+ const render = root.u;
123
+ root.u = void 0;
124
+ if (render) render();
125
+ const pending = [...root.p];
126
+ root.p.clear();
127
+ pending.sort((a, b) => fiberDepth(a) - fiberDepth(b));
128
+ for (const fiber of pending) {
129
+ if (!fiber.dy || fiber.um || fiber.pd) continue;
130
+ const boundary = root.eb && findErrorBoundary(fiber);
131
+ const checkpoint = boundary || root.sp && findSuspenseBoundary(fiber) ? checkpointCommit(fiber) : -1;
132
+ try {
133
+ rerenderFiber(fiber, root);
134
+ } catch (error) {
135
+ if (error instanceof RenderSuspenseCapture) {
136
+ rewindCommit(checkpoint);
137
+ error.boundary.ms.u = true;
138
+ scheduleUpdate(error.boundary);
139
+ continue;
140
+ }
141
+ if (error instanceof RenderErrorCapture) {
142
+ if (error.boundary.tag === FiberTag.Root) throw error;
143
+ rewindCommit(checkpoint);
144
+ captureError(error);
145
+ continue;
146
+ }
147
+ if (!recoverHydration(root, error)) throw error;
148
+ break;
149
+ }
150
+ }
151
+ runEffects(root);
152
+ }
153
+ function scheduleRootRender(root, render) {
154
+ markTransitionUpdate(root);
155
+ root.u = render;
156
+ pendingRoots.add(root);
157
+ if (isBatching) return;
158
+ flushPending();
159
+ }
99
160
  function discardPendingWork(root) {
161
+ root.u = void 0;
100
162
  root.p.clear();
101
163
  root.s = false;
102
164
  pendingRoots.delete(root);
103
165
  }
104
- function fiberDepth(fiber) {
105
- let d = 0;
106
- let p = fiber.parent;
107
- while (p) {
108
- d++;
109
- p = p.parent;
166
+ function discardPendingEffects(root) {
167
+ for (const queue of [pendingEffects, pendingInsertionEffects, pendingCommits]) {
168
+ for (let index = queue.length - 1; index >= 0; index--) {
169
+ if (findRoot(queue[index][0]) === root) removePendingEffect(queue, index);
170
+ }
171
+ }
172
+ for (const fiber of stagedCommits.keys()) {
173
+ if (findRoot(fiber) === root) removeStagedCommits(fiber);
110
174
  }
111
- return d;
175
+ }
176
+ function fiberDepth(fiber) {
177
+ return fiber.depth ??= fiber.parent ? fiberDepth(fiber.parent) + 1 : 0;
112
178
  }
113
179
  function findRoot(fiber) {
114
180
  let f = fiber;
115
181
  while (f) {
116
- if (f.root) return f.root;
182
+ if (f.root) return fiber.root = f.root;
117
183
  f = f.parent;
118
184
  }
119
185
  return null;
120
186
  }
121
187
  function renderRoot(root, children) {
188
+ if (!currentCommit) return commitSynchronously(() => renderRoot(root, children));
122
189
  const rootFiber = root.r;
123
190
  rootFiber.pp = { children };
124
191
  currentRoot = root;
@@ -133,7 +200,7 @@ function renderRoot(root, children) {
133
200
  }
134
201
  function rerenderFiber(fiber, root) {
135
202
  if (!fiber.dy) return;
136
- if (fiber.um) return;
203
+ if (fiber.um || fiber.pd) return;
137
204
  fiber.dy = false;
138
205
  currentRoot = root;
139
206
  const resumeHydration = fiber.ms && fiber.ms.p === true;
@@ -145,7 +212,8 @@ function rerenderFiber(fiber, root) {
145
212
  const prevForcing = forceRerenderingFiber;
146
213
  forceRerenderingFiber = fiber;
147
214
  try {
148
- renderFiber(fiber, getHostParent(fiber), getAnchor(fiber));
215
+ const domParent = getHostParent(fiber);
216
+ renderFiber(fiber, domParent, getAnchor(fiber, domParent));
149
217
  } finally {
150
218
  forceRerenderingFiber = prevForcing;
151
219
  if (resumeHydration) {
@@ -178,10 +246,6 @@ function pushChildren(node, out) {
178
246
  for (let i = 0; i < node.length; i++) pushChildren(node[i], out);
179
247
  return;
180
248
  }
181
- if (isIterable(node)) {
182
- for (const item of node) pushChildren(item, out);
183
- return;
184
- }
185
249
  if (typeof node === "object") {
186
250
  const t = node.$$typeof;
187
251
  if (ACCEPTED_ELEMENT_MARKERS.has(t)) {
@@ -195,6 +259,9 @@ function pushChildren(node, out) {
195
259
  return;
196
260
  }
197
261
  }
262
+ if (isIterable(node)) {
263
+ for (const item of node) pushChildren(item, out);
264
+ }
198
265
  }
199
266
  function isIterable(obj) {
200
267
  return obj != null && typeof obj[Symbol.iterator] == "function";
@@ -220,7 +287,7 @@ function fiberFromChild(child, parent) {
220
287
  const marker = type && type.$$typeof;
221
288
  if (typeof type === "string") tag = FiberTag.Host;
222
289
  else if (type === REACT_FRAGMENT_TYPE) tag = FiberTag.Fragment;
223
- else if (type === REACT_STRICT_MODE_TYPE || type === REACT_PROFILER_TYPE) tag = FiberTag.Fragment;
290
+ else if (type === REACT_STRICT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_VIEW_TRANSITION_TYPE) tag = FiberTag.Fragment;
224
291
  else {
225
292
  let matched = null;
226
293
  for (const m of TYPE_MATCHERS) {
@@ -244,18 +311,18 @@ function reconcileChildren(parent, newChildren, domParent, anchor) {
244
311
  let ok = true;
245
312
  for (let i = 0; i < newChildren.length; i++) {
246
313
  const child = newChildren[i];
247
- if (child == null || !f || f.key != null) {
314
+ if (child == null || !f) {
248
315
  ok = false;
249
316
  break;
250
317
  }
251
318
  if (typeof child === "string") {
252
- if (f.tag !== FiberTag.Text) {
319
+ if (f.tag !== FiberTag.Text || f.key != null) {
253
320
  ok = false;
254
321
  break;
255
322
  }
256
323
  f.pp = child;
257
324
  } else {
258
- if (child.key != null) {
325
+ if (!sameKey(f.key, child.key)) {
259
326
  ok = false;
260
327
  break;
261
328
  }
@@ -269,21 +336,28 @@ function reconcileChildren(parent, newChildren, domParent, anchor) {
269
336
  f = f.sibling;
270
337
  }
271
338
  if (ok && f === null) {
272
- for (let r = parent.child; r; r = r.sibling) {
273
- let a = anchor;
274
- for (let s = r.sibling; s; s = s.sibling) {
275
- const d = firstDomNode(s);
276
- if (d && d.parentNode === domParent) {
277
- a = d;
278
- break;
279
- }
280
- }
281
- renderFiber(r, domParent, a);
282
- }
339
+ renderChildChain(parent, domParent, anchor, false);
283
340
  return;
284
341
  }
285
342
  }
343
+ if (!parent.child) {
344
+ rememberChildList(parent);
345
+ let previous = null;
346
+ for (const child of newChildren) {
347
+ if (child == null) continue;
348
+ const fiber = fiberFromChild(child, parent);
349
+ if (previous) previous.sibling = fiber;
350
+ else parent.child = fiber;
351
+ previous = fiber;
352
+ }
353
+ renderChildChain(parent, domParent, anchor, true);
354
+ if (previous && !currentRoot?.h && domParent.nodeName !== "HEAD") {
355
+ placeChildrenInOrder(parent, domParent, anchor);
356
+ }
357
+ return;
358
+ }
286
359
  const existing = collectChildren(parent);
360
+ rememberChildList(parent, existing);
287
361
  const keyed = /* @__PURE__ */ new Map();
288
362
  for (const f of existing) {
289
363
  if (f.key != null) keyed.set("k" + f.key, f);
@@ -312,7 +386,7 @@ function reconcileChildren(parent, newChildren, domParent, anchor) {
312
386
  if (!match) {
313
387
  while (existingIdx < existing.length) {
314
388
  const cand = existing[existingIdx];
315
- if (claimed.has(cand) || cand.key != null) {
389
+ if (cand.key != null) {
316
390
  existingIdx++;
317
391
  continue;
318
392
  }
@@ -352,19 +426,7 @@ function reconcileChildren(parent, newChildren, domParent, anchor) {
352
426
  prevNewFiber = fiber;
353
427
  }
354
428
  const hydrating = !!currentRoot?.h;
355
- for (let f = parent.child; f; f = f.sibling) {
356
- let a = anchor;
357
- if (!hydrating) {
358
- for (let s = f.sibling; s; s = s.sibling) {
359
- const d = firstDomNode(s);
360
- if (d && d.parentNode === domParent) {
361
- a = d;
362
- break;
363
- }
364
- }
365
- }
366
- renderFiber(f, domParent, a);
367
- }
429
+ if (prevNewFiber) renderChildChain(parent, domParent, anchor, hydrating || existing.length === 0);
368
430
  if (!prevNewFiber) parent.child = null;
369
431
  else prevNewFiber.sibling = null;
370
432
  const parentIsHeadHost = parent.tag === FiberTag.Host && typeof parent.type === "string" && parent.type.toLowerCase() === "head";
@@ -375,31 +437,49 @@ function reconcileChildren(parent, newChildren, domParent, anchor) {
375
437
  structurallyChanged = true;
376
438
  }
377
439
  }
378
- for (const f of keyed.values()) {
379
- if (!claimed.has(f)) {
380
- unmountFiber(f, domParent);
381
- structurallyChanged = true;
382
- }
383
- }
384
440
  }
385
441
  const parentIsHead = domParent.nodeName === "HEAD";
386
442
  if (structurallyChanged && !currentRoot?.h && !parentIsHead) {
387
443
  placeChildrenInOrder(parent, domParent, anchor);
388
444
  }
389
445
  }
446
+ function renderChildChain(parent, domParent, anchor, skipAnchors) {
447
+ for (let f = parent.child; f; f = f.sibling) {
448
+ let nextAnchor = anchor;
449
+ if (!skipAnchors) {
450
+ for (let sibling = f.sibling; sibling; sibling = sibling.sibling) {
451
+ const dom = firstDomNode(sibling, domParent);
452
+ if (dom) {
453
+ nextAnchor = dom;
454
+ break;
455
+ }
456
+ }
457
+ }
458
+ renderFiber(f, domParent, nextAnchor);
459
+ }
460
+ }
390
461
  function placeChildrenInOrder(parent, domParent, anchor) {
391
- const doms = [];
392
462
  let c = parent.child;
463
+ if ((!currentCommit || domParent === preparedParent) && c && !c.sibling && (c.tag === FiberTag.Host || c.tag === FiberTag.Text) && c.dom?.parentNode === domParent && c.dom.nextSibling === anchor) return;
464
+ const doms = [];
393
465
  while (c) {
394
466
  collectHostDoms(c, doms);
395
467
  c = c.sibling;
396
468
  }
469
+ if (currentCommit && domParent !== preparedParent) {
470
+ if (doms.length) queuePlacement(doms, domParent, anchor);
471
+ } else placeDomsInOrder(doms, domParent, anchor);
472
+ }
473
+ function queuePlacement(doms, parent, anchor) {
474
+ queueMutation(() => placeDomsInOrder(doms, parent, anchor));
475
+ }
476
+ function placeDomsInOrder(doms, domParent, anchor) {
397
477
  if (doms.length > 0) {
398
478
  let current = doms[0];
399
479
  let inOrder = current.parentNode === domParent;
400
480
  for (let i = 1; inOrder && i < doms.length; i++) {
401
481
  current = current.nextSibling;
402
- while (current && !doms.includes(current)) {
482
+ while (current && current !== doms[i] && !doms.includes(current)) {
403
483
  current = current.nextSibling;
404
484
  }
405
485
  if (current !== doms[i]) inOrder = false;
@@ -432,6 +512,7 @@ function collectHostDoms(fiber, out) {
432
512
  collectHostDoms(c, out);
433
513
  c = c.sibling;
434
514
  }
515
+ if (fiber.tag === FiberTag.Suspense && fiber.ms?.f) collectHostDoms(fiber.ms.f, out);
435
516
  }
436
517
  function collectChildren(parent) {
437
518
  const out = [];
@@ -474,11 +555,25 @@ function getForceRerenderingFiber() {
474
555
  }
475
556
  registerRenderer(FiberTag.Text, renderText);
476
557
  registerRenderer(FiberTag.Host, renderHost);
558
+ registerRenderer(FiberTag.Resource, renderHost);
477
559
  registerRenderer(FiberTag.Function, renderFunction);
478
560
  registerRenderer(FiberTag.Fragment, renderFragment);
479
561
  function renderFiber(fiber, domParent, anchor) {
562
+ if (fiber.tag !== FiberTag.Memo) fiber.dy = false;
563
+ fiber.root ||= currentRoot || findRoot(fiber);
564
+ if (fiber.root?.sp && fiber.parent?.ld && fiber.mp === null) setLayoutDisconnected(fiber, true);
565
+ if (fiber.root?.a) CAPABILITIES.prepareActivityFiber(fiber);
480
566
  const fn = RENDERERS[fiber.tag];
481
- if (fn) fn(fiber, domParent, anchor);
567
+ try {
568
+ if (fn) fn(fiber, domParent, anchor);
569
+ } catch (error) {
570
+ removeStagedCommits(fiber);
571
+ if (currentRoot?.h || error instanceof RenderErrorCapture || error instanceof RenderSuspenseCapture || isHydrationBailout(error)) throw error;
572
+ if (isThenable(error)) handleSuspended(fiber, error);
573
+ else handleErrorInRender(fiber, error);
574
+ }
575
+ if (fiber.root?.a) CAPABILITIES.syncActivity(fiber);
576
+ if (lastStagedFiber === fiber) flushFiberCommits(fiber);
482
577
  }
483
578
  function renderText(fiber, domParent, anchor) {
484
579
  const text = fiber.pp;
@@ -489,25 +584,55 @@ function renderText(fiber, domParent, anchor) {
489
584
  fiber.dom = document.createTextNode(text);
490
585
  insertInto(domParent, fiber.dom, anchor);
491
586
  }
587
+ updateFragmentHost(fiber, true);
492
588
  } else {
493
- ;
494
- fiber.dom.data = text;
589
+ queueText(fiber.dom, text);
495
590
  }
496
591
  fiber.mp = text;
497
592
  }
498
593
  function renderHost(fiber, domParent, anchor) {
594
+ const hadDom = !!fiber.dom;
499
595
  const props = fiber.pp ?? {};
500
596
  const prev = fiber.mp ?? {};
501
597
  const type = fiber.type;
502
598
  const isSvg = type === "svg" || domParent.namespaceURI === "http://www.w3.org/2000/svg";
599
+ const isResource = fiber.tag === FiberTag.Resource;
600
+ const canAcquire = !isSvg && (isResource || !fiber.mp) && resourceKind(type, props);
601
+ if (isResource || canAcquire) {
602
+ fiber.tag = FiberTag.Resource;
603
+ if (canAcquire) {
604
+ let container = domParent.nodeType === 9 ? domParent : domParent.ownerDocument;
605
+ if (type !== "script") {
606
+ container = fiber.root?.c || domParent;
607
+ for (let parent = fiber.parent; parent; parent = parent.parent) {
608
+ if (parent.tag === FiberTag.Portal) {
609
+ container = parent.pp.container;
610
+ break;
611
+ }
612
+ }
613
+ }
614
+ queueMutation(() => {
615
+ const resource = acquireResource(type, props, container);
616
+ fiber.sn ||= resource;
617
+ });
618
+ }
619
+ if (fiber.mp) syncRefIfChanged(fiber, fiber.sn);
620
+ else attachRef(fiber, null);
621
+ fiber.mp = props;
622
+ return;
623
+ }
503
624
  const isSelect = type === "select";
625
+ const isInput = !isSvg && type === "input";
626
+ const isTextarea = !isSvg && type === "textarea";
627
+ const deferValue = isSelect || isInput || isTextarea;
628
+ let hydrated = false;
504
629
  const deferredSelectValue = isSelect && (props.value !== void 0 || props.defaultValue !== void 0) ? props.value !== void 0 ? props.value : props.defaultValue : void 0;
505
630
  if (!fiber.dom) {
506
- const hydrated = currentRoot?.h ? adoptHostDom(fiber, fiber.parent) : false;
631
+ hydrated = currentRoot?.h ? adoptHostDom(fiber, fiber.parent) : false;
507
632
  if (!hydrated) {
508
633
  fiber.dom = createHostNode(type, isSvg);
509
634
  for (const k in props) {
510
- if (isSelect && (k === "value" || k === "defaultValue")) continue;
635
+ if (deferValue && (k === "value" || k === "defaultValue") || isInput && (k === "checked" || k === "defaultChecked" || k === "name")) continue;
511
636
  if (isEventProp(k)) continue;
512
637
  setProp(fiber.dom, k, props[k], void 0, isSvg);
513
638
  }
@@ -515,96 +640,115 @@ function renderHost(fiber, domParent, anchor) {
515
640
  if (!isEventProp(k)) continue;
516
641
  setProp(fiber.dom, k, props[k], void 0, isSvg);
517
642
  }
643
+ if (isInput) {
644
+ syncInputValue(fiber.dom, props);
645
+ setProp(fiber.dom, "name", props.name, void 0, false);
646
+ }
647
+ if (isTextarea) syncTextareaValue(fiber.dom, props, true);
518
648
  insertInto(domParent, fiber.dom, anchor);
519
649
  }
650
+ updateFragmentHost(fiber, true);
520
651
  attachRef(fiber, fiber.dom);
521
- } else if (prev !== props) {
522
- const el = fiber.dom;
523
- let deferredEvents = null;
524
- for (const k in props) {
525
- if (isSelect && (k === "value" || k === "defaultValue")) continue;
526
- if (isEventProp(k)) {
527
- if (prev[k] !== props[k]) {
528
- deferredEvents ||= [];
529
- deferredEvents.push(k);
530
- }
531
- continue;
532
- }
533
- if (prev[k] !== props[k]) setProp(el, k, props[k], prev[k], isSvg);
534
- }
535
- for (const k in prev) {
536
- if (!(k in props)) setProp(el, k, void 0, prev[k], isSvg);
537
- }
538
- if (deferredEvents) {
539
- for (let i = 0; i < deferredEvents.length; i++) {
540
- const k = deferredEvents[i];
541
- setProp(el, k, props[k], prev[k], isSvg);
542
- }
543
- }
544
- syncRefIfChanged(fiber, fiber.dom);
652
+ } else if (prev !== props && (isInput || isTextarea || hostNeedsUpdate(props, prev))) {
653
+ queueHostProps(fiber.dom, props, prev, isSvg, isInput, isTextarea, deferValue);
545
654
  }
546
- reconcileChildren(fiber, childrenToArray(props.children), fiber.dom, null);
655
+ if (hadDom) syncRefIfChanged(fiber, fiber.dom);
656
+ if (!hadDom && !hydrated) {
657
+ const previous = preparedParent;
658
+ preparedParent = fiber.dom;
659
+ try {
660
+ reconcileChildren(fiber, isTextarea ? [] : childrenToArray(props.children), fiber.dom, null);
661
+ } finally {
662
+ preparedParent = previous;
663
+ }
664
+ } else reconcileChildren(fiber, isTextarea ? [] : childrenToArray(props.children), fiber.dom, null);
547
665
  if (currentRoot?.h) {
548
666
  const parentTag = fiber.type.toLowerCase();
549
- const hasOpaqueHydrationChildren = props.dangerouslySetInnerHTML != null || parentTag === "textarea" && (props.value != null || props.defaultValue != null);
667
+ const hasOpaqueHydrationChildren = props.dangerouslySetInnerHTML != null || isTextarea;
550
668
  if (parentTag !== "head" && parentTag !== "html" && parentTag !== "body" && !hasOpaqueHydrationChildren) {
551
669
  const cursor = getHydrationCursor(fiber);
552
670
  if (cursor) {
553
671
  if (cursor.has()) {
554
672
  const error = new Error(
555
- true ? `Hydration mismatch: server rendered extra nodes inside <${parentTag}>.` : "Hydration mismatch."
673
+ process.env.NODE_ENV !== "production" ? `Hydration mismatch: server rendered extra nodes inside <${parentTag}>.` : "Hydration mismatch."
556
674
  );
557
- if (currentRoot.re) currentRoot.re(error);
675
+ if (currentRoot.re) currentRoot.re(error, { componentStack: null });
558
676
  abortHydration(error, fiber);
559
677
  }
560
678
  }
561
679
  }
562
680
  }
563
- if (isSelect && deferredSelectValue !== void 0) {
564
- const select = fiber.dom;
565
- if (Array.isArray(deferredSelectValue)) {
566
- const asStrings = deferredSelectValue.map((v) => "" + v);
567
- for (const opt of Array.from(select.options)) {
568
- opt.selected = asStrings.includes(opt.value);
681
+ if (isSelect && !hydrated && deferredSelectValue !== void 0) {
682
+ queueSelectValue(fiber.dom, deferredSelectValue);
683
+ }
684
+ fiber.mp = props;
685
+ }
686
+ function queueSelectValue(select, value) {
687
+ queueMutation(() => {
688
+ if (Array.isArray(value)) {
689
+ const selected = new Set(value.map((v) => "" + v));
690
+ const options = select.options;
691
+ for (let i = 0; i < options.length; i++) {
692
+ const opt = options[i];
693
+ opt.selected = selected.has(opt.value);
569
694
  }
570
695
  } else {
571
- select.value = "" + deferredSelectValue;
696
+ select.value = "" + value;
572
697
  }
698
+ });
699
+ }
700
+ function hostNeedsUpdate(props, previous) {
701
+ for (const key in props) {
702
+ if (props[key] !== previous[key] && key !== "children" && key !== "ref" && key !== "key") return true;
573
703
  }
574
- fiber.mp = props;
704
+ for (const key in previous) {
705
+ if (key !== "children" && key !== "ref" && key !== "key" && !(key in props)) return true;
706
+ }
707
+ return false;
708
+ }
709
+ function queueHostProps(el, props, prev, isSvg, isInput, isTextarea, deferValue) {
710
+ queueMutation(() => {
711
+ if (isInput) setProp(el, "name", "", void 0, false);
712
+ let events;
713
+ for (const key in props) {
714
+ const next = props[key], previous = prev[key];
715
+ if (next === previous || key === "children" || key === "ref" || key === "key" || deferValue && (key === "value" || key === "defaultValue") || isInput && (key === "checked" || key === "defaultChecked" || key === "name")) continue;
716
+ if (isEventProp(key)) {
717
+ (events ||= []).push(key);
718
+ } else setProp(el, key, next, previous, isSvg);
719
+ }
720
+ for (const key in prev) {
721
+ if (key === "children" || key === "ref" || key === "key" || (isInput || isTextarea) && (key === "value" || key === "defaultValue") || isInput && (key === "checked" || key === "defaultChecked" || key === "name")) continue;
722
+ if (!(key in props)) setProp(el, key, void 0, prev[key], isSvg);
723
+ }
724
+ if (events) for (const key of events) setProp(el, key, props[key], prev[key], isSvg);
725
+ if (isInput) {
726
+ syncInputValue(el, props, prev);
727
+ setProp(el, "name", props.name, prev.name, false);
728
+ } else if (isTextarea) syncTextareaValue(el, props);
729
+ });
575
730
  }
576
731
  function renderFunction(fiber, domParent, anchor) {
577
- const prevDispatcher = ReactSharedInternals.H;
578
- const prevFiber = ReactSharedInternals.F;
579
- const prevHook = ReactSharedInternals.K;
580
- const prevIndex = ReactSharedInternals.I;
581
- ReactSharedInternals.H = makeDispatcher();
582
- ReactSharedInternals.F = fiber;
583
- ReactSharedInternals.K = null;
584
- ReactSharedInternals.I = 0;
732
+ const canBail = fiber === forceRerenderingFiber && fiber.pp === fiber.mp;
733
+ fiber.cx?.clear();
585
734
  let rendered;
586
735
  let deferredForHydration = false;
587
736
  try {
588
- rendered = fiber.type(fiber.pp ?? {});
737
+ rendered = renderWithHooks(fiber, fiber.type, fiber.pp ?? {}, void 0, canBail);
589
738
  } catch (e) {
590
739
  if (isThenable(e)) {
591
740
  if (deferHydration(fiber, e)) {
592
741
  deferredForHydration = true;
593
742
  } else {
594
- CAPABILITIES.handleSuspended(fiber, e);
595
- rendered = null;
743
+ handleSuspended(fiber, e);
744
+ return;
596
745
  }
597
746
  } else {
598
747
  handleErrorInRender(fiber, e);
599
748
  return;
600
749
  }
601
- } finally {
602
- ReactSharedInternals.H = prevDispatcher;
603
- ReactSharedInternals.F = prevFiber;
604
- ReactSharedInternals.K = prevHook;
605
- ReactSharedInternals.I = prevIndex;
606
750
  }
607
- if (deferredForHydration) return;
751
+ if (deferredForHydration || rendered === HOOK_BAILOUT) return;
608
752
  reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor);
609
753
  fiber.mp = fiber.pp;
610
754
  }
@@ -633,6 +777,28 @@ function deferHydration(fiber, thenable) {
633
777
  function renderFragment(fiber, domParent, anchor) {
634
778
  const props = fiber.pp ?? {};
635
779
  reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor);
780
+ if (fiber.type === REACT_FRAGMENT_TYPE) {
781
+ if (fiber.ref && !fiber.sn) fiber.sn = createFragmentInstance(fiber);
782
+ const previous = fiber.ms?.ref;
783
+ if (previous !== fiber.ref) {
784
+ if (fiber.cu) {
785
+ const cleanups = fiber.cu;
786
+ queueMutation(() => {
787
+ for (const cleanup of cleanups) {
788
+ try {
789
+ cleanup();
790
+ } catch (error) {
791
+ handleCommitError(fiber, error);
792
+ }
793
+ }
794
+ });
795
+ fiber.cu = null;
796
+ }
797
+ detachRef(previous, fiber);
798
+ fiber.ms = { ...fiber.ms, ref: fiber.ref };
799
+ if (fiber.sn) attachRef(fiber, fiber.sn);
800
+ }
801
+ }
636
802
  fiber.mp = props;
637
803
  }
638
804
  function defaultHandleSuspended(fiber, thenable) {
@@ -643,80 +809,233 @@ function defaultHandleSuspended(fiber, thenable) {
643
809
  }
644
810
  var CAPABILITIES = {
645
811
  handleSuspended: defaultHandleSuspended,
646
- readContext: defaultReadContext
812
+ readContext: defaultReadContext,
813
+ isActivityHidden: () => false,
814
+ activityIsDisconnected: () => false,
815
+ prepareActivityFiber: () => {
816
+ },
817
+ syncActivity: () => {
818
+ }
647
819
  };
820
+ function isActivityHidden(fiber) {
821
+ return !!(fiber.root ?? currentRoot ?? findRoot(fiber))?.a && CAPABILITIES.isActivityHidden(fiber);
822
+ }
823
+ function activityIsDisconnected(fiber) {
824
+ return !!fiber.root?.a && CAPABILITIES.activityIsDisconnected(fiber);
825
+ }
826
+ function layoutIsDisconnected(fiber) {
827
+ return !!fiber.ld || activityIsDisconnected(fiber);
828
+ }
829
+ function rememberActivityEffect(fiber, hook, effect) {
830
+ if (fiber.root?.a || fiber.root?.sp && effect.t === 1 && !effect.s) rememberRetainedEffect(fiber, hook, effect);
831
+ }
648
832
  function installCapability(name, fn) {
649
833
  CAPABILITIES[name] = fn;
650
834
  }
651
835
  function handleSuspended(fiber, thenable) {
836
+ if (isActivityHidden(fiber) && !findSuspenseBoundary(fiber)) {
837
+ defaultHandleSuspended(fiber, thenable);
838
+ return;
839
+ }
652
840
  CAPABILITIES.handleSuspended(fiber, thenable);
653
841
  }
842
+ var RenderSuspenseCapture = class {
843
+ constructor(boundary) {
844
+ this.boundary = boundary;
845
+ }
846
+ boundary;
847
+ };
848
+ function findSuspenseBoundary(fiber) {
849
+ let child = fiber;
850
+ for (let parent = fiber.parent; parent; parent = parent.parent) {
851
+ if (parent.tag === FiberTag.Suspense && parent.ms?.f !== child) return parent;
852
+ if (parent.tag === FiberTag.Activity && parent.pp?.mode === "hidden") return null;
853
+ child = parent;
854
+ }
855
+ return null;
856
+ }
857
+ var RenderErrorCapture = class {
858
+ constructor(boundary, error, source = boundary) {
859
+ this.boundary = boundary;
860
+ this.error = error;
861
+ this.stack = componentStack(source);
862
+ }
863
+ boundary;
864
+ error;
865
+ stack;
866
+ };
867
+ function captureError(capture) {
868
+ const fiber = capture.boundary;
869
+ fiber.ms = { ...fiber.ms, error: capture };
870
+ scheduleUpdate(fiber);
871
+ }
872
+ function findErrorBoundary(fiber) {
873
+ for (let parent = fiber.parent; parent; parent = parent.parent) {
874
+ if (parent.um || parent.pd) continue;
875
+ const instance = parent.sn;
876
+ if (instance?._fiber === parent && (parent.ms?.b?.getDerivedStateFromError || instance.componentDidCatch)) return parent;
877
+ }
878
+ return null;
879
+ }
880
+ function captureRootError(root, stack, error) {
881
+ const errors = root.er ||= [];
882
+ if (!errors.length) root.u = void 0;
883
+ errors.push({ error, stack });
884
+ scheduleUpdate(root.r);
885
+ }
886
+ function flushRootErrors(root) {
887
+ const errors = root.er;
888
+ root.er = void 0;
889
+ if (root.r.mp === null) queueMutation(() => {
890
+ root.c.textContent = "";
891
+ });
892
+ renderRoot(root, null);
893
+ queueCommitEffects(() => {
894
+ for (const captured of errors) {
895
+ try {
896
+ if (root.ue) root.ue(captured.error, { componentStack: captured.stack });
897
+ else if (typeof reportError === "function") reportError(captured.error);
898
+ else queueMicrotask(() => {
899
+ throw captured.error;
900
+ });
901
+ } catch (error) {
902
+ setTimeout(() => {
903
+ throw error;
904
+ });
905
+ }
906
+ }
907
+ });
908
+ if (root.u) pendingRoots.add(root);
909
+ }
910
+ function recoverRootError(error, abort) {
911
+ if (!(error instanceof RenderErrorCapture) || error.boundary.tag !== FiberTag.Root) return false;
912
+ const root = error.boundary.root;
913
+ abort?.();
914
+ discardPendingWork(root);
915
+ discardPendingEffects(root);
916
+ captureRootError(root, error.stack, error.error);
917
+ return true;
918
+ }
919
+ function handleCommitError(fiber, error) {
920
+ const boundary = findErrorBoundary(fiber);
921
+ if (boundary) {
922
+ captureError(new RenderErrorCapture(boundary, error, fiber));
923
+ return;
924
+ }
925
+ const root = findRoot(fiber);
926
+ if (root) captureRootError(root, componentStack(fiber), error);
927
+ else queueMicrotask(() => {
928
+ throw error;
929
+ });
930
+ }
654
931
  function handleErrorInRender(fiber, err) {
932
+ if (err instanceof RenderErrorCapture) throw err;
933
+ removeStagedCommits(fiber);
934
+ for (const queue of [pendingEffects, pendingInsertionEffects, pendingCommits]) {
935
+ for (let index = queue.length - 1; index >= 0; index--) {
936
+ if (queue[index][0] === fiber) removePendingEffect(queue, index);
937
+ }
938
+ }
655
939
  if (currentRoot?.h) {
656
940
  abortHydration(err, fiber);
657
941
  }
658
- let f = fiber.parent;
659
- while (f) {
660
- if (f.tag === FiberTag.Class) {
661
- const Ctor = f.type;
662
- const instance = f.sn;
663
- if (Ctor.getDerivedStateFromError) {
664
- const update = Ctor.getDerivedStateFromError(err);
665
- instance.state = { ...instance.state, ...update };
666
- }
667
- if (instance.componentDidCatch) {
668
- try {
669
- instance.componentDidCatch(err, { componentStack: "" });
670
- } catch {
671
- }
672
- }
673
- scheduleUpdate(f);
674
- return;
675
- }
676
- f = f.parent;
942
+ const boundary = findErrorBoundary(fiber);
943
+ if (boundary) {
944
+ const capture = new RenderErrorCapture(boundary, err, fiber);
945
+ if (currentCommit) throw capture;
946
+ captureError(capture);
947
+ return;
677
948
  }
678
- if (currentRoot?.ue) currentRoot.ue(err);
949
+ const root = currentRoot ?? findRoot(fiber);
950
+ if (root && currentCommit && (flushing || root.ue)) throw new RenderErrorCapture(root.r, err, fiber);
951
+ if (root?.ue) root.ue(err, { componentStack: componentStack(fiber) });
679
952
  else throw err;
680
953
  }
681
954
  function isThenable(x) {
682
955
  return x != null && typeof x.then == "function";
683
956
  }
684
- function unmountFiber(fiber, domParent) {
957
+ function unmountFiber(fiber, domParent, remove = true) {
958
+ if (fiber.um) return;
959
+ if (currentCommit) return queueUnmount(fiber, domParent, remove);
960
+ removeStagedCommits(fiber);
961
+ if (fiber.type === REACT_FRAGMENT_TYPE && fiber.sn) {
962
+ if (fiber.cu) {
963
+ for (const cleanup of fiber.cu) {
964
+ try {
965
+ cleanup();
966
+ } catch (error) {
967
+ handleCommitError(fiber, error);
968
+ }
969
+ }
970
+ fiber.cu = null;
971
+ }
972
+ detachRef(fiber.cr ?? fiber.ref, fiber);
973
+ }
685
974
  fiber.um = true;
686
- let c = fiber.child;
687
- while (c) {
688
- const next = c.sibling;
689
- unmountFiber(c, fiber.tag === FiberTag.Host ? fiber.dom : domParent);
690
- c = next;
975
+ if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) updateFragmentHost(fiber, false);
976
+ if (fiber.type === REACT_FRAGMENT_TYPE && fiber.sn) fiber.sn.dispose();
977
+ if (fiber.tag === FiberTag.Suspense && fiber.ms?.f) {
978
+ unmountFiber(fiber.ms.f, domParent, remove);
979
+ fiber.ms.f = null;
691
980
  }
692
- fiber.child = null;
693
981
  if (fiber.cu) {
694
- for (const cleanup of fiber.cu) {
982
+ const cleanups = fiber.cu;
983
+ fiber.cu = null;
984
+ for (const cleanup of cleanups) {
695
985
  try {
696
986
  cleanup();
697
987
  } catch (e) {
698
- if (currentRoot?.re) currentRoot.re(e);
988
+ handleCommitError(fiber, e);
699
989
  }
700
990
  }
701
- fiber.cu = null;
702
991
  }
703
- if (fiber.tag === FiberTag.Class && fiber.sn?.componentWillUnmount) {
704
- try {
705
- fiber.sn.componentWillUnmount();
706
- } catch (e) {
707
- if (currentRoot?.re) currentRoot.re(e);
992
+ if (fiber.sn?._fiber === fiber) {
993
+ const committed = fiber.ms?.c;
994
+ if (committed) {
995
+ fiber.sn.props = committed.props;
996
+ fiber.sn.state = committed.state;
997
+ }
998
+ if (fiber.sn.componentWillUnmount && !layoutIsDisconnected(fiber)) {
999
+ try {
1000
+ fiber.sn.componentWillUnmount();
1001
+ } catch (e) {
1002
+ handleCommitError(fiber, e);
1003
+ }
708
1004
  }
709
1005
  fiber.sn._fiber = null;
710
1006
  fiber.sn._enqueueUpdate = null;
711
1007
  fiber.sn._forceUpdate = null;
712
1008
  }
713
- if (fiber.ref) detachRef(fiber.ref);
714
- if (fiber.tag === FiberTag.Host && fiber.dom && fiber.dom.parentNode) {
715
- fiber.dom.parentNode.removeChild(fiber.dom);
716
- } else if (fiber.tag === FiberTag.Text && fiber.dom && fiber.dom.parentNode) {
1009
+ if (fiber.cr ?? fiber.ref) detachRef(fiber.cr ?? fiber.ref, fiber);
1010
+ let c = fiber.child;
1011
+ while (c) {
1012
+ const next = c.sibling;
1013
+ unmountFiber(c, fiber.tag === FiberTag.Host ? fiber.dom : domParent, fiber.tag === FiberTag.Portal || remove && fiber.tag !== FiberTag.Host);
1014
+ c = next;
1015
+ }
1016
+ fiber.child = null;
1017
+ if (remove && (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) && fiber.dom?.parentNode) {
717
1018
  fiber.dom.parentNode.removeChild(fiber.dom);
718
1019
  }
719
1020
  }
1021
+ function queueUnmount(fiber, domParent, remove) {
1022
+ if (fiber.pd) return;
1023
+ const deleted = [];
1024
+ markPendingDeletion(fiber, deleted);
1025
+ const restore = () => {
1026
+ for (const child of deleted) child.pd = false;
1027
+ };
1028
+ onCommitRollback(restore);
1029
+ onCommitFailure(restore);
1030
+ queueMutation(() => unmountFiber(fiber, domParent, remove));
1031
+ }
1032
+ function markPendingDeletion(fiber, deleted) {
1033
+ if (fiber.pd) return;
1034
+ fiber.pd = true;
1035
+ deleted.push(fiber);
1036
+ for (let child = fiber.child; child; child = child.sibling) markPendingDeletion(child, deleted);
1037
+ if (fiber.tag === FiberTag.Suspense && fiber.ms?.f) markPendingDeletion(fiber.ms.f, deleted);
1038
+ }
720
1039
  function unmountAllChildren(parent, domParent) {
721
1040
  let c = parent.child;
722
1041
  while (c) {
@@ -727,6 +1046,7 @@ function unmountAllChildren(parent, domParent) {
727
1046
  parent.child = null;
728
1047
  }
729
1048
  function insertInto(parent, node, anchor) {
1049
+ if (currentCommit && parent !== preparedParent) return queueInsertion(parent, node, anchor);
730
1050
  const projectedHeadParent = getDocumentHeadInsertionParent(parent, node);
731
1051
  if (projectedHeadParent) {
732
1052
  projectedHeadParent.appendChild(node);
@@ -738,6 +1058,9 @@ function insertInto(parent, node, anchor) {
738
1058
  parent.appendChild(node);
739
1059
  }
740
1060
  }
1061
+ function queueInsertion(parent, node, anchor) {
1062
+ queueMutation(() => insertInto(parent, node, anchor));
1063
+ }
741
1064
  var DOCUMENT_HEAD_TAGS = /* @__PURE__ */ new Set(["base", "link", "meta", "script", "style", "title"]);
742
1065
  function getDocumentHeadInsertionParent(parent, node) {
743
1066
  if (parent.nodeType !== 9 || node.nodeType !== 1) return null;
@@ -757,37 +1080,36 @@ function getHostParent(fiber) {
757
1080
  }
758
1081
  p = p.parent;
759
1082
  }
760
- if (true) {
1083
+ if (process.env.NODE_ENV !== "production") {
761
1084
  throw new Error("No host parent found.");
762
1085
  }
763
1086
  throw new Error();
764
1087
  }
765
- function getAnchor(fiber) {
766
- let f = fiber.sibling;
767
- while (f) {
768
- const d = firstDomNode(f);
769
- if (d) return d;
770
- f = f.sibling;
771
- }
772
- let p = fiber.parent;
773
- while (p && p.tag !== FiberTag.Host && p.tag !== FiberTag.Root && p.tag !== FiberTag.Portal) {
774
- if (p.sibling) {
775
- const d = firstDomNode(p.sibling);
1088
+ function getAnchor(fiber, domParent) {
1089
+ let p = fiber;
1090
+ while (p) {
1091
+ let sibling = p.sibling;
1092
+ while (sibling) {
1093
+ const d = firstDomNode(sibling, domParent);
776
1094
  if (d) return d;
1095
+ sibling = sibling.sibling;
777
1096
  }
778
1097
  p = p.parent;
1098
+ if (p?.tag === FiberTag.Host || p?.tag === FiberTag.Root || p?.tag === FiberTag.Portal) break;
779
1099
  }
780
1100
  return null;
781
1101
  }
782
- function firstDomNode(fiber) {
783
- if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) return fiber.dom;
1102
+ function firstDomNode(fiber, domParent) {
1103
+ if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) {
1104
+ return fiber.dom?.parentNode === domParent ? fiber.dom : null;
1105
+ }
784
1106
  let c = fiber.child;
785
1107
  while (c) {
786
- const d = firstDomNode(c);
1108
+ const d = firstDomNode(c, domParent);
787
1109
  if (d) return d;
788
1110
  c = c.sibling;
789
1111
  }
790
- return null;
1112
+ return fiber.tag === FiberTag.Suspense && fiber.ms?.f ? firstDomNode(fiber.ms.f, domParent) : null;
791
1113
  }
792
1114
  function readContext(fiber, ctx) {
793
1115
  return CAPABILITIES.readContext(fiber, ctx);
@@ -798,60 +1120,185 @@ function defaultReadContext(_fiber, ctx) {
798
1120
  function attachRef(fiber, value) {
799
1121
  const ref = fiber.ref ?? (fiber.pp?.ref ?? null);
800
1122
  if (!ref) return;
801
- if (typeof ref == "function") {
802
- scheduleLifecycle(fiber, () => {
1123
+ if (isActivityHidden(fiber) || layoutIsDisconnected(fiber)) return;
1124
+ stageCommit(fiber, () => {
1125
+ if (fiber.tag === FiberTag.Resource) value = fiber.sn;
1126
+ fiber.cr = ref;
1127
+ if (typeof ref == "function") {
803
1128
  const cleanup = ref(value);
804
1129
  fiber.cu ||= [];
805
- fiber.cu.push(typeof cleanup == "function" ? cleanup : () => ref(null));
806
- });
807
- } else {
808
- ref.current = value;
809
- }
1130
+ const detach = typeof cleanup == "function" ? cleanup : () => ref(null);
1131
+ fiber.rc = detach;
1132
+ fiber.cu.push(detach);
1133
+ } else {
1134
+ ref.current = value;
1135
+ }
1136
+ }, true);
810
1137
  }
811
1138
  function syncRefIfChanged(fiber, value) {
812
1139
  const ref = fiber.ref ?? (fiber.pp?.ref ?? null);
813
- if (!ref) return;
814
- if (typeof ref === "object" && ref.current !== value) ref.current = value;
1140
+ if (!ref && !fiber.cr) return;
1141
+ if (isActivityHidden(fiber) || layoutIsDisconnected(fiber)) return;
1142
+ const previous = fiber.cr ?? null;
1143
+ if (previous !== ref) {
1144
+ const cleanup = fiber.rc;
1145
+ queueMutation(() => {
1146
+ if (cleanup) {
1147
+ const index = fiber.cu?.indexOf(cleanup) ?? -1;
1148
+ if (index >= 0) fiber.cu.splice(index, 1);
1149
+ fiber.rc = null;
1150
+ try {
1151
+ cleanup();
1152
+ } catch (error) {
1153
+ handleCommitError(fiber, error);
1154
+ }
1155
+ }
1156
+ detachRef(previous, fiber);
1157
+ fiber.cr = null;
1158
+ });
1159
+ attachRef(fiber, value);
1160
+ } else if (ref && typeof ref === "object" && ref.current !== value) attachRef(fiber, value);
815
1161
  }
816
- function detachRef(ref) {
1162
+ function detachRef(ref, fiber) {
817
1163
  if (ref && typeof ref === "object") {
818
- ref.current = null;
1164
+ queueMutation(() => {
1165
+ try {
1166
+ ref.current = null;
1167
+ } catch (error) {
1168
+ if (fiber) handleCommitError(fiber, error);
1169
+ else throw error;
1170
+ }
1171
+ });
819
1172
  }
820
1173
  }
821
1174
  var pendingEffects = [];
822
- var pendingLayoutEffects = [];
823
- var pendingLifecycles = [];
824
- function enqueueEffect(fiber, effect) {
825
- if (effect.t) {
826
- pendingLayoutEffects.push([fiber, effect]);
1175
+ var pendingInsertionEffects = [];
1176
+ var pendingCommits = [];
1177
+ var stagedCommits = /* @__PURE__ */ new Map();
1178
+ var stagedFibers = [];
1179
+ var lastStagedFiber;
1180
+ function removePendingEffect(queue, index) {
1181
+ const entry = queue[index];
1182
+ queue.splice(index, 1);
1183
+ if (currentCommit?.c.length) onCommitRollback(() => {
1184
+ queue.splice(index, 0, entry);
1185
+ });
1186
+ }
1187
+ function stageCommit(fiber, work, ref = false) {
1188
+ let entries = stagedCommits.get(fiber);
1189
+ if (!entries) {
1190
+ stagedCommits.set(fiber, entries = []);
1191
+ stagedFibers.push(fiber);
1192
+ lastStagedFiber = fiber;
1193
+ }
1194
+ entries.push([fiber, work, ref]);
1195
+ }
1196
+ function removeStagedCommits(fiber) {
1197
+ if (!stagedCommits.delete(fiber)) return;
1198
+ if (lastStagedFiber === fiber) stagedFibers.pop();
1199
+ else stagedFibers.splice(stagedFibers.lastIndexOf(fiber), 1);
1200
+ lastStagedFiber = stagedFibers[stagedFibers.length - 1];
1201
+ }
1202
+ function flushFiberCommits(fiber) {
1203
+ const entries = stagedCommits.get(fiber);
1204
+ if (!entries) return;
1205
+ removeStagedCommits(fiber);
1206
+ if (fiber.type === REACT_FRAGMENT_TYPE) {
1207
+ let index = pendingCommits.length;
1208
+ outer: for (let i = 0; i < pendingCommits.length; i++) {
1209
+ for (let parent = pendingCommits[i][0].parent; parent; parent = parent.parent) {
1210
+ if (parent === fiber) {
1211
+ index = i;
1212
+ break outer;
1213
+ }
1214
+ }
1215
+ }
1216
+ if (index < pendingCommits.length && currentCommit?.c.length) {
1217
+ const count = entries.length;
1218
+ onCommitRollback(() => {
1219
+ pendingCommits.splice(index, count);
1220
+ });
1221
+ }
1222
+ pendingCommits.splice(index, 0, ...entries);
1223
+ } else if (fiber.tag === FiberTag.Class || fiber.sn?._fiber === fiber) {
1224
+ for (const entry of entries) if (!entry[2]) pendingCommits.push(entry);
1225
+ for (const entry of entries) if (entry[2]) pendingCommits.push(entry);
827
1226
  } else {
828
- pendingEffects.push([fiber, effect]);
1227
+ for (const entry of entries) pendingCommits.push(entry);
829
1228
  }
830
1229
  }
831
- function scheduleLifecycle(_fiber, fn) {
832
- pendingLifecycles.push(fn);
1230
+ function enqueueEffect(fiber, effect) {
1231
+ if (effect.t !== 2 && (isActivityHidden(fiber) || activityIsDisconnected(fiber) || effect.t === 1 && !effect.s && fiber.ld)) return;
1232
+ if (effect.t === 2) pendingInsertionEffects.push([fiber, effect]);
1233
+ else if (effect.t === 1) stageCommit(fiber, effect);
1234
+ else pendingEffects.push([fiber, effect]);
1235
+ }
1236
+ function scheduleLifecycle(fiber, fn) {
1237
+ if (isActivityHidden(fiber) || layoutIsDisconnected(fiber)) return;
1238
+ stageCommit(fiber, fn);
833
1239
  }
834
1240
  function runEffects(root) {
835
- while (pendingLayoutEffects.length) {
836
- const [fiber, effect] = pendingLayoutEffects.shift();
837
- runEffect(fiber, effect, root);
838
- }
839
- while (pendingLifecycles.length) {
840
- const fn = pendingLifecycles.shift();
841
- try {
842
- fn();
843
- } catch (e) {
844
- if (root.ce) root.ce(e);
1241
+ if (root.fr) refreshFragmentInstances(root);
1242
+ if (!pendingInsertionEffects.length && !pendingCommits.length && !pendingEffects.length) return;
1243
+ flushEffects(root);
1244
+ }
1245
+ function flushEffects(root) {
1246
+ const insertion = pendingInsertionEffects.splice(0);
1247
+ const layout = pendingCommits.splice(0);
1248
+ const batch = pendingEffects.splice(0);
1249
+ if (currentCommit?.c.length) onCommitRollback(() => {
1250
+ pendingInsertionEffects.unshift(...insertion);
1251
+ pendingCommits.unshift(...layout);
1252
+ pendingEffects.unshift(...batch);
1253
+ });
1254
+ queueCommitEffects(() => {
1255
+ for (const [fiber, effect] of insertion) runEffect(fiber, effect, root);
1256
+ if (layout.length) {
1257
+ for (const [fiber, work] of layout) {
1258
+ if (typeof work !== "function" && !fiber.um && !isActivityHidden(fiber) && !layoutIsDisconnected(fiber)) work.d?.();
1259
+ }
1260
+ const runLayout = () => {
1261
+ for (const [fiber, work] of layout) {
1262
+ if (typeof work !== "function") runEffect(fiber, work, root);
1263
+ else if (!fiber.um && !isActivityHidden(fiber) && !layoutIsDisconnected(fiber)) {
1264
+ try {
1265
+ work();
1266
+ } catch (error) {
1267
+ handleCommitError(fiber, error);
1268
+ }
1269
+ }
1270
+ }
1271
+ };
1272
+ if (!deferTransitionLayout(runLayout)) runLayout();
845
1273
  }
846
- }
847
- if (pendingEffects.length) {
848
- const batch = pendingEffects.splice(0);
849
- queueMicrotask(() => {
850
- for (const [fiber, effect] of batch) runEffect(fiber, effect, root);
851
- });
852
- }
1274
+ if (batch.length) {
1275
+ const passive = () => {
1276
+ for (const [fiber, effect] of batch) runEffect(fiber, effect, root);
1277
+ };
1278
+ if (!deferTransitionPassive(passive)) queueMicrotask(passive);
1279
+ }
1280
+ });
853
1281
  }
1282
+ setCommitCheckpointHook(() => {
1283
+ const parent = preparedParent;
1284
+ const children = parent && Array.from(parent.childNodes);
1285
+ const effects = pendingEffects.length, insertion = pendingInsertionEffects.length, commits = pendingCommits.length;
1286
+ const staged = new Map([...stagedCommits].map(([fiber, work]) => [fiber, work.slice()]));
1287
+ const stack = stagedFibers.slice(), last = lastStagedFiber;
1288
+ onCommitRollback(() => {
1289
+ if (parent) parent.replaceChildren(...children);
1290
+ pendingEffects.length = effects;
1291
+ pendingInsertionEffects.length = insertion;
1292
+ pendingCommits.length = commits;
1293
+ stagedCommits.clear();
1294
+ for (const [fiber, work] of staged) stagedCommits.set(fiber, work);
1295
+ stagedFibers.splice(0, stagedFibers.length, ...stack);
1296
+ lastStagedFiber = last;
1297
+ });
1298
+ });
854
1299
  function runEffect(fiber, effect, root) {
1300
+ if (fiber.um) return;
1301
+ if (effect.t !== 2 && (isActivityHidden(fiber) || activityIsDisconnected(fiber) || effect.t === 1 && !effect.s && fiber.ld)) return;
855
1302
  try {
856
1303
  const cleanup = effect.c();
857
1304
  if (typeof cleanup == "function") {
@@ -859,36 +1306,53 @@ function runEffect(fiber, effect, root) {
859
1306
  fiber.cu.push(cleanup);
860
1307
  }
861
1308
  } catch (e) {
862
- if (root.ce) root.ce(e);
1309
+ handleCommitError(fiber, e);
863
1310
  }
864
1311
  }
865
1312
  function isEventProp(name) {
866
1313
  return name.length > 2 && name.charCodeAt(0) === 111 && name.charCodeAt(1) === 110 && name.charCodeAt(2) >= 65;
867
1314
  }
868
1315
  export {
1316
+ RenderErrorCapture,
1317
+ RenderSuspenseCapture,
1318
+ activityIsDisconnected,
1319
+ attachRef,
869
1320
  batchedUpdates,
870
1321
  childrenToArray,
871
1322
  deferHydration,
1323
+ detachRef,
1324
+ discardPendingEffects,
872
1325
  discardPendingWork,
873
1326
  enqueueEffect,
874
1327
  findRoot,
1328
+ findSuspenseBoundary,
1329
+ flushFiberCommits,
875
1330
  flushSyncWork,
1331
+ getAnchor,
876
1332
  getCurrentRoot,
877
1333
  getForceRerenderingFiber,
1334
+ getHostParent,
1335
+ handleCommitError,
878
1336
  handleErrorInRender,
879
1337
  handleSuspended,
880
1338
  installCapability,
1339
+ isActivityHidden,
881
1340
  isThenable,
1341
+ layoutIsDisconnected,
882
1342
  readContext,
883
1343
  reconcileChildren,
1344
+ recoverRootError,
884
1345
  registerElementMarker,
885
1346
  registerRenderer,
886
1347
  registerTypeMatcher,
1348
+ rememberActivityEffect,
887
1349
  renderFiber,
888
1350
  renderRoot,
889
1351
  runEffects,
890
1352
  scheduleLifecycle,
1353
+ scheduleRootRender,
891
1354
  scheduleUpdate,
1355
+ syncRefIfChanged,
892
1356
  unmountAllChildren,
893
1357
  unmountFiber,
894
1358
  withCurrentRoot