@askrjs/askr 0.0.50 → 0.0.52

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 (594) hide show
  1. package/dist/bench/components/benchmark-row.d.ts +2 -2
  2. package/dist/bench/components/benchmark-row.js +0 -2
  3. package/dist/bench/components/benchmark-table.js +0 -2
  4. package/dist/benchmark.d.ts +1 -2
  5. package/dist/benchmark.js +5 -6
  6. package/dist/bin/askr-ssg.d.ts +1 -2
  7. package/dist/bin/askr-ssg.js +21 -6
  8. package/dist/boot/hydration.js +10 -11
  9. package/dist/boot/index.d.ts +1 -2
  10. package/dist/boot/index.js +21 -11
  11. package/dist/boot/root-lifecycle.d.ts +6 -3
  12. package/dist/boot/root-lifecycle.js +18 -14
  13. package/dist/boot/route-startup.js +13 -4
  14. package/dist/boot/types.d.ts +1 -2
  15. package/dist/common/attr-names.js +0 -2
  16. package/dist/common/component.d.ts +1 -2
  17. package/dist/common/control.d.ts +1 -2
  18. package/dist/common/control.js +0 -2
  19. package/dist/common/dom-range.d.ts +13 -0
  20. package/dist/common/env.js +1 -7
  21. package/dist/common/error-boundary.d.ts +15 -0
  22. package/dist/common/invariant.js +15 -0
  23. package/dist/common/jsx.d.ts +1 -2
  24. package/dist/common/jsx.js +0 -2
  25. package/dist/{dev → common}/logger.js +5 -8
  26. package/dist/common/promise.js +0 -2
  27. package/dist/common/props.d.ts +1 -2
  28. package/dist/common/render-context.js +0 -2
  29. package/dist/common/route-activity.js +0 -2
  30. package/dist/common/router-internal.js +0 -2
  31. package/dist/common/router.d.ts +1 -2
  32. package/dist/common/ssr-errors.d.ts +1 -2
  33. package/dist/common/ssr-errors.js +0 -2
  34. package/dist/common/ssr.d.ts +1 -2
  35. package/dist/common/ssr.js +0 -2
  36. package/dist/common/vnode.d.ts +1 -2
  37. package/dist/common/vnode.js +0 -2
  38. package/dist/components/error-boundary.d.ts +2 -16
  39. package/dist/components/error-boundary.js +2 -76
  40. package/dist/components/index.d.ts +2 -1
  41. package/dist/components/link.d.ts +2 -2
  42. package/dist/components/link.js +2 -2
  43. package/dist/control/case.d.ts +1 -2
  44. package/dist/control/case.js +1 -2
  45. package/dist/control/for.d.ts +3 -4
  46. package/dist/control/for.js +2 -4
  47. package/dist/control/shared.d.ts +1 -2
  48. package/dist/control/shared.js +0 -2
  49. package/dist/control/show.d.ts +1 -2
  50. package/dist/control/show.js +1 -2
  51. package/dist/data/data-runtime.d.ts +1 -2
  52. package/dist/data/data-runtime.js +3 -5
  53. package/dist/data/invalidation-listeners.js +0 -2
  54. package/dist/data/invalidation.d.ts +1 -2
  55. package/dist/data/invalidation.js +2 -4
  56. package/dist/data/mutation-cell.d.ts +1 -2
  57. package/dist/data/mutation-cell.js +7 -6
  58. package/dist/data/query-cell.d.ts +3 -2
  59. package/dist/data/query-cell.js +45 -11
  60. package/dist/data/query-key.js +0 -2
  61. package/dist/data/shared.js +3 -3
  62. package/dist/data/testing.js +2 -0
  63. package/dist/data/types.d.ts +1 -2
  64. package/dist/foundations/icon/icon.d.ts +1 -2
  65. package/dist/foundations/icon/icon.js +0 -2
  66. package/dist/foundations/icon/icon.types.d.ts +1 -2
  67. package/dist/foundations/index.d.ts +1 -1
  68. package/dist/foundations/index.js +1 -1
  69. package/dist/foundations/interactions/dismissable.d.ts +1 -2
  70. package/dist/foundations/interactions/dismissable.js +0 -2
  71. package/dist/foundations/interactions/focusable.d.ts +1 -2
  72. package/dist/foundations/interactions/focusable.js +0 -2
  73. package/dist/foundations/interactions/hoverable.d.ts +1 -2
  74. package/dist/foundations/interactions/hoverable.js +0 -2
  75. package/dist/foundations/interactions/interaction-policy.d.ts +1 -2
  76. package/dist/foundations/interactions/interaction-policy.js +0 -2
  77. package/dist/foundations/interactions/pressable.d.ts +1 -2
  78. package/dist/foundations/interactions/pressable.js +0 -2
  79. package/dist/foundations/interactions/roving-focus.d.ts +1 -2
  80. package/dist/foundations/interactions/roving-focus.js +0 -2
  81. package/dist/foundations/state/controllable.d.ts +1 -3
  82. package/dist/foundations/state/controllable.js +1 -2
  83. package/dist/foundations/structures/collection.d.ts +1 -2
  84. package/dist/foundations/structures/collection.js +0 -2
  85. package/dist/foundations/structures/index.d.ts +1 -1
  86. package/dist/foundations/structures/index.js +2 -1
  87. package/dist/foundations/structures/layer.d.ts +1 -2
  88. package/dist/foundations/structures/layer.js +0 -2
  89. package/dist/foundations/structures/layout.d.ts +1 -2
  90. package/dist/foundations/structures/layout.js +0 -2
  91. package/dist/foundations/structures/portal.d.ts +2 -24
  92. package/dist/foundations/structures/portal.js +3 -187
  93. package/dist/foundations/structures/presence.d.ts +1 -2
  94. package/dist/foundations/structures/presence.js +0 -2
  95. package/dist/foundations/structures/slot.d.ts +1 -2
  96. package/dist/foundations/structures/slot.js +0 -2
  97. package/dist/foundations/utilities/aria.d.ts +1 -2
  98. package/dist/foundations/utilities/aria.js +0 -2
  99. package/dist/foundations/utilities/compose-handlers.d.ts +1 -2
  100. package/dist/foundations/utilities/compose-handlers.js +0 -2
  101. package/dist/foundations/utilities/compose-ref.d.ts +1 -2
  102. package/dist/foundations/utilities/compose-ref.js +0 -2
  103. package/dist/foundations/utilities/event-types.d.ts +1 -2
  104. package/dist/foundations/utilities/merge-props.d.ts +1 -2
  105. package/dist/foundations/utilities/merge-props.js +0 -2
  106. package/dist/foundations/utilities/use-id.d.ts +1 -2
  107. package/dist/foundations/utilities/use-id.js +0 -2
  108. package/dist/fx/fx.d.ts +1 -2
  109. package/dist/fx/fx.js +2 -4
  110. package/dist/fx/index.js +1 -0
  111. package/dist/fx/noop.js +0 -2
  112. package/dist/fx/timing.d.ts +1 -2
  113. package/dist/fx/timing.js +0 -2
  114. package/dist/index.d.ts +4 -4
  115. package/dist/index.js +4 -6
  116. package/dist/jsx/types.d.ts +1 -2
  117. package/dist/jsx/utils.d.ts +1 -2
  118. package/dist/jsx/utils.js +0 -2
  119. package/dist/jsx-dev-runtime.d.ts +16 -2
  120. package/dist/jsx-dev-runtime.js +4 -12
  121. package/dist/jsx-runtime.d.ts +16 -2
  122. package/dist/jsx-runtime.js +16 -24
  123. package/dist/jsx-runtime2.d.ts +1 -1
  124. package/dist/renderer/attributes.js +29 -6
  125. package/dist/renderer/boundaries.js +50 -174
  126. package/dist/renderer/boundary-materialization.js +72 -0
  127. package/dist/renderer/boundary-range-adoption.js +76 -0
  128. package/dist/renderer/boundary-range-sync.js +101 -0
  129. package/dist/renderer/boundary-state.js +50 -0
  130. package/dist/renderer/child-shape.js +2 -4
  131. package/dist/renderer/children-fastpath.js +149 -0
  132. package/dist/renderer/children.js +3 -140
  133. package/dist/renderer/cleanup.js +72 -15
  134. package/dist/renderer/component-host-cleanup.js +124 -49
  135. package/dist/renderer/component-host-instances.js +60 -9
  136. package/dist/renderer/component-host-replacement.js +105 -0
  137. package/dist/renderer/component-host-results.js +138 -0
  138. package/dist/renderer/component-host.js +95 -170
  139. package/dist/renderer/dom-host.js +0 -2
  140. package/dist/renderer/dom-internal.js +115 -57
  141. package/dist/renderer/dom-range.js +161 -0
  142. package/dist/renderer/dom.js +7 -5
  143. package/dist/renderer/element-children.js +112 -32
  144. package/dist/renderer/error-boundary-dom.js +70 -13
  145. package/dist/renderer/evaluate-dom-range.js +3 -4
  146. package/dist/renderer/evaluate-reconcile.js +18 -42
  147. package/dist/renderer/evaluate.js +14 -3
  148. package/dist/renderer/fastpath.js +7 -14
  149. package/dist/renderer/for-commit-dom-map.js +6 -18
  150. package/dist/renderer/for-commit-removal.js +8 -17
  151. package/dist/renderer/for-commit-reorder.js +2 -4
  152. package/dist/renderer/for-commit.js +173 -45
  153. package/dist/renderer/hydration-boundaries.js +60 -0
  154. package/dist/renderer/hydration-listener-transaction.js +49 -0
  155. package/dist/renderer/index.js +11 -8
  156. package/dist/renderer/intrinsic-blueprint-analysis.js +202 -0
  157. package/dist/renderer/intrinsic-blueprint-bindings.js +152 -0
  158. package/dist/renderer/intrinsic-blueprint-materialization.js +100 -0
  159. package/dist/renderer/intrinsic-blueprint.js +30 -0
  160. package/dist/renderer/intrinsic-hydration-adoption.js +66 -0
  161. package/dist/renderer/keyed-children.js +3 -9
  162. package/dist/renderer/keyed.js +10 -10
  163. package/dist/renderer/namespaces.js +0 -2
  164. package/dist/renderer/prop-bindings.js +59 -24
  165. package/dist/renderer/reactive-child-dom.js +10 -4
  166. package/dist/renderer/reactive-child-sources.js +0 -2
  167. package/dist/renderer/reactive-children.js +33 -24
  168. package/dist/renderer/reconcile-commit.js +0 -2
  169. package/dist/renderer/reconcile-fastpaths.js +6 -12
  170. package/dist/renderer/reconcile-resolution.js +32 -56
  171. package/dist/renderer/reconcile.js +0 -2
  172. package/dist/renderer/retained-element-rollback.js +161 -149
  173. package/dist/renderer/stable-patch.js +5 -7
  174. package/dist/renderer/static-reuse.js +0 -2
  175. package/dist/renderer/utils.js +20 -10
  176. package/dist/resources/index.js +1 -2
  177. package/dist/router/access.js +0 -2
  178. package/dist/router/activity.d.ts +1 -2
  179. package/dist/router/activity.js +20 -24
  180. package/dist/router/authoring.d.ts +1 -2
  181. package/dist/router/authoring.js +1 -3
  182. package/dist/router/index.d.ts +1 -1
  183. package/dist/router/internal-types.d.ts +1 -2
  184. package/dist/router/lazy.d.ts +1 -2
  185. package/dist/router/lazy.js +0 -2
  186. package/dist/router/manifest.d.ts +1 -2
  187. package/dist/router/manifest.js +0 -2
  188. package/dist/router/match.js +0 -2
  189. package/dist/router/navigate.d.ts +1 -2
  190. package/dist/router/navigate.js +5 -8
  191. package/dist/router/navigation-registry.d.ts +1 -2
  192. package/dist/router/navigation-registry.js +1 -3
  193. package/dist/router/navigation-scroll.d.ts +1 -2
  194. package/dist/router/navigation-scroll.js +0 -2
  195. package/dist/router/navigation-targets.d.ts +3 -4
  196. package/dist/router/navigation-targets.js +425 -44
  197. package/dist/router/policy.d.ts +1 -2
  198. package/dist/router/policy.js +0 -2
  199. package/dist/router/rendering.d.ts +1 -2
  200. package/dist/router/rendering.js +5 -3
  201. package/dist/router/resolution.d.ts +2 -16
  202. package/dist/router/resolution.js +6 -175
  203. package/dist/router/route-context.js +0 -2
  204. package/dist/router/route-matching.d.ts +19 -0
  205. package/dist/router/route-matching.js +173 -0
  206. package/dist/router/route-query.d.ts +1 -2
  207. package/dist/router/route-query.js +1 -3
  208. package/dist/router/route.js +4 -2
  209. package/dist/router/store.d.ts +1 -2
  210. package/dist/router/store.js +0 -2
  211. package/dist/router/testing.js +4 -0
  212. package/dist/runtime/access.d.ts +19 -0
  213. package/dist/runtime/access.js +0 -2
  214. package/dist/runtime/child-scope.d.ts +21 -2
  215. package/dist/runtime/child-scope.js +101 -54
  216. package/dist/runtime/component-cleanup.d.ts +1 -2
  217. package/dist/runtime/component-cleanup.js +3 -5
  218. package/dist/runtime/component-commit.js +26 -24
  219. package/dist/runtime/component-facade.js +5 -3
  220. package/dist/runtime/component-internal.d.ts +12 -7
  221. package/dist/runtime/component-internal.js +64 -46
  222. package/dist/runtime/component-lifecycle.d.ts +2 -41
  223. package/dist/runtime/component-lifecycle.js +6 -149
  224. package/dist/runtime/component-scope.d.ts +4 -5
  225. package/dist/runtime/component-scope.js +27 -8
  226. package/dist/runtime/component.js +4 -3
  227. package/dist/runtime/context.d.ts +5 -2
  228. package/dist/runtime/context.js +29 -3
  229. package/dist/runtime/control.d.ts +22 -3
  230. package/dist/runtime/control.js +168 -55
  231. package/dist/runtime/derive.d.ts +1 -2
  232. package/dist/runtime/derive.js +0 -2
  233. package/dist/runtime/dev-namespace.d.ts +30 -0
  234. package/dist/runtime/dev-namespace.js +32 -25
  235. package/dist/runtime/effect.d.ts +8 -5
  236. package/dist/runtime/effect.js +158 -75
  237. package/dist/runtime/error-boundary.d.ts +4 -0
  238. package/dist/runtime/error-boundary.js +29 -0
  239. package/dist/runtime/events.d.ts +58 -0
  240. package/dist/runtime/events.js +67 -70
  241. package/dist/runtime/execution-model.d.ts +6 -0
  242. package/dist/runtime/execution-model.js +0 -2
  243. package/dist/runtime/fastlane.d.ts +33 -0
  244. package/dist/runtime/fastlane.js +0 -2
  245. package/dist/runtime/for-bench.d.ts +1 -2
  246. package/dist/runtime/for-bench.js +9 -167
  247. package/dist/runtime/for-internal.d.ts +73 -10
  248. package/dist/runtime/for-internal.js +201 -14
  249. package/dist/runtime/for-reconcile.d.ts +1 -2
  250. package/dist/runtime/for-reconcile.js +76 -23
  251. package/dist/runtime/for-scopes.d.ts +5 -5
  252. package/dist/runtime/for-scopes.js +168 -48
  253. package/dist/runtime/for-signals.d.ts +14 -5
  254. package/dist/runtime/for-signals.js +157 -83
  255. package/dist/runtime/for-types.d.ts +8 -0
  256. package/dist/runtime/for.d.ts +2 -2
  257. package/dist/runtime/for.js +3 -3
  258. package/dist/runtime/index.d.ts +24 -0
  259. package/dist/runtime/index.js +33 -0
  260. package/dist/runtime/lifecycle-batch.d.ts +59 -0
  261. package/dist/runtime/lifecycle-batch.js +178 -0
  262. package/dist/runtime/lifecycle-operation-settlement.d.ts +5 -0
  263. package/dist/runtime/lifecycle-operation-settlement.js +51 -0
  264. package/dist/runtime/lifecycle-operations.d.ts +1 -2
  265. package/dist/runtime/lifecycle-operations.js +5 -6
  266. package/dist/runtime/perf-metrics.d.ts +27 -0
  267. package/dist/runtime/perf-metrics.js +4 -68
  268. package/dist/runtime/portal.d.ts +21 -0
  269. package/dist/runtime/portal.js +305 -0
  270. package/dist/runtime/readable.d.ts +9 -4
  271. package/dist/runtime/readable.js +41 -17
  272. package/dist/runtime/resource-cell.js +3 -5
  273. package/dist/runtime/resource-operation.d.ts +1 -2
  274. package/dist/runtime/resource-operation.js +38 -35
  275. package/dist/runtime/runtime.d.ts +2 -3
  276. package/dist/runtime/runtime.js +0 -2
  277. package/dist/runtime/scheduler.d.ts +1 -2
  278. package/dist/runtime/scheduler.js +10 -13
  279. package/dist/runtime/selector-store.js +22 -0
  280. package/dist/runtime/selector.d.ts +1 -2
  281. package/dist/runtime/selector.js +6 -29
  282. package/dist/runtime/snapshot-source.d.ts +1 -2
  283. package/dist/runtime/snapshot-source.js +0 -2
  284. package/dist/runtime/state.d.ts +1 -2
  285. package/dist/runtime/state.js +1 -3
  286. package/dist/ssg/batch-render.js +0 -2
  287. package/dist/ssg/create-static-gen.d.ts +4 -2
  288. package/dist/ssg/create-static-gen.js +66 -14
  289. package/dist/ssg/generate-metadata.js +0 -2
  290. package/dist/ssg/generation-plan.js +0 -2
  291. package/dist/ssg/incremental-manifest.js +1 -3
  292. package/dist/ssg/resolve-ssg-data.js +0 -2
  293. package/dist/ssg/route-utils.js +0 -2
  294. package/dist/ssg/static-routes.js +1 -2
  295. package/dist/ssg/types.d.ts +2 -3
  296. package/dist/ssg/write-static-files.js +16 -12
  297. package/dist/ssr/attrs.js +0 -2
  298. package/dist/ssr/boundaries.js +17 -6
  299. package/dist/ssr/component-runtime.js +4 -30
  300. package/dist/ssr/context.d.ts +1 -2
  301. package/dist/ssr/context.js +0 -2
  302. package/dist/ssr/errors.d.ts +1 -2
  303. package/dist/ssr/errors.js +0 -2
  304. package/dist/ssr/escape.js +0 -2
  305. package/dist/ssr/hydration-data.js +0 -2
  306. package/dist/ssr/hydration-verify.d.ts +1 -2
  307. package/dist/ssr/hydration-verify.js +34 -7
  308. package/dist/ssr/index-internal.d.ts +1 -2
  309. package/dist/ssr/index-internal.js +0 -2
  310. package/dist/ssr/render-keys.js +0 -2
  311. package/dist/ssr/render-resolved.d.ts +1 -2
  312. package/dist/ssr/render-resolved.js +1 -3
  313. package/dist/ssr/render-sync.d.ts +1 -2
  314. package/dist/ssr/render-sync.js +28 -20
  315. package/dist/ssr/route-policy-resolution.js +2 -3
  316. package/dist/ssr/route-render.d.ts +1 -2
  317. package/dist/ssr/route-render.js +2 -3
  318. package/dist/ssr/sink.d.ts +1 -2
  319. package/dist/ssr/sink.js +0 -2
  320. package/dist/ssr/types.d.ts +1 -2
  321. package/dist/ssr/verify-hydration.js +0 -2
  322. package/dist/testing/index.d.ts +1 -2
  323. package/dist/testing/index.js +3 -4
  324. package/package.json +60 -47
  325. package/dist/bench/components/benchmark-row.d.ts.map +0 -1
  326. package/dist/bench/components/benchmark-row.js.map +0 -1
  327. package/dist/bench/components/benchmark-table.js.map +0 -1
  328. package/dist/benchmark.d.ts.map +0 -1
  329. package/dist/benchmark.js.map +0 -1
  330. package/dist/bin/askr-ssg.d.ts.map +0 -1
  331. package/dist/bin/askr-ssg.js.map +0 -1
  332. package/dist/boot/hydration.js.map +0 -1
  333. package/dist/boot/index.d.ts.map +0 -1
  334. package/dist/boot/index.js.map +0 -1
  335. package/dist/boot/root-lifecycle.d.ts.map +0 -1
  336. package/dist/boot/root-lifecycle.js.map +0 -1
  337. package/dist/boot/route-startup.js.map +0 -1
  338. package/dist/boot/types.d.ts.map +0 -1
  339. package/dist/common/attr-names.js.map +0 -1
  340. package/dist/common/component.d.ts.map +0 -1
  341. package/dist/common/control.d.ts.map +0 -1
  342. package/dist/common/control.js.map +0 -1
  343. package/dist/common/env.js.map +0 -1
  344. package/dist/common/jsx.d.ts.map +0 -1
  345. package/dist/common/jsx.js.map +0 -1
  346. package/dist/common/promise.js.map +0 -1
  347. package/dist/common/props.d.ts.map +0 -1
  348. package/dist/common/render-context.js.map +0 -1
  349. package/dist/common/route-activity.js.map +0 -1
  350. package/dist/common/router-internal.js.map +0 -1
  351. package/dist/common/router.d.ts.map +0 -1
  352. package/dist/common/ssr-errors.d.ts.map +0 -1
  353. package/dist/common/ssr-errors.js.map +0 -1
  354. package/dist/common/ssr.d.ts.map +0 -1
  355. package/dist/common/ssr.js.map +0 -1
  356. package/dist/common/vnode.d.ts.map +0 -1
  357. package/dist/common/vnode.js.map +0 -1
  358. package/dist/components/error-boundary.d.ts.map +0 -1
  359. package/dist/components/error-boundary.js.map +0 -1
  360. package/dist/components/link.d.ts.map +0 -1
  361. package/dist/components/link.js.map +0 -1
  362. package/dist/control/case.d.ts.map +0 -1
  363. package/dist/control/case.js.map +0 -1
  364. package/dist/control/for.d.ts.map +0 -1
  365. package/dist/control/for.js.map +0 -1
  366. package/dist/control/shared.d.ts.map +0 -1
  367. package/dist/control/shared.js.map +0 -1
  368. package/dist/control/show.d.ts.map +0 -1
  369. package/dist/control/show.js.map +0 -1
  370. package/dist/data/data-runtime.d.ts.map +0 -1
  371. package/dist/data/data-runtime.js.map +0 -1
  372. package/dist/data/invalidation-listeners.js.map +0 -1
  373. package/dist/data/invalidation.d.ts.map +0 -1
  374. package/dist/data/invalidation.js.map +0 -1
  375. package/dist/data/mutation-cell.d.ts.map +0 -1
  376. package/dist/data/mutation-cell.js.map +0 -1
  377. package/dist/data/query-cell.d.ts.map +0 -1
  378. package/dist/data/query-cell.js.map +0 -1
  379. package/dist/data/query-key.js.map +0 -1
  380. package/dist/data/shared.js.map +0 -1
  381. package/dist/data/types.d.ts.map +0 -1
  382. package/dist/dev/invariant.js +0 -29
  383. package/dist/dev/invariant.js.map +0 -1
  384. package/dist/dev/logger.js.map +0 -1
  385. package/dist/foundations/icon/icon.d.ts.map +0 -1
  386. package/dist/foundations/icon/icon.js.map +0 -1
  387. package/dist/foundations/icon/icon.types.d.ts.map +0 -1
  388. package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
  389. package/dist/foundations/interactions/dismissable.js.map +0 -1
  390. package/dist/foundations/interactions/focusable.d.ts.map +0 -1
  391. package/dist/foundations/interactions/focusable.js.map +0 -1
  392. package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
  393. package/dist/foundations/interactions/hoverable.js.map +0 -1
  394. package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
  395. package/dist/foundations/interactions/interaction-policy.js.map +0 -1
  396. package/dist/foundations/interactions/pressable.d.ts.map +0 -1
  397. package/dist/foundations/interactions/pressable.js.map +0 -1
  398. package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
  399. package/dist/foundations/interactions/roving-focus.js.map +0 -1
  400. package/dist/foundations/state/controllable.d.ts.map +0 -1
  401. package/dist/foundations/state/controllable.js.map +0 -1
  402. package/dist/foundations/structures/collection.d.ts.map +0 -1
  403. package/dist/foundations/structures/collection.js.map +0 -1
  404. package/dist/foundations/structures/layer.d.ts.map +0 -1
  405. package/dist/foundations/structures/layer.js.map +0 -1
  406. package/dist/foundations/structures/layout.d.ts.map +0 -1
  407. package/dist/foundations/structures/layout.js.map +0 -1
  408. package/dist/foundations/structures/portal.d.ts.map +0 -1
  409. package/dist/foundations/structures/portal.js.map +0 -1
  410. package/dist/foundations/structures/presence.d.ts.map +0 -1
  411. package/dist/foundations/structures/presence.js.map +0 -1
  412. package/dist/foundations/structures/slot.d.ts.map +0 -1
  413. package/dist/foundations/structures/slot.js.map +0 -1
  414. package/dist/foundations/utilities/aria.d.ts.map +0 -1
  415. package/dist/foundations/utilities/aria.js.map +0 -1
  416. package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
  417. package/dist/foundations/utilities/compose-handlers.js.map +0 -1
  418. package/dist/foundations/utilities/compose-ref.d.ts.map +0 -1
  419. package/dist/foundations/utilities/compose-ref.js.map +0 -1
  420. package/dist/foundations/utilities/event-types.d.ts.map +0 -1
  421. package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
  422. package/dist/foundations/utilities/merge-props.js.map +0 -1
  423. package/dist/foundations/utilities/use-id.d.ts.map +0 -1
  424. package/dist/foundations/utilities/use-id.js.map +0 -1
  425. package/dist/fx/fx.d.ts.map +0 -1
  426. package/dist/fx/fx.js.map +0 -1
  427. package/dist/fx/noop.js.map +0 -1
  428. package/dist/fx/timing.d.ts.map +0 -1
  429. package/dist/fx/timing.js.map +0 -1
  430. package/dist/index.js.map +0 -1
  431. package/dist/jsx/types.d.ts.map +0 -1
  432. package/dist/jsx/utils.d.ts.map +0 -1
  433. package/dist/jsx/utils.js.map +0 -1
  434. package/dist/jsx-dev-runtime.d.ts.map +0 -1
  435. package/dist/jsx-dev-runtime.js.map +0 -1
  436. package/dist/jsx-runtime.d.ts.map +0 -1
  437. package/dist/jsx-runtime.js.map +0 -1
  438. package/dist/renderer/attributes.js.map +0 -1
  439. package/dist/renderer/boundaries.js.map +0 -1
  440. package/dist/renderer/child-shape.js.map +0 -1
  441. package/dist/renderer/children.js.map +0 -1
  442. package/dist/renderer/cleanup.js.map +0 -1
  443. package/dist/renderer/component-host-cleanup.js.map +0 -1
  444. package/dist/renderer/component-host-instances.js.map +0 -1
  445. package/dist/renderer/component-host.js.map +0 -1
  446. package/dist/renderer/dom-host.js.map +0 -1
  447. package/dist/renderer/dom-internal.js.map +0 -1
  448. package/dist/renderer/element-children.js.map +0 -1
  449. package/dist/renderer/error-boundary-dom.js.map +0 -1
  450. package/dist/renderer/evaluate-dom-range.js.map +0 -1
  451. package/dist/renderer/evaluate-reconcile.js.map +0 -1
  452. package/dist/renderer/evaluate.js.map +0 -1
  453. package/dist/renderer/fastpath.js.map +0 -1
  454. package/dist/renderer/for-commit-dom-map.js.map +0 -1
  455. package/dist/renderer/for-commit-removal.js.map +0 -1
  456. package/dist/renderer/for-commit-reorder.js.map +0 -1
  457. package/dist/renderer/for-commit.js.map +0 -1
  458. package/dist/renderer/index.js.map +0 -1
  459. package/dist/renderer/keyed-children.js.map +0 -1
  460. package/dist/renderer/keyed.js.map +0 -1
  461. package/dist/renderer/namespaces.js.map +0 -1
  462. package/dist/renderer/prop-bindings.js.map +0 -1
  463. package/dist/renderer/reactive-child-dom.js.map +0 -1
  464. package/dist/renderer/reactive-child-sources.js.map +0 -1
  465. package/dist/renderer/reactive-children.js.map +0 -1
  466. package/dist/renderer/reconcile-commit.js.map +0 -1
  467. package/dist/renderer/reconcile-fastpaths.js.map +0 -1
  468. package/dist/renderer/reconcile-resolution.js.map +0 -1
  469. package/dist/renderer/reconcile.js.map +0 -1
  470. package/dist/renderer/retained-element-rollback.js.map +0 -1
  471. package/dist/renderer/stable-patch.js.map +0 -1
  472. package/dist/renderer/static-reuse.js.map +0 -1
  473. package/dist/renderer/utils.js.map +0 -1
  474. package/dist/router/access.js.map +0 -1
  475. package/dist/router/activity.d.ts.map +0 -1
  476. package/dist/router/activity.js.map +0 -1
  477. package/dist/router/authoring.d.ts.map +0 -1
  478. package/dist/router/authoring.js.map +0 -1
  479. package/dist/router/internal-types.d.ts.map +0 -1
  480. package/dist/router/lazy.d.ts.map +0 -1
  481. package/dist/router/lazy.js.map +0 -1
  482. package/dist/router/manifest.d.ts.map +0 -1
  483. package/dist/router/manifest.js.map +0 -1
  484. package/dist/router/match.js.map +0 -1
  485. package/dist/router/navigate.d.ts.map +0 -1
  486. package/dist/router/navigate.js.map +0 -1
  487. package/dist/router/navigation-registry.d.ts.map +0 -1
  488. package/dist/router/navigation-registry.js.map +0 -1
  489. package/dist/router/navigation-scroll.d.ts.map +0 -1
  490. package/dist/router/navigation-scroll.js.map +0 -1
  491. package/dist/router/navigation-targets.d.ts.map +0 -1
  492. package/dist/router/navigation-targets.js.map +0 -1
  493. package/dist/router/policy.d.ts.map +0 -1
  494. package/dist/router/policy.js.map +0 -1
  495. package/dist/router/rendering.d.ts.map +0 -1
  496. package/dist/router/rendering.js.map +0 -1
  497. package/dist/router/resolution.d.ts.map +0 -1
  498. package/dist/router/resolution.js.map +0 -1
  499. package/dist/router/route-context.js.map +0 -1
  500. package/dist/router/route-query.d.ts.map +0 -1
  501. package/dist/router/route-query.js.map +0 -1
  502. package/dist/router/store.d.ts.map +0 -1
  503. package/dist/router/store.js.map +0 -1
  504. package/dist/runtime/access.js.map +0 -1
  505. package/dist/runtime/child-scope.d.ts.map +0 -1
  506. package/dist/runtime/child-scope.js.map +0 -1
  507. package/dist/runtime/component-cleanup.d.ts.map +0 -1
  508. package/dist/runtime/component-cleanup.js.map +0 -1
  509. package/dist/runtime/component-commit.js.map +0 -1
  510. package/dist/runtime/component-contracts.js +0 -5
  511. package/dist/runtime/component-internal.d.ts.map +0 -1
  512. package/dist/runtime/component-internal.js.map +0 -1
  513. package/dist/runtime/component-lifecycle.d.ts.map +0 -1
  514. package/dist/runtime/component-lifecycle.js.map +0 -1
  515. package/dist/runtime/component-scope.d.ts.map +0 -1
  516. package/dist/runtime/component-scope.js.map +0 -1
  517. package/dist/runtime/context.d.ts.map +0 -1
  518. package/dist/runtime/context.js.map +0 -1
  519. package/dist/runtime/control.d.ts.map +0 -1
  520. package/dist/runtime/control.js.map +0 -1
  521. package/dist/runtime/derive.d.ts.map +0 -1
  522. package/dist/runtime/derive.js.map +0 -1
  523. package/dist/runtime/dev-namespace.js.map +0 -1
  524. package/dist/runtime/effect.d.ts.map +0 -1
  525. package/dist/runtime/effect.js.map +0 -1
  526. package/dist/runtime/events.js.map +0 -1
  527. package/dist/runtime/execution-model.js.map +0 -1
  528. package/dist/runtime/fastlane.js.map +0 -1
  529. package/dist/runtime/for-bench.d.ts.map +0 -1
  530. package/dist/runtime/for-bench.js.map +0 -1
  531. package/dist/runtime/for-internal.d.ts.map +0 -1
  532. package/dist/runtime/for-internal.js.map +0 -1
  533. package/dist/runtime/for-reconcile.d.ts.map +0 -1
  534. package/dist/runtime/for-reconcile.js.map +0 -1
  535. package/dist/runtime/for-scopes.d.ts.map +0 -1
  536. package/dist/runtime/for-scopes.js.map +0 -1
  537. package/dist/runtime/for-signals.d.ts.map +0 -1
  538. package/dist/runtime/for-signals.js.map +0 -1
  539. package/dist/runtime/lifecycle-operations.d.ts.map +0 -1
  540. package/dist/runtime/lifecycle-operations.js.map +0 -1
  541. package/dist/runtime/perf-metrics.js.map +0 -1
  542. package/dist/runtime/readable.d.ts.map +0 -1
  543. package/dist/runtime/readable.js.map +0 -1
  544. package/dist/runtime/resource-cell.js.map +0 -1
  545. package/dist/runtime/resource-operation.d.ts.map +0 -1
  546. package/dist/runtime/resource-operation.js.map +0 -1
  547. package/dist/runtime/runtime.d.ts.map +0 -1
  548. package/dist/runtime/runtime.js.map +0 -1
  549. package/dist/runtime/scheduler.d.ts.map +0 -1
  550. package/dist/runtime/scheduler.js.map +0 -1
  551. package/dist/runtime/selector.d.ts.map +0 -1
  552. package/dist/runtime/selector.js.map +0 -1
  553. package/dist/runtime/snapshot-source.d.ts.map +0 -1
  554. package/dist/runtime/snapshot-source.js.map +0 -1
  555. package/dist/runtime/state.d.ts.map +0 -1
  556. package/dist/runtime/state.js.map +0 -1
  557. package/dist/ssg/batch-render.js.map +0 -1
  558. package/dist/ssg/create-static-gen.d.ts.map +0 -1
  559. package/dist/ssg/create-static-gen.js.map +0 -1
  560. package/dist/ssg/generate-metadata.js.map +0 -1
  561. package/dist/ssg/generation-plan.js.map +0 -1
  562. package/dist/ssg/incremental-manifest.js.map +0 -1
  563. package/dist/ssg/resolve-ssg-data.js.map +0 -1
  564. package/dist/ssg/route-utils.js.map +0 -1
  565. package/dist/ssg/static-routes.js.map +0 -1
  566. package/dist/ssg/types.d.ts.map +0 -1
  567. package/dist/ssg/write-static-files.js.map +0 -1
  568. package/dist/ssr/attrs.js.map +0 -1
  569. package/dist/ssr/boundaries.js.map +0 -1
  570. package/dist/ssr/component-runtime.js.map +0 -1
  571. package/dist/ssr/context.d.ts.map +0 -1
  572. package/dist/ssr/context.js.map +0 -1
  573. package/dist/ssr/errors.d.ts.map +0 -1
  574. package/dist/ssr/errors.js.map +0 -1
  575. package/dist/ssr/escape.js.map +0 -1
  576. package/dist/ssr/hydration-data.js.map +0 -1
  577. package/dist/ssr/hydration-verify.d.ts.map +0 -1
  578. package/dist/ssr/hydration-verify.js.map +0 -1
  579. package/dist/ssr/index-internal.d.ts.map +0 -1
  580. package/dist/ssr/index-internal.js.map +0 -1
  581. package/dist/ssr/render-keys.js.map +0 -1
  582. package/dist/ssr/render-resolved.d.ts.map +0 -1
  583. package/dist/ssr/render-resolved.js.map +0 -1
  584. package/dist/ssr/render-sync.d.ts.map +0 -1
  585. package/dist/ssr/render-sync.js.map +0 -1
  586. package/dist/ssr/route-policy-resolution.js.map +0 -1
  587. package/dist/ssr/route-render.d.ts.map +0 -1
  588. package/dist/ssr/route-render.js.map +0 -1
  589. package/dist/ssr/sink.d.ts.map +0 -1
  590. package/dist/ssr/sink.js.map +0 -1
  591. package/dist/ssr/types.d.ts.map +0 -1
  592. package/dist/ssr/verify-hydration.js.map +0 -1
  593. package/dist/testing/index.d.ts.map +0 -1
  594. package/dist/testing/index.js.map +0 -1
