@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,79 +1,92 @@
1
1
  /**
2
- * Per-level adapter for the shared block-edit core: commit ceremony, child addressing, refs and
3
- * unshare, for a top-level edit vs a container one. Both factories are the SINGLE mint point for
4
- * the commit args' doc-absolute paths, as `DocPath` — the core hands over local indices only.
5
- * G1.16 stays the runtime belt for the JS callers types don't bind.
2
+ * What the shared block-edit core needs of one block list, the document root or a container.
3
+ * The factories here are the only place the commit's document-absolute paths (`DocPath`) are
4
+ * made; the core hands over local indices only, and a dev-mode check covers JS callers.
6
5
  */
7
6
  import type { OpDescriptor } from '../schema/operations';
8
- import type { CommitAfterTick, ContainerScope } from '../action-contracts';
9
- import type { AnyBlockKind, CstNode } from '../core/nodes';
7
+ import type { CommitAfterTick, CommitLanding, InPlaceResult } from '../action-contracts';
8
+ import { type BodyParent } from '../tree-operations/node-primitives';
9
+ import type { CstNode } from '../core/nodes';
10
10
  import type { NodeView } from '../core/node-views';
11
11
  import type { StructuralChange } from '../tree-operations/structural-change';
12
12
  import type { SharingState } from '../tree-operations/sharing';
13
- import type { GrammarView } from '../schema/block-openers';
14
- import type { InlineResolverRef } from '../schema/inline-construct-policy';
15
- import type { PresentationModeGetter } from '../editor-keys';
16
- import type { BlockComponent } from '../block-component';
17
- import type { EditorActionsDeps, UndoController } from './deps';
13
+ import type { TrackedPosition } from '../tree-operations/settle';
14
+ import type { LegalWrite, WriteTarget } from '../tree-operations/content-write';
15
+ import type { Reading } from '../schema/reading';
16
+ import type { CaretMemory } from '../cursor/caret-memory';
17
+ import { type DocPath } from '../selection/path-math';
18
+ import type { CaretPosition } from '../selection/primitives';
19
+ import type { LandingOutcome, RevealPolicy } from '../selection/caret-landing';
20
+ import { type RemovalGesture } from '../selection/caret-target';
21
+ import type { EditorActionsDeps, EditorRoot, UndoController } from './deps';
18
22
  import type { NestedActionsDeps } from './nested/nested-actions';
19
23
  import type { BlockListState } from '../reactivity/block-list-state.svelte';
20
- /** Owned mutation view the core's `mutate` writes through — uniform across levels. */
24
+ /** The copied children the core's `mutate` writes through, the same shape at both levels. */
21
25
  export interface MutationView {
22
- children: CstNode[];
23
- sharing: SharingState;
24
- /** The container these children belong to, for mutations whose bytes must satisfy
25
- * its grammar (`bodyWrite`). Absent at the document root. */
26
- ownerKind?: AnyBlockKind;
27
- /** The container NODE itself, for settles that write its wrap slots. Nullable
28
- * rather than optional so each adapter answers; `undefined` is the document root. */
29
- owner: CstNode | undefined;
30
- /** The instance's block grammar, for mutations that re-parse. Absent = the global grammar. */
31
- grammar?: GrammarView;
32
- /** Live EFFECTIVE mode, for mutations whose bytes depend on what the mode paints. Nullable
33
- * rather than optional so each adapter answers; `undefined` reads as not-live. */
34
- getPresentationMode: PresentationModeGetter | undefined;
35
- /** The instance's link-reference resolver, so a rewrite parses the reference forms the render
36
- * path drew. Nullable for the same reason as the mode; `undefined` reads them as brackets. */
37
- linkRef: InlineResolverRef | undefined;
38
- /** Copy-out-of-sharing the child at `i` before an in-place write; returns the owned node. */
26
+ /** The children this mutation writes and the container they belong to. */
27
+ readonly body: BodyParent;
28
+ readonly sharing: SharingState;
29
+ /** The editor's reading, for mutations that re-parse and joins that clean up after themselves. */
30
+ readonly reading: Reading;
31
+ /** Copy the child at `i` out of the undo snapshot before an in-place write; returns the copy. */
39
32
  unshareChild(i: number): CstNode;
40
33
  }
