@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
package/dist/dom/dom.js CHANGED
@@ -1,5 +1,5 @@
1
- // packages/redact/src/dom/dom.ts
2
- import { attributeName, STRING_BOOLEAN_ATTRS } from "../core/attributes";
1
+ // src/dom/dom.ts
2
+ import { attributeName, STRING_BOOLEAN_ATTRS } from "../core/attributes.js";
3
3
  var SVG_NS = "http://www.w3.org/2000/svg";
4
4
  var BOOLEAN_ATTRS = /* @__PURE__ */ new Set([
5
5
  "allowfullscreen",
@@ -8,6 +8,7 @@ var BOOLEAN_ATTRS = /* @__PURE__ */ new Set([
8
8
  "autoplay",
9
9
  "checked",
10
10
  "controls",
11
+ "credentialless",
11
12
  "default",
12
13
  "defer",
13
14
  "disabled",
@@ -46,8 +47,59 @@ function createHostNode(type, isSvg) {
46
47
  function isSvgElement(el) {
47
48
  return el.ownerSVGElement !== void 0 || el.tagName === "svg";
48
49
  }
50
+ function syncInputValue(el, props, prev) {
51
+ if (!prev) {
52
+ el.checked = el.defaultChecked = !!(props.checked ?? props.defaultChecked);
53
+ } else if (props.checked != null) {
54
+ el.checked = !!props.checked;
55
+ } else if (props.defaultChecked != null) {
56
+ el.defaultChecked = !!props.defaultChecked;
57
+ }
58
+ const value = props.value;
59
+ const fallback = props.defaultValue;
60
+ if (!prev) {
61
+ if (value == null && (el.type === "submit" || el.type === "reset")) return;
62
+ if (value != null || fallback != null) {
63
+ const initial = "" + (value ?? fallback);
64
+ if (el.value !== initial) el.value = initial;
65
+ el.defaultValue = initial;
66
+ }
67
+ return;
68
+ }
69
+ if (value != null) {
70
+ if (el.type === "number" ? value === 0 && el.value === "" || el.value != value : el.value !== "" + value) {
71
+ el.value = "" + value;
72
+ }
73
+ const nextDefault = el.type === "number" && el.value == value ? el.value : "" + value;
74
+ if (el.defaultValue !== nextDefault) el.defaultValue = nextDefault;
75
+ } else if (fallback != null) {
76
+ if (el.defaultValue !== "" + fallback) el.defaultValue = "" + fallback;
77
+ } else if (prev.defaultValue != null || el.type === "submit" || el.type === "reset") {
78
+ el.removeAttribute("value");
79
+ }
80
+ }
81
+ function syncTextareaValue(el, props, mounting = false) {
82
+ if (mounting) {
83
+ const children = props.children;
84
+ const initial = props.value ?? props.defaultValue ?? (Array.isArray(children) ? children[0] : children) ?? "";
85
+ el.defaultValue = initial;
86
+ if (initial !== "" && el.textContent === initial) el.value = initial;
87
+ return;
88
+ }
89
+ const value = props.value;
90
+ if (value != null && el.value !== "" + value) el.value = "" + value;
91
+ const fallback = props.defaultValue ?? value ?? "";
92
+ if (el.defaultValue !== "" + fallback) el.defaultValue = "" + fallback;
93
+ }
49
94
  function setProp(el, name, next, prev, isSvg) {
50
95
  if (name === "children" || name === "key" || name === "ref") return;
96
+ if (name.length > 5 && (name.charCodeAt(0) === 97 || name.charCodeAt(0) === 100)) {
97
+ if (name.startsWith("aria-") || name.startsWith("data-")) {
98
+ if (next == null) el.removeAttribute(name);
99
+ else el.setAttribute(name, "" + next);
100
+ return;
101
+ }
102
+ }
51
103
  const attr = attributeName(name, isSvg);
52
104
  if (name === "defaultValue" || name === "defaultChecked") {
53
105
  if (prev === void 0 && next != null) {
@@ -59,19 +111,9 @@ function setProp(el, name, next, prev, isSvg) {
59
111
  }
60
112
  return;
61
113
  }
62
- if (name === "className") {
63
- if (isSvg) {
64
- if (next == null) el.removeAttribute("class");
65
- else el.setAttribute("class", "" + next);
66
- } else {
67
- ;
68
- el.className = next == null ? "" : "" + next;
69
- }
70
- return;
71
- }
72
- if (name === "class") {
73
- if (next == null) el.removeAttribute("class");
74
- else el.setAttribute("class", "" + next);
114
+ if (name === "className" && !isSvg) {
115
+ ;
116
+ el.className = next == null ? "" : "" + next;
75
117
  return;
76
118
  }
77
119
  if (name === "style") {
@@ -85,15 +127,10 @@ function setProp(el, name, next, prev, isSvg) {
85
127
  return;
86
128
  }
87
129
  if (name[0] === "o" && name[1] === "n") {
88
- setEventHandler(el, name, next, prev);
89
- return;
90
- }
91
- if (name === "htmlFor") {
92
- if (next == null) el.removeAttribute("for");
93
- else el.setAttribute("for", "" + next);
130
+ setEventHandler(el, name, next);
94
131
  return;
95
132
  }
96
- if (STRING_BOOLEAN_ATTRS.has(attr)) {
133
+ if (name === "className" || name === "class" || name === "htmlFor" || STRING_BOOLEAN_ATTRS.has(attr)) {
97
134
  if (next == null) el.removeAttribute(attr);
98
135
  else el.setAttribute(attr, "" + next);
99
136
  return;
@@ -106,27 +143,11 @@ function setProp(el, name, next, prev, isSvg) {
106
143
  } catch {
107
144
  }
108
145
  }
109
- if (BOOLEAN_ATTRS.has(name.toLowerCase())) {
110
- if (next) el.setAttribute(attr, "");
111
- else el.removeAttribute(attr);
112
- return;
113
- }
114
- if (name.length > 5 && (name.charCodeAt(0) === 97 || name.charCodeAt(0) === 100)) {
115
- if (name.startsWith("aria-") || name.startsWith("data-")) {
116
- if (next == null) {
117
- el.removeAttribute(attr);
118
- } else {
119
- el.setAttribute(attr, "" + next);
120
- }
121
- return;
122
- }
123
- }
146
+ if (BOOLEAN_ATTRS.has(attr)) next = !!next;
124
147
  if (next == null || next === false) {
125
148
  el.removeAttribute(attr);
126
- } else if (next === true) {
127
- el.setAttribute(attr, "");
128
149
  } else {
129
- el.setAttribute(attr, "" + next);
150
+ el.setAttribute(attr, next === true ? "" : next);
130
151
  }
131
152
  }
132
153
  function setStyle(el, next, prev) {
@@ -205,39 +226,36 @@ var UNITLESS_STYLE = /* @__PURE__ */ new Set([
205
226
  "strokeOpacity",
206
227
  "strokeWidth"
207
228
  ]);
208
- function setEventHandler(el, name, next, prev) {
229
+ function setEventHandler(el, name, next) {
209
230
  if (next != null && typeof next != "function") next = null;
210
231
  const capture = name.endsWith("Capture");
211
232
  const reactEventName = name.slice(2, capture ? -7 : void 0);
212
233
  const eventName = domEventFor(reactEventName, el);
213
234
  const handlers = el.__handlers ||= /* @__PURE__ */ Object.create(null);
214
- const key = name;
215
- const existing = handlers[key];
235
+ const existing = handlers[name];
216
236
  if (existing && !next) {
217
- el.removeEventListener(existing.event, existing.listener, existing.capture);
218
- handlers[key] = null;
237
+ el.removeEventListener(existing.event, existing.listener, capture);
238
+ handlers[name] = null;
219
239
  return;
220
240
  }
221
241
  if (!existing && next) {
222
242
  const entry = {
223
243
  current: next,
224
244
  listener: null,
225
- event: eventName,
226
- capture
245
+ event: eventName
227
246
  };
228
247
  entry.listener = (e) => {
229
248
  if (e.nativeEvent === void 0) e.nativeEvent = e;
230
249
  entry.current(e);
231
250
  };
232
- handlers[key] = entry;
251
+ handlers[name] = entry;
233
252
  el.addEventListener(eventName, entry.listener, capture);
234
253
  return;
235
254
  }
236
255
  if (existing) {
237
- if (existing.event !== eventName || existing.capture !== capture) {
238
- el.removeEventListener(existing.event, existing.listener, existing.capture);
256
+ if (existing.event !== eventName) {
257
+ el.removeEventListener(existing.event, existing.listener, capture);
239
258
  existing.event = eventName;
240
- existing.capture = capture;
241
259
  el.addEventListener(eventName, existing.listener, capture);
242
260
  }
243
261
  existing.current = next;
@@ -261,6 +279,8 @@ function domEventFor(reactEventName, el) {
261
279
  export {
262
280
  createHostNode,
263
281
  isSvgElement,
264
- setProp
282
+ setProp,
283
+ syncInputValue,
284
+ syncTextareaValue
265
285
  };
266
286
  //# sourceMappingURL=dom.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/dom/dom.ts"],
4
- "sourcesContent": ["import { attributeName, STRING_BOOLEAN_ATTRS } from '../core/attributes'\n\nconst SVG_NS = 'http://www.w3.org/2000/svg'\n\nconst BOOLEAN_ATTRS = new Set([\n 'allowfullscreen',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'itemscope',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected',\n])\n\nconst IDL_ATTRS = new Set([\n 'value',\n 'checked',\n 'selected',\n 'disabled',\n 'multiple',\n 'muted',\n 'readonly',\n])\n\nexport function createHostNode(type: string, isSvg: boolean): Element {\n if (isSvg || type === 'svg') {\n return document.createElementNS(SVG_NS, type)\n }\n return document.createElement(type)\n}\n\nexport function isSvgElement(el: Element): boolean {\n return (el as any).ownerSVGElement !== undefined || el.tagName === 'svg'\n}\n\nexport function setProp(\n el: Element,\n name: string,\n next: any,\n prev: any,\n isSvg: boolean,\n): void {\n if (name === 'children' || name === 'key' || name === 'ref') return\n const attr = attributeName(name, isSvg)\n\n // defaultValue / defaultChecked are IDL-property-only \u2014 they seed the\n // initial value/checked of a form control on first mount and must NOT be\n // emitted as HTML attributes (which would leak as `defaultValue=\"...\"`).\n // Setting `el.defaultValue` on a fresh control also sets the initial\n // `el.value`, which is what consumers expect. Skip on hydrated DOM so we\n // don't clobber a live user-typed value.\n if (name === 'defaultValue' || name === 'defaultChecked') {\n if (prev === undefined && next != null) {\n try {\n ;(el as any)[name] = next\n } catch {}\n }\n return\n }\n\n if (name === 'className') {\n if (isSvg) {\n if (next == null) el.removeAttribute('class')\n else el.setAttribute('class', '' + next)\n } else {\n ;(el as HTMLElement).className = next == null ? '' : '' + next\n }\n return\n }\n\n if (name === 'class') {\n if (next == null) el.removeAttribute('class')\n else el.setAttribute('class', '' + next)\n return\n }\n\n if (name === 'style') {\n setStyle(el as HTMLElement, next, prev)\n return\n }\n\n if (name === 'dangerouslySetInnerHTML') {\n const nextHtml = next?.__html ?? ''\n const prevHtml = prev?.__html ?? ''\n if (nextHtml !== prevHtml) (el as HTMLElement).innerHTML = nextHtml\n return\n }\n\n if (name[0] === 'o' && name[1] === 'n') {\n setEventHandler(el, name, next, prev)\n return\n }\n\n if (name === 'htmlFor') {\n if (next == null) el.removeAttribute('for')\n else el.setAttribute('for', '' + next)\n return\n }\n\n if (STRING_BOOLEAN_ATTRS.has(attr)) {\n if (next == null) el.removeAttribute(attr)\n else el.setAttribute(attr, '' + next)\n return\n }\n\n if (!isSvg && IDL_ATTRS.has(name) && name in el) {\n try {\n ;(el as any)[name] = next == null ? '' : next\n return\n } catch {}\n }\n\n if (BOOLEAN_ATTRS.has(name.toLowerCase())) {\n if (next) el.setAttribute(attr, '')\n else el.removeAttribute(attr)\n return\n }\n\n // aria-* and data-* attributes stringify booleans to `\"true\"`/`\"false\"`\n // rather than using the HTML boolean-attribute presence/absence semantics.\n // This matches React and the ARIA spec (aria-hidden=\"false\" is meaningful).\n if (name.length > 5 && (name.charCodeAt(0) === 97 /* a */ || name.charCodeAt(0) === 100 /* d */)) {\n if (name.startsWith('aria-') || name.startsWith('data-')) {\n if (next == null) {\n el.removeAttribute(attr)\n } else {\n el.setAttribute(attr, '' + next)\n }\n return\n }\n }\n\n if (next == null || next === false) {\n el.removeAttribute(attr)\n } else if (next === true) {\n el.setAttribute(attr, '')\n } else {\n el.setAttribute(attr, '' + next)\n }\n}\n\nfunction setStyle(el: HTMLElement, next: any, prev: any): void {\n const style = el.style\n if (typeof next === 'string') {\n style.cssText = next\n return\n }\n if (typeof prev === 'string') style.cssText = ''\n if (prev && typeof prev === 'object') {\n for (const k in prev) {\n if (!next || !(k in next)) setStyleProperty(style, k, '')\n }\n }\n if (next && typeof next === 'object') {\n for (const k in next) {\n if (!prev || prev[k] !== next[k]) setStyleProperty(style, k, next[k])\n }\n }\n}\n\nfunction setStyleProperty(style: CSSStyleDeclaration, key: string, value: any): void {\n if (key[0] === '-') {\n style.setProperty(key, value == null ? '' : '' + value)\n } else if (value == null || value === '') {\n ;(style as any)[key] = ''\n } else if (typeof value === 'number' && !UNITLESS_STYLE.has(key)) {\n ;(style as any)[key] = value + 'px'\n } else {\n ;(style as any)[key] = '' + value\n }\n}\n\nconst UNITLESS_STYLE = new Set([\n 'animationIterationCount',\n 'borderImageOutset',\n 'borderImageSlice',\n 'borderImageWidth',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'columns',\n 'flex',\n 'flexGrow',\n 'flexPositive',\n 'flexShrink',\n 'flexNegative',\n 'flexOrder',\n 'gridArea',\n 'gridRow',\n 'gridRowEnd',\n 'gridRowSpan',\n 'gridRowStart',\n 'gridColumn',\n 'gridColumnEnd',\n 'gridColumnSpan',\n 'gridColumnStart',\n 'fontWeight',\n 'lineClamp',\n 'lineHeight',\n 'opacity',\n 'order',\n 'orphans',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n 'fillOpacity',\n 'floodOpacity',\n 'stopOpacity',\n 'strokeDasharray',\n 'strokeDashoffset',\n 'strokeMiterlimit',\n 'strokeOpacity',\n 'strokeWidth',\n])\n\nexport interface SyntheticEvent extends Event {\n nativeEvent: Event\n isDefaultPrevented(): boolean\n isPropagationStopped(): boolean\n persist(): void\n currentTarget: EventTarget & Element\n}\n\nfunction setEventHandler(el: Element, name: string, next: any, prev: any): void {\n // Only function handlers are accepted. Reject strings/objects/etc \u2014 the\n // legacy `onclick=\"...\"` HTML attribute (string handler) is a known XSS\n // vector if a parent spreads untrusted props onto a host element. React\n // also ignores non-function handlers.\n if (next != null && typeof next != 'function') next = null\n\n const capture = name.endsWith('Capture')\n const reactEventName = name.slice(2, capture ? -7 : undefined)\n const eventName = domEventFor(reactEventName, el)\n\n // Key by the React prop name (not DOM event name) so `onChange` and\n // `onInput` on the same text input \u2014 which both dispatch from the native\n // `input` event \u2014 can coexist without clobbering each other's handlers.\n const handlers = ((el as any).__handlers ||= Object.create(null))\n const key = name\n\n const existing = handlers[key]\n\n if (existing && !next) {\n el.removeEventListener(existing.event, existing.listener, existing.capture)\n handlers[key] = null\n return\n }\n\n if (!existing && next) {\n const entry = {\n current: next as Function,\n listener: null as any,\n event: eventName,\n capture,\n }\n entry.listener = (e: Event) => {\n // React hands handlers a SyntheticEvent that carries `.nativeEvent`.\n // Many libraries check `event.nativeEvent.isComposing` (react-instantsearch)\n // or `event.nativeEvent.shiftKey` (UI kits) \u2014 without the alias they throw\n // on `undefined.foo`. Aliasing the native event to itself is the cheapest\n // way to satisfy the shape without building a full synthetic layer.\n if ((e as any).nativeEvent === undefined) (e as any).nativeEvent = e\n entry.current(e)\n }\n handlers[key] = entry\n el.addEventListener(eventName, entry.listener, capture)\n return\n }\n\n if (existing) {\n // Re-bind if the effective DOM event changed (e.g. <input> whose `type`\n // flipped from \"text\" to \"checkbox\" \u2014 onChange should now follow `change`\n // instead of `input`). This is rare but keeps semantics correct.\n if (existing.event !== eventName || existing.capture !== capture) {\n el.removeEventListener(existing.event, existing.listener, existing.capture)\n existing.event = eventName\n existing.capture = capture\n el.addEventListener(eventName, existing.listener, capture)\n }\n existing.current = next\n }\n}\n\nfunction domEventFor(reactEventName: string, el: Element): string {\n const lower = reactEventName.toLowerCase()\n // React's `onChange` on text-like <input> and <textarea> maps to the\n // native `input` event so handlers fire on every keystroke. On checkbox,\n // radio, file inputs, and <select>, React's `onChange` maps to the\n // native `change` event (which fires on click / option select).\n if (lower === 'change') {\n const tag = el.tagName\n if (tag === 'TEXTAREA') return 'input'\n if (tag === 'INPUT') {\n const type = ((el as HTMLInputElement).type || 'text').toLowerCase()\n if (type !== 'checkbox' && type !== 'radio' && type !== 'file') {\n return 'input'\n }\n }\n }\n if (lower === 'doubleclick') return 'dblclick'\n return lower\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { attributeName, STRING_BOOLEAN_ATTRS } from '../core/attributes'\n\nconst SVG_NS = 'http://www.w3.org/2000/svg'\n\nconst BOOLEAN_ATTRS = new Set([\n 'allowfullscreen',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'credentialless',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'itemscope',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected',\n])\n\nconst IDL_ATTRS = new Set([\n 'value',\n 'checked',\n 'selected',\n 'disabled',\n 'multiple',\n 'muted',\n 'readonly',\n])\n\nexport function createHostNode(type: string, isSvg: boolean): Element {\n if (isSvg || type === 'svg') {\n return document.createElementNS(SVG_NS, type)\n }\n return document.createElement(type)\n}\n\nexport function isSvgElement(el: Element): boolean {\n return (el as any).ownerSVGElement !== undefined || el.tagName === 'svg'\n}\n\nexport function syncInputValue(el: HTMLInputElement, props: any, prev?: any): void {\n if (!prev) {\n el.checked = el.defaultChecked = !!(props.checked ?? props.defaultChecked)\n } else if (props.checked != null) {\n el.checked = !!props.checked\n } else if (props.defaultChecked != null) {\n el.defaultChecked = !!props.defaultChecked\n }\n const value = props.value\n const fallback = props.defaultValue\n if (!prev) {\n if (value == null && (el.type === 'submit' || el.type === 'reset')) return\n if (value != null || fallback != null) {\n const initial = '' + (value ?? fallback)\n if (el.value !== initial) el.value = initial\n el.defaultValue = initial\n }\n return\n }\n if (value != null) {\n // Number inputs keep equivalent user spelling, including trailing zeroes.\n if (el.type === 'number' ? (value === 0 && el.value === '') || el.value != value : el.value !== '' + value) {\n el.value = '' + value\n }\n const nextDefault = el.type === 'number' && el.value == value ? el.value : '' + value\n if (el.defaultValue !== nextDefault) el.defaultValue = nextDefault\n } else if (fallback != null) {\n if (el.defaultValue !== '' + fallback) el.defaultValue = '' + fallback\n } else if (prev.defaultValue != null || el.type === 'submit' || el.type === 'reset') {\n el.removeAttribute('value')\n }\n}\n\nexport function syncTextareaValue(el: HTMLTextAreaElement, props: any, mounting = false): void {\n if (mounting) {\n const children = props.children\n const initial = props.value ?? props.defaultValue ?? (Array.isArray(children) ? children[0] : children) ?? ''\n el.defaultValue = initial\n // The strict check also preserves React's clean numeric-default state.\n if (initial !== '' && el.textContent === initial) el.value = initial\n return\n }\n const value = props.value\n if (value != null && el.value !== '' + value) el.value = '' + value\n const fallback = props.defaultValue ?? value ?? ''\n if (el.defaultValue !== '' + fallback) el.defaultValue = '' + fallback\n}\n\nexport function setProp(\n el: Element,\n name: string,\n next: any,\n prev: any,\n isSvg: boolean,\n): void {\n if (name === 'children' || name === 'key' || name === 'ref') return\n // These names need no alias or boolean-attribute normalization.\n if (name.length > 5 && (name.charCodeAt(0) === 97 || name.charCodeAt(0) === 100)) {\n if (name.startsWith('aria-') || name.startsWith('data-')) {\n if (next == null) el.removeAttribute(name)\n else el.setAttribute(name, '' + next)\n return\n }\n }\n const attr = attributeName(name, isSvg)\n\n // defaultValue / defaultChecked are IDL-property-only \u2014 they seed the\n // initial value/checked of a form control on first mount and must NOT be\n // emitted as HTML attributes (which would leak as `defaultValue=\"...\"`).\n // Setting `el.defaultValue` on a fresh control also sets the initial\n // `el.value`, which is what consumers expect. Skip on hydrated DOM so we\n // don't clobber a live user-typed value.\n if (name === 'defaultValue' || name === 'defaultChecked') {\n if (prev === undefined && next != null) {\n try {\n ;(el as any)[name] = next\n } catch {}\n }\n return\n }\n\n if (name === 'className' && !isSvg) {\n ;(el as HTMLElement).className = next == null ? '' : '' + next\n return\n }\n\n if (name === 'style') {\n setStyle(el as HTMLElement, next, prev)\n return\n }\n\n if (name === 'dangerouslySetInnerHTML') {\n const nextHtml = next?.__html ?? ''\n const prevHtml = prev?.__html ?? ''\n if (nextHtml !== prevHtml) (el as HTMLElement).innerHTML = nextHtml\n return\n }\n\n if (name[0] === 'o' && name[1] === 'n') {\n setEventHandler(el, name, next)\n return\n }\n\n if (name === 'className' || name === 'class' || name === 'htmlFor' || STRING_BOOLEAN_ATTRS.has(attr)) {\n if (next == null) el.removeAttribute(attr)\n else el.setAttribute(attr, '' + next)\n return\n }\n\n if (!isSvg && IDL_ATTRS.has(name) && name in el) {\n try {\n ;(el as any)[name] = next == null ? '' : next\n return\n } catch {}\n }\n\n if (BOOLEAN_ATTRS.has(attr)) next = !!next\n\n if (next == null || next === false) {\n el.removeAttribute(attr)\n } else {\n el.setAttribute(attr, next === true ? '' : next)\n }\n}\n\nfunction setStyle(el: HTMLElement, next: any, prev: any): void {\n const style = el.style\n if (typeof next === 'string') {\n style.cssText = next\n return\n }\n if (typeof prev === 'string') style.cssText = ''\n if (prev && typeof prev === 'object') {\n for (const k in prev) {\n if (!next || !(k in next)) setStyleProperty(style, k, '')\n }\n }\n if (next && typeof next === 'object') {\n for (const k in next) {\n if (!prev || prev[k] !== next[k]) setStyleProperty(style, k, next[k])\n }\n }\n}\n\nfunction setStyleProperty(style: CSSStyleDeclaration, key: string, value: any): void {\n if (key[0] === '-') {\n style.setProperty(key, value == null ? '' : '' + value)\n } else if (value == null || value === '') {\n ;(style as any)[key] = ''\n } else if (typeof value === 'number' && !UNITLESS_STYLE.has(key)) {\n ;(style as any)[key] = value + 'px'\n } else {\n ;(style as any)[key] = '' + value\n }\n}\n\nconst UNITLESS_STYLE = new Set([\n 'animationIterationCount',\n 'borderImageOutset',\n 'borderImageSlice',\n 'borderImageWidth',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'columns',\n 'flex',\n 'flexGrow',\n 'flexPositive',\n 'flexShrink',\n 'flexNegative',\n 'flexOrder',\n 'gridArea',\n 'gridRow',\n 'gridRowEnd',\n 'gridRowSpan',\n 'gridRowStart',\n 'gridColumn',\n 'gridColumnEnd',\n 'gridColumnSpan',\n 'gridColumnStart',\n 'fontWeight',\n 'lineClamp',\n 'lineHeight',\n 'opacity',\n 'order',\n 'orphans',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n 'fillOpacity',\n 'floodOpacity',\n 'stopOpacity',\n 'strokeDasharray',\n 'strokeDashoffset',\n 'strokeMiterlimit',\n 'strokeOpacity',\n 'strokeWidth',\n])\n\nexport interface SyntheticEvent extends Event {\n nativeEvent: Event\n isDefaultPrevented(): boolean\n isPropagationStopped(): boolean\n persist(): void\n currentTarget: EventTarget & Element\n}\n\nfunction setEventHandler(el: Element, name: string, next: any): void {\n // Only function handlers are accepted. Reject strings/objects/etc \u2014 the\n // legacy `onclick=\"...\"` HTML attribute (string handler) is a known XSS\n // vector if a parent spreads untrusted props onto a host element. React\n // also ignores non-function handlers.\n if (next != null && typeof next != 'function') next = null\n\n const capture = name.endsWith('Capture')\n const reactEventName = name.slice(2, capture ? -7 : undefined)\n const eventName = domEventFor(reactEventName, el)\n\n // Key by the React prop name (not DOM event name) so `onChange` and\n // `onInput` on the same text input \u2014 which both dispatch from the native\n // `input` event \u2014 can coexist without clobbering each other's handlers.\n const handlers = ((el as any).__handlers ||= Object.create(null))\n const existing = handlers[name]\n\n if (existing && !next) {\n el.removeEventListener(existing.event, existing.listener, capture)\n handlers[name] = null\n return\n }\n\n if (!existing && next) {\n const entry = {\n current: next as Function,\n listener: null as any,\n event: eventName,\n }\n entry.listener = (e: Event) => {\n // React hands handlers a SyntheticEvent that carries `.nativeEvent`.\n // Many libraries check `event.nativeEvent.isComposing` (react-instantsearch)\n // or `event.nativeEvent.shiftKey` (UI kits) \u2014 without the alias they throw\n // on `undefined.foo`. Aliasing the native event to itself is the cheapest\n // way to satisfy the shape without building a full synthetic layer.\n if ((e as any).nativeEvent === undefined) (e as any).nativeEvent = e\n entry.current(e)\n }\n handlers[name] = entry\n el.addEventListener(eventName, entry.listener, capture)\n return\n }\n\n if (existing) {\n // Re-bind if the effective DOM event changed (e.g. <input> whose `type`\n // flipped from \"text\" to \"checkbox\" \u2014 onChange should now follow `change`\n // instead of `input`). This is rare but keeps semantics correct.\n if (existing.event !== eventName) {\n el.removeEventListener(existing.event, existing.listener, capture)\n existing.event = eventName\n el.addEventListener(eventName, existing.listener, capture)\n }\n existing.current = next\n }\n}\n\nfunction domEventFor(reactEventName: string, el: Element): string {\n const lower = reactEventName.toLowerCase()\n // React's `onChange` on text-like <input> and <textarea> maps to the\n // native `input` event so handlers fire on every keystroke. On checkbox,\n // radio, file inputs, and <select>, React's `onChange` maps to the\n // native `change` event (which fires on click / option select).\n if (lower === 'change') {\n const tag = el.tagName\n if (tag === 'TEXTAREA') return 'input'\n if (tag === 'INPUT') {\n const type = ((el as HTMLInputElement).type || 'text').toLowerCase()\n if (type !== 'checkbox' && type !== 'radio' && type !== 'file') {\n return 'input'\n }\n }\n }\n if (lower === 'doubleclick') return 'dblclick'\n return lower\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,2 @@
1
+ import { type Fiber } from "../core/index.js";
2
+ export declare function componentStack(fiber: Fiber | null): string;
@@ -0,0 +1,16 @@
1
+ // src/dom/error-info.ts
2
+ import { FiberTag } from "../core/index.js";
3
+ function componentStack(fiber) {
4
+ let stack = "";
5
+ for (; fiber; fiber = fiber.parent) {
6
+ let type = fiber.type;
7
+ while (type && typeof type === "object") type = type.type || type.render;
8
+ const name = typeof type === "string" ? type : typeof type === "function" ? type.displayName || type.name || "Anonymous" : fiber.tag === FiberTag.Suspense ? "Suspense" : fiber.tag === FiberTag.Activity ? "Activity" : "";
9
+ if (name) stack += "\n at " + name;
10
+ }
11
+ return stack;
12
+ }
13
+ export {
14
+ componentStack
15
+ };
16
+ //# sourceMappingURL=error-info.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/dom/error-info.ts"],
4
+ "sourcesContent": ["import { FiberTag, type Fiber } from '../core'\n\nexport function componentStack(fiber: Fiber | null): string {\n let stack = ''\n for (; fiber; fiber = fiber.parent) {\n let type = fiber.type\n while (type && typeof type === 'object') type = type.type || type.render\n const name = typeof type === 'string' ? type\n : typeof type === 'function' ? type.displayName || type.name || 'Anonymous'\n : fiber.tag === FiberTag.Suspense ? 'Suspense'\n : fiber.tag === FiberTag.Activity ? 'Activity' : ''\n if (name) stack += '\\n at ' + name\n }\n return stack\n}\n"],
5
+ "mappings": ";AAAA,SAAS,gBAA4B;AAE9B,SAAS,eAAe,OAA6B;AAC1D,MAAI,QAAQ;AACZ,SAAO,OAAO,QAAQ,MAAM,QAAQ;AAClC,QAAI,OAAO,MAAM;AACjB,WAAO,QAAQ,OAAO,SAAS,SAAU,QAAO,KAAK,QAAQ,KAAK;AAClE,UAAM,OAAO,OAAO,SAAS,WAAW,OACpC,OAAO,SAAS,aAAa,KAAK,eAAe,KAAK,QAAQ,cAC9D,MAAM,QAAQ,SAAS,WAAW,aAClC,MAAM,QAAQ,SAAS,WAAW,aAAa;AACnD,QAAI,KAAM,UAAS,cAAc;AAAA,EACnC;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -1,4 +1,4 @@
1
- // packages/redact/src/dom/event-replay.ts
1
+ // src/dom/event-replay.ts
2
2
  function drainReplayQueue() {
3
3
  const g = globalThis;
4
4
  const q = g.$RE_q;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,162 @@
1
+ // src/dom/features/activity/full.ts
2
+ import { FiberTag } from "../../../core/index.js";
3
+ import { REACT_ACTIVITY_TYPE } from "../../../react/activity.js";
4
+ import { onCommitRollback, queueMutation } from "../../commit.js";
5
+ import { retainedEffects as effects, inSuspensePrimary, setLayoutDisconnected, walkRetained as walk } from "../../retained-effects.js";
6
+ import {
7
+ attachRef,
8
+ childrenToArray,
9
+ detachRef,
10
+ enqueueEffect,
11
+ findRoot,
12
+ flushFiberCommits,
13
+ getCurrentRoot,
14
+ handleCommitError,
15
+ installCapability,
16
+ reconcileChildren,
17
+ registerRenderer,
18
+ registerTypeMatcher,
19
+ scheduleLifecycle,
20
+ scheduleUpdate
21
+ } from "../../reconcile.js";
22
+ var disconnected = /* @__PURE__ */ new WeakSet();
23
+ var hiddenDoms = /* @__PURE__ */ new WeakSet();
24
+ function setMembership(set, fiber, present) {
25
+ const previous = set.has(fiber);
26
+ if (previous === present) return previous;
27
+ onCommitRollback(() => {
28
+ if (previous) set.add(fiber);
29
+ else set.delete(fiber);
30
+ });
31
+ if (present) set.add(fiber);
32
+ else set.delete(fiber);
33
+ return previous;
34
+ }
35
+ function isHidden(fiber) {
36
+ if (!(fiber.root ?? findRoot(fiber))?.a) return false;
37
+ for (let parent = fiber; parent; parent = parent.parent) {
38
+ if (parent.tag === FiberTag.Activity && parent.pp?.mode === "hidden") return true;
39
+ }
40
+ return false;
41
+ }
42
+ function report(fiber, fn) {
43
+ try {
44
+ fn();
45
+ } catch (error) {
46
+ handleCommitError(fiber, error);
47
+ }
48
+ }
49
+ function disconnect(fiber) {
50
+ if (disconnected.has(fiber)) return;
51
+ setMembership(disconnected, fiber, true);
52
+ queueMutation(() => {
53
+ const insertion = /* @__PURE__ */ new Set();
54
+ for (const [hook, effect] of effects.get(fiber) ?? []) {
55
+ if (effect.t === 2 && hook.c) insertion.add(hook.c);
56
+ }
57
+ if (fiber.cu) {
58
+ const keep = fiber.cu.filter((cleanup) => insertion.has(cleanup));
59
+ for (const cleanup of fiber.cu) {
60
+ if (!insertion.has(cleanup)) report(fiber, cleanup);
61
+ }
62
+ fiber.cu = keep.length ? keep : null;
63
+ }
64
+ for (const [hook, effect] of effects.get(fiber) ?? []) {
65
+ if (effect.t !== 2) hook.c = null;
66
+ }
67
+ detachRef(fiber.cr ?? fiber.ref);
68
+ fiber.cr = null;
69
+ fiber.rc = null;
70
+ const instance = fiber.sn?._fiber === fiber ? fiber.sn : null;
71
+ if (!fiber.ld && instance?.componentWillUnmount) {
72
+ const props = instance.props, state = instance.state, committed = fiber.ms?.c;
73
+ if (committed) {
74
+ instance.props = committed.props;
75
+ instance.state = committed.state;
76
+ }
77
+ try {
78
+ report(fiber, () => instance.componentWillUnmount());
79
+ } finally {
80
+ instance.props = props;
81
+ instance.state = state;
82
+ }
83
+ }
84
+ });
85
+ }
86
+ function prepare(fiber) {
87
+ if (!isHidden(fiber) || disconnected.has(fiber)) return;
88
+ if (fiber.mp == null) setMembership(disconnected, fiber, true);
89
+ else disconnect(fiber);
90
+ }
91
+ function needsHiddenDom(fiber) {
92
+ for (let parent = fiber.parent; parent; parent = parent.parent) {
93
+ if (parent.tag === FiberTag.Activity && parent.pp?.mode === "hidden") return true;
94
+ if (parent.tag === FiberTag.Host) return false;
95
+ if (parent.tag === FiberTag.Portal) return isHidden(parent);
96
+ }
97
+ return false;
98
+ }
99
+ function syncDom(fiber) {
100
+ if (!(fiber.root ?? findRoot(fiber))?.a) return;
101
+ if (!fiber.dom || fiber.tag !== FiberTag.Host && fiber.tag !== FiberTag.Text) return;
102
+ if (needsHiddenDom(fiber)) {
103
+ setMembership(hiddenDoms, fiber, true);
104
+ queueMutation(() => {
105
+ if (fiber.tag === FiberTag.Text) fiber.dom.nodeValue = "";
106
+ else fiber.dom.style.setProperty("display", "none", "important");
107
+ });
108
+ } else if (setMembership(hiddenDoms, fiber, false)) {
109
+ for (let parent = fiber.parent; parent; parent = parent.parent) {
110
+ if (parent.tag === FiberTag.Suspense && parent.ms?.d?.some(([node]) => node === fiber.dom)) return;
111
+ }
112
+ const props = fiber.pp;
113
+ queueMutation(() => {
114
+ if (fiber.tag === FiberTag.Text) fiber.dom.nodeValue = props;
115
+ else {
116
+ const display = props?.style?.display;
117
+ fiber.dom.style.display = display == null || typeof display === "boolean" ? "" : ("" + display).trim();
118
+ }
119
+ });
120
+ }
121
+ }
122
+ function reconnect(fiber) {
123
+ syncDom(fiber);
124
+ if (isHidden(fiber) || inSuspensePrimary(fiber) || !setMembership(disconnected, fiber, false)) return;
125
+ setLayoutDisconnected(fiber, false);
126
+ const instance = fiber.sn?._fiber === fiber ? fiber.sn : null;
127
+ if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Resource) attachRef(fiber, fiber.dom);
128
+ else if (instance || fiber.tag === FiberTag.Fragment) attachRef(fiber, fiber.sn);
129
+ for (const effect of effects.get(fiber)?.values() ?? []) {
130
+ if (effect.t !== 2) enqueueEffect(fiber, effect);
131
+ }
132
+ if (instance?.componentDidMount) {
133
+ scheduleLifecycle(fiber, () => instance.componentDidMount());
134
+ }
135
+ flushFiberCommits(fiber);
136
+ }
137
+ function finish(fiber) {
138
+ if (fiber.tag === FiberTag.Suspense && (fiber.root ?? findRoot(fiber))?.a) walk(fiber, reconnect, true);
139
+ else syncDom(fiber);
140
+ }
141
+ function renderActivity(fiber, domParent, anchor) {
142
+ const root = fiber.root ?? findRoot(fiber);
143
+ if (root) root.a = true;
144
+ const props = fiber.pp ?? {};
145
+ if (getCurrentRoot()?.h && props.mode === "hidden" && !fiber.mp) {
146
+ fiber.mp = props;
147
+ queueMicrotask(() => scheduleUpdate(fiber));
148
+ return;
149
+ }
150
+ if (isHidden(fiber)) walk(fiber, prepare);
151
+ else walk(fiber, syncDom);
152
+ reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor);
153
+ walk(fiber, reconnect, true);
154
+ fiber.mp = props;
155
+ }
156
+ installCapability("isActivityHidden", isHidden);
157
+ installCapability("activityIsDisconnected", (fiber) => disconnected.has(fiber));
158
+ installCapability("prepareActivityFiber", prepare);
159
+ installCapability("syncActivity", finish);
160
+ registerTypeMatcher((type) => type === REACT_ACTIVITY_TYPE ? FiberTag.Activity : null);
161
+ registerRenderer(FiberTag.Activity, renderActivity);
162
+ //# sourceMappingURL=full.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/activity/full.ts"],
4
+ "sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport { REACT_ACTIVITY_TYPE } from '../../../react/activity'\nimport { onCommitRollback, queueMutation } from '../../commit'\nimport { retainedEffects as effects, inSuspensePrimary, setLayoutDisconnected, walkRetained as walk } from '../../retained-effects'\nimport {\n attachRef,\n childrenToArray,\n detachRef,\n enqueueEffect,\n findRoot,\n flushFiberCommits,\n getCurrentRoot,\n handleCommitError,\n installCapability,\n reconcileChildren,\n registerRenderer,\n registerTypeMatcher,\n scheduleLifecycle,\n scheduleUpdate,\n} from '../../reconcile'\n\n// Retain effect descriptions, not subscriptions, while a subtree is hidden.\n// Weak keys keep this bookkeeping out of fibers that do not use Activity.\nconst disconnected = new WeakSet<Fiber>()\nconst hiddenDoms = new WeakSet<Fiber>()\n\nfunction setMembership(set: WeakSet<Fiber>, fiber: Fiber, present: boolean): boolean {\n const previous = set.has(fiber)\n if (previous === present) return previous\n onCommitRollback(() => { if (previous) set.add(fiber); else set.delete(fiber) })\n if (present) set.add(fiber)\n else set.delete(fiber)\n return previous\n}\n\nfunction isHidden(fiber: Fiber): boolean {\n if (!(fiber.root ?? findRoot(fiber))?.a) return false\n for (let parent: Fiber | null = fiber; parent; parent = parent.parent) {\n if (parent.tag === FiberTag.Activity && parent.pp?.mode === 'hidden') return true\n }\n return false\n}\n\nfunction report(fiber: Fiber, fn: () => void): void {\n try { fn() } catch (error) { handleCommitError(fiber, error) }\n}\n\nfunction disconnect(fiber: Fiber): void {\n if (disconnected.has(fiber)) return\n setMembership(disconnected, fiber, true)\n queueMutation(() => {\n // Insertion effects remain connected, just as they do in React.\n const insertion = new Set<() => void>()\n for (const [hook, effect] of effects.get(fiber) ?? []) {\n if (effect.t === 2 && hook.c) insertion.add(hook.c)\n }\n if (fiber.cu) {\n const keep = fiber.cu.filter(cleanup => insertion.has(cleanup))\n for (const cleanup of fiber.cu) {\n if (!insertion.has(cleanup)) report(fiber, cleanup)\n }\n fiber.cu = keep.length ? keep : null\n }\n for (const [hook, effect] of effects.get(fiber) ?? []) {\n if (effect.t !== 2) hook.c = null\n }\n detachRef(fiber.cr ?? fiber.ref)\n fiber.cr = null\n fiber.rc = null\n const instance = fiber.sn?._fiber === fiber ? fiber.sn : null\n if (!fiber.ld && instance?.componentWillUnmount) {\n const props = instance.props, state = instance.state, committed = fiber.ms?.c\n if (committed) { instance.props = committed.props; instance.state = committed.state }\n try { report(fiber, () => instance.componentWillUnmount()) }\n finally { instance.props = props; instance.state = state }\n }\n })\n}\n\nfunction prepare(fiber: Fiber): void {\n if (!isHidden(fiber) || disconnected.has(fiber)) return\n if (fiber.mp == null) setMembership(disconnected, fiber, true)\n else disconnect(fiber)\n}\n\nfunction needsHiddenDom(fiber: Fiber): boolean {\n for (let parent = fiber.parent; parent; parent = parent.parent) {\n if (parent.tag === FiberTag.Activity && parent.pp?.mode === 'hidden') return true\n if (parent.tag === FiberTag.Host) return false\n // A portal starts a new DOM tree, but keeps the parent's Activity state.\n if (parent.tag === FiberTag.Portal) return isHidden(parent)\n }\n return false\n}\n\nfunction syncDom(fiber: Fiber): void {\n if (!(fiber.root ?? findRoot(fiber))?.a) return\n if (!fiber.dom || (fiber.tag !== FiberTag.Host && fiber.tag !== FiberTag.Text)) return\n if (needsHiddenDom(fiber)) {\n setMembership(hiddenDoms, fiber, true)\n queueMutation(() => {\n if (fiber.tag === FiberTag.Text) fiber.dom!.nodeValue = ''\n else (fiber.dom as HTMLElement).style.setProperty('display', 'none', 'important')\n })\n } else if (setMembership(hiddenDoms, fiber, false)) {\n // A Suspense fallback can remain active after its Activity is revealed.\n // Its preserved primary DOM must stay hidden until that boundary resumes.\n for (let parent = fiber.parent; parent; parent = parent.parent) {\n if (parent.tag === FiberTag.Suspense && parent.ms?.d?.some(([node]: [Node, string]) => node === fiber.dom)) return\n }\n const props = fiber.pp\n queueMutation(() => {\n if (fiber.tag === FiberTag.Text) fiber.dom!.nodeValue = props\n else {\n const display = props?.style?.display\n ;(fiber.dom as HTMLElement).style.display = display == null || typeof display === 'boolean' ? '' : ('' + display).trim()\n }\n })\n }\n}\n\nfunction reconnect(fiber: Fiber): void {\n syncDom(fiber)\n if (isHidden(fiber) || inSuspensePrimary(fiber) || !setMembership(disconnected, fiber, false)) return\n setLayoutDisconnected(fiber, false)\n const instance = fiber.sn?._fiber === fiber ? fiber.sn : null\n if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Resource) attachRef(fiber, fiber.dom)\n else if (instance || fiber.tag === FiberTag.Fragment) attachRef(fiber, fiber.sn)\n for (const effect of effects.get(fiber)?.values() ?? []) {\n if (effect.t !== 2) enqueueEffect(fiber, effect)\n }\n if (instance?.componentDidMount) {\n scheduleLifecycle(fiber, () => instance.componentDidMount())\n }\n flushFiberCommits(fiber)\n}\n\nfunction finish(fiber: Fiber): void {\n if (fiber.tag === FiberTag.Suspense && (fiber.root ?? findRoot(fiber))?.a) walk(fiber, reconnect, true)\n else syncDom(fiber)\n}\n\nfunction renderActivity(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const root = fiber.root ?? findRoot(fiber)\n if (root) root.a = true\n const props = fiber.pp ?? {}\n // Hidden content is absent from server HTML. Mount it after hydration so it\n // cannot consume a following visible sibling's hydration cursor.\n if (getCurrentRoot()?.h && props.mode === 'hidden' && !fiber.mp) {\n fiber.mp = props\n queueMicrotask(() => scheduleUpdate(fiber))\n return\n }\n if (isHidden(fiber)) walk(fiber, prepare)\n else walk(fiber, syncDom)\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n walk(fiber, reconnect, true)\n fiber.mp = props\n}\n\ninstallCapability('isActivityHidden', isHidden)\ninstallCapability('activityIsDisconnected', fiber => disconnected.has(fiber))\ninstallCapability('prepareActivityFiber', prepare)\ninstallCapability('syncActivity', finish)\nregisterTypeMatcher(type => type === REACT_ACTIVITY_TYPE ? FiberTag.Activity : null)\nregisterRenderer(FiberTag.Activity, renderActivity)\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export * from "./full.js";
@@ -0,0 +1,3 @@
1
+ // src/dom/features/activity/index.ts
2
+ export * from "./full.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/activity/index.ts"],
4
+ "sourcesContent": ["export * from './full'\n"],
5
+ "mappings": ";AAAA,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ // src/dom/features/activity/stub.ts
2
+ import { FiberTag } from "../../../core/index.js";
3
+ import { REACT_ACTIVITY_TYPE } from "../../../react/activity.js";
4
+ import { childrenToArray, reconcileChildren, registerRenderer, registerTypeMatcher } from "../../reconcile.js";
5
+ function renderActivity(fiber, parent, anchor) {
6
+ const props = fiber.pp ?? {};
7
+ reconcileChildren(fiber, props.mode === "hidden" ? [] : childrenToArray(props.children), parent, anchor);
8
+ fiber.mp = props;
9
+ }
10
+ registerTypeMatcher((type) => type === REACT_ACTIVITY_TYPE ? FiberTag.Activity : null);
11
+ registerRenderer(FiberTag.Activity, renderActivity);
12
+ //# sourceMappingURL=stub.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/activity/stub.ts"],
4
+ "sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport { REACT_ACTIVITY_TYPE } from '../../../react/activity'\nimport { childrenToArray, reconcileChildren, registerRenderer, registerTypeMatcher } from '../../reconcile'\n\n// Explicit small-preset downgrade: hidden children unmount instead of being\n// retained. Showing them again creates fresh state, DOM, effects, and refs.\nfunction renderActivity(fiber: Fiber, parent: Node, anchor: Node | null): void {\n const props = fiber.pp ?? {}\n reconcileChildren(fiber, props.mode === 'hidden' ? [] : childrenToArray(props.children), parent, anchor)\n fiber.mp = props\n}\n\nregisterTypeMatcher(type => type === REACT_ACTIVITY_TYPE ? FiberTag.Activity : null)\nregisterRenderer(FiberTag.Activity, renderActivity)\n"],
5
+ "mappings": ";AAAA,SAAS,gBAA4B;AACrC,SAAS,2BAA2B;AACpC,SAAS,iBAAiB,mBAAmB,kBAAkB,2BAA2B;AAI1F,SAAS,eAAe,OAAc,QAAc,QAA2B;AAC7E,QAAM,QAAQ,MAAM,MAAM,CAAC;AAC3B,oBAAkB,OAAO,MAAM,SAAS,WAAW,CAAC,IAAI,gBAAgB,MAAM,QAAQ,GAAG,QAAQ,MAAM;AACvG,QAAM,KAAK;AACb;AAEA,oBAAoB,UAAQ,SAAS,sBAAsB,SAAS,WAAW,IAAI;AACnF,iBAAiB,SAAS,UAAU,cAAc;",
6
+ "names": []
7
+ }