octane 0.2.11 → 0.2.13

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 (264) hide show
  1. package/README.md +5 -0
  2. package/dist/behavior-root.d.ts +13 -3
  3. package/dist/behavior-root.js +28 -5
  4. package/dist/cjs/behavior-root.cjs +32 -6
  5. package/dist/cjs/class-names.cjs +49 -0
  6. package/dist/cjs/constants.cjs +9 -0
  7. package/dist/cjs/context-epoch.cjs +38 -0
  8. package/dist/cjs/css.cjs +6 -27
  9. package/dist/cjs/data-encoding.cjs +160 -0
  10. package/dist/cjs/dom-binding-handoff.cjs +93 -0
  11. package/dist/cjs/dom-binding-protocol.cjs +115 -0
  12. package/dist/cjs/dom-binding-styles.cjs +292 -0
  13. package/dist/cjs/dom-bindings.cjs +700 -0
  14. package/dist/cjs/dom-focused-move.cjs +66 -0
  15. package/dist/cjs/dom-stage.cjs +896 -0
  16. package/dist/cjs/dom-tables.cjs +4 -94
  17. package/dist/cjs/error-codes.client.generated.cjs +33 -0
  18. package/dist/cjs/error-codes.server.generated.cjs +24 -0
  19. package/dist/cjs/hydration/control-capture.cjs +244 -0
  20. package/dist/cjs/hydration/event-capture.cjs +125 -43
  21. package/dist/cjs/hydration/interaction-config.cjs +50 -2
  22. package/dist/cjs/hydration-markers.cjs +37 -0
  23. package/dist/cjs/independent-hydration-protocol.cjs +106 -0
  24. package/dist/cjs/index.cjs +9 -0
  25. package/dist/cjs/runtime.cjs +6397 -1683
  26. package/dist/cjs/runtime.server.cjs +1465 -213
  27. package/dist/cjs/server/early-signals.cjs +45 -0
  28. package/dist/cjs/server/index.cjs +47 -0
  29. package/dist/cjs/server/rpc-batch.cjs +149 -0
  30. package/dist/cjs/server/rpc-stream.cjs +146 -0
  31. package/dist/cjs/server/rpc.cjs +34 -15
  32. package/dist/cjs/server/signal-query-observation.cjs +158 -0
  33. package/dist/cjs/server/streamed-region.cjs +52 -0
  34. package/dist/cjs/server/streamed-signals.cjs +512 -0
  35. package/dist/cjs/server-call.cjs +103 -0
  36. package/dist/cjs/server-rpc-batch-client.cjs +141 -0
  37. package/dist/cjs/server-rpc-client.cjs +94 -27
  38. package/dist/cjs/server-rpc-protocol.cjs +141 -0
  39. package/dist/cjs/server-rpc-stream-client.cjs +118 -0
  40. package/dist/cjs/signals/actions.cjs +474 -0
  41. package/dist/cjs/signals/client.cjs +4 -1
  42. package/dist/cjs/signals/computations.cjs +460 -0
  43. package/dist/cjs/signals/control-binding.cjs +368 -0
  44. package/dist/cjs/signals/derived-facade.cjs +50 -0
  45. package/dist/cjs/signals/document-owner.cjs +71 -0
  46. package/dist/cjs/signals/early-values.cjs +155 -0
  47. package/dist/cjs/signals/encoding.cjs +6 -95
  48. package/dist/cjs/signals/engine.cjs +276 -12
  49. package/dist/cjs/signals/errors.cjs +18 -0
  50. package/dist/cjs/signals/facade.cjs +477 -0
  51. package/dist/cjs/signals/graph.cjs +166 -20
  52. package/dist/cjs/signals/handle-protocol.cjs +36 -0
  53. package/dist/cjs/signals/index.cjs +81 -2
  54. package/dist/cjs/signals/native-read-client.cjs +10 -0
  55. package/dist/cjs/signals/owner-context.cjs +112 -0
  56. package/dist/cjs/signals/query-attempt-observer.cjs +68 -0
  57. package/dist/cjs/signals/query-facade.cjs +72 -0
  58. package/dist/cjs/signals/read-protocol.cjs +54 -0
  59. package/dist/cjs/signals/requests.cjs +287 -14
  60. package/dist/cjs/signals/scalar-computations.cjs +76 -0
  61. package/dist/cjs/signals/server.cjs +4 -1
  62. package/dist/cjs/signals/transition-candidate.cjs +567 -0
  63. package/dist/cjs/signals/transition-state.cjs +106 -0
  64. package/dist/cjs/signals/types.cjs +50 -0
  65. package/dist/cjs/stream-protocol.cjs +3 -0
  66. package/dist/cjs/streamed-signals-protocol.cjs +159 -0
  67. package/dist/cjs/style-values.cjs +122 -0
  68. package/dist/cjs/trusted-html.cjs +30 -0
  69. package/dist/cjs/version.cjs +1 -1
  70. package/dist/class-names.d.ts +5 -0
  71. package/dist/class-names.js +25 -0
  72. package/dist/compiler/bundler.js +51 -22
  73. package/dist/compiler/compile.js +2534 -581
  74. package/dist/compiler/dom-binding-program.js +935 -0
  75. package/dist/compiler/dom-binding-request.js +57 -0
  76. package/dist/compiler/dom-bindings.js +2245 -0
  77. package/dist/compiler/hook-deps.js +759 -10
  78. package/dist/compiler/hydrate-boundaries.js +358 -15
  79. package/dist/compiler/index.d.ts +39 -2
  80. package/dist/compiler/index.js +1 -0
  81. package/dist/compiler/native-attribute-reads.js +127 -0
  82. package/dist/compiler/native-change-diagnostics.js +32 -38
  83. package/dist/compiler/native-read-diagnostics.js +69 -8
  84. package/dist/compiler/native-read-types.js +80 -34
  85. package/dist/compiler/parser.node.js +1 -1
  86. package/dist/compiler/renderer-boundaries.js +40 -0
  87. package/dist/compiler/server-context.js +118 -0
  88. package/dist/compiler/signal-attempt-reads.js +479 -0
  89. package/dist/compiler/signal-declarations.js +557 -0
  90. package/dist/compiler/signal-start-reads.js +413 -0
  91. package/dist/compiler/slot-hooks.d.ts +3 -1
  92. package/dist/compiler/slot-hooks.js +168 -34
  93. package/dist/compiler/strong-auto-memo.js +90 -0
  94. package/dist/compiler/strong-html.js +143 -0
  95. package/dist/compiler/strong-mode.js +764 -66
  96. package/dist/compiler/strong-template-policy.js +307 -0
  97. package/dist/compiler/template-ir.js +200 -0
  98. package/dist/compiler/typescript.d.ts +2 -0
  99. package/dist/compiler/typescript.js +2 -0
  100. package/dist/compiler/vite.d.ts +3 -1
  101. package/dist/compiler/vite.js +122 -4
  102. package/dist/compiler/volar.LICENSES.txt +1 -1
  103. package/dist/compiler/volar.d.ts +6 -1
  104. package/dist/compiler/volar.js +750 -1433
  105. package/dist/constants.d.ts +1 -0
  106. package/dist/constants.js +10 -0
  107. package/dist/context-epoch.d.ts +2 -0
  108. package/dist/context-epoch.js +13 -0
  109. package/dist/css.d.ts +2 -5
  110. package/dist/css.js +2 -23
  111. package/dist/data-encoding.d.ts +9 -0
  112. package/dist/data-encoding.js +134 -0
  113. package/dist/dom-binding-classes.d.ts +15 -0
  114. package/dist/dom-binding-classes.js +129 -0
  115. package/dist/dom-binding-controls.d.ts +2 -0
  116. package/dist/dom-binding-controls.js +6 -0
  117. package/dist/dom-binding-handoff.d.ts +55 -0
  118. package/dist/dom-binding-handoff.js +62 -0
  119. package/dist/dom-binding-program.d.ts +300 -0
  120. package/dist/dom-binding-program.js +1625 -0
  121. package/dist/dom-binding-projections.d.ts +15 -0
  122. package/dist/dom-binding-projections.js +187 -0
  123. package/dist/dom-binding-protocol.d.ts +13 -0
  124. package/dist/dom-binding-protocol.js +88 -0
  125. package/dist/dom-binding-signals.d.ts +21 -0
  126. package/dist/dom-binding-signals.js +109 -0
  127. package/dist/dom-binding-styles.d.ts +17 -0
  128. package/dist/dom-binding-styles.js +272 -0
  129. package/dist/dom-bindings.d.ts +89 -0
  130. package/dist/dom-bindings.js +670 -0
  131. package/dist/dom-focused-move.d.ts +6 -0
  132. package/dist/dom-focused-move.js +42 -0
  133. package/dist/dom-stage.d.ts +52 -0
  134. package/dist/dom-stage.js +872 -0
  135. package/dist/dom-tables.d.ts +1 -3
  136. package/dist/dom-tables.js +1 -91
  137. package/dist/error-codes.client.generated.d.ts +9 -0
  138. package/dist/error-codes.client.generated.js +33 -0
  139. package/dist/error-codes.server.generated.d.ts +6 -0
  140. package/dist/error-codes.server.generated.js +24 -0
  141. package/dist/hydration/control-capture.d.ts +62 -0
  142. package/dist/hydration/control-capture.js +223 -0
  143. package/dist/hydration/document-lifecycle.d.ts +23 -0
  144. package/dist/hydration/document-lifecycle.js +80 -0
  145. package/dist/hydration/event-capture.d.ts +20 -1
  146. package/dist/hydration/event-capture.js +128 -42
  147. package/dist/hydration/independent-island.d.ts +45 -0
  148. package/dist/hydration/independent-island.js +233 -0
  149. package/dist/hydration/index.d.ts +8 -1
  150. package/dist/hydration/index.js +55 -1
  151. package/dist/hydration/interaction-config.d.ts +5 -0
  152. package/dist/hydration/interaction-config.js +44 -1
  153. package/dist/hydration/stream-delivery.d.ts +32 -0
  154. package/dist/hydration/stream-delivery.js +333 -0
  155. package/dist/hydration/stream-receiver.d.ts +26 -0
  156. package/dist/hydration/stream-receiver.js +204 -0
  157. package/dist/hydration/stream-result-receiver.d.ts +70 -0
  158. package/dist/hydration/stream-result-receiver.js +246 -0
  159. package/dist/hydration/streamed-signals.d.ts +44 -0
  160. package/dist/hydration/streamed-signals.js +186 -0
  161. package/dist/hydration/types.d.ts +6 -0
  162. package/dist/hydration-markers.d.ts +7 -0
  163. package/dist/hydration-markers.js +10 -0
  164. package/dist/independent-hydration-protocol.d.ts +31 -0
  165. package/dist/independent-hydration-protocol.js +80 -0
  166. package/dist/index.d.ts +3 -0
  167. package/dist/index.js +6 -0
  168. package/dist/internal/signal-read.d.ts +1 -0
  169. package/dist/internal/signal-read.js +4 -0
  170. package/dist/jsx-runtime-strong.d.ts +33 -0
  171. package/dist/jsx-runtime.d.ts +58 -2
  172. package/dist/public-types.d.ts +15 -1
  173. package/dist/runtime.d.ts +297 -23
  174. package/dist/runtime.js +6405 -1679
  175. package/dist/runtime.server.d.ts +110 -27
  176. package/dist/runtime.server.js +1458 -213
  177. package/dist/server/early-signals.d.ts +14 -0
  178. package/dist/server/early-signals.js +34 -0
  179. package/dist/server/index.d.ts +11 -2
  180. package/dist/server/index.js +50 -1
  181. package/dist/server/rpc-batch.d.ts +17 -0
  182. package/dist/server/rpc-batch.js +129 -0
  183. package/dist/server/rpc-stream.d.ts +9 -0
  184. package/dist/server/rpc-stream.js +125 -0
  185. package/dist/server/rpc.d.ts +5 -1
  186. package/dist/server/rpc.js +37 -13
  187. package/dist/server/signal-query-observation.d.ts +3 -0
  188. package/dist/server/signal-query-observation.js +134 -0
  189. package/dist/server/streamed-region.d.ts +15 -0
  190. package/dist/server/streamed-region.js +30 -0
  191. package/dist/server/streamed-signals.d.ts +45 -0
  192. package/dist/server/streamed-signals.js +488 -0
  193. package/dist/server-call.d.ts +41 -0
  194. package/dist/server-call.js +75 -0
  195. package/dist/server-rpc-batch-client.d.ts +7 -0
  196. package/dist/server-rpc-batch-client.js +119 -0
  197. package/dist/server-rpc-client.d.ts +3 -1
  198. package/dist/server-rpc-client.js +99 -27
  199. package/dist/server-rpc-protocol.d.ts +47 -0
  200. package/dist/server-rpc-protocol.js +109 -0
  201. package/dist/server-rpc-stream-client.d.ts +5 -0
  202. package/dist/server-rpc-stream-client.js +98 -0
  203. package/dist/signals/actions.d.ts +12 -0
  204. package/dist/signals/actions.js +466 -0
  205. package/dist/signals/client.d.ts +2 -0
  206. package/dist/signals/client.js +1 -0
  207. package/dist/signals/computations.d.ts +37 -0
  208. package/dist/signals/computations.js +455 -0
  209. package/dist/signals/control-binding.d.ts +31 -0
  210. package/dist/signals/control-binding.js +353 -0
  211. package/dist/signals/derived-facade.d.ts +3 -0
  212. package/dist/signals/derived-facade.js +25 -0
  213. package/dist/signals/document-owner.d.ts +10 -0
  214. package/dist/signals/document-owner.js +43 -0
  215. package/dist/signals/early-values.d.ts +24 -0
  216. package/dist/signals/early-values.js +124 -0
  217. package/dist/signals/encoding.d.ts +1 -3
  218. package/dist/signals/encoding.js +3 -93
  219. package/dist/signals/engine.d.ts +53 -4
  220. package/dist/signals/engine.js +275 -16
  221. package/dist/signals/errors.d.ts +7 -0
  222. package/dist/signals/errors.js +16 -0
  223. package/dist/signals/facade.d.ts +74 -0
  224. package/dist/signals/facade.js +452 -0
  225. package/dist/signals/graph.d.ts +52 -6
  226. package/dist/signals/graph.js +174 -19
  227. package/dist/signals/handle-protocol.d.ts +4 -0
  228. package/dist/signals/handle-protocol.js +11 -0
  229. package/dist/signals/index.d.ts +12 -3
  230. package/dist/signals/index.js +71 -2
  231. package/dist/signals/native-read-client.d.ts +3 -0
  232. package/dist/signals/native-read-client.js +10 -0
  233. package/dist/signals/owner-context.d.ts +22 -0
  234. package/dist/signals/owner-context.js +77 -0
  235. package/dist/signals/query-attempt-observer.d.ts +49 -0
  236. package/dist/signals/query-attempt-observer.js +41 -0
  237. package/dist/signals/query-facade.d.ts +3 -0
  238. package/dist/signals/query-facade.js +49 -0
  239. package/dist/signals/read-protocol.d.ts +37 -2
  240. package/dist/signals/read-protocol.js +44 -0
  241. package/dist/signals/requests.d.ts +38 -5
  242. package/dist/signals/requests.js +298 -15
  243. package/dist/signals/scalar-computations.d.ts +2 -0
  244. package/dist/signals/scalar-computations.js +60 -0
  245. package/dist/signals/server.d.ts +2 -0
  246. package/dist/signals/server.js +1 -0
  247. package/dist/signals/transition-candidate.d.ts +71 -0
  248. package/dist/signals/transition-candidate.js +557 -0
  249. package/dist/signals/transition-state.d.ts +51 -0
  250. package/dist/signals/transition-state.js +70 -0
  251. package/dist/signals/types.d.ts +95 -5
  252. package/dist/signals/types.js +20 -0
  253. package/dist/stream-protocol.d.ts +0 -5
  254. package/dist/stream-protocol.js +3 -0
  255. package/dist/streamed-signals-protocol.d.ts +60 -0
  256. package/dist/streamed-signals-protocol.js +130 -0
  257. package/dist/style-values.d.ts +3 -0
  258. package/dist/style-values.js +96 -0
  259. package/dist/trusted-html.d.ts +17 -0
  260. package/dist/trusted-html.js +6 -0
  261. package/dist/universal-core.d.ts +6 -0
  262. package/dist/universal-core.js +214 -202
  263. package/dist/version.js +1 -1
  264. package/package.json +48 -5