41
34
  export interface ScopeCommitArgs {
42
- /** Snapshot coordinate in THIS scope's local index space, or 'skip' to join a caller's entry. */
35
+ /** Where undo puts the caret back, as a local index in this list, when nothing is focused. */
43
36
  snapshot: {
44
37
  index: number;
45
38
  offset: number;
46
- } | 'skip';
39
+ };
47
40
  /** Local index the edit event targets; the factory prefixes the scope's absolute path. */
48
41
  eventTarget: number;
49
42
  op: OpDescriptor;
50
43
  mutate: (view: MutationView) => StructuralChange;
51
44
  afterTick?: CommitAfterTick;
52
- /**
53
- * Leaves the dev staleness oracle checks when `mutate` returns `noop`. The owned
54
- * copy exists only after `mutate` runs, hence a stable array. Top-level only.
55
- */
45
+ /** Where the caret goes, read after the commit; built with the scope's `at`. */
46
+ landing?: CommitLanding;
47
+ /** How far the landing moves the viewport; `'into-view'` when absent. */
48
+ reveal?: RevealPolicy;
49
+ /** Filled by `mutate` for the dev-mode stale-raw check when it returns `noop`; only the root
50
+ * reads them, since a container's commit checks its whole copied container. */
56
51
  touchedNodes?: CstNode[];
57
- /**
58
- * A structural op that can legitimately no-op, so the ceremony discards the snapshot
59
- * rather than mint a dead entry. Never on content/metadata commits — their `noop`
60
- * still carries a byte change (action-contracts `DiscardIfNoop`).
61
- */
52
+ /** A structural edit that can change nothing, so the commit discards its snapshot. Never on
53
+ * content or metadata commits, whose `noop` still carries a byte change (`DiscardIfNoop`). */
62
54
  discardIfNoop?: boolean;
55
+ /** A local position the list's fix-up updates in place, read back by the landing. */
56
+ trackCaret?: TrackedPosition;
63
57
  }
64
58
  export interface CommitScope {
65
- /** Read accessor — mutation happens through the commit's owned view, never this. */
59
+ /** This list's document path: empty at the root. */
60
+ readonly path: DocPath;
61
+ /** How the editor reads its bytes: the reading-mode check and the reparse grammar. */
62
+ readonly reading: Reading;
63
+ /** How the caret arrived; a keystroke's write forgets it. */
64
+ readonly caretMemory: Pick<CaretMemory, 'forget'>;
65
+ /** Read only; mutation goes through the commit's copied view, never this. */
66
66
  children(): readonly NodeView[];
67
- refAt(i: number): BlockComponent | undefined;
68
- /** Empty replaceBlock emits `delete` (container) vs `replaceBlock{count:0}` (top-level). */
67
+ /** The list as a write target before any write: its container and line ending, and at the
68
+ * root the document with its trailing blank line. What the write rule and the trial read. */
69
+ target(): WriteTarget;
70
+ /** The id the typing batch keys on for child `i`. */
71
+ idAt(i: number): string;
72
+ /** Where the caret goes once child `i` is gone, read after the commit that removed it. */
73
+ survivor(i: number, gesture: RemovalGesture): CaretPosition | null;
74
+ /** An empty replaceBlock emits `delete` (container) or `replaceBlock{count:0}` (top-level). */
69
75
  collapseEmptyReplaceToDelete: boolean;
70
- commit(args: ScopeCommitArgs): Promise<void>;
76
+ /** Resolves to whether bytes landed. */
77
+ commit(args: ScopeCommitArgs): Promise<boolean>;
78
+ /** One keystroke into child `i`, grouped with its typing burst: the burst's undo entry is on
79
+ * the stack before `work` starts, and whatever `work` commits before it first yields joins it. */
80
+ typeIn<T>(i: number, preEditOffset: number, work: () => Promise<T>): Promise<T>;
81
+ /** The keystroke's in-place write, for a write the trial reparse keeps in its block. */
82
+ writeInPlace(i: number, write: LegalWrite, caret: number): InPlaceResult;
83
+ /** A position below child `i`. */
84
+ at(i: number, subPath: readonly number[], offset: number): CaretPosition;
85
+ /** Put the caret at `pos` through the editor's caret landing, for an edit with no commit. */
86
+ land(pos: CaretPosition): Promise<LandingOutcome>;
71
87
  }
