@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,11 +1,13 @@
1
1
  /**
2
- * The Enter-completion seam: a lone typed line a registered completer claims becomes the
3
- * structure it opens instead of splitting. `planEnterCompletion` is pure; `withEnterCompletion`
4
- * is the one place the plan is spent, wrapped around a composed `splitBlock`.
2
+ * Enter completion: a lone typed line a registered completer recognises becomes the structure
3
+ * it opens instead of splitting. `planEnterCompletion` is pure; `withEnterCompletion` is the
4
+ * one place the plan is applied, wrapped around a composed `splitBlock`.
5
5
  */
6
+ import { type LineEnding } from '../core/lines';
6
7
  import type { BlockEditActions } from '../action-contracts';
7
8
  import type { CstNode } from '../core/nodes';
8
9
  import type { NodeView } from '../core/node-views';
10
+ import type { GrammarView } from '../schema/block-openers';
9
11
  export interface EnterCompletion {
10
12
  replacement: CstNode[];
11
13
  caret: {
@@ -13,15 +15,10 @@ export interface EnterCompletion {
13
15
  offset: number;
14
16
  };
15
17
  }
16
- /**
17
- * Wraps a COMPOSED `splitBlock` with the consult, at the two bundle composition sites only. Above
18
- * the container overrides rather than inside the split body, so a container that replaces
19
- * `splitBlock` cannot take the completion arm out of its subtree. One press consults once per
20
- * NODE: the blockquote exit's hop to the parent scope is a second consult, on a different node,
21
- * and an always-declining one — a container is never a prose line.
22
- */
23
- export declare function withEnterCompletion(blockEdit: BlockEditActions, childAt: (index: number) => NodeView | undefined): BlockEditActions;
24
- /** The completion a press at `offset` earns, or null when the block or the caret disqualifies it. */
25
- export declare function planEnterCompletion(node: NodeView | undefined, offset: number): EnterCompletion | null;
26
- /** The completion a keystroke earns, consulting only the completers that answer on type. */
27
- export declare function planTypedCompletion(node: NodeView | undefined, offset: number): EnterCompletion | null;
18
+ /** Wraps a composed `splitBlock` with the completer check, above the container overrides so a
19
+ * container replacing `splitBlock` keeps the completion for its subtree. */
20
+ export declare function withEnterCompletion(blockEdit: BlockEditActions, childAt: (index: number) => NodeView | undefined, grammar: GrammarView, getLineEnding: () => LineEnding): BlockEditActions;
21
+ /** The completion Enter at `offset` produces, or null when the block or the caret rules it out. */
22
+ export declare function planEnterCompletion(node: NodeView | undefined, offset: number, grammar: GrammarView, lineEnding: LineEnding): EnterCompletion | null;
23
+ /** The completion a keystroke produces, asking only the completers that answer on type. */
24
+ export declare function planTypedCompletion(node: NodeView | undefined, offset: number, grammar: GrammarView, lineEnding: LineEnding): EnterCompletion | null;
@@ -1,57 +1,56 @@
1
1
  /**
2
- * The Enter-completion seam: a lone typed line a registered completer claims becomes the
3
- * structure it opens instead of splitting. `planEnterCompletion` is pure; `withEnterCompletion`
4
- * is the one place the plan is spent, wrapped around a composed `splitBlock`.
2
+ * Enter completion: a lone typed line a registered completer recognises becomes the structure
3
+ * it opens instead of splitting. `planEnterCompletion` is pure; `withEnterCompletion` is the
4
+ * one place the plan is applied, wrapped around a composed `splitBlock`.
5
5
  */
6
- import { parse } from '../core/parser';
7
- import { displayLength, splitLines, trailingLineEnding } from '../core/lines';
6
+ import { readBlocks } from '../core/parser';
7
+ import { displayLength, isBlankText, splitLines, trailingLineEnding } from '../core/lines';
8
+ import { withStoredCaret } from './stored-caret';
8
9
  import { getBlockKindDescriptor } from '../schema/block-kind-descriptor';
9
10
  import { completeLineOnType, completeTypedLine } from '../schema/block-completions';
10
- /**
11
- * Wraps a COMPOSED `splitBlock` with the consult, at the two bundle composition sites only. Above
12
- * the container overrides rather than inside the split body, so a container that replaces
13
- * `splitBlock` cannot take the completion arm out of its subtree. One press consults once per
14
- * NODE: the blockquote exit's hop to the parent scope is a second consult, on a different node,
15
- * and an always-declining one — a container is never a prose line.
16
- */
17
- export function withEnterCompletion(blockEdit, childAt) {
11
+ /** Wraps a composed `splitBlock` with the completer check, above the container overrides so a
12
+ * container replacing `splitBlock` keeps the completion for its subtree. */
13
+ export function withEnterCompletion(blockEdit, childAt, grammar, getLineEnding) {
18
14
  return {
19
15
  ...blockEdit,
20
16
  async splitBlock(index, offset) {
21
- const completion = planEnterCompletion(childAt(index), offset);
22
- if (!completion) {
23
- await blockEdit.splitBlock(index, offset);
24
- return;
25
- }
26
- // `snapshotOffset` is where the caret WAS, so one undo restores the typed line with the
17
+ const completion = planEnterCompletion(childAt(index), offset, grammar, getLineEnding());
18
+ if (!completion)
19
+ return blockEdit.splitBlock(index, offset);
20
+ // `snapshotOffset` is where the caret was, so one undo restores the typed line with the
27
21
  // caret at its end rather than in front of it.
28
- await blockEdit.replaceBlock(index, completion.replacement, { replacementIndex: 0, ...completion.caret }, { snapshotOffset: offset });
22
+ return blockEdit.replaceBlock(index, completion.replacement, { replacementIndex: 0, ...completion.caret }, { snapshotOffset: offset });
29
23
  },
30
- // The typed arm: a keystroke that leaves the block as a line an on-type completer claims
31
- // (see `BlockCompleter.onType`) forms the structure at once, the way a typed ` ``` ` is a
32
- // fence the moment the parser sees it. The write lands first, so the typed line is its own
33
- // undo step and the mint replaces the bytes the CST actually holds.
34
- async updateBlockContent(index, text, preEditOffset, postEditFocusOffset) {
35
- await blockEdit.updateBlockContent(index, text, preEditOffset, postEditFocusOffset);
36
- const offset = postEditFocusOffset ?? preEditOffset;
37
- if (offset === undefined)
38
- return;
39
- const completion = planTypedCompletion(childAt(index), offset);
40
- if (!completion)
41
- return;
42
- await blockEdit.replaceBlock(index, completion.replacement, { replacementIndex: 0, ...completion.caret }, { snapshotOffset: offset });
24
+ // A line an on-type completer recognises forms its structure at once. The write lands
25
+ // first, so the typed line is its own undo step and the replacement covers the stored bytes.
26
+ updateBlockContent(index, text, mode, preEditOffset, postEditFocusOffset) {
27
+ const write = blockEdit.updateBlockContent(index, text, mode, preEditOffset, postEditFocusOffset);
28
+ if (!write.admitted)
29
+ return write;
30
+ const plan = () => planTypedCompletion(childAt(index), write.caret, grammar, getLineEnding());
31
+ // A write that keeps the caret landed in place already, so its completion is known now.
32
+ const keepsCaret = write.keepsCaret && plan() === null;
33
+ const completed = write.then(async (wrote) => {
34
+ const completion = plan();
35
+ if (!completion)
36
+ return wrote;
37
+ const replaced = await blockEdit.replaceBlock(index, completion.replacement, { replacementIndex: 0, ...completion.caret }, { snapshotOffset: write.caret });
38
+ return wrote || replaced;
39
+ });
40
+ return withStoredCaret(completed, write.caret, write.storedOffset, keepsCaret);
43
41
  }
44
42
  };
45
43
  }
46
- /** The completion a press at `offset` earns, or null when the block or the caret disqualifies it. */
47
- export function planEnterCompletion(node, offset) {
48
- return planCompletion(node, offset, completeTypedLine);
44
+ /** The completion Enter at `offset` produces, or null when the block or the caret rules it out. */
45
+ export function planEnterCompletion(node, offset, grammar, lineEnding) {
46
+ return planCompletion(node, offset, grammar, lineEnding, (line) => completeTypedLine(line, grammar));
49
47
  }
50
- /** The completion a keystroke earns, consulting only the completers that answer on type. */
51
- export function planTypedCompletion(node, offset) {
52
- return planCompletion(node, offset, completeLineOnType);
48
+ /** The completion a keystroke produces, asking only the completers that answer on type. */
49
+ export function planTypedCompletion(node, offset, grammar, lineEnding) {
50
+ return planCompletion(node, offset, grammar, lineEnding, (line) => completeLineOnType(line, grammar));
53
51
  }
54
- function planCompletion(node, offset, consult) {
52
+ /** `ending` is the document's, for a typed line that has none of its own. */
53
+ function planCompletion(node, offset, grammar, ending, consult) {
55
54
  if (!node)
56
55
  return null;
57
56
  const line = wholeTypedLine(node);
@@ -60,20 +59,19 @@ function planCompletion(node, offset, consult) {
60
59
  const claim = consult(line);
61
60
  if (!claim)
62
61
  return null;
63
- // Through the parser rather than a hand-built node, so the mint is exactly what a reload of
64
- // those bytes produces. Global grammar, as every other structural reparse.
65
- const lineEnding = trailingLineEnding(node.raw);
62
+ // Through the parser in the editor's grammar rather than a hand-built node, so the new blocks
63
+ // are exactly what a reload of those bytes produces.
64
+ const lineEnding = trailingLineEnding(node.raw, ending);
66
65
  const raw = claim.lines.map((text) => text + lineEnding).join('');
67
- const replacement = parse(raw, { scope: 'fragment' }).children;
68
- // A mint that paints nothing would replace the typed line with a delete, or with blank trivia
69
- // a reload reads as neither. Blank lines parse back as empty paragraphs, so the reading is per
70
- // node rather than the child count.
71
- if (replacement.every((node) => node.raw.trim() === ''))
66
+ const replacement = readBlocks(raw, { grammar, scope: 'fragment' }).children;
67
+ // A completion of only blank lines would replace the typed line with a delete; the check is per
68
+ // node because blank lines parse back as empty paragraphs.
69
+ if (replacement.every((node) => isBlankText(node.raw)))
72
70
  return null;
73
71
  return { replacement, caret: resolveCaret(replacement[0], claim.caret) };
74
72
  }
75
- /** The claim's line/column as a byte offset inside the node its path addresses. Resolved here
76
- * because the line ending the count depends on is the seam's choice, not the completer's. */
73
+ /** The completer's line and column as a byte offset inside the node its path addresses. Resolved
74
+ * here because the line ending the count depends on is chosen here, not by the completer. */
77
75
  function resolveCaret(minted, caret) {
78
76
  let target = minted;
79
77
  for (const index of caret.path)
@@ -82,7 +80,7 @@ function resolveCaret(minted, caret) {
82
80
  return { path: caret.path, offset: (lines[caret.line]?.start ?? 0) + caret.column };
83
81
  }
84
82
  /** The one line this block's raw is, or null when it is not a single line of prose whose every
85
- * byte is content — a completer must never read a kind's own markers as typed text. */
83
+ * byte is content: a completer must never read a kind's own markers as typed text. */
86
84
  function wholeTypedLine(node) {
87
85
  const descriptor = getBlockKindDescriptor(node.kind);
88
86
  if (descriptor.mergeRole !== 'prose')
@@ -1,36 +1,35 @@
1
1
  /**
2
- * Pure dispatchers for container focus — moveFocus, focusByPath, focusAtColumn.
3
- * No Svelte context or reactivity; inputs are passed in as parameters.
2
+ * Pure dispatchers for focus across a block list: moveFocus for the root and every container,
3
+ * and focusByPath and focusAtColumn inside a container. Everything comes in as parameters.
4
4
  */
5
5
  import type { FocusActions, MoveFocusOptions } from '../../action-contracts';
6
6
  import { type BlockComponent, type FocusPosition, type StickyColumnDirection } from '../../block-component';
7
- import type { StickyColumnState } from '../../cursor/sticky-column';
8
- /** What the calling scope contributes to a move beyond the target itself. */
7
+ import type { CaretMemory } from '../../cursor/caret-memory';
8
+ /** One block list's side of a focus move, the root's or a container's. */
9
9
  export interface MoveFocusScope {
10
- /** Overrides `refs.length` for the upper bound: the two diverge for one render cycle
11
- * after a structural op, and without it the cursor escapes the container. */
12
- childCount?: number;
13
- /** The caller's own options, forwarded verbatim on upward delegation. */
14
- options?: MoveFocusOptions;
15
- /** Pre-bound to this scope's own boundaries (`selection/gap-caret.ts`). */
16
- gapStop?: (boundaryIndex: number) => boolean;
10
+ /** The child count from the tree: the mounted refs lag a structural edit by a render. */
11
+ count(): number;
12
+ /** Child `index`'s component, scrolled into the mounted range first if it's windowed out. */
13
+ mount(index: number): Promise<BlockComponent | null>;
14
+ /** A move before the first child (-1) or past the last (1): a container hands it to its
15
+ * parent, the root stops or appends a paragraph. */
16
+ leave(step: -1 | 1, position: FocusPosition, options?: MoveFocusOptions): Promise<void>;
17
+ /** Bound to this list's own boundaries (`selection/gap-caret.ts`). */
18
+ gapStop(boundaryIndex: number): boolean;
19
+ /** The move ended on child `index`: its focus call scrolled nothing, so this may. */
20
+ arrived(index: number): void;
17
21
  }
18
- /** Move focus within a container, or delegate upward when out of range. */
19
- export declare function dispatchMoveFocus(refs: (BlockComponent | undefined)[], innerIndex: number, position: FocusPosition, stickyColumn: StickyColumnState, parent: {
20
- focus: FocusActions;
21
- index: number;
22
- }, scope?: MoveFocusScope): Promise<void>;
22
+ /** The one focus traversal, run by the root and by every container over its own list. */
23
+ export declare function dispatchMoveFocus(scope: MoveFocusScope, index: number, position: FocusPosition, caretMemory: Pick<CaretMemory, 'column' | 'noteExtreme'>, options?: MoveFocusOptions): Promise<void>;
24
+ /** A move handed to `focus`, with the options argument left off when there are none, so the
25
+ * common call keeps two arguments. */
26
+ export declare function delegateMoveFocus(focus: Pick<FocusActions, 'moveFocus'>, index: number, position: FocusPosition, options?: MoveFocusOptions): void | Promise<void>;
23
27
  /**
24
- * Direction a FocusPosition implies for traversal. A bare numeric offset is a
25
- * targeted landing with no direction, so 0 tells the caller not to skip.
28
+ * The direction a FocusPosition implies for traversal. A bare numeric offset is a targeted
29
+ * position with no direction, so 0 tells the caller not to skip.
26
30
  */
27
31
  export declare function traversalStep(position: FocusPosition): -1 | 0 | 1;
28
- /**
29
- * Adjacent-only contract (VR-12, docs/design/virtual-rendering.md): sync, revealing
30
- * nothing, so an unmounted `refs[first]` silently no-ops. The caller keeps the target
31
- * within overscan; anything wider routes through the async `revealByPath`/`revealPath`.
32
- */
32
+ /** Scrolls nothing into view, so an unmounted target does nothing; a caller that cannot keep
33
+ * the target mounted goes through `reactivity/child-list.ts :: descendTo`. */
33
34
  export declare function dispatchFocusByPath(refs: (BlockComponent | undefined)[], path: number[], offset: number): void;
34
- /** Null when the path doesn't resolve to a mounted ref. */
35
- export declare function dispatchGetBlockComponentByPath(refs: (BlockComponent | undefined)[], path: number[]): BlockComponent | null;
36
35
  export declare function dispatchFocusAtColumn(refs: (BlockComponent | undefined)[], x: number, from: StickyColumnDirection): void;
@@ -1,47 +1,40 @@
1
1
  /**
2
- * Pure dispatchers for container focus — moveFocus, focusByPath, focusAtColumn.
3
- * No Svelte context or reactivity; inputs are passed in as parameters.
2
+ * Pure dispatchers for focus across a block list: moveFocus for the root and every container,
3
+ * and focusByPath and focusAtColumn inside a container. Everything comes in as parameters.
4
4
  */
5
5
  import { CURSOR_END, CURSOR_START } from '../../block-component';
6
6
  import { consumeStickyLanding, verticalArrival } from './focus-landing';
7
- /** Move focus within a container, or delegate upward when out of range. */
8
- export async function dispatchMoveFocus(refs, innerIndex, position, stickyColumn, parent, scope = {}) {
9
- const { childCount, options, gapStop } = scope;
10
- // Omit the options arg when unset so the common path stays a two-arg call.
11
- const delegate = (targetIndex) => options
12
- ? parent.focus.moveFocus(targetIndex, position, options)
13
- : parent.focus.moveFocus(targetIndex, position);
7
+ /** The one focus traversal, run by the root and by every container over its own list. */
8
+ export async function dispatchMoveFocus(scope, index, position, caretMemory, options) {
14
9
  const step = traversalStep(position);
15
- // Ahead of every ref read, so the CST alone decides the boundary and a windowed-out
16
- // child cannot change the answer. The two scope edges are boundaries like any other:
17
- // this is also what stops the delegate arms from leaving the container.
18
- if (gapStop && step !== 0 && !options?.skipGapStop) {
19
- if (gapStop(step > 0 ? innerIndex : innerIndex + 1))
20
- return;
21
- }
22
- if (innerIndex < 0) {
23
- await delegate(parent.index - 1);
10
+ // Before any ref is read, so the tree alone decides the boundary; the list's own edges are
11
+ // boundaries too, which keeps the move from leaving it.
12
+ if (step !== 0 && !options?.skipGapStop && scope.gapStop(step > 0 ? index : index + 1))
24
13
  return;
25
- }
26
- const upperBound = childCount ?? refs.length;
27
- if (innerIndex >= upperBound) {
28
- await delegate(parent.index + 1);
14
+ if (index < 0 || index >= scope.count()) {
15
+ await scope.leave(index < 0 ? -1 : 1, position, options);
29
16
  return;
30
17
  }
31
- const block = refs[innerIndex];
18
+ const block = await scope.mount(index);
19
+ const retry = (i) => dispatchMoveFocus(scope, i, position, caretMemory, options);
32
20
  if (!block?.focusable) {
33
- // A refless or non-focusable child must not dead-end the move — continue in
34
- // its direction (editor.md § Focus traversal).
35
- if (step !== 0) {
36
- await dispatchMoveFocus(refs, innerIndex + step, position, stickyColumn, parent, scope);
37
- }
21
+ // A child that can't take focus must not stop the move: continue in its direction
22
+ // (`docs/design/editor.md` § Focus traversal).
23
+ if (step !== 0)
24
+ await retry(index + step);
38
25
  return;
39
26
  }
40
- await consumeStickyLanding(block, innerIndex, position, stickyColumn, (i) => dispatchMoveFocus(refs, i, position, stickyColumn, parent, scope));
27
+ await consumeStickyLanding(block, index, position, caretMemory, retry);
28
+ scope.arrived(index);
29
+ }
30
+ /** A move handed to `focus`, with the options argument left off when there are none, so the
31
+ * common call keeps two arguments. */
32
+ export function delegateMoveFocus(focus, index, position, options) {
33
+ return options ? focus.moveFocus(index, position, options) : focus.moveFocus(index, position);
41
34
  }
42
35
  /**
43
- * Direction a FocusPosition implies for traversal. A bare numeric offset is a
44
- * targeted landing with no direction, so 0 tells the caller not to skip.
36
+ * The direction a FocusPosition implies for traversal. A bare numeric offset is a targeted
37
+ * position with no direction, so 0 tells the caller not to skip.
45
38
  */
46
39
  export function traversalStep(position) {
47
40
  if (typeof position === 'object')
@@ -52,11 +45,8 @@ export function traversalStep(position) {
52
45
  return -1;
53
46
  return 0;
54
47
  }
55
- /**
56
- * Adjacent-only contract (VR-12, docs/design/virtual-rendering.md): sync, revealing
57
- * nothing, so an unmounted `refs[first]` silently no-ops. The caller keeps the target
58
- * within overscan; anything wider routes through the async `revealByPath`/`revealPath`.
59
- */
48
+ /** Scrolls nothing into view, so an unmounted target does nothing; a caller that cannot keep
49
+ * the target mounted goes through `reactivity/child-list.ts :: descendTo`. */
60
50
  export function dispatchFocusByPath(refs, path, offset) {
61
51
  if (path.length === 0) {
62
52
  refs[0]?.focus(offset);
@@ -73,24 +63,12 @@ export function dispatchFocusByPath(refs, path, offset) {
73
63
  child.focusByPath?.(rest, offset);
74
64
  }
75
65
  }
76
- /** Null when the path doesn't resolve to a mounted ref. */
77
- export function dispatchGetBlockComponentByPath(refs, path) {
78
- if (path.length === 0)
79
- return null;
80
- const [first, ...rest] = path;
81
- const child = refs[first];
82
- if (!child)
83
- return null;
84
- if (rest.length === 0)
85
- return child;
86
- return child.getBlockComponentByPath?.(rest) ?? null;
87
- }
88
66
  export function dispatchFocusAtColumn(refs, x, from) {
89
67
  if (refs.length === 0)
90
68
  return;
91
69
  const indices = from === 'above' ? refs.map((_, i) => i) : refs.map((_, i) => refs.length - 1 - i);
92
- // Pass over transparent refs so an entry from above/below lands on the first/last
93
- // text-bearing child.
70
+ // Pass over widget-only children so an entry from above or below lands on the first or
71
+ // last child that has text.
94
72
  for (const i of indices) {
95
73
  const ref = refs[i];
96
74
  if (!ref?.focusable)
@@ -1,16 +1,13 @@
1
1
  /**
2
- * Shared cross-block landing tail for the focus dispatchers. Sticky-X null handling
3
- * lives here, so `focusAtColumn` receivers always get a finite x.
2
+ * The last step of a cross-block focus move, once the target block is mounted: the side of a
3
+ * hidden closer, an edge widget, then the caret. A null sticky column is handled here, so
4
+ * `focusAtColumn` always receives a finite x.
4
5
  */
5
6
  import { type BlockComponent, type FocusPosition, type StickyColumnDirection } from '../../block-component';
6
- import type { StickyColumnState } from '../../cursor/sticky-column';
7
- export declare function consumeStickyLanding(block: BlockComponent, index: number, position: FocusPosition, stickyColumn: StickyColumnState, retryAt: (index: number) => Promise<void> | void): Promise<void>;
8
- /** What a vertical arrival does at a block: enter its widget, pass over it, or seat a caret. */
7
+ import type { CaretMemory } from '../../cursor/caret-memory';
8
+ export declare function consumeStickyLanding(block: BlockComponent, index: number, position: FocusPosition, caretMemory: Pick<CaretMemory, 'column' | 'noteExtreme'>, retryAt: (index: number) => Promise<void> | void): Promise<void>;
9
+ /** What a vertical arrival does at a block: enter its widget, pass over it, or place a caret. */
9
10
  export type VerticalArrival = 'entered' | 'transparent' | 'seat';
10
- /**
11
- * The vertical stop rule, asked by both vertical doors: the per-block landing and a container's
12
- * column entry. A widget-only block carries no column, so it is passed over unless its edge widget
13
- * takes the arrival, which is a stop of its own and reads alike from either side. `'entered'` means
14
- * the widget ALREADY took it, so the caller stops rather than repeating the entry.
15
- */
11
+ /** Whether a vertical move stops at a block: a widget-only block is passed over unless its edge
12
+ * widget takes the arrival (`'entered'`, so the caller must not enter it again). */
16
13
  export declare function verticalArrival(block: BlockComponent, from: StickyColumnDirection): VerticalArrival;
@@ -1,9 +1,14 @@
1
1
  /**
2
- * Shared cross-block landing tail for the focus dispatchers. Sticky-X null handling
3
- * lives here, so `focusAtColumn` receivers always get a finite x.
2
+ * The last step of a cross-block focus move, once the target block is mounted: the side of a
3
+ * hidden closer, an edge widget, then the caret. A null sticky column is handled here, so
4
+ * `focusAtColumn` always receives a finite x.
4
5
  */
5
6
  import { CURSOR_END, CURSOR_START } from '../../block-component';
6
- export async function consumeStickyLanding(block, index, position, stickyColumn, retryAt) {
7
+ export async function consumeStickyLanding(block, index, position, caretMemory, retryAt) {
8
+ // Moving to a block's end is a jump, so each construct decides which side of a hidden
9
+ // closer it means, or the next byte typed joins it (`docs/design/live-mode.md` § 4.2).
10
+ if (position === 'end')
11
+ caretMemory.noteExtreme();
7
12
  const isStickyMove = typeof position === 'object' && 'stickyColumnFrom' in position;
8
13
  if (isStickyMove) {
9
14
  const from = position.stickyColumnFrom;
@@ -15,14 +20,14 @@ export async function consumeStickyLanding(block, index, position, stickyColumn,
15
20
  return;
16
21
  }
17
22
  }
18
- // Enter an edge widget rather than dropping a no-op caret at its boundary, so the
19
- // arrow key produces one visible step.
23
+ // Enter an edge widget rather than putting a caret that does nothing at its boundary, so
24
+ // the arrow key produces one visible step.
20
25
  if (position === 'start' && block.enterEdgeWidget?.('start'))
21
26
  return;
22
27
  if (position === 'end' && block.enterEdgeWidget?.('end'))
23
28
  return;
24
29
  if (isStickyMove) {
25
- const x = stickyColumn.get();
30
+ const x = caretMemory.column();
26
31
  const from = position.stickyColumnFrom;
27
32
  if (x !== null && block.focusAtColumn) {
28
33
  block.focusAtColumn(x, from);
@@ -31,8 +36,8 @@ export async function consumeStickyLanding(block, index, position, stickyColumn,
31
36
  block.focus(from === 'above' ? CURSOR_START : CURSOR_END);
32
37
  return;
33
38
  }
34
- // An ARRIVAL says "the start"/"the end" and the door seats it on a landable offset; a numeric
35
- // position is a caller who knows its byte (a split's continuation) and is passed through.
39
+ // 'start' and 'end' are arrivals, and the block's focus clamps them to an offset the caret
40
+ // can sit at; a number is a caller that knows its byte (a split's second half), passed through.
36
41
  if (typeof position === 'number')
37
42
  block.focus(position);
38
43
  else if (position === 'start')
@@ -40,12 +45,8 @@ export async function consumeStickyLanding(block, index, position, stickyColumn,
40
45
  else
41
46
  block.focus(CURSOR_END);
42
47
  }
43
- /**
44
- * The vertical stop rule, asked by both vertical doors: the per-block landing and a container's
45
- * column entry. A widget-only block carries no column, so it is passed over unless its edge widget
46
- * takes the arrival, which is a stop of its own and reads alike from either side. `'entered'` means
47
- * the widget ALREADY took it, so the caller stops rather than repeating the entry.
48
- */
48
+ /** Whether a vertical move stops at a block: a widget-only block is passed over unless its edge
49
+ * widget takes the arrival (`'entered'`, so the caller must not enter it again). */
49
50
  export function verticalArrival(block, from) {
50
51
  if (!block.isVerticallyTransparent?.())
51
52
  return 'seat';
@@ -1,6 +1,7 @@
1
1
  /**
2
- * FocusActions factory: cursor movement across blocks, sticky-column-aware
3
- * vertical traversal, and trailing-paragraph creation past document end.
2
+ * The root FocusActions: caret movement across top-level blocks, vertical moves that keep
3
+ * the sticky column, and the paragraph appended when a move goes past the document's end
4
+ * (outside reading mode).
4
5
  */
5
6
  import type { FocusActions } from '../../action-contracts';
6
7
  import type { EditorActionsDeps, UndoController } from '../deps';
@@ -1,74 +1,57 @@
1
1
  /**
2
- * FocusActions factory: cursor movement across blocks, sticky-column-aware
3
- * vertical traversal, and trailing-paragraph creation past document end.
2
+ * The root FocusActions: caret movement across top-level blocks, vertical moves that keep
3
+ * the sticky column, and the paragraph appended when a move goes past the document's end
4
+ * (outside reading mode).
4
5
  */
5
6
  import { emptyParagraph } from '../../tree-operations';
6
- import { trailingLineEnding } from '../../core/lines';
7
- import { traversalStep } from './focus-dispatch';
8
- import { consumeStickyLanding } from './focus-landing';
7
+ import { documentLineEnding } from '../../core/lines';
8
+ import { dispatchMoveFocus } from './focus-dispatch';
9
9
  import { docPathFrom } from '../../cursor/coordinate-spaces';
10
10
  import { tryGapStop } from '../../selection/gap-caret';
11
+ import { isReadingMode } from '../../presentation-mode';
11
12
  export function createFocusActions(deps, controller) {
12
13
  const gapScope = {
13
14
  getDoc: () => deps.doc,
14
15
  selection: deps.selectionState,
15
- getPresentationMode: deps.getPresentationMode
16
+ getPresentationMode: deps.reading.mode
16
17
  };
17
18
  const gapStopAt = (parentPath, boundaryIndex) => tryGapStop(gapScope, parentPath, boundaryIndex);
19
+ /** Past the last block a move appends a paragraph (outside reading mode); before the first
20
+ * it stops. */
21
+ async function leave(step, _position, options) {
22
+ // Reading mode writes nothing, so a move past the last block just stops there.
23
+ if (step < 0 || options?.append === false || isReadingMode(deps.reading.mode))
24
+ return;
25
+ // Appended through a commit so it is in undo history and edit events; the blank line
26
+ // and the paragraph's own line both take the document's line ending.
27
+ const lineEnding = documentLineEnding(deps.doc);
28
+ const newBlock = emptyParagraph(lineEnding, lineEnding);
29
+ // The appended index (one past the end) is the path for both the event and the
30
+ // undo restore fallback: it names the block this creates.
31
+ const appendPath = docPathFrom([deps.doc.children.length]);
32
+ await controller.commitStructural({
33
+ snapshot: { path: appendPath, offset: 0 },
34
+ mutate: (children) => {
35
+ const at = children.length;
36
+ children.push(newBlock);
37
+ return { op: 'insert', at, count: 1 };
38
+ },
39
+ op: { kind: 'appendBlock', eventPath: appendPath },
40
+ landing: () => ({ path: docPathFrom([deps.doc.children.length - 1]), offset: 0 })
41
+ });
42
+ }
43
+ const scope = {
44
+ count: () => deps.doc.children.length,
45
+ mount: (index) => deps.caretLanding.mount([index]),
46
+ leave,
47
+ // A directional move crosses the boundary at the greater adjacent index. `gapEligibleAt`
48
+ // declines out-of-range boundaries and the root's trailing one.
49
+ gapStop: (boundaryIndex) => gapStopAt([], boundaryIndex),
50
+ arrived: (index) => deps.caretLanding.followArrival([index])
51
+ };
18
52
  return {
19
- revealPath: deps.revealPath,
20
53
  tryGapStop: gapStopAt,
21
- async moveFocus(blockIndex, position, options) {
22
- const step = traversalStep(position);
23
- const stopsAtGaps = step !== 0 && !options?.skipGapStop;
24
- // The boundary a directional move crosses is the greater of the two adjacent
25
- // indices. Out-of-range boundaries and the root's trailing one decline in
26
- // `gapEligibleAt`, so the arms below keep their behavior unguarded.
27
- if (stopsAtGaps && gapStopAt([], step > 0 ? blockIndex : blockIndex + 1))
28
- return;
29
- if (blockIndex < 0)
30
- return;
31
- if (blockIndex >= deps.doc.children.length) {
32
- if (options?.append === false)
33
- return;
34
- // Past the last block — appended through the commit primitive so it participates in
35
- // undo history and edit events. The separating blank line and the paragraph's own
36
- // are both line endings, so both take the document's (G4.20).
37
- const lastBlock = deps.doc.children[deps.doc.children.length - 1];
38
- const lineEnding = trailingLineEnding(lastBlock?.raw ?? '\n');
39
- const newBlock = emptyParagraph(lineEnding, lineEnding);
40
- // The appended slot (one past the end) is the coordinate for both the
41
- // event and the restore fallback — it names the block this op creates.
42
- const appendPath = docPathFrom([deps.doc.children.length]);
43
- await controller.commitStructural({
44
- snapshot: { path: appendPath, offset: 0 },
45
- mutate: (children) => {
46
- const at = children.length;
47
- children.push(newBlock);
48
- return { op: 'insert', at, count: 1 };
49
- },
50
- op: { kind: 'appendBlock', eventPath: appendPath },
51
- afterTick: () => {
52
- const lastIdx = deps.doc.children.length - 1;
53
- deps.blockRefs[lastIdx]?.focus(0);
54
- }
55
- });
56
- return;
57
- }
58
- const block = await deps.revealPath([blockIndex]);
59
- if (!block?.focusable) {
60
- // A refless or non-focusable block must not dead-end the move — skip it in
61
- // the move's direction (editor.md § Focus traversal).
62
- if (step !== 0)
63
- await this.moveFocus(blockIndex + step, position, options);
64
- return;
65
- }
66
- // A landing AT a block's end is a seat at an extreme, not a step onto it, so the side
67
- // it means is construct-relative (docs/design/live-mode.md § 4.2). Without this the
68
- // first byte typed after a structural landing joins the closer it landed inside.
69
- if (position === 'end')
70
- deps.edgeAffinity.noteExtreme();
71
- await consumeStickyLanding(block, blockIndex, position, deps.stickyColumn, (i) => this.moveFocus(i, position, options));
72
- }
54
+ followArrival: deps.caretLanding.followArrival,
55
+ moveFocus: (blockIndex, position, options) => dispatchMoveFocus(scope, blockIndex, position, deps.caretMemory, options)
73
56
  };
74
57
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Editor-root action bundle factory. Composes the undo controller plus four
3
- * sub-interface bundles for Editor.svelte to wire into Svelte context.
2
+ * The editor root's action bundle: the undo controller plus the four action groups
3
+ * Editor.svelte puts into Svelte context.
4
4
  */
5
5
  import type { BlockEditActions, ContainerEditActions, FocusActions, HistoryActions } from '../action-contracts';
6
6
  import type { EditorActionsDeps, UndoController } from './deps';
@@ -11,5 +11,6 @@ export interface EditorActionsBundle {
11
11
  containerEdit: ContainerEditActions;
12
12
  controller: UndoController;
13
13
  }
14
- export declare function createEditorActions(deps: EditorActionsDeps): EditorActionsBundle;
14
+ /** `announceEdit` goes to the undo controller alone (`createUndoController`). */
15
+ export declare function createEditorActions(deps: EditorActionsDeps, announceEdit: (message: string) => void): EditorActionsBundle;
15
16
  export type { EditorActionsDeps } from './deps';
@@ -1,14 +1,15 @@
1
1
  /**
2
- * Editor-root action bundle factory. Composes the undo controller plus four
3
- * sub-interface bundles for Editor.svelte to wire into Svelte context.
2
+ * The editor root's action bundle: the undo controller plus the four action groups
3
+ * Editor.svelte puts into Svelte context.
4
4
  */
5
5
  import { createUndoController } from './commit/undo-controller';
6
6
  import { createBlockEditActions } from './block-edit';
7
7
  import { createFocusActions } from './focus/focus';
8
8
  import { createHistoryActions } from './commit/history';
9
9
  import { createContainerEditActions } from './container-edit';
10
- export function createEditorActions(deps) {
11
- const controller = createUndoController(deps);
10
+ /** `announceEdit` goes to the undo controller alone (`createUndoController`). */
11
+ export function createEditorActions(deps, announceEdit) {
12
+ const controller = createUndoController(deps, announceEdit);
12
13
  return {
13
14
  blockEdit: createBlockEditActions(deps, controller),
14
15
  focus: createFocusActions(deps, controller),