@@ -0,0 +1,161 @@
1
+ //#region src/renderer/dom-range.ts
2
+ const RANGE_START_MARKER = "askr-range-start";
3
+ const RANGE_END_MARKER = "askr-range-end";
4
+ const rangesByOwner = /* @__PURE__ */ new WeakMap();
5
+ const ownersByAnchor = /* @__PURE__ */ new WeakMap();
6
+ function isRangeMarker(node) {
7
+ return node.nodeType === 8;
8
+ }
9
+ function normalizeNodes(node) {
10
+ if (!node) return [];
11
+ return node instanceof DocumentFragment ? Array.from(node.childNodes) : [node];
12
+ }
13
+ function getRangeNodes(range) {
14
+ if (range.single) return range.start.parentNode ? [range.start] : [];
15
+ const nodes = [];
16
+ let current = range.start.nextSibling;
17
+ while (current && current !== range.end) {
18
+ nodes.push(current);
19
+ current = current.nextSibling;
20
+ }
21
+ return nodes;
22
+ }
23
+ function createDetachedRange(nodes, owner) {
24
+ if (nodes && !(nodes instanceof DocumentFragment)) return {
25
+ range: createSingleNodeRange(nodes, owner),
26
+ fragment: null
27
+ };
28
+ const normalized = normalizeNodes(nodes);
29
+ const ownerDocument = normalized[0]?.ownerDocument ?? (typeof document !== "undefined" ? document : null);
30
+ if (!ownerDocument) throw new Error("[askr] Cannot create a DOM range without a document.");
31
+ if (normalized.length === 1) {
32
+ const single = normalized[0];
33
+ return {
34
+ range: createSingleNodeRange(single, owner),
35
+ fragment: null
36
+ };
37
+ }
38
+ const fragment = ownerDocument.createDocumentFragment();
39
+ const start = ownerDocument.createComment(RANGE_START_MARKER);
40
+ const end = ownerDocument.createComment(RANGE_END_MARKER);
41
+ fragment.appendChild(start);
42
+ for (const node of normalized) fragment.appendChild(node);
43
+ fragment.appendChild(end);
44
+ const range = {
45
+ start,
46
+ end,
47
+ single: false
48
+ };
49
+ registerRange(range, owner);
50
+ return {
51
+ range,
52
+ fragment
53
+ };
54
+ }
55
+ /** @internal Create the common singleton range without a result wrapper. */
56
+ function createSingleNodeRange(node, owner) {
57
+ const range = {
58
+ start: node,
59
+ end: node,
60
+ single: true
61
+ };
62
+ registerRange(range, owner);
63
+ return range;
64
+ }
65
+ function createEmptyRange(ownerDocument = document, owner) {
66
+ return createDetachedRange(ownerDocument.createDocumentFragment(), owner);
67
+ }
68
+ function registerRange(range, owner) {
69
+ if (!owner) return;
70
+ rangesByOwner.set(owner, range);
71
+ ownersByAnchor.set(range.start, owner);
72
+ if (range.end !== range.start) ownersByAnchor.set(range.end, owner);
73
+ }
74
+ function getOwnedRange(owner) {
75
+ return rangesByOwner.get(owner);
76
+ }
77
+ function getRangeOwner(node) {
78
+ return ownersByAnchor.get(node);
79
+ }
80
+ function clearRangeOwner(range, owner) {
81
+ const startOwner = ownersByAnchor.get(range.start);
82
+ const endOwner = ownersByAnchor.get(range.end);
83
+ if (!owner || startOwner === owner) ownersByAnchor.delete(range.start);
84
+ if (!owner || endOwner === owner) ownersByAnchor.delete(range.end);
85
+ if (!owner || rangesByOwner.get(owner) === range) rangesByOwner.delete(owner ?? startOwner);
86
+ }
87
+ function appendRange(parent, range, before = null) {
88
+ if (range.single) {
89
+ parent.insertBefore(range.start, before);
90
+ return;
91
+ }
92
+ const nodes = [
93
+ range.start,
94
+ ...getRangeNodes(range),
95
+ range.end
96
+ ];
97
+ for (const node of nodes) parent.insertBefore(node, before);
98
+ }
99
+ function moveRange(parent, range, before = null) {
100
+ if (before && rangeContains(range, before)) return;
101
+ if (range.single) {
102
+ parent.insertBefore(range.start, before);
103
+ return;
104
+ }
105
+ const fragment = parent.ownerDocument.createDocumentFragment();
106
+ const nodes = [
107
+ range.start,
108
+ ...getRangeNodes(range),
109
+ range.end
110
+ ];
111
+ for (const node of nodes) fragment.appendChild(node);
112
+ parent.insertBefore(fragment, before);
113
+ }
114
+ function insertRangeBefore(parent, range, before = null) {
115
+ moveRange(parent, range, before);
116
+ }
117
+ function removeRange(range, removeNode = (node) => node.parentNode?.removeChild(node)) {
118
+ if (range.single) {
119
+ removeNode(range.start);
120
+ clearRangeOwner(range);
121
+ return;
122
+ }
123
+ const nodes = [
124
+ range.start,
125
+ ...getRangeNodes(range),
126
+ range.end
127
+ ];
128
+ for (const node of nodes) removeNode(node);
129
+ clearRangeOwner(range);
130
+ }
131
+ function rangeContains(range, node) {
132
+ if (range.single) return range.start === node;
133
+ if (range.start.parentNode !== node.parentNode) return false;
134
+ let current = range.start;
135
+ while (current) {
136
+ if (current === node) return true;
137
+ if (current === range.end) break;
138
+ current = current.nextSibling;
139
+ }
140
+ return false;
141
+ }
142
+ function isRangeStart(node) {
143
+ return isRangeMarker(node) && node.data === "askr-range-start";
144
+ }
145
+ function isRangeEnd(node) {
146
+ return isRangeMarker(node) && node.data === "askr-range-end";
147
+ }
148
+ function findRangeEnd(start) {
149
+ if (!isRangeStart(start)) return null;
150
+ let depth = 0;
151
+ for (let current = start; current; current = current.nextSibling) {
152
+ if (isRangeStart(current)) depth++;
153
+ if (isRangeEnd(current)) {
154
+ depth--;
155
+ if (depth === 0) return current;
156
+ }
157
+ }
158
+ return null;
159
+ }
160
+ //#endregion
161
+ export { RANGE_END_MARKER, RANGE_START_MARKER, appendRange, clearRangeOwner, createDetachedRange, createEmptyRange, createSingleNodeRange, findRangeEnd, getOwnedRange, getRangeNodes, getRangeOwner, insertRangeBefore, isRangeEnd, isRangeStart, moveRange, rangeContains, registerRange, removeRange };
@@ -1,9 +1,11 @@
1
- import "./boundaries.js";
2
- import { isBulkTextFastPathEligible, performBulkPositionalKeyedTextUpdate, performBulkTextReplace } from "./children.js";
3
- import { syncComponentElement } from "./component-host.js";
1
+ import { performBulkPositionalKeyedTextUpdate } from "./children-fastpath.js";
2
+ import { isBulkTextFastPathEligible, performBulkTextReplace } from "./children.js";
4
3
  import { setStaticChildSlotsCacheEnabled } from "./static-reuse.js";