72
- /** The byte/settle sinks' owner answer for a container commit's own scope — {@link MutationView}'s twin. */
73
- export declare const scopeParentOf: (scope: ContainerScope) => {
74
- children: CstNode[];
75
- ownerKind: "heading" | "setextHeading" | "paragraph" | "fencedCode" | "thematicBreak" | "indentedCode" | "htmlBlock" | "linkReferenceDefinition" | "tableCell" | "unrecognized" | "blockquote" | "list" | "listItem" | "table" | "tableRow" | import("../plugin").PluginBlockKind;
76
- owner: CstNode;
77
- };
78
88
  export declare function createTopLevelScope(deps: EditorActionsDeps, controller: UndoController): CommitScope;
79
89
  export declare function createContainerScope(state: BlockListState, deps: NestedActionsDeps): CommitScope;
90
+ /** The list at `parentPath` (the root's at `[]`), null where no container stands; build it after a
91
+ * gesture's earlier commit. */
92
+ export declare function createPathScope(root: EditorRoot, parentPath: DocPath): CommitScope | null;
@@ -1,76 +1,128 @@
1
1
  /**
2
- * Per-level adapter for the shared block-edit core: commit ceremony, child addressing, refs and
3
- * unshare, for a top-level edit vs a container one. Both factories are the SINGLE mint point for
4
- * the commit args' doc-absolute paths, as `DocPath` — the core hands over local indices only.
5
- * G1.16 stays the runtime belt for the JS callers types don't bind.
2
+ * What the shared block-edit core needs of one block list, the document root or a container.
3
+ * The factories here are the only place the commit's document-absolute paths (`DocPath`) are
4
+ * made; the core hands over local indices only, and a dev-mode check covers JS callers.
6
5
  */
6
+ import { blockNodeAt, documentBody } from '../tree-operations/node-primitives';
7
7
  import { ensureUnsharedPath, ensureUnsharedChild } from '../tree-operations';
8
+ import { containerScopeState } from '../tree-operations/paste/parent-scope';
8
9
  import { asDocPath } from '../selection/path-math';
9
- import { extendDocPath } from '../cursor/coordinate-spaces';
10
- /** The byte/settle sinks' owner answer for a container commit's own scope — {@link MutationView}'s twin. */
11
- export const scopeParentOf = (scope) => ({
12
- children: scope.children,
13
- ownerKind: scope.node.kind,
14
- owner: scope.node
15
- });
10
+ import { survivorAfterRemoval } from '../selection/caret-target';
11
+ import { docPathFrom, extendDocPath } from '../cursor/coordinate-spaces';
12
+ import { getStateForNode } from '../reactivity/state-registry';
13
+ import { createLeafTyping } from './leaf-write';
14
+ import { createContainerEditActions } from './container-edit';
16
15
  // ── Top-level adapter ────────────────────────────────────────────────────────
17
16
  export function createTopLevelScope(deps, controller) {
17
+ const typing = createLeafTyping(deps, controller);
18
18
  return {
19
+ path: asDocPath([]),
20
+ get reading() {
21
+ return deps.reading;
22
+ },
23
+ caretMemory: deps.caretMemory,
19
24
  children: () => deps.doc.children,
20
- refAt: (i) => deps.blockRefs[i],
25
+ target: () => deps.doc,
26
+ idAt: (i) => deps.blockIds[i],
27
+ survivor: (i, gesture) => survivorAfterRemoval(deps.doc, [i], gesture),
21
28
  collapseEmptyReplaceToDelete: false,
22
- commit({ snapshot, eventTarget, op, mutate, afterTick, touchedNodes, discardIfNoop }) {
29
+ commit({ snapshot, eventTarget, op, mutate, afterTick, landing, reveal, touchedNodes, discardIfNoop, trackCaret }) {
23
30
  return controller.commitStructural({
24
- snapshot: snapshot === 'skip'
25
- ? 'skip'
26
- : { path: asDocPath([snapshot.index]), offset: snapshot.offset },
31
+ snapshot: { path: asDocPath([snapshot.index]), offset: snapshot.offset },
27
32
  mutate: (children) => mutate({
28
- children,
33
+ body: documentBody(deps.doc, children),
29
34
  sharing: deps.sharing,
30
- owner: undefined,
31
- grammar: deps.grammar,
32
- getPresentationMode: deps.getPresentationMode,
33
- linkRef: deps.linkRef,
35
+ reading: deps.reading,
34
36
  unshareChild: (i) => ensureUnsharedPath({ children }, [i], deps.sharing)[0]
35
37
  }),
36
38
  op: { ...op, eventPath: asDocPath([eventTarget]) },
37
39
  afterTick,
40
+ landing,
41
+ reveal,
38
42
  touchedNodes,
39
- discardIfNoop
43
+ discardIfNoop,
44
+ trackCaret
40
45
  });
41
- }
46
+ },
47
+ typeIn: (i, preEditOffset, work) => typing.typeInLeaf(docPathFrom([i]), preEditOffset, deps.blockIds[i], work),
48
+ writeInPlace: (i, write, caret) => typing.writeLeafInPlace(docPathFrom([i]), write, caret),
49
+ at: (i, subPath, offset) => ({ path: docPathFrom([i, ...subPath]), offset }),
50
+ land: (pos) => deps.caretLanding.land(pos)
42
51
  };
43
52
  }
