@voithos-labs/aragonite 0.10.4 → 0.10.7

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 (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +11 -5
  3. package/dist/a11y-strings.js +60 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +12 -21
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +603 -1126
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +26 -51
  26. package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +29 -34
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +57 -39
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +141 -203
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +45 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
  102. package/dist/components/blocks/text/click-snap-guard.js +10 -7
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -108
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +212 -199
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +12 -35
  144. package/dist/components/drag-handle.js +22 -68
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -24
  162. package/dist/components/editor-root-listeners.js +49 -24
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +14 -26
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +30 -35
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +54 -75
  256. package/dist/core/inline/inline-widgets.js +54 -62
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +31 -15
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -6
  347. package/dist/cursor/height-oracle.js +26 -74
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +14 -15
  365. package/dist/cursor/scrollport.js +7 -13
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -14
  375. package/dist/cursor/visual-lines.js +45 -46
  376. package/dist/cursor/widget-edge-snap.d.ts +10 -15
  377. package/dist/cursor/widget-edge-snap.js +13 -12
  378. package/dist/cursor/widget-offset.d.ts +110 -104
  379. package/dist/cursor/widget-offset.js +344 -179
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +30 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +28 -50
  434. package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
  435. package/dist/editor-actions/focus/focus-landing.js +15 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +54 -82
  465. package/dist/editor-actions/plugin/container.js +105 -188
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +88 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +37 -8
  550. package/dist/plugin.js +100 -77
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +78 -67
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -81
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +141 -310
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +78 -84
  695. package/dist/schema/commands.js +152 -117
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +8 -10
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +63 -80
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +92 -125
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +59 -96
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +51 -134
  807. package/dist/selection/dead-space-caret.d.ts +19 -30
  808. package/dist/selection/dead-space-caret.js +70 -88
  809. package/dist/selection/drag-pointer.d.ts +7 -9
  810. package/dist/selection/drag-pointer.js +23 -33
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -40
  816. package/dist/selection/keyboard-extend.js +94 -117
  817. package/dist/selection/multi-click.d.ts +13 -18
  818. package/dist/selection/multi-click.js +32 -38
  819. package/dist/selection/native-bridge.d.ts +29 -39
  820. package/dist/selection/native-bridge.js +78 -127
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +25 -16
  824. package/dist/selection/path-lookup.js +101 -18
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +5 -5
  828. package/dist/selection/pointer-gesture.js +5 -5
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -40
  832. package/dist/selection/primitives.js +57 -67
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -23
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +34 -16
  852. package/dist/selection/selection-drop.js +159 -95
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +60 -53
  864. package/dist/styles/editor.css +201 -143
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
  960. package/dist/tree-operations/paste/replacement-parse.js +12 -10
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +327 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +253 -185
  996. package/docs/guide/plugin-guide.md +332 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +12 -16
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/cursor/scroll-hold.d.ts +0 -10
  1015. package/dist/cursor/scroll-hold.js +0 -22
  1016. package/dist/invariants/split-landing.d.ts +0 -8
  1017. package/dist/invariants/split-landing.js +0 -15
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
@@ -1,54 +1,29 @@
1
- /**
2
- * A scope's ref-slot array, reached only through the accessors its owner mints. Object
3
- * identity IS the scope: the mount registry keys on it, so a mount in one scope cannot wake
4
- * a waiter in another (a nested level, a sibling container, a second editor instance).
5
- * Neither accessor is reactive: every owner mints the slots over a plain array, so a `get`
6
- * registers no dependency and a `set` wakes no effect; `whenRefMounted` is how a caller waits.
7
- */
1
+ /** One block list's child-component refs, reached only through these accessors. Neither is
2
+ * reactive; `revealChildOrWait` is how a caller waits for a child to mount. */
8
3
  export interface RefSlots<T> {
9
4
  set(index: number, ref: T | undefined): void;
10
5
  get(index: number): T | undefined;
11
6
  }
12
- /** Mints a scope over its ref array. Takes the array itself, not a getter, so a scope
13
- * cannot be re-aimed at a replacement: Svelte pins a teardown's reads to pre-flush values,
14
- * so a swapped array takes each cleanup's clear with it and strands the dead ref in the
15
- * live one. Publish a new set of contents with `replaceRefs`. */
7
+ /** Takes the array itself, never a getter: a cleanup run against a replaced array would leave a
8
+ * dead ref in the live one. Replace contents with `replaceRefs`. */
16
9
  export declare function refSlotsOver<T>(refs: (T | undefined)[]): RefSlots<T>;
17
- /** Publishes a whole slot array in place, the only sanctioned way to replace a scope's
18
- * contents wholesale (see `refSlotsOver` for why identity is load-bearing). */
10
+ /** Writes a whole array of refs in place, the only supported way to replace a list's
11
+ * contents at once (see `refSlotsOver` for why the array's identity matters). */
19
12
  export declare function replaceRefs<T>(target: (T | undefined)[], values: readonly (T | undefined)[]): void;
20
- /**
21
- * Replaces `bind:this={refs[i]}` in a keyed each — Svelte 5's `bind:this` doesn't re-target
22
- * when the iteration index shifts. Cleanup is conditional because effect-cleanup order
23
- * across siblings isn't guaranteed, and an unconditional clear stomps a neighbor's slot.
24
- * `el` is the ref's own box, which is what makes `isSlotDetached` answerable.
25
- */
13
+ /** Replaces `bind:this={refs[i]}` in a keyed each, which doesn't re-target when the index
14
+ * shifts. `el` is the ref's own box, which `isSlotDetached` reads. */
26
15
  export declare function publishRefSlot<T>(slots: RefSlots<T>, index: number, ref: T | undefined, el?: Element | null): () => void;
27
16
  export interface RevealChildOptions<T> {
28
- /** This scope's ref slots: the read/drop surface, and the mount-wait's scope key. */
17
+ /** This list's ref entries: what the wait reads, and clears when a ref left the DOM. */
29
18
  readonly slots: RefSlots<T>;
30
- /** This scope's child count; an index at or past it can never mount (size lag). */
19
+ /** This list's child count; an index at or past it can never mount. */
31
20
  readonly childCount: number;
32
- /** Scroll this scope so child `index` enters its window; resolves after a tick. */
21
+ /** Scroll this list so child `index` is in the mounted range; resolves after a tick. */
33
22
  readonly revealChild: (index: number) => Promise<void>;
34
- /** True iff `index` is inside the scope's CURRENT mounted window, read AFTER `revealChild`
35
- * resolved (VR-5's termination guarantee). Optional only for a scope that does not window:
36
- * every production reveal supplies it, so the bounded re-wait below is the harness
37
- * fallback, not a live path. */
38
- readonly isInWindow?: (index: number) => boolean;
23
+ /** True when `index` is in the list's mounted range after `revealChild`, which lets the wait
24
+ * give up instead of hanging (VR-5). */
25
+ readonly isInWindow: (index: number) => boolean;
39
26
  }
40
- /**
41
- * Bring child `index` into its window before a caller reads its ref: drop a detached ref,
42
- * scroll it in, and await its mount. Shared by the canonical container reveal and TableBlock's
43
- * hand-rolled one, so the "is this slot a live mount" gate has one home. Termination (VR-5): only
44
- * a mount at this index in THIS scope wakes the wait, so a windowing caller proves membership
45
- * first and a non-windowing one races each wait against a tick, rather than parking forever.
46
- */
27
+ /** Brings child `index` into the mounted range before a caller reads its ref: drops a ref that
28
+ * left the DOM, scrolls the child in, and waits for its mount, giving up when it cannot come. */
47
29
  export declare function revealChildOrWait<T>(index: number, opts: RevealChildOptions<T>): Promise<void>;
48
- /**
49
- * Resolve when slot `index` of `slots` is (or becomes) populated. Event-driven, woken by
50
- * `publishRefSlot` on a real mount, never a timer (Design Rule #2 / G4.4). A wake can still
51
- * be spurious within one scope: a mount that unpublishes in the same flush leaves the slot
52
- * empty, so the caller re-checks.
53
- */
54
- export declare function whenRefMounted<T>(slots: RefSlots<T>, index: number): Promise<void>;
@@ -1,8 +1,8 @@
1
+ /** A block list's child-component refs, and scrolling a child into the mounted range before
2
+ * reading its ref. */
1
3
  import { tick, untrack } from 'svelte';
2
- /** Mints a scope over its ref array. Takes the array itself, not a getter, so a scope
3
- * cannot be re-aimed at a replacement: Svelte pins a teardown's reads to pre-flush values,
4
- * so a swapped array takes each cleanup's clear with it and strands the dead ref in the
5
- * live one. Publish a new set of contents with `replaceRefs`. */
4
+ /** Takes the array itself, never a getter: a cleanup run against a replaced array would leave a
5
+ * dead ref in the live one. Replace contents with `replaceRefs`. */
6
6
  export function refSlotsOver(refs) {
7
7
  return {
8
8
  set: (index, ref) => {
@@ -11,28 +11,22 @@ export function refSlotsOver(refs) {
11
11
  get: (index) => refs[index]
12
12
  };
13
13
  }
14
- /** Publishes a whole slot array in place, the only sanctioned way to replace a scope's
15
- * contents wholesale (see `refSlotsOver` for why identity is load-bearing). */
14
+ /** Writes a whole array of refs in place, the only supported way to replace a list's
15
+ * contents at once (see `refSlotsOver` for why the array's identity matters). */
16
16
  export function replaceRefs(target, values) {
17
17
  target.length = values.length;
18
18
  for (let i = 0; i < values.length; i++)
19
19
  target[i] = values[i];
20
20
  }
21
- /**
22
- * Replaces `bind:this={refs[i]}` in a keyed each — Svelte 5's `bind:this` doesn't re-target
23
- * when the iteration index shifts. Cleanup is conditional because effect-cleanup order
24
- * across siblings isn't guaranteed, and an unconditional clear stomps a neighbor's slot.
25
- * `el` is the ref's own box, which is what makes `isSlotDetached` answerable.
26
- */
21
+ /** Replaces `bind:this={refs[i]}` in a keyed each, which doesn't re-target when the index
22
+ * shifts. `el` is the ref's own box, which `isSlotDetached` reads. */
27
23
  export function publishRefSlot(slots, index, ref, el) {
28
24
  slots.set(index, ref);
29
25
  if (el && typeof ref === 'object' && ref !== null)
30
26
  publishedElements.set(ref, el);
31
- // The cleanup's identity check compares against what the slot actually holds, not the raw
32
- // ref; untracked, since publishers run inside effects and would self-invalidate.
27
+ // Sibling cleanups run in no set order, so a cleanup clears the entry only if it still holds
28
+ // this mount's ref; read untracked, since writers run inside effects.
33
29
  const publishedRef = untrack(() => slots.get(index));
34
- if (publishedRef !== undefined)
35
- resolveMountWaiters(slots, index);
36
30
  return () => {
37
31
  if (slots.get(index) === publishedRef) {
38
32
  slots.set(index, undefined);
@@ -40,17 +34,11 @@ export function publishRefSlot(slots, index, ref, el) {
40
34
  };
41
35
  }
42
36
  // ── Mount attachment ─────────────────────────────────────────────────────────
43
- // Keyed on ref identity, not on (slots, index): a wholesale `replaceRefs` re-seats a saved
44
- // ref no publisher will run for again, and only the ref itself still knows its box. Weak,
45
- // so the entry dies with the ref rather than outliving the scope.
37
+ // Keyed on the ref, not (slots, index): a wholesale `replaceRefs` moves a saved ref that no
38
+ // writer will run for again, and only the ref itself still knows its box.
46
39
  const publishedElements = new WeakMap();
47
- /**
48
- * True when the slot's ref is a mount that already left the DOM. The one home for the
49
- * question every reveal asks before trusting a filled slot — and it is an ATTACHMENT
50
- * question, never a window-membership one: a programmatic scroll moves the slice a flush
51
- * before the DOM follows, so "off-window" clears refs whose components are still mounted
52
- * and which nothing re-publishes. A ref with no recorded box degrades to live.
53
- */
40
+ /** True when the entry's ref is a mount whose element already left the DOM. Asks the DOM, never
41
+ * the mounted range, which moves a flush before the DOM follows. A ref with no box is live. */
54
42
  function isSlotDetached(slots, index) {
55
43
  const ref = slots.get(index);
56
44
  if (typeof ref !== 'object' || ref === null)
@@ -58,16 +46,8 @@ function isSlotDetached(slots, index) {
58
46
  const el = publishedElements.get(ref);
59
47
  return el !== undefined && !el.isConnected;
60
48
  }
61
- /** Each wait races a tick, so a scope with no membership oracle would spin forever on a
62
- * child that never publishes. This bounds those turns. */
63
- const MAX_MOUNT_REWAITS = 64;
64
- /**
65
- * Bring child `index` into its window before a caller reads its ref: drop a detached ref,
66
- * scroll it in, and await its mount. Shared by the canonical container reveal and TableBlock's
67
- * hand-rolled one, so the "is this slot a live mount" gate has one home. Termination (VR-5): only
68
- * a mount at this index in THIS scope wakes the wait, so a windowing caller proves membership
69
- * first and a non-windowing one races each wait against a tick, rather than parking forever.
70
- */
49
+ /** Brings child `index` into the mounted range before a caller reads its ref: drops a ref that
50
+ * left the DOM, scrolls the child in, and waits for its mount, giving up when it cannot come. */
71
51
  export async function revealChildOrWait(index, opts) {
72
52
  const detached = isSlotDetached(opts.slots, index);
73
53
  if (index >= opts.childCount || (!detached && opts.slots.get(index)))
@@ -75,54 +55,10 @@ export async function revealChildOrWait(index, opts) {
75
55
  if (detached)
76
56
  opts.slots.set(index, undefined);
77
57
  await opts.revealChild(index);
78
- if (opts.slots.get(index))
58
+ // Outside the recomputed range the mount cannot fire, so give up now.
59
+ if (opts.slots.get(index) || !opts.isInWindow(index))
79
60
  return;
80
- if (opts.isInWindow) {
81
- // Provably outside the recomputed window → the mount can't fire; degrade now.
82
- if (!opts.isInWindow(index))
83
- return;
84
- // In-window, the mount flush is at most one tick away; still unpublished after it
85
- // means a failed-render boundary left bind:this unset, waking no waiter.
86
- await tick();
87
- return;
88
- }
89
- // Membership unknowable: bounded mount-wait, each raced against a tick so a child that
90
- // never publishes degrades within the cap instead of parking forever.
91
- let rewaits = 0;
92
- while (!opts.slots.get(index) && rewaits++ < MAX_MOUNT_REWAITS) {
93
- await Promise.race([whenRefMounted(opts.slots, index), tick()]);
94
- }
95
- }
96
- // ── Mount-await registry ─────────────────────────────────────────────────────
97
- const mountWaiters = new WeakMap();
98
- /**
99
- * Resolve when slot `index` of `slots` is (or becomes) populated. Event-driven, woken by
100
- * `publishRefSlot` on a real mount, never a timer (Design Rule #2 / G4.4). A wake can still
101
- * be spurious within one scope: a mount that unpublishes in the same flush leaves the slot
102
- * empty, so the caller re-checks.
103
- */
104
- export function whenRefMounted(slots, index) {
105
- if (slots.get(index) !== undefined)
106
- return Promise.resolve();
107
- return new Promise((resolve) => {
108
- let byIndex = mountWaiters.get(slots);
109
- if (!byIndex) {
110
- byIndex = new Map();
111
- mountWaiters.set(slots, byIndex);
112
- }
113
- const list = byIndex.get(index);
114
- if (list)
115
- list.push(resolve);
116
- else
117
- byIndex.set(index, [resolve]);
118
- });
119
- }
120
- function resolveMountWaiters(slots, index) {
121
- const byIndex = mountWaiters.get(slots);
122
- const list = byIndex?.get(index);
123
- if (!byIndex || !list)
124
- return;
125
- byIndex.delete(index);
126
- for (const resolve of list)
127
- resolve();
61
+ // Inside it the mount flush is at most one tick away; an entry still empty after it means a
62
+ // failed render left `bind:this` unset.
63
+ await tick();
128
64
  }
@@ -1,18 +1,11 @@
1
- /** This scope's own content element, not the scrollport: nested content lays out narrower and
2
- * the oracle's line-wrap is monotonic in width, so the port width undercounts at depth. Falls
3
- * back to the port, then a constant, when neither is measurable. */
1
+ /** This list's own content element, not the scroll container: nested content lays out narrower,
2
+ * and the height estimator wraps more lines the narrower it gets. */
4
3
  export declare function estimateWidth(listEl: {
5
4
  clientWidth: number;
6
5
  } | null, portWidth: number): number;
7
- /**
8
- * This scope's list top in the scrollport's CONTENT space — the offset mapping port scrollTop
9
- * into the scope's local range. The two port terms are distinct and both load-bearing: an editor
10
- * embedded partway down a page-scrolled shell has a nonzero scroll AND page chrome above it, and
11
- * conflating them slices the window a band off.
12
- */
6
+ /** The offset that converts the scroll container's `scrollTop` into this list's range. Viewport
7
+ * top and scroll offset are separate terms: an editor partway down a scrolling page has both. */
13
8
  export declare function listTopWithinContent(listTop: number, viewportTop: number, scrollTop: number): number;
14
- /** The intersection of the port's viewport with this scope's own box. Each nested scope
15
- * occupies only part of the viewport, so windowing against the full port height would
16
- * mount O(viewport × active-scope-count) blocks. The viewport arrives as top + client
17
- * height so the intersection excludes the scrollbar/border. */
9
+ /** Each nested list covers only part of the viewport; windowing each against the full height
10
+ * would mount O(viewport × lists) blocks. Pass client height, which leaves out the scrollbar. */
18
11
  export declare function effectiveViewportHeight(viewportTop: number, viewportHeight: number, scopeTop: number, scopeHeight: number): number;
@@ -1,27 +1,20 @@
1
1
  /**
2
- * Pure per-scope geometry for windowing, isolated from the reactive wiring in
2
+ * Pure per-list geometry for windowing, kept apart from the reactive wiring in
3
3
  * `list-windowing.svelte.ts` so it can be unit-tested without mounting a component.
4
4
  */
5
5
  import { FALLBACK_CONTENT_WIDTH } from '../cursor/typography-estimates';
6
- /** This scope's own content element, not the scrollport: nested content lays out narrower and
7
- * the oracle's line-wrap is monotonic in width, so the port width undercounts at depth. Falls
8
- * back to the port, then a constant, when neither is measurable. */
6
+ /** This list's own content element, not the scroll container: nested content lays out narrower,
7
+ * and the height estimator wraps more lines the narrower it gets. */
9
8
  export function estimateWidth(listEl, portWidth) {
10
9
  return listEl?.clientWidth || portWidth || FALLBACK_CONTENT_WIDTH;
11
10
  }
12
- /**
13
- * This scope's list top in the scrollport's CONTENT space — the offset mapping port scrollTop
14
- * into the scope's local range. The two port terms are distinct and both load-bearing: an editor
15
- * embedded partway down a page-scrolled shell has a nonzero scroll AND page chrome above it, and
16
- * conflating them slices the window a band off.
17
- */
11
+ /** The offset that converts the scroll container's `scrollTop` into this list's range. Viewport
12
+ * top and scroll offset are separate terms: an editor partway down a scrolling page has both. */
18
13
  export function listTopWithinContent(listTop, viewportTop, scrollTop) {
19
14
  return listTop - viewportTop + scrollTop;
20
15
  }
21
- /** The intersection of the port's viewport with this scope's own box. Each nested scope
22
- * occupies only part of the viewport, so windowing against the full port height would
23
- * mount O(viewport × active-scope-count) blocks. The viewport arrives as top + client
24
- * height so the intersection excludes the scrollbar/border. */
16
+ /** Each nested list covers only part of the viewport; windowing each against the full height
17
+ * would mount O(viewport × lists) blocks. Pass client height, which leaves out the scrollbar. */
25
18
  export function effectiveViewportHeight(viewportTop, viewportHeight, scopeTop, scopeHeight) {
26
19
  const top = Math.max(viewportTop, scopeTop);
27
20
  const bottom = Math.min(viewportTop + viewportHeight, scopeTop + scopeHeight);
@@ -1,10 +1,10 @@
1
- /** Resolve a container node (by identity; views accepted) to its BlockListState.
2
- * WeakMap, so entries collect when the node becomes unreachable. */
1
+ /** Find a container node's `BlockListState` by identity (a view works too). A `WeakMap`,
2
+ * so entries are collected once the node is unreachable. */
3
3
  import type { NodeView } from '../core/node-views';
4
4
  import type { BlockListState } from './block-list-state.svelte';
5
- /** Overwrites any existing entry — the new state becomes authoritative on re-mount. */
5
+ /** Overwrites any existing entry: on a remount the new state is the one that counts. */
6
6
  export declare function registerBlockListState(node: NodeView, state: BlockListState): void;
7
7
  export declare function getStateForNode(node: NodeView): BlockListState | undefined;
8
- /** Strict variant, for a caller holding a live-tree node whose container must be mounted.
9
- * `getStateForNode` stays for the ancestor walks where absence is a valid signal. */
8
+ /** The strict lookup, for a live-tree node whose container must be mounted. Ancestor
9
+ * traversals, where a missing entry is a valid answer, use `getStateForNode`. */
10
10
  export declare function expectStateForNode(node: NodeView): BlockListState;
@@ -1,42 +1,38 @@
1
- /** Resolve a container node (by identity; views accepted) to its BlockListState.
2
- * WeakMap, so entries collect when the node becomes unreachable. */
3
- import { DEV } from 'esm-env';
1
+ /** Find a container node's `BlockListState` by identity (a view works too). A `WeakMap`,
2
+ * so entries are collected once the node is unreachable. */
3
+ import { isDevChecks } from '../env';
4
4
  import { tick } from 'svelte';
5
5
  import { devWarn } from '../dev-warn';
6
6
  const stateRegistry = new WeakMap();
7
- /** Overwrites any existing entry — the new state becomes authoritative on re-mount. */
7
+ /** Overwrites any existing entry: on a remount the new state is the one that counts. */
8
8
  export function registerBlockListState(node, state) {
9
9
  const existing = stateRegistry.get(node);
10
10
  stateRegistry.set(node, state);
11
- if (DEV && existing && existing !== state) {
11
+ if (isDevChecks() && existing && existing !== state) {
12
12
  void reportContestedClaim(node, existing, state);
13
13
  }
14
14
  }
15
- /**
16
- * A dev signal, not a guarantee. Svelte creates a structural remount's new mount before
17
- * tearing the old one down, so a claim contested INSIDE a flush says nothing about
18
- * ownership; re-ask once it settles, when a loser still holding child refs means either a
19
- * second live owner or a teardown whose clear never reached the live slots.
20
- */
15
+ /** Checked a tick later because Svelte mounts a remount's new component before tearing down the
16
+ * one it replaces; a replaced state still holding child refs after that has a live rival. */
21
17
  async function reportContestedClaim(node, loser, winner) {
22
18
  await tick();
23
19
  if (stateRegistry.get(node) !== winner)
24
20
  return;
25
21
  if (loser.innerBlockRefs.every((ref) => ref === undefined))
26
22
  return;
27
- devWarn('state-registry', `two live components claim the same ${node.kind} — the loser's child refs are orphaned. ` +
23
+ devWarn('state-registry', `two live components claim the same ${node.kind}: the loser's child refs are orphaned. ` +
28
24
  `Either both mounts render this node, or the loser's teardown emptied slots the ` +
29
25
  `scope no longer reads.`);
30
26
  }
31
27
  export function getStateForNode(node) {
32
28
  return stateRegistry.get(node);
33
29
  }
34
- /** Strict variant, for a caller holding a live-tree node whose container must be mounted.
35
- * `getStateForNode` stays for the ancestor walks where absence is a valid signal. */
30
+ /** The strict lookup, for a live-tree node whose container must be mounted. Ancestor
31
+ * traversals, where a missing entry is a valid answer, use `getStateForNode`. */
36
32
  export function expectStateForNode(node) {
37
33
  const state = stateRegistry.get(node);
38
34
  if (!state) {
39
- throw new Error(`[state-registry] no BlockListState registered for ${node.kind} — ` +
35
+ throw new Error(`[state-registry] no BlockListState registered for ${node.kind}: ` +
40
36
  `caller assumed a mounted container. If this path can visit non-container ` +
41
37
  `nodes, use getStateForNode and guard on undefined.`);
42
38
  }
@@ -1,35 +1,22 @@
1
- import { type BlockElLookup } from '../editor-keys';
2
1
  import type { NodeView } from '../core/node-views';
3
- import type { RevealTarget } from '../cursor/reveal-anchor';
4
- import { type ListWindowing, type RevealAnchorPlacement } from './list-windowing.svelte';
2
+ import type { RootListScroll } from '../cursor/scroll-owner';
3
+ import { type ListWindowing } from './list-windowing.svelte';
5
4
  export interface ContainerWindowingOpts {
6
- /** This container's index in its PARENT scope, for the upward subtotal report. A getter, so
7
- * reorders report under the current slot. Ignored at the root (no parent sink). */
8
- getIndex: () => number;
9
- /** This scope's path; the leaf-channel depth is its length. `[]` at the root. */
5
+ /** This list's path. */
10
6
  getParentPath: () => number[];
11
7
  getChildren: () => readonly NodeView[];
12
8
  getChildIds: () => string[];
13
- /** The content-origin element that scrolls WITH this scope's children. Never the viewport. */
9
+ /** The element that scrolls with this list's children. Never the viewport. */
14
10
  getListEl: () => HTMLElement | null;
15
- /** The element the PARENT measures for this scope's height. Omit at the root. */
16
- getOwnEl?: () => HTMLElement | null;
17
- /** True when this scope's DIRECT children are `BlockHost`s → shadow the leaf channel.
18
- * False for direct-`{#each}` scopes (list / table). */
19
- provideLeafChannel: boolean;
20
- /** Collapse clamp; see `ListWindowingDeps.isCollapsed`. */
11
+ /** True while collapsed; see `ListWindowingDeps.isCollapsed`. */
21
12
  isCollapsed?: () => boolean;
22
13
  }
23
- /**
24
- * Resolve the reveal target into the ROOT scope's coordinates. The model addresses
25
- * top-level children only, so a nested target contributes its ancestor's index plus the
26
- * measured drop down to itself — without which the pin re-asserts the CONTAINER's top and
27
- * pushes an already-resolved nested target back out of view.
28
- */
29
- export declare function placementOf(target: RevealTarget | null, blockEl: BlockElLookup): RevealAnchorPlacement | null;
30
- /**
31
- * One windowing wiring unit per BlockList-bearing or direct-each container scope: reads
32
- * the windowing contexts, builds `createListWindowing` with the shared constants, and
33
- * provides the subtotal sink plus the leaf channel. Call synchronously during component init.
34
- */
14
+ /** One windowing unit per nested container, whether it renders a `BlockList` or its own
15
+ * `{#each}`. Call synchronously during component init, since it reads and sets context. */
35
16
  export declare function useContainerWindowing(opts: ContainerWindowingOpts): ListWindowing;
17
+ /** The editor root's windowing, and the one height correction the header slot shares, which
18
+ * re-places a held target. Null without the editor's services, as in a harness. */
19
+ export declare function useRootWindowing(opts: Pick<ContainerWindowingOpts, 'getChildren' | 'getChildIds' | 'getListEl'>): {
20
+ windowing: ListWindowing;
21
+ scroll: RootListScroll | null;
22
+ };
@@ -1,95 +1,85 @@
1
- import { getContext, setContext } from 'svelte';
2
- import { EDITOR_DOC_KEY, EDITOR_SERVICES_KEY, PARENT_SCOPE_SINK_KEY, RECORD_BLOCK_HEIGHT_KEY } from '../editor-keys';
1
+ import { getContext, onDestroy, setContext, tick } from 'svelte';
2
+ import { CHILD_MEASURE_KEY, EDITOR_DOC_KEY, EDITOR_SERVICES_KEY } from '../editor-keys';
3
+ import { observeResize } from '../cursor/observe-resize';
4
+ import { assertInvariant } from '../assert';
5
+ import { checkMeasuresInOwnList } from '../invariants/measures-in-own-list';
3
6
  import { createListWindowing } from './list-windowing.svelte';
4
- /**
5
- * Resolve the reveal target into the ROOT scope's coordinates. The model addresses
6
- * top-level children only, so a nested target contributes its ancestor's index plus the
7
- * measured drop down to itself — without which the pin re-asserts the CONTAINER's top and
8
- * pushes an already-resolved nested target back out of view.
9
- */
10
- export function placementOf(target, blockEl) {
11
- if (!target || target.path.length === 0)
12
- return null;
13
- const shallow = { index: target.path[0], block: target.block, innerOffset: 0, height: null };
14
- if (target.path.length === 1)
15
- return shallow;
16
- const ancestorEl = blockEl([shallow.index]);
17
- const targetEl = blockEl(target.path);
18
- // The ancestor's top is a DIFFERENT block, honest only while the ancestor itself is
19
- // windowed out and the model's offset is all that is known. A MOUNTED ancestor missing its
20
- // target means the reader scrolled past it inside the container: decline, never teleport.
21
- if (!ancestorEl)
22
- return shallow;
23
- if (!targetEl)
24
- return null;
25
- const targetRect = targetEl.getBoundingClientRect();
26
- return {
27
- index: shallow.index,
28
- block: target.block,
29
- innerOffset: targetRect.top - ancestorEl.getBoundingClientRect().top,
30
- height: targetRect.height
31
- };
32
- }
33
- /**
34
- * One windowing wiring unit per BlockList-bearing or direct-each container scope: reads
35
- * the windowing contexts, builds `createListWindowing` with the shared constants, and
36
- * provides the subtotal sink plus the leaf channel. Call synchronously during component init.
37
- */
7
+ /** One windowing unit per nested container, whether it renders a `BlockList` or its own
8
+ * `{#each}`. Call synchronously during component init, since it reads and sets context. */
38
9
  export function useContainerWindowing(opts) {
39
- const { heightOracle: oracle, scrollport: getPort, correctsScroll, focusedPath: getFocusPath, widthVersion: getWidthVersion, viewportHeightVersion: getViewportHeightVersion, blockElLookup } = getContext(EDITOR_DOC_KEY);
40
- const parentSink = getContext(PARENT_SCOPE_SINK_KEY);
41
- const revealAnchor = getContext(EDITOR_SERVICES_KEY)?.revealAnchor;
42
- // Single-claimant: nested scopes keep top-of-viewport anchoring, or their deltas would
43
- // fight over one scrollTop.
44
- const claimsRevealAnchor = opts.getParentPath().length === 0;
10
+ return windowingUnit(opts);
11
+ }
12
+ /** The editor root's windowing, and the one height correction the header slot shares, which
13
+ * re-places a held target. Null without the editor's services, as in a harness. */
14
+ export function useRootWindowing(opts) {
15
+ const scrollOwner = getContext(EDITOR_SERVICES_KEY)?.scrollOwner;
16
+ const { listTree } = getContext(EDITOR_DOC_KEY);
17
+ const windowing = windowingUnit({ ...opts, getParentPath: () => [] });
18
+ let scroll = null;
19
+ if (scrollOwner && listTree) {
20
+ scroll = scrollOwner.resolveTargetsWith({
21
+ resolve: listTree.resolve,
22
+ holdForRound: listTree.holdForRound,
23
+ mountTop: listTree.mountTop,
24
+ syncScrollTop: () => windowing.syncScrollTop()
25
+ });
26
+ onDestroy(scroll.uninstall);
27
+ }
28
+ return { windowing, scroll };
29
+ }
30
+ function windowingUnit(opts) {
31
+ const { heightOracle: oracle, scrollport: getPort, focusedPath: getFocusPath, widthVersion: getWidthVersion, viewportHeightVersion: getViewportHeightVersion, listTree } = getContext(EDITOR_DOC_KEY);
32
+ const scrollOwner = getContext(EDITOR_SERVICES_KEY)?.scrollOwner;
33
+ // A bare mount has no owner: its heights land, and nothing holds the page still.
34
+ const scroll = scrollOwner
35
+ ? {
36
+ beginRound: scrollOwner.beginRound,
37
+ roundOpen: scrollOwner.roundOpen,
38
+ measureSoon: scrollOwner.measureSoon,
39
+ scrollToMount: scrollOwner.scrollToMount
40
+ }
41
+ : {
42
+ beginRound: () => { },
43
+ roundOpen: () => false,
44
+ measureSoon: (run) => void tick().then(run),
45
+ scrollToMount: () => { }
46
+ };
45
47
  const windowing = createListWindowing({
46
48
  oracle,
47
49
  getChildren: opts.getChildren,
48
50
  getChildIds: opts.getChildIds,
49
51
  getListEl: opts.getListEl,
50
- getOwnEl: opts.getOwnEl,
51
52
  getPort: () => getPort?.() ?? null,
52
- correctsScroll: () => correctsScroll?.() ?? true,
53
+ scroll,
53
54
  getFocusPath: () => getFocusPath?.() ?? null,
54
- getRevealAnchorTarget: claimsRevealAnchor
55
- ? () => placementOf(revealAnchor?.get() ?? null, blockElLookup)
56
- : undefined,
57
55
  getWidthVersion: () => getWidthVersion?.() ?? 0,
58
56
  getViewportHeightVersion: () => getViewportHeightVersion?.() ?? 0,
59
57
  getParentPath: opts.getParentPath,
60
- reportSelfHeight: parentSink
61
- ? (h) => parentSink.setChildSubtotal(opts.getIndex(), h)
62
- : undefined,
63
58
  isCollapsed: opts.isCollapsed,
64
- // A fling can outrun the deferred window recompute and briefly paint an empty spacer
65
- // (VR-8). 6 widens the band without breaching the mounted-set ceiling (the < 60 flat
66
- // e2e bound guards that); a skeleton background covers the residual one-frame gap.
59
+ // Wide enough that a fast scroll rarely outruns the window recompute and paints an empty
60
+ // spacer (VR-8), narrow enough to keep the count of mounted blocks low.
67
61
  overscan: 6,
68
62
  pinExtensionCap: 100,
69
63
  activateAbovePx: 4000,
70
64
  deactivateBelowPx: 3000
71
65
  });
72
- if (opts.provideLeafChannel) {
73
- // Only a DIRECT child measures into this model; a deeper host belongs to its own
74
- // scope's channel, so register is a no-op here.
75
- setContext(RECORD_BLOCK_HEIGHT_KEY, {
76
- register(path, index, id, readHeight) {
77
- const depth = opts.getParentPath().length;
78
- if (path.length !== depth + 1)
79
- return () => { };
80
- return windowing.registerChild(id, {
81
- readHeight,
82
- applyHeight: (h) => windowing.recordMeasuredChild(index, id, h)
83
- });
84
- },
85
- measureNow: windowing.measureChildNow,
86
- measureOnResize: windowing.measureChildOnResize
87
- });
88
- }
89
- setContext(PARENT_SCOPE_SINK_KEY, {
90
- setChildSubtotal: windowing.setChildSubtotal,
91
- registerRow: (id, readHeight, applyHeight) => windowing.registerChild(id, { readHeight, applyHeight }),
92
- measureRowNow: windowing.measureChildNow
66
+ if (listTree)
67
+ onDestroy(listTree.add(windowing.level));
68
+ // A child that isn't this list's own would write a slot that indexes something else.
69
+ setContext(CHILD_MEASURE_KEY, {
70
+ register(path, id, readHeight) {
71
+ const foreign = checkMeasuresInOwnList(path, opts.getParentPath());
72
+ if (foreign) {
73
+ assertInvariant('measures-in-own-list', () => foreign);
74
+ return () => { };
75
+ }
76
+ return windowing.registerChild(id, { index: path[path.length - 1], readHeight });
77
+ },
78
+ measureNow: windowing.measureChildNow,
79
+ measureOnResize: windowing.measureChildOnResize,
80
+ watchSize: scrollOwner
81
+ ? scrollOwner.watchSize
82
+ : (el, onResize) => observeResize(el, (entries) => entries[0] && onResize(entries[0]))
93
83
  });
94
84
  return windowing;
95
85
  }
@@ -0,0 +1,10 @@
1
+ export interface MeasuredChildOpts {
2
+ getId: () => string;
3
+ /** The child's own path; its last index is its position in the list. */
4
+ getPath: () => readonly number[];
5
+ /** The element whose border box is the child's height. */
6
+ getEl: () => HTMLElement | null;
7
+ /** Read reactively: a change re-measures, except at mount, which the batched pass owns. */
8
+ getRaw: () => string;
9
+ }
10
+ export declare function useMeasuredChild(opts: MeasuredChildOpts): void;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * A windowed child's height reaches its own block list's height table: in the list's batched
3
+ * pass at mount, again after an edit, and again on a resize. Call during component init, and
4
+ * before the component provides a block list of its own, since it reads its list's channel.
5
+ */
6
+ import { getContext, untrack } from 'svelte';
7
+ import { CHILD_MEASURE_KEY } from '../editor-keys';
8
+ export function useMeasuredChild(opts) {
9
+ const channel = getContext(CHILD_MEASURE_KEY);
10
+ // Absent only in a bare test mount with no list above.
11
+ if (!channel)
12
+ return;
13
+ const readHeight = () => opts.getEl()?.getBoundingClientRect().height ?? 0;
14
+ // A primitive, so a fresh path array for the same position doesn't register the child again.
15
+ const registration = $derived(`${opts.getPath().join()}|${opts.getId()}`);
16
+ $effect(() => {
17
+ void registration;
18
+ return untrack(() => channel.register(opts.getPath(), opts.getId(), readHeight));
19
+ });
20
+ let firstRun = true;
21
+ $effect(() => {
22
+ void opts.getRaw();
23
+ if (firstRun) {
24
+ firstRun = false;
25
+ return;
26
+ }
27
+ untrack(() => channel.measureNow(opts.getId()));
28
+ });
29
+ // Growth with no edit (an image decoding, a formula showing its source) would slide the page.
30
+ $effect(() => {
31
+ const el = opts.getEl();
32
+ if (!el)
33
+ return;
34
+ return channel.watchSize(el, (entry) => {
35
+ const box = entry.borderBoxSize?.[0];
36
+ const height = box ? box.blockSize : entry.contentRect?.height;
37
+ if (height != null)
38
+ channel.measureOnResize(opts.getId(), height);
39
+ });
40
+ });
41
+ }