5
4
  import { updateElementChildren, updateUnkeyedChildren } from "./element-children.js";
6
5
  import { markReactivePropsDirtySource } from "./prop-bindings.js";
6
+ import "./boundary-materialization.js";
7
+ import "./boundaries.js";
8
+ import { syncComponentElement } from "./component-host.js";
7
9
  import { tryPatchStableForDirtyItem } from "./stable-patch.js";
8
- import { IS_DOM_AVAILABLE, createDOMNode, updateElementFromVnode } from "./dom-internal.js";
9
- export { IS_DOM_AVAILABLE, createDOMNode, isBulkTextFastPathEligible, markReactivePropsDirtySource, performBulkPositionalKeyedTextUpdate, performBulkTextReplace, setStaticChildSlotsCacheEnabled, syncComponentElement, tryPatchStableForDirtyItem, updateElementChildren, updateElementFromVnode, updateUnkeyedChildren };
10
+ import { IS_DOM_AVAILABLE, activateHydrationBoundary, createDOMNode, updateElementFromVnode } from "./dom-internal.js";
11
+ export { IS_DOM_AVAILABLE, activateHydrationBoundary, createDOMNode, isBulkTextFastPathEligible, markReactivePropsDirtySource, performBulkPositionalKeyedTextUpdate, performBulkTextReplace, setStaticChildSlotsCacheEnabled, syncComponentElement, tryPatchStableForDirtyItem, updateElementChildren, updateElementFromVnode, updateUnkeyedChildren };
@@ -1,16 +1,19 @@
1
- import { _isDOMElement } from "../common/vnode.js";
1
+ import { __FOR_BOUNDARY__, _isDOMElement } from "../common/vnode.js";
2
2
  import "./types.js";