44
- // ── Container adapter ────────────────────────────────────────────────────────
45
53
  export function createContainerScope(state, deps) {
54
+ return containerScope({
55
+ node: () => deps.node,
56
+ path: () => deps.path,
57
+ state,
58
+ reading: () => deps.reading,
59
+ caretMemory: deps.caretMemory,
60
+ containerEdit: deps.parent.containerEdit
61
+ });
62
+ }
63
+ /** The list at `parentPath` (the root's at `[]`), null where no container stands; build it after a
64
+ * gesture's earlier commit. */
65
+ export function createPathScope(root, parentPath) {
66
+ const { deps, controller } = root;
67
+ if (parentPath.length === 0)
68
+ return createTopLevelScope(deps, controller);
69
+ const node = blockNodeAt(deps.doc, parentPath);
70
+ if (!node?.children)
71
+ return null;
72
+ return containerScope({
73
+ node: () => blockNodeAt(deps.doc, parentPath) ?? node,
74
+ path: () => parentPath,
75
+ state: containerScopeState({ resolveState: getStateForNode }, node),
76
+ reading: () => deps.reading,
77
+ caretMemory: deps.caretMemory,
78
+ containerEdit: createContainerEditActions(deps, controller)
79
+ });
80
+ }
81
+ function containerScope(parts) {
46
82
  return {
47
- // A fold at this container's own slot detaches it (`tree-operations/chain-rebuild.ts`), so a
48
- // post-commit read can find the scope gone rather than merely empty.
49
- children: () => deps.node?.children ?? [],
50
- refAt: (i) => state.innerBlockRefs[i],
83
+ get path() {
84
+ return docPathFrom(parts.path());
85
+ },
86
+ get reading() {
87
+ return parts.reading();
88
+ },
89
+ caretMemory: parts.caretMemory,
90
+ // A collapse at this container's own index detaches it (`tree-operations/chain-rebuild.ts`),
91
+ // so a post-commit read can find the container gone rather than merely empty.
92
+ children: () => parts.node()?.children ?? [],
93
+ target: () => ({
94
+ children: parts.node()?.children ?? [],
95
+ owner: parts.node(),
96
+ lineEnding: parts.containerEdit.lineEnding()
97
+ }),
98
+ idAt: (i) => parts.state.innerBlockIds[i],
99
+ survivor: (i, gesture) => parts.containerEdit.survivorAfterRemoval(extendDocPath(parts.path(), i), gesture),
51
100
  collapseEmptyReplaceToDelete: true,
52
- commit({ snapshot, eventTarget, op, mutate, afterTick, discardIfNoop }) {
53
- return deps.parent.containerEdit.commitContainer({
54
- containerNode: deps.node,
55
- path: deps.path,
56
- state,
57
- snapshot: snapshot === 'skip'
58
- ? 'skip'
59
- : { path: extendDocPath(deps.path, snapshot.index), offset: snapshot.offset },
60
- mutate: (scope) => mutate({
61
- children: scope.children,
62
- sharing: scope.sharing,
63
- ownerKind: scope.node.kind,
64
- owner: scope.node,
65
- grammar: deps.grammar,
66
- getPresentationMode: deps.getPresentationMode,
67
- linkRef: deps.linkRef,
68
- unshareChild: (i) => ensureUnsharedChild(scope.node, i, scope.sharing)
101
+ commit({ snapshot, eventTarget, op, mutate, afterTick, landing, reveal, discardIfNoop, trackCaret }) {
102
+ return parts.containerEdit.commitContainer({
103
+ containerNode: parts.node(),
104
+ path: parts.path(),
105
+ state: parts.state,
106
+ snapshot: { path: extendDocPath(parts.path(), snapshot.index), offset: snapshot.offset },
107
+ mutate: (view) => mutate({
108
+ body: view.body,
109
+ sharing: view.sharing,
110
+ reading: parts.reading(),
111
+ unshareChild: (i) => ensureUnsharedChild(view.node, i, view.sharing)
69
112
  }),
70
- op: { ...op, eventPath: extendDocPath(deps.path, eventTarget) },
113
+ op: { ...op, eventPath: extendDocPath(parts.path(), eventTarget) },
71
114
  afterTick,
72
- discardIfNoop
115
+ landing,
116
+ reveal,
117
+ discardIfNoop,
118
+ trackCaret
73
119
  });
74
- }
120
+ },
121
+ typeIn: (i, preEditOffset, work) => parts.containerEdit.typeInLeaf(extendDocPath(parts.path(), i), preEditOffset, parts.state.innerBlockIds[i], work),
122
+ writeInPlace: (i, write, caret) => parts.containerEdit.writeLeafInPlace(extendDocPath(parts.path(), i), write, caret),
123
+ at: (i, subPath, offset) => ({ path: docPathFrom([...parts.path(), i, ...subPath]), offset }),
124
+ // Through the editor root rather than this list's refs: a write that changed this
125
+ // container's kind replaced its component, and its refs with it.
126
+ land: (pos) => parts.containerEdit.land(pos)
75
127
  };
76
128
  }
@@ -1,7 +1,6 @@
1
1
  /**
2
- * Top-level BlockEditActions factory. Structural mutations route through the shared
3
- * `block-edit-core` against a top-level `CommitScope`; this factory adds the edge
4
- * guards and the one per-level body the core can't share, `updateBlockContent`.
2
+ * The top-level BlockEditActions: the shared `block-edit-core` against a top-level
3
+ * `CommitScope`, with the edge guards the root adds.
5
4
  */
6
5
  import type { BlockEditActions } from '../action-contracts';
7
6
  import type { EditorActionsDeps, UndoController } from './deps';
@@ -1,111 +1,35 @@
1
1
  /**
2
- * Top-level BlockEditActions factory. Structural mutations route through the shared
3
- * `block-edit-core` against a top-level `CommitScope`; this factory adds the edge
4
- * guards and the one per-level body the core can't share, `updateBlockContent`.
2
+ * The top-level BlockEditActions: the shared `block-edit-core` against a top-level
3
+ * `CommitScope`, with the edge guards the root adds.
5
4
  */
6
- import { tick } from 'svelte';
7
- import { updateNodeContent as performUpdate, ensureUnsharedPath } from '../tree-operations';
8
- import { publishScopeFold } from './ancestry-folds';
9
- import { stampStructuralChange } from '../tree-operations/structural-change';
5
+ import { documentLineEnding } from '../core/lines';
10
6
  import { createTopLevelScope } from './block-edit-scope';
11
- import { createBlockEditCore } from './block-edit-core';
7
+ import { contentUpdate, createBlockEditCore } from './block-edit-core';
12
8
  import { withEnterCompletion } from './enter-completion';
13
- import { previewContentReparse, focusAfterContentReplace } from './replacement-focus';
14
9
  export function createBlockEditActions(deps, controller) {
15
10
  const scope = createTopLevelScope(deps, controller);
16
11
  const core = createBlockEditCore(scope);
17
- // The keystroke's own work, split out so `updateBlockContent` owns the batch ceremony
18
- // around it and nothing inside can return past the pause arm.
19
- async function applyContentUpdate(blockIndex, text, preEditOffset, postEditFocusOffset) {
20
- // The structural path's live mutation runs inside the ceremony, so a
21
- // multi-block splice never touches the live children array out-of-commit.
22
- const preview = previewContentReparse(deps.doc.children[blockIndex], text, deps.grammar, undefined, blockIndex === deps.doc.children.length - 1 ? deps.doc.suffix : '');
23
- if (preview.op !== 'noop') {
24
- const focusOffset = postEditFocusOffset ?? preEditOffset ?? 0;
25
- let settled = { change: { op: 'noop' }, textStart: 0 };
26
- await scope.commit({
27
- snapshot: 'skip',
28
- eventTarget: blockIndex,
29
- op: { kind: 'updateContent', detail: { length: text.length } },
30
- // ownerKind undefined is the ANSWER, not an omission: the document root
31
- // imposes no body grammar. The suffix rides as accessors so the tail
32
- // settle folds against the live document.
33
- mutate: (view) => {
34
- view.unshareChild(blockIndex);
35
- settled = performUpdate({
36
- children: view.children,
37
- ownerKind: undefined,
38
- owner: undefined,
39
- get suffix() {
40
- return deps.doc.suffix;
41
- },
42
- set suffix(value) {
43
- deps.doc.suffix = value;
44
- }
45
- }, blockIndex, text, deps.grammar, view.sharing);
46
- stampStructuralChange(view.children, settled.change, view.sharing);
47
- return settled.change;
48
- },
49
- afterTick: () => focusAfterContentReplace([], blockIndex, settled, focusOffset, scope)
50
- });
51
- return;
52
- }
53
- // Routine typing: an out-of-ceremony in-place write, so copy the node first when a
54
- // snapshot shares it. Slotless parent on purpose — the preview already routed every
55
- // suffix materialization into the ceremony, so none can happen here.
56
- ensureUnsharedPath(deps.doc, [blockIndex], deps.sharing);
57
- const settled = performUpdate({ children: deps.doc.children, ownerKind: undefined, owner: undefined }, blockIndex, text, deps.grammar, deps.sharing);
58
- // A blank-fill settle can still FOLD here — the single-node preview probe has no
59
- // neighbour to absorb it — so this path publishes its own descriptor and re-lands the
60
- // caret, which the ceremony would otherwise have done.
61
- if (settled.change.op !== 'noop')
62
- publishScopeFold(deps, undefined, settled.change);
63
- // After that publish, as the ceremony announces after its own, and ahead of the no-fold
64
- // return: the leaf's raw is already written, and the ordinary keystroke settles to `noop`.
65
- deps.bumpContentVersion();
66
- if (settled.change.op === 'noop')
67
- return;
68
- await tick();
69
- focusAfterContentReplace([], blockIndex, settled, postEditFocusOffset ?? preEditOffset ?? 0, scope);
70
- }
71
12
  const actions = {
72
13
  // ── Structural split / merge / delete (shared core) ───────────────────
73
14
  splitBlock: (blockIndex, offset) => core.split(blockIndex, offset),
74
15
  descendToBody: (blockIndex) => core.descendToBody(blockIndex),
75
16
  insertParagraph: (boundaryIndex, text) => core.insertParagraph(boundaryIndex, text),
76
17
  async mergeWithPrevious(blockIndex) {
77
- deps.stickyColumn.reset();
78
- deps.edgeAffinity.reset();
18
+ deps.caretMemory.forget();
79
19
  if (blockIndex <= 0)
80
- return;
81
- await core.mergeWithPreviousInterior(blockIndex);
20
+ return false;
21
+ return core.mergeWithPreviousInterior(blockIndex);
82
22
  },
83
23
  async mergeWithNext(blockIndex) {
84
- deps.stickyColumn.reset();
85
- deps.edgeAffinity.reset();
24
+ deps.caretMemory.forget();
86
25
  if (blockIndex >= deps.doc.children.length - 1)
87
- return;
88
- await core.mergeWithNextInterior(blockIndex);
26
+ return false;
27
+ return core.mergeWithNextInterior(blockIndex);
89
28
  },
90
- deleteBlock: (blockIndex) => core.deleteInterior(blockIndex),
29
+ deleteBlock: (blockIndex, gesture) => core.deleteInterior(blockIndex, gesture),
91
30
  updateBlockMetadata: (blockIndex, metadata, options) => core.updateBlockMetadata(blockIndex, metadata, options),
92
- replaceBlock: (blockIndex, replacement, focus, options) => core.replaceBlock(blockIndex, replacement, focus, options),
93
- // ── Content update (per-level) ────────────────────────────────────────
94
- async updateBlockContent(blockIndex, text, preEditOffset, postEditFocusOffset) {
95
- deps.stickyColumn.reset();
96
- deps.edgeAffinity.reset();
97
- // Keyed by block, not by slot: a bare index identifies the position, so a
98
- // different block arriving at the same slot would continue its batch.
99
- controller.pushUndoSnapshotDebounced([blockIndex], preEditOffset ?? 0, deps.blockIds[blockIndex]);
100
- // The pause window opens once this keystroke's own work is done, throw included: an
101
- // unarmed batch never ends by pause and would swallow every later keystroke.
102
- try {
103
- await applyContentUpdate(blockIndex, text, preEditOffset, postEditFocusOffset);
104
- }
105
- finally {
106
- controller.armUndoPause();
107
- }
108
- }
31
+ replaceBlock: async (blockIndex, replacement, focus, options) => (await core.replaceBlock(blockIndex, replacement, focus, options)) !== null,
32
+ updateBlockContent: contentUpdate(scope)
109
33
  };
110
- return withEnterCompletion(actions, (blockIndex) => scope.children()[blockIndex]);
34
+ return withEnterCompletion(actions, (blockIndex) => scope.children()[blockIndex], deps.reading.grammar, () => documentLineEnding(deps.doc));
111
35
  }
@@ -1,8 +1,8 @@
1
1
  /**
2
- * HistoryActions factory: capture current state for the swap entry, replay the
3
- * entry's snapshot, restore the saved selection. Snapshots share the live tree's
4
- * nodes, so a restore re-marks the epoch and re-copies the children array — else a
5
- * later publish writes the stack's own entry.
2
+ * Undo and redo: capture the current state for the opposite stack, install the entry's
3
+ * snapshot, restore its selection. Snapshots share the live tree's nodes, so a restore marks
4
+ * the tree shared again and copies the children array; otherwise a later commit would write
5
+ * into the stack's own entry.
6
6
  */
7
7
  import type { HistoryActions } from '../../action-contracts';
8
8
  import type { EditorActionsDeps, UndoController } from '../deps';
@@ -1,62 +1,59 @@
1
1
  /**
2
- * HistoryActions factory: capture current state for the swap entry, replay the
3
- * entry's snapshot, restore the saved selection. Snapshots share the live tree's
4
- * nodes, so a restore re-marks the epoch and re-copies the children array — else a
5
- * later publish writes the stack's own entry.
2
+ * Undo and redo: capture the current state for the opposite stack, install the entry's
3
+ * snapshot, restore its selection. Snapshots share the live tree's nodes, so a restore marks
4
+ * the tree shared again and copies the children array; otherwise a later commit would write
5
+ * into the stack's own entry.
6
6
  */
7
7
  import { tick } from 'svelte';
8
- import { isGapSelection } from '../../undo/types';
9
8
  import { assertInvariant } from '../../assert';
10
9
  import { checkSnapshotIntegrity } from '../../invariants/snapshot-integrity';
11
- import { restoreGapCaret, restoreSelection } from '../../selection/selection-restore';
10
+ import { admitsWrite } from './reading-write-gate';
12
11
  export function createHistoryActions(deps, controller) {
13
12
  async function restore(entry, op) {
14
13
  assertInvariant('snapshot-integrity', () => {
15
14
  const violation = checkSnapshotIntegrity(entry);
16
15
  return violation && { ...violation, message: `${op}: ${violation.message}` };
17
16
  });
18
- // Ahead of the swap itself, so a landing awaiting across it reads the new stamp
19
- // whichever side of the doc write its reveal resolves on.
20
- controller.noteHistorySwap();
17
+ // Before the swap itself, so a caret placement waiting across it sees the new counter
18
+ // whichever side of the document write its scroll-into-view finishes on.
19
+ deps.caretLanding.noteTreeSwap();
21
20
  deps.sharing.markSnapshotTaken();
21
+ // The standing range addresses the outgoing tree; read during the render below, its path
22
+ // could name another block in the incoming one.
23
+ deps.selectionState.dropForDocumentSwap();
22
24
  deps.setDoc({ ...entry.snapshot, children: [...entry.snapshot.children] });
23
25
  deps.bumpContentVersion();
24
26
  // A copy: live state splices this array in place, and the entry stays on the stack.
25
27
  deps.setBlockIds([...entry.blockIds]);
26
- // The tick belongs to the doc swap above, not to the restore: the new tree
27
- // must render before the shared seam can reveal or address anything in it.
28
+ // The tick belongs to the document swap above, not to the restore: the new tree must
29
+ // render before the selection restore can scroll to or address anything in it.
28
30
  await tick();
29
- const restoreDeps = {
30
- getDoc: () => deps.doc,
31
- selectionState: deps.selectionState,
32
- getBlockElByPath: deps.getBlockElByPath,
33
- // Mount, not scroll into view: a history swap must not move the viewport for
34
- // a target already on screen.
35
- revealTarget: async (path) => (await deps.revealPath(path)) !== null
36
- };
37
- const outcome = isGapSelection(entry.selection)
38
- ? await restoreGapCaret(entry.selection.gapCaret, restoreDeps)
39
- : await restoreSelection(entry.selection, restoreDeps);
40
- // An entry can name a slot that never existed in its own snapshot (append-past-end declares
41
- // the one-past-the-end coordinate as its restore fallback). The seam declines without side
42
- // effects, so clearing is this caller's policy: the one place that knows the doc changed.
43
- if (outcome === 'unresolvable')
44
- deps.selectionState.clear();
31
+ // Into view, not held: a caret the undo put off screen comes to the nearest edge, and one
32
+ // already on screen stays where it is.
33
+ const outcome = await deps.caretLanding.restore(entry.selection, { reveal: 'into-view' });
34
+ // An entry can name an index its own snapshot never had, and the restore then declines. Clear
35
+ // here and announce it, since the swap already dropped the range without a notification.
36
+ if (outcome === 'unresolvable') {
37
+ deps.selectionState.batch(() => {
38
+ deps.selectionState.clear();
39
+ deps.selectionState.announceSelection();
40
+ });
41
+ }
45
42
  deps.events.emit('edit', { op, path: [], timestamp: Date.now() });
46
43
  }
47
- // Flush, not discard: interrupt clears the debounce timer so it can't push a stale
48
- // snapshot after the stack moves, AND emits the batch's pending `input` event so
49
- // its bytes aren't dropped from the edit channel.
44
+ // Flush, not discard: the pending batch's `input` event must still be emitted, and its timer
45
+ // must not push a stale snapshot after the stack moves.
50
46
  function beginHistorySwap() {
51
- deps.stickyColumn.reset();
52
- deps.edgeAffinity.reset();
47
+ deps.caretMemory.forget();
53
48
  controller.flushDebouncedCheckpoint();
54
49
  }
55
50
  return {
56
51
  async requestUndo() {
52
+ if (!admitsWrite(deps.reading, 'undo'))
53
+ return;
57
54
  beginHistorySwap();
58
- // Check the stack before capturing: captureCurrentState marks the whole tree
59
- // snapshot-shared, forcing copy-on-write spines on the next edit.
55
+ // Check the stack before capturing: captureCurrentState marks the whole tree as
56
+ // shared with a snapshot, forcing the next edit to copy its path first.
60
57
  if (!deps.undoManager.canUndo)
61
58
  return;
62
59
  const entry = deps.undoManager.undo(controller.captureCurrentState());
@@ -65,6 +62,8 @@ export function createHistoryActions(deps, controller) {
65
62
  await restore(entry, 'undo');
66
63
  },
67
64
  async requestRedo() {
65
+ if (!admitsWrite(deps.reading, 'redo'))
66
+ return;
68
67
  beginHistorySwap();
69
68
  if (!deps.undoManager.canRedo)
70
69
  return;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Reading mode writes no bytes, and every entry point that writes the document asks here first.
3
+ * A write in reading mode is declined, and a dev build names the operation and its caller, since
4
+ * the gesture that reached it offered a write the mode should not have. Ask synchronously, before
5
+ * the first await, or the report loses the caller.
6
+ */
7
+ import type { Reading } from '../../schema/reading';
8
+ export declare const READING_WRITE_TAG = "reading-write";
9
+ /**
10
+ * Whether a write naming `op` may land: false in reading mode, with a dev warning that names the
11
+ * block kind `kindOf` answers, so a plugin author can tell which of their blocks asked.
12
+ */
13
+ export declare function admitsWrite(reading: Reading, op: string, kindOf?: () => string | undefined): boolean;
14
+ /**
15
+ * For an undo snapshot pushed ahead of a write: declined in reading mode so no empty entry is
16
+ * left on the stack, and silent, because the write that follows reports itself.
17
+ */
18
+ export declare function admitsSnapshot(reading: Reading): boolean;