@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,21 +1,15 @@
1
1
  /**
2
- * The heading outline as a pure function over the read-only document. The walk
3
- * recurses through containers, so a heading nested in a blockquote or list is still
4
- * collected at its own path and remains navigable.
2
+ * The heading outline as a pure function over the read-only document. It recurses through
3
+ * containers, so a heading nested in a blockquote or list is still collected at its own path
4
+ * and stays navigable.
5
5
  */
6
- import { type DocumentView, type InlineNode } from '../../plugin';
6
+ import { type DocumentView, type EditorContext, type InlineNode } from '../../plugin';
7
7
  /** Deepest heading level a document can list; `[[toc]]` has no meaning past GFM's six. */
8
8
  export declare const MAX_HEADING_DEPTH = 6;
9
- /**
10
- * The instance's `{ plugin, options }` depth, else `fallback` (the factory argument's
11
- * bare-install default). Options arrive as `unknown` from the platform, so anything but a
12
- * whole number in 1..6 is not a depth and falls back rather than listing nothing.
13
- */
14
- export declare function resolveMaxDepth(options: unknown, fallback: number): number;
15
9
  export interface TocEntry {
16
10
  /** Stable and unique per position: the keyed-loop identity. */
17
11
  id: string;
18
- /** Doc-absolute block path of the heading, for `rects.scrollTo`. */
12
+ /** Document-absolute block path of the heading, for `rects.scrollTo`. */
19
13
  path: number[];
20
14
  level: number;
21
15
  label: string;
@@ -25,4 +19,5 @@ export interface TocEntry {
25
19
  * render to, and anything unrecognized falls back to its source bytes.
26
20
  */
27
21
  export declare function projectInlineText(nodes: readonly InlineNode[], raw: string): string;
28
- export declare function collectHeadings(document: DocumentView | undefined, maxDepth: number): TocEntry[];
22
+ /** Labels read through `read`, the editor's inline parse, so syntax it left out stays text. */
23
+ export declare function collectHeadings(document: DocumentView | undefined, maxDepth: number, read?: EditorContext['computeInlineContent']): TocEntry[];
@@ -1,22 +1,11 @@
1
1
  /**
2
- * The heading outline as a pure function over the read-only document. The walk
3
- * recurses through containers, so a heading nested in a blockquote or list is still
4
- * collected at its own path and remains navigable.
2
+ * The heading outline as a pure function over the read-only document. It recurses through
3
+ * containers, so a heading nested in a blockquote or list is still collected at its own path
4
+ * and stays navigable.
5
5
  */
6
- import { computeInlineContent, headingLevel } from '../../plugin';
6
+ import { computeInlineContent, headingLevel, trimWhitespace, walkBlocks } from '../../plugin';
7
7
  /** Deepest heading level a document can list; `[[toc]]` has no meaning past GFM's six. */
8
8
  export const MAX_HEADING_DEPTH = 6;
9
- /**
10
- * The instance's `{ plugin, options }` depth, else `fallback` (the factory argument's
11
- * bare-install default). Options arrive as `unknown` from the platform, so anything but a
12
- * whole number in 1..6 is not a depth and falls back rather than listing nothing.
13
- */
14
- export function resolveMaxDepth(options, fallback) {
15
- const declared = options?.maxDepth;
16
- if (typeof declared !== 'number' || !Number.isInteger(declared))
17
- return fallback;
18
- return declared >= 1 && declared <= MAX_HEADING_DEPTH ? declared : fallback;
19
- }
20
9
  /**
21
10
  * Plain-text projection: markers drop with their wrapper, value nodes show what they
22
11
  * render to, and anything unrecognized falls back to its source bytes.
@@ -39,27 +28,24 @@ export function projectInlineText(nodes, raw) {
39
28
  }
40
29
  return text;
41
30
  }
42
- export function collectHeadings(document, maxDepth) {
31
+ /** Labels read through `read`, the editor's inline parse, so syntax it left out stays text. */
32
+ export function collectHeadings(document, maxDepth, read = computeInlineContent) {
43
33
  const entries = [];
44
- const walk = (children, basePath) => {
45
- children.forEach((node, index) => {
46
- const path = [...basePath, index];
47
- const level = headingLevel(node);
48
- if (level !== null) {
49
- if (level <= maxDepth) {
50
- entries.push({
51
- id: path.join('.'),
52
- path,
53
- level,
54
- label: projectInlineText(computeInlineContent(node), node.raw).trim()
55
- });
56
- }
57
- }
58
- else if (node.children && node.children.length > 0) {
59
- walk(node.children, path);
60
- }
61
- });
62
- };
63
- walk(document?.children ?? [], []);
34
+ if (!document)
35
+ return entries;
36
+ walkBlocks(document, (node, path) => {
37
+ const level = headingLevel(node);
38
+ if (level === null)
39
+ return;
40
+ if (level <= maxDepth) {
41
+ entries.push({
42
+ id: path.join('.'),
43
+ path,
44
+ level,
45
+ label: trimWhitespace(projectInlineText(read(node), node.raw))
46
+ });
47
+ }
48
+ return 'skip';
49
+ });
64
50
  return entries;
65
51
  }
@@ -1,8 +1,6 @@
1
1
  /**
2
- * Per-block serialization for `rects.navigateTo`. The reveal anchor
3
- * (`cursor/reveal-anchor.ts`) decides which pin survives a race but cannot un-land a
4
- * caret, and two overlapping navigations from one block land two. A mid-flight call
5
- * overwrites the pending target, so the newest wins with no extra scroll.
2
+ * One `rects.navigateTo` at a time per block, since two overlapping navigations would move the
3
+ * caret twice. A call while one is in progress replaces the pending target, so the newest wins.
6
4
  */
7
5
  export interface NavigationQueue {
8
6
  navigateTo(path: number[]): Promise<void>;
@@ -1,14 +1,14 @@
1
1
  /**
2
- * A `[[toc]]` leaf whose folded view lists the document's headings, read straight off
3
- * `BlockComponentProps.document` — the reference consumer of that prop. Recognition is
4
- * gated on registration, so with no plugin loaded `[[toc]]` is a plain paragraph.
2
+ * A `[[toc]]` block whose rendered view lists the document's headings, read straight off
3
+ * `BlockComponentProps.document`: the worked example of using that prop. Recognition starts
4
+ * only once the plugin registers, so without it `[[toc]]` is a plain paragraph.
5
5
  */
6
6
  import { type EditorPlugin } from '../../plugin';
7
7
  export declare const TOC_BLOCK = "toc";
8
8
  export declare function registerTocBlock(): void;
9
9
  export type MaxHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
10
- /** The per-instance `{ plugin, options }` shape, and the factory argument's, which are one
11
- * vocabulary on purpose: the instance entry overrides the factory default. */
10
+ /** The factory argument, which sets every editor's default, and an editor's `{ plugin, options }`
11
+ * entry, which overrides it. */
12
12
  export interface TocOptions {
13
13
  /** Deepest heading level listed (default 6 = every level). */
14
14
  maxDepth?: MaxHeadingLevel;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * A `[[toc]]` leaf whose folded view lists the document's headings, read straight off
3
- * `BlockComponentProps.document` — the reference consumer of that prop. Recognition is
4
- * gated on registration, so with no plugin loaded `[[toc]]` is a plain paragraph.
2
+ * A `[[toc]]` block whose rendered view lists the document's headings, read straight off
3
+ * `BlockComponentProps.document`: the worked example of using that prop. Recognition starts
4
+ * only once the plugin registers, so without it `[[toc]]` is a plain paragraph.
5
5
  */
6
6
  import { definePlugin, declarePluginKind, declaredPluginKind, registerBlockKind, registerBlockOpener, registerBlockComponent, defineBlockComponent, simpleLeafClosure, OPENER_PRIORITIES } from '../../plugin';
7
7
  import TocBlock from './TocBlock.svelte';
@@ -10,14 +10,15 @@ export const TOC_BLOCK = 'toc';
10
10
  const TOC_LINE = '[[toc]]';
11
11
  export function registerTocBlock() {
12
12
  const toc = declarePluginKind(TOC_BLOCK);
13
- // A source-holding leaf like `fencedCode`: `serialize` re-emits `leadingTrivia + raw`,
14
- // so a raw taken verbatim from the line round-trips.
13
+ // A block that holds its own source, like `fencedCode`: `serialize` re-emits
14
+ // `leadingTrivia + raw`, so a raw taken verbatim from the line round-trips.
15
15
  registerBlockKind(toc, {
16
+ label: 'Table of contents',
16
17
  mergeRole: 'not-mergeable',
17
18
  editable: true,
18
19
  supportsInline: false,
19
- // Render-primary like the math forms: the folded view leaves a caret no textual landing
20
- // at either edge, so both boundaries open against another trapped kind.
20
+ // Render-primary like the math blocks: the rendered view gives the caret nowhere to sit
21
+ // at either edge, so both edges take the gap caret.
21
22
  gapEdges: 'both',
22
23
  conformanceFixture: '[[toc]]\n',
23
24
  closure: simpleLeafClosure({
@@ -41,8 +42,8 @@ export function registerTocBlock() {
41
42
  })
42
43
  });
43
44
  registerBlockOpener(toc, {
44
- // Gap placement below the only bracket-consuming built-in, so `[[toc]]` resolves here
45
- // whatever that matcher claims.
45
+ // Just below the only built-in that consumes brackets, so `[[toc]]` resolves here
46
+ // whatever that matcher does.
46
47
  priority: OPENER_PRIORITIES.linkReferenceDefinition - 5,
47
48
  interruptsParagraph: (text) => text === TOC_LINE,
48
49
  tryOpen(ctx) {
@@ -58,14 +59,20 @@ export function registerTocBlock() {
58
59
  });
59
60
  }
60
61
  export function tocPlugin(options) {
61
- // Definition-time, so it is the BARE-install default only: the block prefers this editor's
62
- // `{ plugin, options }` depth, which is what lets two instances differ.
63
- const maxDepth = options?.maxDepth ?? MAX_HEADING_DEPTH;
64
62
  return definePlugin({
65
63
  name: 'toc',
64
+ defaults: { maxDepth: options?.maxDepth ?? MAX_HEADING_DEPTH },
65
+ // Anything but a whole number in 1..6 keeps the default rather than listing nothing.
66
+ parseOptions(raw) {
67
+ const maxDepth = raw?.maxDepth;
68
+ return isMaxHeadingLevel(maxDepth) ? { maxDepth } : {};
69
+ },
66
70
  setup() {
67
71
  registerTocBlock();
68
- registerBlockComponent(declaredPluginKind(TOC_BLOCK), defineBlockComponent(TocBlock, () => ({ maxDepth })));
72
+ registerBlockComponent(declaredPluginKind(TOC_BLOCK), defineBlockComponent(TocBlock));
69
73
  }
70
74
  });
71
75
  }
76
+ function isMaxHeadingLevel(value) {
77
+ return (Number.isInteger(value) && value >= 1 && value <= MAX_HEADING_DEPTH);
78
+ }
@@ -1,32 +1,24 @@
1
1
  /**
2
- * The presentation-mode contract. `source` is the editing default (always-visible styled
3
- * source); `reading` hides markers and makes the surface inert; `preview-block` reveals the
4
- * caret's block and `preview-inline` narrows that reveal to the caret-touched construct
5
- * (`components/blocks/text/construct-reveal.ts`); `live` hides markers with no reveal at all,
6
- * while staying editable. Every door reports the EFFECTIVE mode.
2
+ * The presentation-mode contract. `source` is the editing default (styled source); `reading`
3
+ * hides markers and is read-only; the preview modes show markers back in the caret's block or
4
+ * construct (`components/blocks/text/construct-reveal.ts`); `live` hides markers and shows none
5
+ * back while staying editable. Every read reports the mode in effect.
7
6
  */
8
7
  export type PresentationMode = 'source' | 'reading' | 'preview-block' | 'preview-inline' | 'live';
9
- /**
10
- * A mode read off the DOM or handed in untyped, narrowed to the contract. The marker-hiding CSS
11
- * families match known values only, so an unrecognized one must read as the editing default here or
12
- * the stylesheet and the caret walk disagree about the same block.
13
- */
8
+ /** Narrows a mode read off the DOM or handed in untyped: an unrecognized value reads as the
9
+ * editing default, as the marker-hiding CSS does, or the two would disagree about a block. */
14
10
  export declare function asPresentationMode(value: string | null | undefined): PresentationMode;
15
11
  /** Membership for the marker-hiding CSS families and the `data-list-marker` hook that
16
12
  * feeds them: styled source is the one mode that paints Markdown syntax. */
17
13
  export declare function hidesMarkers(mode: PresentationMode): boolean;
18
- /** The reveal-on-focus rungs, which alone need the `data-focused` attribute — live hides
19
- * markers (see `hidesMarkers`) but never reveals them, so it is deliberately not one. */
14
+ /** The modes that show markers back in a focused block, the only ones needing `data-focused`;
15
+ * live hides markers and never shows them back. */
20
16
  export declare function isPreviewMode(mode: PresentationMode): boolean;
21
- /**
22
- * Whether the mode paints a marker in the block the caret is in: styled source always, and the
23
- * preview rungs by revealing that block. The question every seam writing at the caret asks, since
24
- * a rewrite may only drop bytes the reader never saw (live-mode.md § 2).
25
- */
17
+ /** Whether the mode paints markers in the caret's block: the check everything writing at the caret
18
+ * asks, since a rewrite may drop only bytes the user never saw (`docs/design/live-mode.md` § 2). */
26
19
  export declare function paintsFocusedMarkers(mode: PresentationMode): boolean;
27
- /**
28
- * The read-only gate the dispatch seams key off. Structural parameter type so the
29
- * schema/selection layers need no editor-keys import; an `undefined` getter (test
30
- * doubles, unwired surfaces) means not reading.
31
- */
32
- export declare function isReadingMode(getMode: (() => PresentationMode) | undefined): boolean;
20
+ /** The converse, the one check a rewrite asks before dropping delimiter bytes at the caret. */
21
+ export declare function hidesDelimitersAtCaret(mode: PresentationMode): boolean;
22
+ /** The read-only check every dispatch path keys off. A plain getter type keeps `schema/` and
23
+ * `selection/` off `editor-keys`; the getter is required, since only the editor picks the default. */
24
+ export declare function isReadingMode(getMode: () => PresentationMode): boolean;
@@ -1,12 +1,11 @@
1
1
  /**
2
- * The presentation-mode contract. `source` is the editing default (always-visible styled
3
- * source); `reading` hides markers and makes the surface inert; `preview-block` reveals the
4
- * caret's block and `preview-inline` narrows that reveal to the caret-touched construct
5
- * (`components/blocks/text/construct-reveal.ts`); `live` hides markers with no reveal at all,
6
- * while staying editable. Every door reports the EFFECTIVE mode.
2
+ * The presentation-mode contract. `source` is the editing default (styled source); `reading`
3
+ * hides markers and is read-only; the preview modes show markers back in the caret's block or
4
+ * construct (`components/blocks/text/construct-reveal.ts`); `live` hides markers and shows none
5
+ * back while staying editable. Every read reports the mode in effect.
7
6
  */
8
- /** Keyed by the union, so a rung added to it fails `npm run check` here rather than falling
9
- * silently through {@link asPresentationMode}'s door. */
7
+ /** Keyed by the union, so a mode added to it fails `npm run check` here rather than falling
8
+ * silently through {@link asPresentationMode}. */
10
9
  const MODES = {
11
10
  source: true,
12
11
  reading: true,
@@ -14,11 +13,8 @@ const MODES = {
14
13
  'preview-inline': true,
15
14
  live: true
16
15
  };
17
- /**
18
- * A mode read off the DOM or handed in untyped, narrowed to the contract. The marker-hiding CSS
19
- * families match known values only, so an unrecognized one must read as the editing default here or
20
- * the stylesheet and the caret walk disagree about the same block.
21
- */
16
+ /** Narrows a mode read off the DOM or handed in untyped: an unrecognized value reads as the
17
+ * editing default, as the marker-hiding CSS does, or the two would disagree about a block. */
22
18
  export function asPresentationMode(value) {
23
19
  return value != null && Object.hasOwn(MODES, value) ? value : 'source';
24
20
  }
@@ -27,24 +23,22 @@ export function asPresentationMode(value) {
27
23
  export function hidesMarkers(mode) {
28
24
  return mode !== 'source';
29
25
  }
30
- /** The reveal-on-focus rungs, which alone need the `data-focused` attribute — live hides
31
- * markers (see `hidesMarkers`) but never reveals them, so it is deliberately not one. */
26
+ /** The modes that show markers back in a focused block, the only ones needing `data-focused`;
27
+ * live hides markers and never shows them back. */
32
28
  export function isPreviewMode(mode) {
33
29
  return mode === 'preview-block' || mode === 'preview-inline';
34
30
  }
35
- /**
36
- * Whether the mode paints a marker in the block the caret is in: styled source always, and the
37
- * preview rungs by revealing that block. The question every seam writing at the caret asks, since
38
- * a rewrite may only drop bytes the reader never saw (live-mode.md § 2).
39
- */
31
+ /** Whether the mode paints markers in the caret's block: the check everything writing at the caret
32
+ * asks, since a rewrite may drop only bytes the user never saw (`docs/design/live-mode.md` § 2). */
40
33
  export function paintsFocusedMarkers(mode) {
41
34
  return !hidesMarkers(mode) || isPreviewMode(mode);
42
35
  }
43
- /**
44
- * The read-only gate the dispatch seams key off. Structural parameter type so the
45
- * schema/selection layers need no editor-keys import; an `undefined` getter (test
46
- * doubles, unwired surfaces) means not reading.
47
- */
36
+ /** The converse, the one check a rewrite asks before dropping delimiter bytes at the caret. */
37
+ export function hidesDelimitersAtCaret(mode) {
38
+ return !paintsFocusedMarkers(mode);
39
+ }
40
+ /** The read-only check every dispatch path keys off. A plain getter type keeps `schema/` and
41
+ * `selection/` off `editor-keys`; the getter is required, since only the editor picks the default. */
48
42
  export function isReadingMode(getMode) {
49
- return getMode?.() === 'reading';
43
+ return getMode() === 'reading';
50
44
  }
@@ -1,22 +1,20 @@
1
1
  /**
2
- * A container's inner BlockList scope: the keyed-each id source and the component-ref slot
3
- * array. Structural mutations route through the commit primitives on UndoController, which
4
- * apply `StructuralChange` descriptors to keep ids/refs aligned with children.
2
+ * A container's inner block list: where its keyed-each ids come from and where its child
3
+ * component refs are stored. Structural changes go through the commit calls on
4
+ * `UndoController`, which apply a `StructuralChange` to keep ids and refs lined up with the
5
+ * children.
5
6
  */
6
7
  import type { BlockComponent } from '../block-component';
7
8
  import type { NodeView } from '../core/node-views';
8
9
  import { type RefSlots } from './publish-ref.svelte';
9
10
  export interface BlockListState {
10
- /** Settable because ids live on the node, where the write reaches the `$state` proxy.
11
- * Refs do not: the array identity IS the scope, so `replaceRefs` publishes contents
12
- * and the property itself never moves. */
11
+ /** Settable because the ids live on the node, where the write reaches the `$state` proxy.
12
+ * The refs array keeps its identity for life; `replaceRefs` rewrites its contents. */
13
13
  innerBlockIds: string[];
14
14
  readonly innerBlockRefs: (BlockComponent | undefined)[];
15
- /** This scope's slot accessors, minted once here so every consumer — the child list,
16
- * the container surface, the mount registry — addresses the scope by one identity. */
15
+ /** The accessors over `innerBlockRefs` that a child's mount writes through. */
17
16
  readonly refSlots: RefSlots<BlockComponent>;
18
17
  }
19
- /** `getNode` must be a live getter — by-value freezes on the initial node and misses
20
- * undo's deep-clone reassignment. A view suffices: the only writes target `childIds`,
21
- * the bytes-view carve-out. */
18
+ /** `getNode` must be a live getter: a node passed by value goes stale when undo swaps in a deep
19
+ * clone. A view is enough, since `childIds` is the only field written. */
22
20
  export declare function createBlockListState(getNode: () => NodeView): BlockListState;
@@ -1,14 +1,14 @@
1
1
  /**
2
- * A container's inner BlockList scope: the keyed-each id source and the component-ref slot
3
- * array. Structural mutations route through the commit primitives on UndoController, which
4
- * apply `StructuralChange` descriptors to keep ids/refs aligned with children.
2
+ * A container's inner block list: where its keyed-each ids come from and where its child
3
+ * component refs are stored. Structural changes go through the commit calls on
4
+ * `UndoController`, which apply a `StructuralChange` to keep ids and refs lined up with the
5
+ * children.
5
6
  */
6
7
  import { assignIds } from '../block-id';
7
8
  import { registerBlockListState } from './state-registry';
8
9
  import { refSlotsOver } from './publish-ref.svelte';
9
- /** `getNode` must be a live getter — by-value freezes on the initial node and misses
10
- * undo's deep-clone reassignment. A view suffices: the only writes target `childIds`,
11
- * the bytes-view carve-out. */
10
+ /** `getNode` must be a live getter: a node passed by value goes stale when undo swaps in a deep
11
+ * clone. A view is enough, since `childIds` is the only field written. */
12
12
  export function createBlockListState(getNode) {
13
13
  const initialNode = getNode();
14
14
  if (!initialNode.childIds) {
@@ -34,9 +34,8 @@ export function createBlockListState(getNode) {
34
34
  node.childIds = assignIds(node.children ?? []);
35
35
  }
36
36
  registerBlockListState(node, state);
37
- // A parent-scope replace can reuse this instance with a node prop that has fewer
38
- // children than before. Publish cleanup empties departing slots but never shrinks
39
- // the array, and refs length must track children exactly, so reconcile it here.
37
+ // A replacement in the parent list can reuse this instance with fewer children, and ref
38
+ // cleanup empties entries without shrinking the array; the refs must match the children.
40
39
  const childCount = node.children?.length ?? 0;
41
40
  if (innerBlockRefs.length > childCount) {
42
41
  innerBlockRefs.length = childCount;
@@ -1,5 +1,5 @@
1
1
  import type { HeightModel } from '../cursor/height-model';
2
- import type { Scrollport } from '../cursor/scrollport';
2
+ import type { ScrollportReader } from '../cursor/scrollport';
3
3
  export interface WindowInputs {
4
4
  scrollTop: number;
5
5
  viewportHeight: number;
@@ -16,15 +16,22 @@ export interface WindowResult {
16
16
  end: number;
17
17
  topSpacerPx: number;
18
18
  bottomSpacerPx: number;
19
+ /** The table's height for the whole list, which `useWindowFloor` holds the list's box at while
20
+ * the window changes; 0 when not windowing. */
21
+ floorPx: number;
19
22
  }
20
23
  export declare function computeWindow(model: HeightModel, input: WindowInputs): WindowResult;
21
24
  export interface BlockWindowDeps {
22
25
  getModel: () => HeightModel;
23
- getPort: () => Scrollport | null;
24
- /** Map the port's scrollTop into this list's own coordinate range. Identity for the top level. */
26
+ getPort: () => ScrollportReader | null;
27
+ /** Convert the scroll container's `scrollTop` into this list's own range. Unchanged at the
28
+ * top level. */
25
29
  getLocalScrollTop: () => number;
26
30
  getViewportHeight: () => number;
27
31
  getPinnedIndex: () => number | null;
32
+ /** True while a height change's scroll correction is still to come: the range then keeps the
33
+ * blocks it has as well, since the scroll doesn't match the table yet. */
34
+ holdsRange: () => boolean;
28
35
  overscan: number;
29
36
  pinExtensionCap: number;
30
37
  activateAbovePx: number;
@@ -32,9 +39,8 @@ export interface BlockWindowDeps {
32
39
  }
33
40
  export interface BlockWindow {
34
41
  readonly result: WindowResult;
35
- /** Push the scroll element's current scrollTop into the window state now. A
36
- * programmatic scrollTop write doesn't fire a `scroll` event, so the passive
37
- * listener wouldn't update the derived in time for a deterministic reveal. */
42
+ /** A scripted `scrollTop` write fires no `scroll` event, so a scroll into view calls this to
43
+ * update the window before reading it. */
38
44
  syncScrollTop(): void;
39
45
  dispose(): void;
40
46
  }
@@ -1,28 +1,26 @@
1
1
  /**
2
- * Window math for virtual rendering. `computeWindow` is pure: from a height model and the
3
- * scroll viewport it returns the slice to mount (extended to keep a pinned caret block
4
- * contiguous), the spacer heights preserving native scroll geometry, and the next
5
- * activation state. `createBlockWindow` wires live getters and a scroll listener to it.
2
+ * Window math for virtual rendering: which blocks to mount, and the spacer heights that keep the
3
+ * browser's scroll geometry. `computeWindow` is pure; `createBlockWindow` wires live getters and
4
+ * a scroll listener to it.
6
5
  */
7
6
  import { untrack } from 'svelte';
8
7
  export function computeWindow(model, input) {
9
8
  const n = model.size;
10
9
  const total = model.total();
11
- // The one activation decision in the feature: a scope windows purely on its own modeled
12
- // height, so who owns the scroll changes which port is read and nothing else.
10
+ // The one place windowing turns on or off: a list decides purely on its own estimated
11
+ // height, so who owns the scroll changes which container is read and nothing else.
13
12
  const active = input.active ? total >= input.deactivateBelowPx : total >= input.activateAbovePx;
14
13
  if (!active || n === 0) {
15
- return { active: false, start: 0, end: n, topSpacerPx: 0, bottomSpacerPx: 0 };
14
+ return { active: false, start: 0, end: n, topSpacerPx: 0, bottomSpacerPx: 0, floorPx: 0 };
16
15
  }
17
16
  const firstVisible = model.indexAtOffset(input.scrollTop);
18
- // Probe the last on-screen pixel: the viewport is half-open, so a block whose top sits
19
- // exactly on the bottom edge isn't visible.
17
+ // Check the last on-screen pixel: the viewport range is half-open, so a block whose top
18
+ // sits exactly on the bottom edge isn't visible.
20
19
  const lastVisible = model.indexAtOffset(input.scrollTop + input.viewportHeight - 1);
21
20
  let start = Math.max(0, firstVisible - input.overscan);
22
21
  let end = Math.min(n, lastVisible + 1 + input.overscan);
23
- // Extend the CONTIGUOUS range so Svelte preserves the caret block's DOM node and native
24
- // focus/IME survive a scroll — bounded, so a caret parked far away before a large scroll
25
- // doesn't mount thousands. Beyond the cap it blurs.
22
+ // Growing the range to the caret block keeps its DOM node, so focus and IME survive a scroll;
23
+ // capped so a caret left far away doesn't mount thousands of blocks (it loses focus instead).
26
24
  const pin = input.pinnedIndex;
27
25
  if (pin !== null && pin >= 0 && pin < n) {
28
26
  if (pin < start && start - pin <= input.pinExtensionCap)
@@ -35,7 +33,21 @@ export function computeWindow(model, input) {
35
33
  start,
36
34
  end,
37
35
  topSpacerPx: model.offsetOf(start),
38
- bottomSpacerPx: total - model.offsetOf(end)
36
+ bottomSpacerPx: total - model.offsetOf(end),
37
+ floorPx: total
38
+ };
39
+ }
40
+ /** `next` widened to keep `shown`'s blocks too, with the spacers the table now gives them. */
41
+ function widened(model, next, shown) {
42
+ const end = Math.min(Math.max(next.end, shown.end), model.size);
43
+ const start = Math.min(next.start, shown.start, end);
44
+ return {
45
+ active: true,
46
+ start,
47
+ end,
48
+ topSpacerPx: model.offsetOf(start),
49
+ bottomSpacerPx: model.total() - model.offsetOf(end),
50
+ floorPx: model.total()
39
51
  };
40
52
  }
41
53
  export function createBlockWindow(deps) {
@@ -56,8 +68,11 @@ export function createBlockWindow(deps) {
56
68
  unsubscribe = null;
57
69
  };
58
70
  });
71
+ // Plain, not state: the range last shown, and the scroll it was worked out at.
72
+ let last = null;
59
73
  const result = $derived.by(() => {
60
- return computeWindow(deps.getModel(), {
74
+ const model = deps.getModel();
75
+ const next = computeWindow(model, {
61
76
  scrollTop,
62
77
  viewportHeight: deps.getViewportHeight(),
63
78
  overscan: deps.overscan,
@@ -67,10 +82,22 @@ export function createBlockWindow(deps) {
67
82
  activateAbovePx: deps.activateAbovePx,
68
83
  deactivateBelowPx: deps.deactivateBelowPx
69
84
  });
85
+ // Unmounting the blocks at the top before the correction lands would remount them fresh; a
86
+ // range the new one doesn't touch is a jump elsewhere, and goes.
87
+ const shown = last?.scrollTop === scrollTop ? last.result : null;
88
+ const kept = shown &&
89
+ shown.active &&
90
+ next.active &&
91
+ next.start <= shown.end &&
92
+ shown.start <= next.end &&
93
+ deps.holdsRange()
94
+ ? widened(model, next, shown)
95
+ : next;
96
+ last = { result: kept, scrollTop };
97
+ return kept;
70
98
  });
71
- // Hysteresis state. `result` reads `active` and this effect writes it, so the write is
72
- // untracked and change-guarded — otherwise the effect depends on its own write. It
73
- // converges: once `active` equals `result.active` the guard writes nothing.
99
+ // Hysteresis: `result` reads `active` and this effect writes it, so the write is untracked
100
+ // and skipped when unchanged, or the effect would depend on its own write.
74
101
  $effect(() => {
75
102
  const next = result.active;
76
103
  untrack(() => {
@@ -0,0 +1,34 @@
1
+ /**
2
+ * One block list's children as a walk down the tree reads them, and the two walks: `descendTo`
3
+ * scrolls each level's child into the mounted range, `componentAt` reads only what is mounted.
4
+ * The editor root, every container, the table and each table row publish one.
5
+ */
6
+ import type { BlockComponent } from '../block-component';
7
+ import { type RefSlots } from './publish-ref.svelte';
8
+ /** One mounted child list, as the descent reads it. Every field is read live. */
9
+ export interface ChildList {
10
+ count(): number;
11
+ readonly refs: RefSlots<BlockComponent>;
12
+ /** Required, so a list that cannot say whether a child is in range cannot exist. */
13
+ readonly windowing: {
14
+ /** Scrolls this list so child `index` is inside the mounted range; resolves after a tick. */
15
+ revealChild(index: number): Promise<void>;
16
+ /** Whether `index` is inside the mounted range. */
17
+ isInWindow(index: number): boolean;
18
+ };
19
+ /** Scrolls child `index` into this list's own scroller on another axis (a table's columns). */
20
+ bringChildIntoView?(index: number): void;
21
+ /** True while only the title row (child 0) is mounted. */
22
+ isCollapsed?(): boolean;
23
+ /** Opens a collapsed body as an undoable commit, for a descent asked to open one. */
24
+ openCollapsed?(): Promise<boolean>;
25
+ }
26
+ /**
27
+ * Mounts each level of `path` below `root` and returns the component at its end, or null when
28
+ * a level can't mount. A path into a collapsed body stops there unless `openCollapsed` is set.
29
+ */
30
+ export declare function descendTo(root: ChildList, path: readonly number[], opts?: {
31
+ openCollapsed?: boolean;
32
+ }): Promise<BlockComponent | null>;
33
+ /** The mounted component at `path`, or null; never mounts anything. */
34
+ export declare function componentAt(root: ChildList, path: readonly number[]): BlockComponent | null;
@@ -0,0 +1,48 @@
1
+ import { revealChildOrWait } from './publish-ref.svelte';
2
+ /**
3
+ * Mounts each level of `path` below `root` and returns the component at its end, or null when
4
+ * a level can't mount. A path into a collapsed body stops there unless `openCollapsed` is set.
5
+ */
6
+ export async function descendTo(root, path, opts = {}) {
7
+ let list = root;
8
+ for (let depth = 0; depth < path.length; depth++) {
9
+ const index = path[depth];
10
+ // Only a body child is hidden; the title row stays mounted while collapsed.
11
+ if (index >= 1 && list.isCollapsed?.()) {
12
+ if (!opts.openCollapsed || !list.openCollapsed)
13
+ return null;
14
+ await list.openCollapsed();
15
+ }
16
+ const { windowing } = list;
17
+ await revealChildOrWait(index, {
18
+ slots: list.refs,
19
+ childCount: list.count(),
20
+ revealChild: (i) => windowing.revealChild(i),
21
+ isInWindow: (i) => windowing.isInWindow(i)
22
+ });
23
+ const ref = list.refs.get(index);
24
+ if (!ref)
25
+ return null;
26
+ list.bringChildIntoView?.(index);
27
+ if (depth === path.length - 1)
28
+ return ref;
29
+ const next = ref.childList?.();
30
+ if (!next)
31
+ return null;
32
+ list = next;
33
+ }
34
+ return null;
35
+ }
36
+ /** The mounted component at `path`, or null; never mounts anything. */
37
+ export function componentAt(root, path) {
38
+ let list = root;
39
+ for (let depth = 0; depth < path.length && list; depth++) {
40
+ const ref = list.refs.get(path[depth]);
41
+ if (!ref)
42
+ return null;
43
+ if (depth === path.length - 1)
44
+ return ref;
45
+ list = ref.childList?.();
46
+ }
47
+ return null;
48
+ }