3
3
  import { teardownNodeSubtree } from "./cleanup.js";
4
- import { extractKey } from "./utils.js";
4
+ import { extractKey, getMaterializedKey } from "./utils.js";
5
5
  import { keyedElements } from "./keyed.js";
6
+ import { createDetachedRange, findRangeEnd, isRangeStart, moveRange, removeRange } from "./dom-range.js";
6
7
  import { getParentNamespace } from "./namespaces.js";
7
- import { clearControlBoundaryCommitOwner, commitForBoundaryChildren, evaluateControlBoundaryState, getControlBoundaryState, getDirectControlBoundaryVNode, registerControlBoundaryCommitOwner, trySyncControlBoundaryChild } from "./boundaries.js";
8
8
  import { isBulkTextFastPathEligible, performBulkTextReplace } from "./children.js";
9
- import { isFragmentVNode, normalizeComponentChildren } from "./child-shape.js";
10
9
  import { getRendererDOMHost } from "./dom-host.js";
11
- import { trySyncScalarChildSequenceInPlace } from "./reactive-children.js";
12
10
  import { reconcileKeyedChildren } from "./reconcile.js";
11
+ import { isFragmentVNode, normalizeComponentChildren } from "./child-shape.js";
12
+ import { trySyncScalarChildSequenceInPlace } from "./reactive-children.js";
13
13
  import { tagsEqualIgnoreCase } from "./static-reuse.js";