@@ -26,12 +26,13 @@ __export(dom_tables_exports, {
26
26
  POSITIVE_NUMERIC_ATTR_PROPS: () => POSITIVE_NUMERIC_ATTR_PROPS,
27
27
  SVG_ONLY_TAGS: () => SVG_ONLY_TAGS,
28
28
  VOID_ELEMENTS: () => VOID_ELEMENTS,
29
- cssStyleValue: () => cssStyleValue,
30
- hyphenateStyleName: () => hyphenateStyleName,
29
+ cssStyleValue: () => import_style_values.cssStyleValue,
30
+ hyphenateStyleName: () => import_style_values.hyphenateStyleName,
31
31
  isEnumeratedBooleanAttr: () => isEnumeratedBooleanAttr,
32
- isUnitlessStyleProp: () => isUnitlessStyleProp
32
+ isUnitlessStyleProp: () => import_style_values.isUnitlessStyleProp
33
33
  });
34
34
  module.exports = __toCommonJS(dom_tables_exports);
35
+ var import_style_values = require("./style-values.cjs");
35
36
  const VOID_ELEMENTS = /* @__PURE__ */ new Set([
36
37
  "area",
37
38
  "base",
@@ -399,97 +400,6 @@ function isEnumeratedBooleanAttr(name) {
399
400
  }
400
401
  return false;
401
402
  }
402
- const UNITLESS_STYLE_PROPS = /* @__PURE__ */ new Set();
403
- for (const base of [
404
- "animationIterationCount",
405
- "aspectRatio",
406
- "borderImageOutset",
407
- "borderImageSlice",
408
- "borderImageWidth",
409
- "boxFlex",
410
- "boxFlexGroup",
411
- "boxOrdinalGroup",
412
- "columnCount",
413
- "columns",
414
- "flex",
415
- "flexGrow",
416
- "flexPositive",
417
- "flexShrink",
418
- "flexNegative",
419
- "flexOrder",
420
- "gridArea",
421
- "gridRow",
422
- "gridRowEnd",
423
- "gridRowSpan",
424
- "gridRowStart",
425
- "gridColumn",
426
- "gridColumnEnd",
427
- "gridColumnSpan",
428
- "gridColumnStart",
429
- "fontWeight",
430
- "lineClamp",
431
- "lineHeight",
432
- "opacity",
433
- "order",
434
- "orphans",
435
- "scale",
436
- "tabSize",
437
- "widows",
438
- "zIndex",
439
- "zoom",
440
- "fillOpacity",
441
- "floodOpacity",
442
- "stopOpacity",
443
- "strokeDasharray",
444
- "strokeDashoffset",
445
- "strokeMiterlimit",
446
- "strokeOpacity",
447
- "strokeWidth"
448
- ]) {
449
- const c = base.toLowerCase();
450
- UNITLESS_STYLE_PROPS.add(c);
451
- UNITLESS_STYLE_PROPS.add("webkit" + c);
452
- UNITLESS_STYLE_PROPS.add("ms" + c);
453
- UNITLESS_STYLE_PROPS.add("moz" + c);
454
- UNITLESS_STYLE_PROPS.add("o" + c);
455
- }
456
- const unitlessStylePropCache = /* @__PURE__ */ new Map();
457
- function isUnitlessStyleProp(name) {
458
- const cached = unitlessStylePropCache.get(name);
459
- if (cached !== void 0) return cached;
460
- const result = UNITLESS_STYLE_PROPS.has(name.replaceAll("-", "").toLowerCase());
461
- unitlessStylePropCache.set(name, result);
462
- return result;
463
- }
464
- function cssStyleValue(name, value) {
465
- if (typeof value === "number" && value !== 0 && name.charCodeAt(0) !== 45 && !isUnitlessStyleProp(name)) {
466
- return value + "px";
467
- }
468
- return typeof value === "string" ? value.trim() : "" + value;
469
- }
470
- function hyphenateStyleName(name) {
471
- if (name === "cssFloat") return "float";
472
- if (name.charCodeAt(0) === 45) return name;
473
- let hasUpper = false;
474
- for (let i = 0; i < name.length; i++) {
475
- const c = name.charCodeAt(i);
476
- if (c >= 65 && c <= 90) {
477
- hasUpper = true;
478
- break;
479
- }
480
- }
481
- if (!hasUpper) return name;
482
- let out = "";
483
- for (let i = 0; i < name.length; i++) {
484
- const c = name.charCodeAt(i);
485
- if (c >= 65 && c <= 90) out += "-" + String.fromCharCode(c + 32);
486
- else out += name[i];
487
- }
488
- if (out.charCodeAt(0) === 109 && out.charCodeAt(1) === 115 && out.charCodeAt(2) === 45) {
489
- out = "-" + out;
490
- }
491
- return out;
492
- }
493
403
  // Annotate the CommonJS export names for ESM import in node:
494
404
  0 && (module.exports = {
495
405
  ATTRIBUTE_ALIASES,
@@ -211,6 +211,39 @@ function formatClientError(code, ...args) {
211
211
  );
212
212
  case 64:
213
213
  return (0, import_error_message.formatDevErrorMessage)("Multiple errors were thrown during act.", args);
214
+ case 66:
215
+ return (0, import_error_message.formatDevErrorMessage)(
216
+ "An independent Hydrate boundary cannot change ownership after mount.",
217
+ args
218
+ );
219
+ case 67:
220
+ return (0, import_error_message.formatDevErrorMessage)('Signal control identity mismatch for "%s".', args);
221
+ case 72:
222
+ return (0, import_error_message.formatDevErrorMessage)(
223
+ "Octane DOM binding text range does not match its template.",
224
+ args
225
+ );
226
+ case 74:
227
+ return (0, import_error_message.formatDevErrorMessage)("Unsupported Octane signal binding ABI.", args);
228
+ case 75:
229
+ return (0, import_error_message.formatDevErrorMessage)(
230
+ "Hydration binding leases require a supported fixed native view without structural regions or unsupported writers.",
231
+ args
232
+ );
233
+ case 76:
234
+ return (0, import_error_message.formatDevErrorMessage)(
235
+ "DOM binding hydration leases are supported only by hydrateRoot().",
236
+ args
237
+ );
238
+ case 77:
239
+ return (0, import_error_message.formatDevErrorMessage)(
240
+ "Hydration binding leases require active fixed native views owned by this container.",
241
+ args
242
+ );
243
+ case 78:
244
+ return (0, import_error_message.formatDevErrorMessage)("A hydration binding lease can be claimed only once.", args);
245
+ case 79:
246
+ return (0, import_error_message.formatDevErrorMessage)("Unsupported native signal transition.", args);
214
247
  default:
215
248
  return (0, import_error_message.formatUnknownDevErrorMessage)(code);
216
249
  }
@@ -149,6 +149,30 @@ function formatServerError(code, ...args) {
149
149
  "A component suspended without a Suspense boundary during synchronous server rendering. Use prerender() or a streaming renderer to await it.",
150
150
  args
151
151
  );
152
+ case 65:
153
+ return (0, import_error_message.formatDevErrorMessage)(
154
+ "Internal SSR invariant violated: ASYNC_SCOPE is not an extension of the active frame's async scope. Please file an Octane issue.",
155
+ args
156
+ );
157
+ case 68:
158
+ return (0, import_error_message.formatDevErrorMessage)(
159
+ "A signal control cannot join values from different document owners.",
160
+ args
161
+ );
162
+ case 69:
163
+ return (0, import_error_message.formatDevErrorMessage)(
164
+ "Independent Hydrate requires a build manifest in RenderOptions.",
165
+ args
166
+ );
167
+ case 70:
168
+ return (0, import_error_message.formatDevErrorMessage)(
169
+ "Independent Hydrate activation chunk is missing from the build manifest.",
170
+ args
171
+ );
172
+ case 71:
173
+ return (0, import_error_message.formatDevErrorMessage)("Unsupported Octane server signal binding ABI.", args);
174
+ case 73:
175
+ return (0, import_error_message.formatDevErrorMessage)("Octane DOM bindings require unique list keys.", args);
152
176
  default:
153
177
  return (0, import_error_message.formatUnknownDevErrorMessage)(code);
154
178
  }
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var control_capture_exports = {};
20
+ __export(control_capture_exports, {
21
+ applyHydrationControlCandidate: () => applyHydrationControlCandidate,
22
+ captureHydrationControlCandidate: () => captureHydrationControlCandidate,
23
+ consumeHydrationControl: () => consumeHydrationControl,
24
+ initializeHydrationControlCapture: () => initializeHydrationControlCapture,
25
+ isEarlyHydrationIntentCurrent: () => isEarlyHydrationIntentCurrent,
26
+ snapshotHydrationControl: () => snapshotHydrationControl
27
+ });
28
+ module.exports = __toCommonJS(control_capture_exports);
29
+ var import_hydration_markers = require("../hydration-markers.cjs");
30
+ var import_interaction_config = require("./interaction-config.cjs");
31
+ var import_early_values = require("../signals/early-values.cjs");
32
+ const HYDRATE_MARKER_SELECTOR = "[data-octane-hydrate-id]";
33
+ const HYDRATE_CONTROL_DOCUMENTS = /* @__PURE__ */ new WeakSet();
34
+ function isEarlyHydrationIntentCurrent([event, target, boundary, id, when, events], ownerDocument) {
35
+ return event.target === target && target.isConnected && boundary.isConnected && target.ownerDocument === ownerDocument && boundary.ownerDocument === ownerDocument && target.closest(`[${import_hydration_markers.HYDRATE_INDEPENDENT_ATTR}]`) === boundary && boundary.getAttribute("data-octane-hydrate-id") === id && boundary.getAttribute("data-octane-hydrate-when") === when && boundary.getAttribute(import_interaction_config.HYDRATE_INTERACTION_EVENTS_ATTR) === events;
36
+ }
37
+ function isHydrationElement(target) {
38
+ return target !== null && target.nodeType === 1;
39
+ }
40
+ const HYDRATE_CONTROL_RECORDS = /* @__PURE__ */ new WeakMap();
41
+ function hydrationControl(target) {
42
+ if (!isHydrationElement(target)) return null;
43
+ const tag = target.localName;
44
+ return tag === "input" || tag === "textarea" || tag === "select" || target.isContentEditable ? target : null;
45
+ }
46
+ function hydrationControlRecord(control) {
47
+ let record = HYDRATE_CONTROL_RECORDS.get(control);
48
+ if (record === void 0) {
49
+ const revision = (0, import_early_values.readEarlyHydrationControlRevision)(control);
50
+ record = { editRevision: revision, selectionRevision: 0, revision, composing: false };
51
+ HYDRATE_CONTROL_RECORDS.set(control, record);
52
+ }
53
+ return record;
54
+ }
55
+ function recordHydrationControlEvent(event) {
56
+ const control = hydrationControl(event.target);
57
+ if (control === null) return;
58
+ const record = hydrationControlRecord(control);
59
+ switch (event.type) {
60
+ case "input":
61
+ record.editRevision++;
62
+ record.revision++;
63
+ (0, import_early_values.publishHydrationControlSignalValues)(control, record.revision);
64
+ break;
65
+ case "compositionstart":
66
+ record.composing = true;
67
+ record.revision++;
68
+ break;
69
+ case "compositionupdate":
70
+ record.revision++;
71
+ break;
72
+ case "compositionend":
73
+ record.composing = false;
74
+ record.revision++;
75
+ break;
76
+ case "focusin":
77
+ case "focusout":
78
+ record.revision++;
79
+ }
80
+ }
81
+ function recordHydrationSelection(event) {
82
+ const ownerDocument = event.currentTarget;
83
+ const control = hydrationControl(ownerDocument.activeElement);
84
+ if (control === null) return;
85
+ const record = hydrationControlRecord(control);
86
+ record.selectionRevision++;
87
+ record.revision++;
88
+ }
89
+ function snapshotHydrationControl(control) {
90
+ if (hydrationControl(control) === null) return null;
91
+ const record = HYDRATE_CONTROL_RECORDS.get(control);
92
+ const earlyRevision = record === void 0 ? (0, import_early_values.readEarlyHydrationControlRevision)(control) : 0;
93
+ const input = control;
94
+ let value;
95
+ let checked;
96
+ let selectedValues;
97
+ let selectionStart = null;
98
+ let selectionEnd = null;
99
+ let selectionDirection = null;
100
+ if (control.localName === "select") {
101
+ const select = input;
102
+ value = select.value;
103
+ if (select.multiple)
104
+ selectedValues = Array.from(select.selectedOptions, (option) => option.value);
105
+ } else if (control.isContentEditable) {
106
+ value = control.textContent ?? "";
107
+ } else {
108
+ value = input.value;
109
+ if (control.localName === "input") checked = input.checked;
110
+ try {
111
+ selectionStart = input.selectionStart;
112
+ selectionEnd = input.selectionEnd;
113
+ selectionDirection = input.selectionDirection;
114
+ } catch {
115
+ }
116
+ }
117
+ return {
118
+ editRevision: record?.editRevision ?? earlyRevision,
119
+ selectionRevision: record?.selectionRevision ?? 0,
120
+ revision: record?.revision ?? earlyRevision,
121
+ value,
122
+ ...checked === void 0 ? {} : { checked },
123
+ ...selectedValues === void 0 ? {} : { selectedValues },
124
+ selectionStart,
125
+ selectionEnd,
126
+ selectionDirection,
127
+ focused: control.ownerDocument.activeElement === control,
128
+ composing: record?.composing ?? false
129
+ };
130
+ }
131
+ function captureHydrationControlCandidate(control) {
132
+ const snapshot = snapshotHydrationControl(control);
133
+ if (snapshot === null) return null;
134
+ initializeHydrationControlCapture(control.ownerDocument);
135
+ return {
136
+ control,
137
+ bindingId: control.getAttribute(import_hydration_markers.HYDRATE_INPUT_ATTR),
138
+ boundaryId: control.closest(HYDRATE_MARKER_SELECTOR)?.getAttribute("data-octane-hydrate-id") ?? null,
139
+ snapshot
140
+ };
141
+ }
142
+ function sameHydrationControlValue(left, right) {
143
+ if (left.value !== right.value || left.checked !== right.checked) return false;
144
+ const a = left.selectedValues;
145
+ const b = right.selectedValues;
146
+ if (a === void 0 || b === void 0) return a === b;
147
+ if (a.length !== b.length) return false;
148
+ for (let index = 0; index < a.length; index++) if (a[index] !== b[index]) return false;
149
+ return true;
150
+ }
151
+ function applyHydrationControlCandidate(candidate, value) {
152
+ const control = candidate.control;
153
+ if (!control.isConnected || control.getAttribute(import_hydration_markers.HYDRATE_INPUT_ATTR) !== candidate.bindingId || (control.closest(HYDRATE_MARKER_SELECTOR)?.getAttribute("data-octane-hydrate-id") ?? null) !== candidate.boundaryId) {
154
+ return false;
155
+ }
156
+ const current = snapshotHydrationControl(control);
157
+ if (current === null || current.revision !== candidate.snapshot.revision || current.editRevision !== candidate.snapshot.editRevision || current.composing || !sameHydrationControlValue(current, candidate.snapshot)) {
158
+ return false;
159
+ }
160
+ if (control.localName === "select") {
161
+ const select = control;
162
+ if (select.multiple && value.selectedValues !== void 0) {
163
+ const selected = new Set(value.selectedValues);
164
+ for (const option of select.options) option.selected = selected.has(option.value);
165
+ } else if (value.value !== void 0) {
166
+ select.value = value.value;
167
+ } else {
168
+ return false;
169
+ }
170
+ } else if (control.isContentEditable) {
171
+ if (value.value === void 0) return false;
172
+ control.textContent = value.value;
173
+ } else {
174
+ const input = control;
175
+ if (value.value !== void 0) input.value = value.value;
176
+ else if (control.localName !== "input" || value.checked === void 0) return false;
177
+ if (control.localName === "input" && value.checked !== void 0) {
178
+ input.checked = value.checked;
179
+ }
180
+ }
181
+ if (current.focused && current.selectionStart !== null && current.selectionEnd !== null && control.localName !== "select" && !control.isContentEditable) {
182
+ try {
183
+ control.setSelectionRange(
184
+ current.selectionStart,
185
+ current.selectionEnd,
186
+ current.selectionDirection ?? void 0
187
+ );
188
+ } catch {
189
+ }
190
+ }
191
+ const record = hydrationControlRecord(control);
192
+ record.editRevision++;
193
+ record.revision++;
194
+ (0, import_early_values.publishHydrationControlSignalValues)(control, record.revision);
195
+ return true;
196
+ }
197
+ function consumeHydrationControl(control, revision) {
198
+ initializeHydrationControlCapture(control.ownerDocument);
199
+ const record = hydrationControlRecord(control);
200
+ if (record.revision !== revision) return false;
201
+ record.editRevision = 0;
202
+ record.selectionRevision = 0;
203
+ (0, import_early_values.clearEarlyHydrationControlRevision)(control);
204
+ return true;
205
+ }
206
+ function initializeHydrationControlCapture(ownerDocument) {
207
+ const targetDocument = ownerDocument ?? (typeof document === "undefined" ? void 0 : document);
208
+ if (targetDocument === void 0 || HYDRATE_CONTROL_DOCUMENTS.has(targetDocument)) return;
209
+ HYDRATE_CONTROL_DOCUMENTS.add(targetDocument);
210
+ const mailbox = targetDocument[import_interaction_config.EARLY_HYDRATION_INTENTS_KEY];
211
+ const target = typeof mailbox?.stop === "function" ? targetDocument.defaultView ?? targetDocument : targetDocument;
212
+ const record = target === targetDocument ? recordHydrationControlEvent : (event) => {
213
+ if (event.target?.ownerDocument === targetDocument)
214
+ recordHydrationControlEvent(event);
215
+ };
216
+ for (const event of [
217
+ "input",
218
+ "compositionstart",
219
+ "compositionupdate",
220
+ "compositionend",
221
+ "focusin",
222
+ "focusout"
223
+ ]) {
224
+ target.addEventListener(event, record, true);
225
+ }
226
+ targetDocument.addEventListener("selectionchange", recordHydrationSelection, true);
227
+ (0, import_early_values.claimEarlyHydrationControlCapture)(targetDocument);
228
+ for (const intent of mailbox?.q ?? []) {
229
+ const [event] = intent;
230
+ const control = hydrationControl(event.target);
231
+ if (control === null || !isEarlyHydrationIntentCurrent(intent, targetDocument)) continue;
232
+ if (event.type === "input" && (0, import_early_values.readEarlyHydrationControlRevision)(control) > 0) continue;
233
+ recordHydrationControlEvent(event);
234
+ }
235
+ }
236
+ // Annotate the CommonJS export names for ESM import in node:
237
+ 0 && (module.exports = {
238
+ applyHydrationControlCandidate,
239
+ captureHydrationControlCandidate,
240
+ consumeHydrationControl,
241
+ initializeHydrationControlCapture,
242
+ isEarlyHydrationIntentCurrent,
243
+ snapshotHydrationControl
244
+ });