14
+ import { syncControlBoundaryInMixedParent } from "./boundary-range-sync.js";
15
+ import { evaluateControlBoundaryState, getControlBoundaryState, getDirectControlBoundaryVNode } from "./boundary-state.js";
16
+ import { clearControlBoundaryCommitOwner, commitForBoundaryChildren, registerControlBoundaryCommitOwner, trySyncControlBoundaryChild } from "./boundaries.js";
14
17
  //#region src/renderer/element-children.ts
15
18
  const rendererReactiveChildDOMHost = {
16
19
  createDOMNode: (node, parentNamespace) => getRendererDOMHost().createDOMNode(node, parentNamespace),
@@ -60,6 +63,14 @@ function updateElementChildren(el, children, forceUpdate = false) {
60
63
  keyedElements.delete(el);
61
64
  return;
62
65
  }
66
+ if (normalizedChildren.some(isControlBoundaryVNode) && normalizedChildren.every((child) => {
67
+ if (!isControlBoundaryVNode(child)) return true;
68
+ return getControlBoundaryState(child)?.kind !== "for";
69
+ })) {
70
+ updateMixedControlChildren(el, normalizedChildren, forceUpdate);
71
+ keyedElements.delete(el);
72
+ return;
73
+ }
63
74
  if (hasKeyedVNodeChildren(normalizedChildren)) {
64
75
  const newKeyMap = reconcileKeyedChildren(el, normalizedChildren, getOrBuildDomKeyMap(el));
65
76
  keyedElements.set(el, newKeyMap);
@@ -90,6 +101,88 @@ function hasKeyedVNodeChildren(children) {
90
101
  for (let i = 0; i < children.length; i++) if (extractKey(children[i]) !== void 0) return true;
91
102
  return false;
92
103
  }
104
+ function isControlBoundaryVNode(child) {
105
+ return _isDOMElement(child) && child.type === __FOR_BOUNDARY__;
106
+ }
107
+ function removeRangeAtCursor(parent, cursor) {
108
+ if (!isRangeStart(cursor)) return cursor;
109
+ const end = findRangeEnd(cursor);
110
+ if (!end) return cursor;
111
+ const range = {
112
+ start: cursor,
113
+ end,
114
+ single: false
115
+ };
116
+ const next = end.nextSibling;
117
+ removeRange(range, (node) => {
118
+ if (node === range.start || node === range.end) {
119
+ node.parentNode?.removeChild(node);
120
+ return;
121
+ }
122
+ teardownNodeSubtree(node);
123
+ node.parentNode?.removeChild(node);
124
+ });
125
+ return next;
126
+ }
127
+ function updateMixedControlChildren(parent, children, forceUpdate) {
128
+ const parentNamespace = getParentNamespace(parent);
129
+ const domHost = getRendererDOMHost();
130
+ let cursor = parent.firstChild;
131
+ for (const child of children) {
132
+ if (isControlBoundaryVNode(child)) {
133
+ const controlState = getControlBoundaryState(child);
134
+ if (!controlState) throw new Error("[updateElementChildren] Control boundary missing internal state");
135
+ registerControlBoundaryCommitOwner(parent, controlState);
136
+ const ranges = syncControlBoundaryInMixedParent(parent, controlState, evaluateControlBoundaryState(controlState), cursor);
137
+ for (const range of ranges) if (range.start.parentNode !== parent) moveRange(parent, range, cursor?.parentNode === parent ? cursor : null);
138
+ else if (cursor?.parentNode === parent) moveRange(parent, range, cursor);
139
+ const last = ranges[ranges.length - 1];
140
+ if (last) {
141
+ const cursorWasReplaced = cursor && !ranges.some((range) => range.start === cursor);
142
+ if (!cursor?.parentNode) cursor = last.end.nextSibling;
143
+ else if (cursorWasReplaced && isRangeStart(cursor)) cursor = findRangeEnd(cursor)?.nextSibling ?? last.end.nextSibling;
144
+ else if (isRangeStart(cursor)) cursor = findRangeEnd(cursor)?.nextSibling ?? last.end.nextSibling;
145
+ else cursor = last.end.nextSibling;
146
+ }
147
+ continue;
148
+ }
149
+ if (cursor) cursor = removeRangeAtCursor(parent, cursor);
150
+ if (cursor && (typeof child === "string" || typeof child === "number") && cursor.nodeType === 3) {
151
+ cursor.data = String(child);
152
+ cursor = cursor.nextSibling;
153
+ continue;
154
+ }
155
+ if (cursor instanceof Element && _isDOMElement(child) && typeof child.type === "string" && tagsEqualIgnoreCase(cursor.tagName, child.type)) {
156
+ domHost.updateElementFromVnode(cursor, child, true, forceUpdate);
157
+ cursor = cursor.nextSibling;
158
+ continue;
159
+ }
160
+ if (cursor instanceof Element && _isDOMElement(child) && typeof child.type === "function") {
161
+ const synced = domHost.syncComponentElement(cursor, child, child.type, (child.props ?? {}) || {}, parentNamespace, forceUpdate);
162
+ if (synced) {
163
+ cursor = synced.nextSibling;
164
+ continue;
165
+ }
166
+ }
167
+ const created = domHost.createDOMNode(child, parentNamespace);
168
+ if (!created) {
169
+ cursor = cursor?.nextSibling ?? null;
170
+ continue;
171
+ }
172
+ const materialized = createDetachedRange(created);
173
+ const old = cursor;
174
+ moveRange(parent, materialized.range, old);
175
+ if (old) {
176
+ teardownNodeSubtree(old);
177
+ old.parentNode?.removeChild(old);
178
+ }
179
+ cursor = materialized.range.end.nextSibling;
180
+ }
181
+ while (cursor) {
182
+ const next = removeRangeAtCursor(parent, cursor);
183
+ cursor = next === cursor ? cursor.nextSibling : next;
184
+ }
185
+ }
93
186
  function isEmptyChild(child) {
94
187
  return child === null || child === void 0 || child === false;
95
188
  }
@@ -98,12 +191,8 @@ function getOrBuildDomKeyMap(parent) {
98
191
  if (!keyMap) {
99
192
  keyMap = /* @__PURE__ */ new Map();
100
193
  for (let child = parent.firstElementChild; child; child = child.nextElementSibling) {
101
- const key = child.getAttribute("data-key");
102
- if (key !== null) {
103
- keyMap.set(key, child);
104
- const numericKey = Number(key);
105
- if (!Number.isNaN(numericKey)) keyMap.set(numericKey, child);
106
- }
194
+ const key = getMaterializedKey(child);
195
+ if (key !== void 0) keyMap.set(key, child);
107
196
  }
108
197
  if (keyMap.size > 0) keyedElements.set(parent, keyMap);
109
198
  }
@@ -137,9 +226,7 @@ function updateUnkeyedChildren(parent, newChildren, forceUpdate = false) {
137
226
  }
138
227
  else if (_isDOMElement(next)) {
139
228
  if (trySyncControlBoundaryChild(parent, current, next)) continue;
140
- const synced = trySyncComponentChild(current, next);
141
- if (synced && synced !== current) teardownNodeSubtree(current);
142
- else if (!synced) {
229
+ if (!trySyncComponentChild(current, next)) {
143
230
  const dom = domHost.createDOMNode(next, parentNamespace);
144
231
  if (dom) {
145
232
  teardownNodeSubtree(current);
@@ -192,9 +279,7 @@ function updateUnkeyedChildren(parent, newChildren, forceUpdate = false) {
192
279
  }
193
280
  else {
194
281
  if (trySyncControlBoundaryChild(parent, currentNode, next)) continue;
195
- const synced = trySyncComponentChild(currentEl, next);
196
- if (synced && synced !== currentNode) teardownNodeSubtree(currentEl);
197
- else if (!synced) {
282
+ if (!trySyncComponentChild(currentEl, next)) {
198
283
  const dom = domHost.createDOMNode(next, parentNamespace);
199
284
  if (dom) {
200
285
  teardownNodeSubtree(currentEl);
@@ -245,26 +330,23 @@ function updateUnkeyedChildren(parent, newChildren, forceUpdate = false) {
245
330
  const textNode = document.createTextNode(String(next));
246
331
  teardownNodeSubtree(current);
247
332
  parent.replaceChild(textNode, current);
248
- } else if (_isDOMElement(next)) if (typeof next.type === "string") if (tagsEqualIgnoreCase(current.tagName, next.type)) domHost.updateElementFromVnode(current, next, true, forceUpdate);
249
- else {
250
- const dom = domHost.createDOMNode(next, parentNamespace);
251
- if (dom) {
252
- teardownNodeSubtree(current);
253
- parent.replaceChild(dom, current);
333
+ } else if (_isDOMElement(next)) {
334
+ if (typeof next.type === "string") if (tagsEqualIgnoreCase(current.tagName, next.type)) domHost.updateElementFromVnode(current, next, true, forceUpdate);
335
+ else {
336
+ const dom = domHost.createDOMNode(next, parentNamespace);
337
+ if (dom) {
338
+ teardownNodeSubtree(current);
339
+ parent.replaceChild(dom, current);
340
+ }
254
341
  }
255
- }
256
- else {
257
- const synced = trySyncComponentChild(current, next);
258
- if (synced && synced !== current) teardownNodeSubtree(current);
259
- else if (!synced) {
342
+ else if (!trySyncComponentChild(current, next)) {
260
343
  const dom = domHost.createDOMNode(next, parentNamespace);
261
344
  if (dom) {
262
345
  teardownNodeSubtree(current);
263
346
  parent.replaceChild(dom, current);
264
347
  }
265
348
  }
266
- }
267
- else {
349
+ } else {
268
350
  const dom = domHost.createDOMNode(next);
269
351
  if (dom) {
270
352
  teardownNodeSubtree(current);
@@ -275,5 +357,3 @@ function updateUnkeyedChildren(parent, newChildren, forceUpdate = false) {
275
357
  }
276
358
  //#endregion
277
359
  export { rendererReactiveChildDOMHost, updateElementChildren, updateUnkeyedChildren };
278
-
279
- //# sourceMappingURL=element-children.js.map
@@ -1,29 +1,86 @@
1
- import { logger } from "../dev/logger.js";
1
+ import { isDevelopmentEnvironment } from "../common/env.js";
2
+ import { logger } from "../common/logger.js";
3
+ import { beginLifecycleCommitBatch, discardLifecycleCommitBatch, flushLifecycleCommitBatch } from "../runtime/lifecycle-batch.js";
4
+ import { createBoundaryReset, reportBoundaryError } from "../runtime/error-boundary.js";
5
+ import "../runtime/index.js";
2
6
  import { getRendererDOMHost } from "./dom-host.js";
3
- import { createBoundaryReset, reportBoundaryError, resolveErrorBoundaryFallback } from "../components/error-boundary.js";
4
7
  //#region src/renderer/error-boundary-dom.ts
8
+ function getBoundaryMessage(error) {
9
+ if (error instanceof Error) return error.message || error.name || "Unknown error";
10
+ if (typeof error === "string") return error;
11
+ try {
12
+ return JSON.stringify(error);
13
+ } catch {
14
+ return String(error);
15
+ }
16
+ }
17
+ function createDefaultFallbackNode(error, reset) {
18
+ const message = getBoundaryMessage(error);
19
+ const wrapper = document.createElement("div");
20
+ wrapper.setAttribute("role", "alert");
21
+ wrapper.setAttribute("data-askr-error-boundary", "true");
22
+ wrapper.style.boxSizing = "border-box";
23
+ wrapper.style.padding = "1rem";
24
+ wrapper.style.border = "1px solid currentColor";
25
+ wrapper.style.borderRadius = "0.75rem";
26
+ wrapper.style.display = "grid";
27
+ wrapper.style.gap = "0.75rem";
28
+ wrapper.style.maxWidth = "100%";
29
+ const title = document.createElement("strong");
30
+ title.textContent = "Something went wrong while rendering this view.";
31
+ const summary = document.createElement("p");
32
+ summary.textContent = "The app recovered into a visible fallback so the error is not hidden in the console.";
33
+ summary.style.margin = "0";
34
+ const details = document.createElement("details");
35
+ details.open = isDevelopmentEnvironment();
36
+ const detailsSummary = document.createElement("summary");
37
+ detailsSummary.textContent = "Error details";
38
+ const pre = document.createElement("pre");
39
+ pre.textContent = message;
40
+ pre.style.margin = "0";
41
+ pre.style.whiteSpace = "pre-wrap";
42
+ pre.style.wordBreak = "break-word";
43
+ const button = document.createElement("button");
44
+ button.type = "button";
45
+ button.textContent = "Try again";
46
+ button.addEventListener("click", () => reset());
47
+ details.append(detailsSummary, pre);
48
+ wrapper.append(title, summary, details, button);
49
+ return wrapper;
50
+ }
51
+ function resolveErrorBoundaryFallback(fallback, error, reset) {
52
+ if (typeof fallback === "function") return fallback(error, reset);
53
+ return fallback ?? createDefaultFallbackNode(error, reset);
54
+ }
55
+ function runErrorBoundaryDOMAttempt(attempt) {
56
+ const lifecycleBatch = beginLifecycleCommitBatch();
57
+ try {
58
+ const result = attempt();
59
+ flushLifecycleCommitBatch(lifecycleBatch);
60
+ return result;
61
+ } catch (error) {
62
+ discardLifecycleCommitBatch(lifecycleBatch);
63
+ throw error;
64
+ }
65
+ }
66
+ function materializeErrorBoundaryValue(value, parentNamespace) {
67
+ if (value instanceof Node) return value;
68
+ return getRendererDOMHost().createDOMNode(value, parentNamespace) ?? document.createComment("");
69
+ }
5
70
  function createErrorBoundaryElement(node, props, parentNamespace) {
6
71
  const boundaryState = node.__instance?.errorBoundaryState ?? null;
7
72
  const reset = node.__instance ? createBoundaryReset(node.__instance) : () => {};
8
73
  const fallback = props.fallback;
9
74
  const children = props.children;
10
75
  const domHost = getRendererDOMHost();
11
- if (boundaryState?.error != null) {
12
- const fallbackValue = resolveErrorBoundaryFallback(fallback, boundaryState.error, reset);
13
- if (fallbackValue instanceof Node) return fallbackValue;
14
- return domHost.createDOMNode(fallbackValue, parentNamespace) ?? document.createComment("");
15
- }
76
+ if (boundaryState?.error != null) return runErrorBoundaryDOMAttempt(() => materializeErrorBoundaryValue(resolveErrorBoundaryFallback(fallback, boundaryState.error, reset), parentNamespace));
16
77
  try {
17
- return domHost.createDOMNode(children, parentNamespace) ?? document.createComment("");
78
+ return runErrorBoundaryDOMAttempt(() => domHost.createDOMNode(children, parentNamespace) ?? document.createComment(""));
18
79
  } catch (error) {
19
80
  if (node.__instance) reportBoundaryError(node.__instance, error, props.onError);
20
81
  else logger.error("[Askr] ErrorBoundary caught render error:", error);
21
- const fallbackValue = resolveErrorBoundaryFallback(fallback, error, reset);
22
- if (fallbackValue instanceof Node) return fallbackValue;
23
- return domHost.createDOMNode(fallbackValue, parentNamespace) ?? document.createComment("");
82
+ return runErrorBoundaryDOMAttempt(() => materializeErrorBoundaryValue(resolveErrorBoundaryFallback(fallback, error, reset), parentNamespace));
24
83
  }
25
84
  }
26
85
  //#endregion
27
86
  export { createErrorBoundaryElement };
28
-
29
- //# sourceMappingURL=error-boundary-dom.js.map
@@ -1,6 +1,7 @@
1
1
  import { _isDOMElement } from "../common/vnode.js";
2
2
  import "./types.js";
3
3
  import { teardownNodeSubtree } from "./cleanup.js";
4
+ import { RANGE_END_MARKER, RANGE_START_MARKER } from "./dom-range.js";
4
5
  import { getRendererDOMHost } from "./dom-host.js";
5
6
  import { smartUpdateElement, tagNamesEqualIgnoreCase } from "./evaluate-reconcile.js";
6
7
  //#region src/renderer/evaluate-dom-range.ts
@@ -9,8 +10,8 @@ function hasDOMRange(context) {
9
10
  return domRanges.has(context);
10
11
  }
11
12
  function createDOMRange(target, context, node) {
12
- const start = document.createComment("component-start");
13
- const end = document.createComment("component-end");
13
+ const start = document.createComment(RANGE_START_MARKER);
14
+ const end = document.createComment(RANGE_END_MARKER);
14
15
  target.appendChild(start);
15
16
  target.appendChild(end);
16
17
  domRanges.set(context, {
@@ -81,5 +82,3 @@ function updateDOMRangeForContext(target, context, children) {
81
82
  }
82
83
  //#endregion
83
84
  export { cleanupRangeNode, createDOMRange, hasDOMRange, updateDOMRangeForContext };
84
-
85
- //# sourceMappingURL=evaluate-dom-range.js.map
@@ -1,23 +1,25 @@
1
1
  import { __FOR_BOUNDARY__, _isDOMElement } from "../common/vnode.js";
2
2
  import "./types.js";
3
3
  import { getRuntimeEnv } from "../common/env.js";
4
- import { logger } from "../dev/logger.js";
4
+ import { logger } from "../common/logger.js";
5
5
  import { Fragment } from "../common/jsx.js";
6
6
  import { incDevCounter, setDevValue } from "../runtime/dev-namespace.js";
7
- import { elementListeners } from "./cleanup.js";
7
+ import { evaluateCaseState, evaluateShowState } from "../runtime/control.js";
8
+ import { evaluateForState } from "../runtime/for-internal.js";
9
+ import "../runtime/index.js";
10
+ import { elementListeners, updateElementRef } from "./cleanup.js";
8
11
  import "./env.js";
9
- import { createWrappedHandler, extractKey, getEventListenerKey, getEventListenerOptions, parseEventProp, setRenderedAttribute, tagNamesEqualIgnoreCase as tagNamesEqualIgnoreCase$1, writeElementClassName } from "./utils.js";
12
+ import { createWrappedHandler, extractKey, getEventListenerKey, getEventListenerOptions, getMaterializedKey, parseEventProp, setRenderedAttribute, tagNamesEqualIgnoreCase as tagNamesEqualIgnoreCase$1, writeElementClassName } from "./utils.js";
10
13
  import { keyedElements } from "./keyed.js";
11
- import { evaluateForState } from "../runtime/for-internal.js";
12
- import "../runtime/for.js";
13
- import { evaluateCaseState, evaluateShowState } from "../runtime/control.js";
14
14
  import { createElementForNamespace, getParentNamespace } from "./namespaces.js";
15
- import { commitForBoundaryChildren } from "./boundaries.js";
16
- import { isBulkTextFastPathEligible, performBulkPositionalKeyedTextUpdate, performBulkTextReplace } from "./children.js";
15
+ import { performBulkPositionalKeyedTextUpdate } from "./children-fastpath.js";
16
+ import { isBulkTextFastPathEligible, performBulkTextReplace } from "./children.js";
17
17
  import { getRendererDOMHost } from "./dom-host.js";
18
18
  import { reconcileKeyedChildren } from "./reconcile.js";
19
19
  import { updateUnkeyedChildren } from "./element-children.js";
20
20
  import { runRetainedElementUpdate } from "./retained-element-rollback.js";
21
+ import { tryAdoptMatchingIntrinsicSubtree } from "./intrinsic-hydration-adoption.js";
22
+ import { commitForBoundaryChildren } from "./boundaries.js";
21
23
  //#region src/renderer/evaluate-reconcile.ts
22
24
  function getRetainedHostOwnerChain(host, owner) {
23
25
  const instances = host.__ASKR_INSTANCES ?? [];
@@ -59,12 +61,8 @@ function tryUpdateTextInPlace(element, text) {
59
61
  function buildKeyMapFromDOM(parent) {
60
62
  const keyMap = /* @__PURE__ */ new Map();
61
63
  for (let child = parent.firstElementChild; child; child = child.nextElementSibling) {
62
- const k = child.getAttribute("data-key");
63
- if (k !== null) {
64
- keyMap.set(k, child);
65
- const n = Number(k);
66
- if (!Number.isNaN(n)) keyMap.set(n, child);
67
- }
64
+ const key = getMaterializedKey(child);
65
+ if (key !== void 0) keyMap.set(key, child);
68
66
  }
69
67
  return keyMap;
70
68
  }
@@ -176,17 +174,11 @@ function updateElementChildren(element, vnodeChildren, cleanupRangeNode) {
176
174
  updateForBoundaryChildren(element, vnodeChildren[0]);
177
175
  return;
178
176
  }
179
- if (hasKeyedChildren(vnodeChildren)) {
180
- const oldKeyMap = getOrBuildKeyMap(element);
181
- try {
182
- reconcileKeyed(element, vnodeChildren, oldKeyMap);
183
- } catch {
184
- const newKeyMap = reconcileKeyedChildren(element, vnodeChildren, oldKeyMap);
185
- keyedElements.set(element, newKeyMap);
186
- }
187
- } else reconcileUnkeyed(element, vnodeChildren);
177
+ if (hasKeyedChildren(vnodeChildren)) reconcileKeyed(element, vnodeChildren, getOrBuildKeyMap(element));
178
+ else reconcileUnkeyed(element, vnodeChildren);
188
179
  }
189
180
  function smartUpdateElement(element, vnode, cleanupRangeNode) {
181
+ if (tryAdoptMatchingIntrinsicSubtree(element, vnode)) return;
190
182
  const hadVNodeKey = Object.prototype.hasOwnProperty.call(vnode, "key");
191
183
  const previousVNodeKey = vnode.key;
192
184
  runRetainedElementUpdate(element, cleanupRangeNode, () => applySmartUpdateElement(element, vnode, cleanupRangeNode), () => {
@@ -197,11 +189,8 @@ function smartUpdateElement(element, vnode, cleanupRangeNode) {
197
189
  function applySmartUpdateElement(element, vnode, cleanupRangeNode) {
198
190
  const domHost = getRendererDOMHost();
199
191
  if (vnode.key == null && element.hasAttribute("data-key")) {
200
- const existingKey = element.getAttribute("data-key");
201
- if (existingKey !== null) {
202
- const numericKey = Number(existingKey);
203
- vnode.key = Number.isNaN(numericKey) ? existingKey : numericKey;
204
- }
192
+ const existingKey = getMaterializedKey(element);
193
+ if (existingKey !== void 0) vnode.key = existingKey;
205
194
  }
206
195
  let vnodeChildren = vnode.props?.children ?? vnode.children;
207
196
  if (vnodeChildren && _isDOMElement(vnodeChildren) && vnodeChildren.type === __FOR_BOUNDARY__) {
@@ -222,7 +211,7 @@ function applyPropsToElement(el, props) {
222
211
  if (key === "children" || key === "key") continue;
223
212
  if (value === void 0 || value === null || value === false) continue;
224
213
  if (key === "ref") {
225
- applyRef(el, value);
214
+ updateElementRef(el, value);
226
215
  continue;
227
216
  }
228
217
  const eventProp = parseEventProp(key);
@@ -247,17 +236,6 @@ function applyPropsToElement(el, props) {
247
236
  else setRenderedAttribute(el, key, String(value));
248
237
  }
249
238
  }
250
- function applyRef(el, ref) {
251
- const r = ref;
252
- if (!r) return;
253
- if (typeof r === "function") {
254
- r(el);
255
- return;
256
- }
257
- try {
258
- r.current = el;
259
- } catch {}
260
- }
261
239
  function tryFirstRenderKeyedChildren(target, vnode) {
262
240
  const children = vnode.children;
263
241
  if (!Array.isArray(children) || !hasKeyedChildren(children)) return false;
@@ -277,5 +255,3 @@ function getFragmentChildren(vnode) {
277
255
  }
278
256
  //#endregion
279
257
  export { getFragmentChildren, getRetainedHostOwnerChain, isFragment, processFragmentChildren, retainHostOwnerChain, smartUpdateElement, tagNamesEqualIgnoreCase, tryFirstRenderKeyedChildren, updateElementChildren, updateForBoundaryChildren };
280
-
281
- //# sourceMappingURL=evaluate-reconcile.js.map
@@ -1,12 +1,14 @@
1
1
  import { __FOR_BOUNDARY__, _isDOMElement } from "../common/vnode.js";
2
2
  import "./types.js";
3
3
  import { getRuntimeEnv } from "../common/env.js";
4
+ import { beginLifecycleCommitBatch, discardLifecycleCommitBatch, flushLifecycleCommitBatch, getCurrentLifecycleCommitBatch } from "../runtime/lifecycle-batch.js";
5
+ import "../runtime/index.js";
4
6
  import { removeAllListeners } from "./cleanup.js";
5
7
  import "./env.js";
8
+ import { getFragmentChildren, getRetainedHostOwnerChain, isFragment, processFragmentChildren, retainHostOwnerChain, smartUpdateElement, tagNamesEqualIgnoreCase, tryFirstRenderKeyedChildren, updateElementChildren, updateForBoundaryChildren } from "./evaluate-reconcile.js";
6
9
  import { syncComponentElement } from "./component-host.js";
7
10
  import { createDOMNode } from "./dom-internal.js";
8
11
  import "./dom.js";
9
- import { getFragmentChildren, getRetainedHostOwnerChain, isFragment, processFragmentChildren, retainHostOwnerChain, smartUpdateElement, tagNamesEqualIgnoreCase, tryFirstRenderKeyedChildren, updateElementChildren, updateForBoundaryChildren } from "./evaluate-reconcile.js";
10
12
  import { cleanupRangeNode, createDOMRange, hasDOMRange, updateDOMRangeForContext } from "./evaluate-dom-range.js";
11
13
  function evaluate(node, target, context, retainedOwner) {
12
14
  if (!target) return;
@@ -16,6 +18,17 @@ function evaluate(node, target, context, retainedOwner) {
16
18
  } catch (e) {}
17
19
  return;
18
20
  }
21
+ const batch = !getCurrentLifecycleCommitBatch() ? beginLifecycleCommitBatch() : null;
22
+ try {
23
+ evaluateInLifecycleBatch(node, target, context, retainedOwner);
24
+ if (batch) flushLifecycleCommitBatch(batch);
25
+ } catch (error) {
26
+ if (batch) discardLifecycleCommitBatch(batch);
27
+ throw error;
28
+ }
29
+ }
30
+ function evaluateInLifecycleBatch(node, target, context, retainedOwner) {
31
+ if (!target) return;
19
32
  if (context && hasDOMRange(context)) updateDOMRangeForContext(target, context, node === null || node === void 0 || node === false ? [] : isFragment(node) ? getFragmentChildren(node) : Array.isArray(node) ? node : [node]);
20
33
  else if (context) createDOMRange(target, context, node);
21
34
  else {
@@ -80,5 +93,3 @@ function evaluate(node, target, context, retainedOwner) {
80
93
  }
81
94
  //#endregion
82
95
  export { evaluate };
83
-
84
- //# sourceMappingURL=evaluate.js.map