@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,60 +1,73 @@
1
1
  /**
2
- * The parent shapes, mints and path walks under every tree op. Children-array contract: an op
3
- * mutating a container's top-level children takes the array as a parameter and mutates that,
4
- * never `node.children` (the caller owns and republishes it, so a direct splice is overwritten).
5
- * A descendant found by walking the live tree is the exception: mutate it in place on a
6
- * caller-unshared spine (`unshare.ts`), a STRUCTURAL one via `commitMultiScope`.
2
+ * The parent shapes, node constructors and path walks under every tree op. An op mutating a
3
+ * container's children takes the array as a parameter, never `node.children`, which the caller
4
+ * owns and writes back; a descendant found by walking the live tree is mutated in place after its
5
+ * ancestors are copied (`unshare.ts`), or through `commitMultiScope` when the change is structural.
7
6
  */
8
- import type { AnyBlockKind, CstNode, Document } from '../core/nodes';
7
+ import type { CstNode, Document } from '../core/nodes';
9
8
  import type { DocumentView, NodeView } from '../core/node-views';
10
9
  import type { GrammarView } from '../schema/block-openers';
10
+ import { type LineEnding } from '../core/lines';
11
11
  /** A children array an op mutates structurally: splice, delete, reorder. */
12
12
  export type NodeParent = {
13
13
  children: CstNode[];
14
14
  };
15
15
  /**
16
- * A {@link NodeParent} that has answered which container owns it, for the owner's `bodyWrite`
17
- * grammar and wrap slots. Nullable, not optional: skipping the question is a compile error.
16
+ * A {@link NodeParent} that names the container owning it, for the owner's `bodyWrite` rule and
17
+ * `innerPrefix`/`innerSuffix`. Nullable, not optional: leaving the owner out is a compile error.
18
18
  */
19
19
  export type BodyParent = NodeParent & {
20
- ownerKind: AnyBlockKind | undefined;
20
+ /** The container these children belong to; undefined is the document root, which has no rule. */
21
21
  owner: CstNode | undefined;
22
+ /** The document's line ending, which every line an op writes into these children takes. */
23
+ lineEnding: LineEnding;
22
24
  suffix?: string;
23
25
  };
24
- /** What the byte sinks accept: a whole `Document` IS the answer (the root owns no body grammar). */
26
+ /** What the content writes accept: a whole `Document` counts as one (the root has no body rule). */
25
27
  export type BodyParentArg = BodyParent | Document;
26
28
  /**
27
- * What the separator settles accept: anything that can answer where the body starts. Wider than
28
- * the byte sinks, since a settle writes a line ending, not body text.
29
+ * The document as a body: its children (the commit's working copy, when given) and its trailing
30
+ * blank line, read and written through to the live document so a rollback restores it.
31
+ */
32
+ export declare function documentBody(doc: Document, children?: CstNode[]): Document & BodyParent;
33
+ /**
34
+ * What the separator fix-ups accept: anything that can say where the body starts. Wider than
35
+ * the content writes, since a fix-up writes a line ending, not body text.
29
36
  */
30
37
  export type SeparatorParent = {
31
38
  kind?: string;
32
- ownerKind?: AnyBlockKind;
33
39
  suffix?: string;
34
40
  children?: CstNode[];
35
41
  owner?: CstNode;
36
42
  };
37
- /** Text made legal as a child's raw inside a container of kind `ownerKind`. */
38
- export declare function normalizeBodyWrite(ownerKind: AnyBlockKind | undefined, raw: string): string;
39
- /** {@link normalizeBodyWrite} for a sink holding the parent rather than the owner's kind. */
43
+ /** The line ending an op writing into `parent`'s children gives a new line. */
44
+ export declare const parentLineEnding: (parent: BodyParentArg) => LineEnding;
45
+ /**
46
+ * Text made legal as a child's raw inside `owner`'s body. A child's bytes are never the
47
+ * container's own syntax, so the write is always `literal`.
48
+ */
49
+ export declare function normalizeBodyWrite(owner: NodeView | undefined, raw: string, lineEnding: LineEnding): string;
50
+ /** {@link normalizeBodyWrite} for a caller holding the parent rather than the owner. */
40
51
  export declare const forBody: (parent: BodyParentArg, raw: string) => string;
41
52
  /**
42
- * `raw` made legal as `node`'s OWN bytes, for a sink that REPLACES the node with a reparse: the
43
- * reparse re-derives metadata, so structure the rule restores from the old metadata lands first.
53
+ * `raw` made legal as `node`'s own bytes before a reparse replaces the node; the rule runs first
54
+ * because it reads the node's metadata as it stands, which the reparse re-derives.
44
55
  */
45
- export declare function normalizeOwnRaw(node: NodeView, raw: string): string;
56
+ export declare function normalizeOwnRaw(node: NodeView, raw: string, lineEnding: LineEnding): string;
46
57
  /**
47
- * Write `raw` as `node`'s OWN bytes through its kind's rule, in place. Every sink writing a
48
- * leaf's bytes without the kind's surface in front of it owes this or {@link normalizeOwnRaw}.
58
+ * Write `raw` as `node`'s own bytes through its kind's rule, in place. Every write of a leaf's
59
+ * bytes that bypasses the kind's editable element must go through here or {@link normalizeOwnRaw}.
49
60
  */
50
- export declare function writeOwnRaw(node: CstNode, raw: string, grammar: GrammarView | undefined): void;
61
+ export declare function writeOwnRaw(node: CstNode, raw: string, lineEnding: LineEnding, grammar: GrammarView): void;
62
+ /** Bytes already made legal for `node`, written in place with its parse-owned metadata. */
63
+ export declare function installOwnRaw(node: CstNode, legal: string, grammar: GrammarView): void;
51
64
  /**
52
- * Every argument is required: a paragraph's raw ENDS in a line ending, so a mint site answers
53
- * which document it lands in (G4.20). Fresh every call, or a shared instance aliases across
54
- * tree positions (G1.9).
65
+ * A fresh object every call, since one instance at two tree positions would share its bytes
66
+ * (G1.9). `lineEnding` is required because a paragraph's raw ends in the document's ending.
55
67
  */
56
68
  export declare function paragraphNode(leadingTrivia: string, text: string, lineEnding: string): CstNode;
57
- /** The empty-paragraph placeholder keeping an emptied document or container caret-addressable. */
69
+ /** An empty paragraph: the one block an emptied document keeps, and the backfill for a container a
70
+ * parse or a write builds with no children (one a delete empties is removed instead). */
58
71
  export declare function emptyParagraph(leadingTrivia: string, lineEnding: string): CstNode;
59
72
  export declare function nodeAt(doc: Document, path: number[]): CstNode | Document | null;
60
73
  export declare function nodeAt(doc: DocumentView, path: number[]): NodeView | DocumentView | null;
@@ -64,12 +77,12 @@ export declare function blockNodeAt(doc: DocumentView, path: number[]): NodeView
64
77
  export declare function isBlockNode(node: CstNode | Document): node is CstNode;
65
78
  export declare function isBlockNode(node: NodeView | DocumentView): node is NodeView;
66
79
  /**
67
- * The stand-in for whatever the user types next: the maximally-continuable line, so a probe
68
- * answers for the worst case. Openers are arbitrary code, so `probeLineOpensAsProse` is the
69
- * runtime check that it still reads as prose.
80
+ * The stand-in for whatever the user types next, the line most likely to continue any block;
81
+ * `probeLineOpensAsProse` checks at runtime that no registered opener claims it.
70
82
  */
71
83
  export declare const NEXT_PROSE_LINE = "x";
72
84
  /** First node inherits the original block's leadingTrivia; subsequent nodes keep theirs. */
73
85
  export declare function normalizeReplacementTrivia(original: CstNode, replacement: CstNode[]): CstNode[];
74
- /** Ensure every container has at least one child block, so the cursor always has a target. */
75
- export declare function ensureEditableContainers(node: CstNode): void;
86
+ /** Give every container that must hold a child an empty paragraph, so the caret always has a
87
+ * target. A container with no bytes yet backfills its lines in `ending`, the document's. */
88
+ export declare function ensureEditableContainers(node: CstNode, ending: LineEnding): void;
@@ -1,56 +1,83 @@
1
1
  /**
2
- * The parent shapes, mints and path walks under every tree op. Children-array contract: an op
3
- * mutating a container's top-level children takes the array as a parameter and mutates that,
4
- * never `node.children` (the caller owns and republishes it, so a direct splice is overwritten).
5
- * A descendant found by walking the live tree is the exception: mutate it in place on a
6
- * caller-unshared spine (`unshare.ts`), a STRUCTURAL one via `commitMultiScope`.
2
+ * The parent shapes, node constructors and path walks under every tree op. An op mutating a
3
+ * container's children takes the array as a parameter, never `node.children`, which the caller
4
+ * owns and writes back; a descendant found by walking the live tree is mutated in place after its
5
+ * ancestors are copied (`unshare.ts`), or through `commitMultiScope` when the change is structural.
7
6
  */
8
- import { parse } from '../core/parser';
9
- import { trailingLineEnding } from '../core/lines';
10
- import { getBlockKindDescriptor, tryGetBlockKindDescriptor } from '../schema/block-kind-descriptor';
7
+ import { readBlocks } from '../core/parser';
8
+ import { documentLineEnding, ownTrailingLineEnding, trailingLineEnding } from '../core/lines';
9
+ import { mustHoldChild, tryGetBlockKindDescriptor } from '../schema/block-kind-descriptor';
11
10
  import { reservedChromeKindOf } from '../schema/reserved-chrome';
12
- const ownerKindOf = (parent) => 'ownerKind' in parent ? parent.ownerKind : undefined;
13
- /** Text made legal as a child's raw inside a container of kind `ownerKind`. */
14
- export function normalizeBodyWrite(ownerKind, raw) {
15
- const owner = ownerKind === undefined ? undefined : tryGetBlockKindDescriptor(ownerKind);
16
- return owner?.bodyWrite?.normalize(raw) ?? raw;
11
+ import { adoptParsedMetadata } from '../schema/container-raw';
12
+ /**
13
+ * The document as a body: its children (the commit's working copy, when given) and its trailing
14
+ * blank line, read and written through to the live document so a rollback restores it.
15
+ */
16
+ export function documentBody(doc, children = doc.children) {
17
+ // No `childIds`: an op that tracks ids on its parent must not splice the live document's array.
18
+ return {
19
+ kind: 'document',
20
+ prefix: doc.prefix,
21
+ children,
22
+ owner: undefined,
23
+ lineEnding: documentLineEnding(doc),
24
+ get suffix() {
25
+ return doc.suffix;
26
+ },
27
+ set suffix(value) {
28
+ doc.suffix = value;
29
+ }
30
+ };
17
31
  }
18
- /** {@link normalizeBodyWrite} for a sink holding the parent rather than the owner's kind. */
19
- export const forBody = (parent, raw) => normalizeBodyWrite(ownerKindOf(parent), raw);
32
+ /** The line ending an op writing into `parent`'s children gives a new line. */
33
+ export const parentLineEnding = (parent) => 'lineEnding' in parent ? parent.lineEnding : documentLineEnding(parent);
20
34
  /**
21
- * `raw` made legal as `node`'s OWN bytes, for a sink that REPLACES the node with a reparse: the
22
- * reparse re-derives metadata, so structure the rule restores from the old metadata lands first.
35
+ * Text made legal as a child's raw inside `owner`'s body. A child's bytes are never the
36
+ * container's own syntax, so the write is always `literal`.
23
37
  */
24
- export function normalizeOwnRaw(node, raw) {
25
- return tryGetBlockKindDescriptor(node.kind)?.normalizeRawWrite?.(raw, node) ?? raw;
38
+ export function normalizeBodyWrite(owner, raw, lineEnding) {
39
+ if (!owner)
40
+ return raw;
41
+ const rule = tryGetBlockKindDescriptor(owner.kind)?.bodyWrite;
42
+ return rule ? rule.normalize(raw, { node: owner, mode: 'literal', lineEnding }) : raw;
26
43
  }
44
+ /** {@link normalizeBodyWrite} for a caller holding the parent rather than the owner. */
45
+ export const forBody = (parent, raw) => normalizeBodyWrite('owner' in parent ? parent.owner : undefined, raw, parentLineEnding(parent));
27
46
  /**
28
- * Write `raw` as `node`'s OWN bytes through its kind's rule, in place. Every sink writing a
29
- * leaf's bytes without the kind's surface in front of it owes this or {@link normalizeOwnRaw}.
47
+ * `raw` made legal as `node`'s own bytes before a reparse replaces the node; the rule runs first
48
+ * because it reads the node's metadata as it stands, which the reparse re-derives.
30
49
  */
31
- export function writeOwnRaw(node, raw, grammar) {
32
- const descriptor = tryGetBlockKindDescriptor(node.kind);
33
- const legal = descriptor?.normalizeRawWrite?.(raw, node) ?? raw;
50
+ export function normalizeOwnRaw(node, raw, lineEnding) {
51
+ const rule = tryGetBlockKindDescriptor(node.kind)?.rawWrite;
52
+ return rule ? rule.normalize(raw, { node, mode: 'literal', lineEnding }) : raw;
53
+ }
54
+ /**
55
+ * Write `raw` as `node`'s own bytes through its kind's rule, in place. Every write of a leaf's
56
+ * bytes that bypasses the kind's editable element must go through here or {@link normalizeOwnRaw}.
57
+ */
58
+ export function writeOwnRaw(node, raw, lineEnding, grammar) {
59
+ installOwnRaw(node, normalizeOwnRaw(node, raw, lineEnding), grammar);
60
+ }
61
+ /** Bytes already made legal for `node`, written in place with its parse-owned metadata. */
62
+ export function installOwnRaw(node, legal, grammar) {
34
63
  node.raw = legal;
35
64
  // A context-dependent kind's raw does not reparse to itself, so a fragment parse would only
36
65
  // mis-read metadata that was never parse-derived.
37
- if (descriptor?.contextDependentKind)
66
+ if (tryGetBlockKindDescriptor(node.kind)?.contextDependentKind)
38
67
  return;
39
68
  // In place means no reparse replaces the node, so parse-owned metadata re-derives here.
40
- const reparsed = parse(legal, { grammar, scope: 'fragment' }).children;
41
- if (reparsed.length === 1 && reparsed[0].kind === node.kind)
42
- node.metadata = reparsed[0].metadata;
69
+ adoptParsedMetadata(node, readBlocks(legal, { grammar, scope: 'fragment' }).children);
43
70
  }
44
- // ── Node minting ──
71
+ // ── Node constructors ──
45
72
  /**
46
- * Every argument is required: a paragraph's raw ENDS in a line ending, so a mint site answers
47
- * which document it lands in (G4.20). Fresh every call, or a shared instance aliases across
48
- * tree positions (G1.9).
73
+ * A fresh object every call, since one instance at two tree positions would share its bytes
74
+ * (G1.9). `lineEnding` is required because a paragraph's raw ends in the document's ending.
49
75
  */
50
76
  export function paragraphNode(leadingTrivia, text, lineEnding) {
51
77
  return { kind: 'paragraph', leadingTrivia, raw: text + lineEnding };
52
78
  }
53
- /** The empty-paragraph placeholder keeping an emptied document or container caret-addressable. */
79
+ /** An empty paragraph: the one block an emptied document keeps, and the backfill for a container a
80
+ * parse or a write builds with no children (one a delete empties is removed instead). */
54
81
  export function emptyParagraph(leadingTrivia, lineEnding) {
55
82
  return paragraphNode(leadingTrivia, '', lineEnding);
56
83
  }
@@ -72,9 +99,8 @@ export function isBlockNode(node) {
72
99
  }
73
100
  // ── Grammar stand-in and replacement shape ──
74
101
  /**
75
- * The stand-in for whatever the user types next: the maximally-continuable line, so a probe
76
- * answers for the worst case. Openers are arbitrary code, so `probeLineOpensAsProse` is the
77
- * runtime check that it still reads as prose.
102
+ * The stand-in for whatever the user types next, the line most likely to continue any block;
103
+ * `probeLineOpensAsProse` checks at runtime that no registered opener claims it.
78
104
  */
79
105
  export const NEXT_PROSE_LINE = 'x';
80
106
  /** First node inherits the original block's leadingTrivia; subsequent nodes keep theirs. */
@@ -87,31 +113,29 @@ export function normalizeReplacementTrivia(original, replacement) {
87
113
  });
88
114
  }
89
115
  // ── Editable container backfill ──
90
- /** Ensure every container has at least one child block, so the cursor always has a target. */
91
- export function ensureEditableContainers(node) {
92
- // A whole-block-focus kind is childless by design: the block itself is the caret target,
93
- // and a backfilled paragraph its raw can't account for trips opaque-stale-raw.
94
- if (getBlockKindDescriptor(node.kind).blockFocus === 'whole-block')
116
+ /** Give every container that must hold a child an empty paragraph, so the caret always has a
117
+ * target. A container with no bytes yet backfills its lines in `ending`, the document's. */
118
+ export function ensureEditableContainers(node, ending) {
119
+ if (!node.children)
95
120
  return;
96
- if (node.children !== undefined) {
97
- if (node.children.length === 0) {
98
- // discovered-descendant mutation, see file header
99
- const chromeKind = reservedChromeKindOf(node.kind);
100
- // Backfilled lines are pure line ending, so they take the container's own (G4.20).
101
- const lineEnding = trailingLineEnding(node.raw);
102
- // A chrome-declaring container re-mints its child-0 leaf too, or the backfilled
103
- // paragraph would occupy the reserved slot (G1.14).
104
- if (chromeKind !== undefined) {
105
- // Runtime chrome kind, so the mint takes the generic cast.
106
- node.children.push({ kind: chromeKind, leadingTrivia: '', raw: lineEnding });
107
- }
108
- node.children.push(emptyParagraph('', lineEnding));
109
- // The synthesized paragraph's ending already represents the blank `parseBlocks`
110
- // routed into innerPrefix; keeping both double-counts the line on rebuild.
111
- node.innerPrefix = '';
112
- }
113
- for (const child of node.children) {
114
- ensureEditableContainers(child);
121
+ if (node.children.length === 0 && mustHoldChild(node.kind)) {
122
+ // An in-place write on a descendant found by walking, see the file header.
123
+ const chromeKind = reservedChromeKindOf(node.kind);
124
+ const lineEnding = trailingLineEnding(node.raw, ending);
125
+ // A container with a reserved title child re-creates that child too, or the backfilled
126
+ // paragraph would occupy its position (G1.14).
127
+ if (chromeKind !== undefined) {
128
+ // The title child's kind is only known at runtime, so the literal takes the generic cast.
129
+ node.children.push({ kind: chromeKind, leadingTrivia: '', raw: lineEnding });
115
130
  }
131
+ // The paragraph holds the container's last line, so an open last line stays open in it.
132
+ const lastLineEnding = node.raw === '' ? lineEnding : ownTrailingLineEnding(node.raw);
133
+ node.children.push(emptyParagraph('', lastLineEnding));
134
+ // The synthesized paragraph's ending already represents the blank `parseBlocks`
135
+ // routed into innerPrefix; keeping both double-counts the line on rebuild.
136
+ node.innerPrefix = '';
137
+ }
138
+ for (const child of node.children) {
139
+ ensureEditableContainers(child, ending);
116
140
  }
117
141
  }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The document's open last line: only the last line may lack a line ending, and after a structural
3
+ * edit it lacks one exactly when it did before, unless that line is blank. The commit calls these
4
+ * steps around every structural edit, so no edit writes the tail's ending by hand
5
+ * (`docs/design/syntax-tree.md` § Blank lines).
6
+ */
7
+ import type { Document } from '../core/nodes';
8
+ import type { DocumentView, NodeView } from '../core/node-views';
9
+ import type { BodyParent } from './node-primitives';
10
+ import type { StructuralChange } from './structural-change';
11
+ import type { SharingState } from './sharing';
12
+ import type { GrammarView } from '../schema/block-openers';
13
+ /** Whether the document's last line has no line ending; the commit reads it before the edit. */
14
+ export declare function endsOpen(doc: DocumentView): boolean;
15
+ /** Every block the change placed, and the block above them, ends its line. Run before the
16
+ * separator fix-up, which reads their bytes side by side. */
17
+ export declare function endWindowLines(body: BodyParent, change: StructuralChange, sharing: SharingState, grammar: GrammarView): void;
18
+ /** When the document ended open before the commit, the block now last gives its ending up, unless
19
+ * its last line is blank. Run after the containers rebuild, since it writes each level's raw. */
20
+ export declare function keepOpenTail(doc: Document, wasOpen: boolean, sharing: SharingState, grammar: GrammarView): void;
21
+ /**
22
+ * Whether the block that holds `node`'s last line, found down the path the release walks, ends
23
+ * in a blank line; a quote's own trailing `>` line is its own and has a marker, so it is not.
24
+ */
25
+ export declare function holdsBlankLastLine(node: NodeView): boolean;
@@ -0,0 +1,100 @@
1
+ /**
2
+ * The document's open last line: only the last line may lack a line ending, and after a structural
3
+ * edit it lacks one exactly when it did before, unless that line is blank. The commit calls these
4
+ * steps around every structural edit, so no edit writes the tail's ending by hand
5
+ * (`docs/design/syntax-tree.md` § Blank lines).
6
+ */
7
+ import { endsInBlankLine, ownTrailingLineEnding, terminateLine, trimTrailingLineEnding } from '../core/lines';
8
+ import { ensureUnsharedChild } from './unshare';
9
+ import { dropChildSpans } from '../schema/child-spans';
10
+ import { getBlockKindDescriptor, isGridDescriptor, isGridKind, tryGetBlockKindDescriptor } from '../schema/block-kind-descriptor';
11
+ import { reservedChromeKindOf } from '../schema/reserved-chrome';
12
+ import { followBytes } from '../schema/container-raw';
13
+ // ── The commit's steps ───────────────────────────────────────────────────────
14
+ /** Whether the document's last line has no line ending; the commit reads it before the edit. */
15
+ export function endsOpen(doc) {
16
+ const last = doc.children.at(-1);
17
+ return doc.suffix === '' && last !== undefined && ownTrailingLineEnding(last.raw) === '';
18
+ }
19
+ /** Every block the change placed, and the block above them, ends its line. Run before the
20
+ * separator fix-up, which reads their bytes side by side. */
21
+ export function endWindowLines(body, change, sharing, grammar) {
22
+ if (change.op === 'noop')
23
+ return;
24
+ const placed = change.op === 'insert' ? change.count : change.op === 'replace' ? change.newCount : 0;
25
+ const children = body.children;
26
+ // A title row sits on the container's own opener line, so it is no line of the body's.
27
+ const bodyStart = body.owner && reservedChromeKindOf(body.owner.kind) ? 1 : 0;
28
+ const lo = Math.max(change.at - 1, bodyStart);
29
+ const hi = Math.min(change.at + placed, children.length);
30
+ for (let i = lo; i < hi; i++) {
31
+ if (!isLine(body.owner, children[i]) || ownTrailingLineEnding(children[i].raw) !== '')
32
+ continue;
33
+ terminateLastLine(ensureUnsharedChild(body, i, sharing), body.lineEnding, sharing, grammar);
34
+ }
35
+ }
36
+ /** When the document ended open before the commit, the block now last gives its ending up, unless
37
+ * its last line is blank. Run after the containers rebuild, since it writes each level's raw. */
38
+ export function keepOpenTail(doc, wasOpen, sharing, grammar) {
39
+ if (!wasOpen || doc.suffix !== '')
40
+ return;
41
+ const lastIndex = doc.children.length - 1;
42
+ const last = doc.children[lastIndex];
43
+ if (!last || ownTrailingLineEnding(last.raw) === '' || holdsBlankLastLine(last))
44
+ return;
45
+ releaseLastLine(ensureUnsharedChild(doc, lastIndex, sharing), sharing, grammar);
46
+ }
47
+ /**
48
+ * Whether the block that holds `node`'s last line, found down the path the release walks, ends
49
+ * in a blank line; a quote's own trailing `>` line is its own and has a marker, so it is not.
50
+ */
51
+ export function holdsBlankLastLine(node) {
52
+ const last = node.children?.at(-1);
53
+ const descriptor = tryGetBlockKindDescriptor(node.kind);
54
+ const descends = (descriptor?.containerContract === 'strip' && !node.innerSuffix) ||
55
+ (isGridDescriptor(descriptor) && last !== undefined && isGridKind(last.kind));
56
+ return last && descends ? holdsBlankLastLine(last) : endsInBlankLine(node.raw);
57
+ }
58
+ // ── The walk down the last line ──────────────────────────────────────────────
59
+ /** A row's cells sit inside one line, so only a grid's own rows count as lines of its body. */
60
+ function isLine(owner, child) {
61
+ return !owner || !isGridKind(owner.kind) || isGridKind(child.kind);
62
+ }
63
+ /**
64
+ * End the node's last line in `ending`, in its own raw and in every node below holding that line,
65
+ * so a container's other lines (a quote's lazy continuation lines) keep their bytes.
66
+ */
67
+ function terminateLastLine(node, ending, sharing, grammar) {
68
+ rewriteLastLine(node, (raw) => terminateLine(raw, ending), sharing, grammar);
69
+ }
70
+ function releaseLastLine(node, sharing, grammar) {
71
+ rewriteLastLine(node, trimTrailingLineEnding, sharing, grammar);
72
+ }
73
+ function rewriteLastLine(node, write, sharing, grammar) {
74
+ const wasEnded = node.raw.endsWith('\n');
75
+ const raw = write(node.raw);
76
+ if (raw === node.raw)
77
+ return;
78
+ const rawBefore = node.raw;
79
+ node.raw = raw;
80
+ // A container's metadata can hold its closing line's ending.
81
+ followBytes(node, rawBefore, grammar);
82
+ const last = (node.children?.length ?? 0) - 1;
83
+ if (last < 0)
84
+ return;
85
+ const descriptor = getBlockKindDescriptor(node.kind);
86
+ if (descriptor.containerContract === 'strip') {
87
+ dropChildSpans(node);
88
+ // A blank line closing the body is the last line; the parser keeps it out of the suffix
89
+ // while it is unended, so a last child already ended the other way marks it too.
90
+ if (node.innerSuffix || node.children[last].raw.endsWith('\n') !== wasEnded) {
91
+ node.innerSuffix = write(node.innerSuffix ?? '');
92
+ return;
93
+ }
94
+ }
95
+ else if (!isGridDescriptor(descriptor) || !isGridKind(node.children[last].kind)) {
96
+ // A grid's rows are whole lines; a row's cells and an opaque body sit inside a line.
97
+ return;
98
+ }
99
+ rewriteLastLine(ensureUnsharedChild(node, last, sharing), write, sharing, grammar);
100
+ }
@@ -1,3 +1,16 @@
1
1
  import type { CstNode } from '../core/nodes';
2
- /** Parse one block's `raw` and return its first block, falling back to a paragraph node. */
3
- export declare function parseFirstBlock(raw: string): CstNode;
2
+ import type { FragmentReader } from './list/task-paragraph';
3
+ /** Read one block's `raw` with the reader of the slot it lands in and return its first block,
4
+ * falling back to a paragraph node. */
5
+ export declare function parseFirstBlock(raw: string, read: FragmentReader): CstNode;
6
+ export interface CutResidue {
7
+ /** The rest of the cut line with its line ending when that rest is only whitespace, else ''. */
8
+ endedLine: string;
9
+ /** Every block the text after `endedLine` parses to. */
10
+ blocks: CstNode[];
11
+ }
12
+ /**
13
+ * The text after a paste's cut, as blocks read with the reader of the slot they land in; a line
14
+ * break left at its head comes back as `endedLine`, so the caller decides where the break goes.
15
+ */
16
+ export declare function parseCutResidue(text: string, lineEnding: '\n' | '\r\n', read: FragmentReader): CutResidue;
@@ -1,8 +1,23 @@
1
- import { parse } from '../core/parser';
2
- /** Parse one block's `raw` and return its first block, falling back to a paragraph node. */
3
- export function parseFirstBlock(raw) {
4
- const doc = parse(raw, { scope: 'fragment' });
1
+ import { isBlankLine } from '../core/lines';
2
+ /** Read one block's `raw` with the reader of the slot it lands in and return its first block,
3
+ * falling back to a paragraph node. */
4
+ export function parseFirstBlock(raw, read) {
5
+ const doc = read(raw);
5
6
  if (doc.children.length > 0)
6
7
  return doc.children[0];
7
8
  return { kind: 'paragraph', leadingTrivia: '', raw };
8
9
  }
10
+ /**
11
+ * The text after a paste's cut, as blocks read with the reader of the slot they land in; a line
12
+ * break left at its head comes back as `endedLine`, so the caller decides where the break goes.
13
+ */
14
+ export function parseCutResidue(text, lineEnding, read) {
15
+ const lineBreak = /\r?\n/.exec(text);
16
+ const endedLine = lineBreak && isBlankLine(text.slice(0, lineBreak.index))
17
+ ? text.slice(0, lineBreak.index + lineBreak[0].length)
18
+ : '';
19
+ const body = text.slice(endedLine.length);
20
+ if (body === '')
21
+ return { endedLine, blocks: [] };
22
+ return { endedLine, blocks: read(body + lineEnding).children };
23
+ }
@@ -1,12 +1,11 @@
1
- /** Applies the results a paste surface hook produced to the document. */
1
+ /** Applies the results a paste surface hook produced to the document. `start` is where the paste
2
+ * began, which each commit records as undo's caret. */
3
+ import type { CommitSnapshotArg } from '../../action-contracts';
2
4
  import type { InlinePasteResult, StructuralPasteResult } from '../paste-surfaces';
3
5
  import type { PasteDispatchContext, InlineCaretLanding } from './dispatch';
4
6
  /**
5
- * Apply an inline paste. Single-block routes through `updateBlockContent`; cross-block
6
- * commits the same re-parse funnel directly against the parent scope, because the
7
- * originating bundle may not match the target's level. The single-block route stays
8
- * synchronous through its mutation so the caller can set cursor state before the first
9
- * reactivity flush.
7
+ * Apply an inline paste, reporting where the caret lands in the stored bytes. A cross-block paste
8
+ * commits at the parent list, since the originating action bundle may not match the target's level.
10
9
  */
11
- export declare function applyInlineResult(targetPath: number[], result: InlinePasteResult, ctx: PasteDispatchContext): Promise<InlineCaretLanding | undefined>;
12
- export declare function applyStructuralResult(targetPath: number[], result: StructuralPasteResult, ctx: PasteDispatchContext, trailingSeparator?: string): Promise<void>;
10
+ export declare function applyInlineResult(targetPath: number[], result: InlinePasteResult, ctx: PasteDispatchContext, start: CommitSnapshotArg): Promise<InlineCaretLanding | undefined>;
11
+ export declare function applyStructuralResult(targetPath: number[], result: StructuralPasteResult, ctx: PasteDispatchContext, start: CommitSnapshotArg, trailingSeparator?: string): Promise<void>;
@@ -1,75 +1,45 @@
1
- /** Applies the results a paste surface hook produced to the document. */
2
- import { settledCaretTarget, updateNodeContent } from '../content-write';
3
- import { ensureUnsharedChild } from '../unshare';
4
- import { docPathFrom } from '../../cursor/coordinate-spaces';
5
- import { stampStructuralChange } from '../structural-change';
6
- import { resolveParentScope } from './parent-scope';
7
- import { replaceBlockAtParent } from './replace-block-at-parent';
1
+ /** Applies the results a paste surface hook produced to the document. `start` is where the paste
2
+ * began, which each commit records as undo's caret. */
3
+ import { leafAtRawOffset } from '../container-offsets';
4
+ import { blockNodeAt } from '../node-primitives';
8
5
  /**
9
- * Apply an inline paste. Single-block routes through `updateBlockContent`; cross-block
10
- * commits the same re-parse funnel directly against the parent scope, because the
11
- * originating bundle may not match the target's level. The single-block route stays
12
- * synchronous through its mutation so the caller can set cursor state before the first
13
- * reactivity flush.
6
+ * Apply an inline paste, reporting where the caret lands in the stored bytes. A cross-block paste
7
+ * commits at the parent list, since the originating action bundle may not match the target's level.
14
8
  */
15
- export async function applyInlineResult(targetPath, result, ctx) {
16
- if (ctx.undoEntry === 'join') {
17
- return commitInlineJoin(targetPath, result, ctx);
9
+ export async function applyInlineResult(targetPath, result, ctx, start) {
10
+ if (ctx.crossBlock) {
11
+ return commitInlineCrossBlock(targetPath, result, ctx, start);
18
12
  }
19
- // Unawaited: the caller sets pendingCursorOffset in the same synchronous block, so both
20
- // land in one reactive flush.
13
+ // Unawaited, so the caller places the caret before the first reactive flush and both land in
14
+ // that one flush.
21
15
  const blockIndex = targetPath[targetPath.length - 1];
22
- void ctx.blockEdit.updateBlockContent(blockIndex, result.newRaw, result.caretOffset);
23
- return undefined;
16
+ const write = ctx.blockEdit.updateBlockContent(blockIndex, result.newRaw, 'literal', start.offset, result.caretOffset);
17
+ return write.admitted ? { path: targetPath, offset: write.caret } : undefined;
24
18
  }
25
19
  /**
26
- * Cross-block inline paste. `'join'` means the caller already pushed the covering
27
- * snapshot, not that the ceremony is skipped — committing is what keeps the parent's
28
- * `childIds` aligned and puts the insertion on the `edit` stream. The mutation routes
29
- * through the same-slot re-parse funnel, so a paste completing marker syntax re-mints the
30
- * slot at the reparsed kind instead of leaving the old kind holding foreign bytes.
20
+ * Cross-block inline paste, committed at the parent list so its `childIds` stay aligned. The write
21
+ * goes through the reparse path, so a paste that completes marker syntax changes the block's kind.
31
22
  */
32
- async function commitInlineJoin(targetPath, result, ctx) {
33
- const scope = resolveParentScope(ctx.doc, targetPath, ctx.controller);
34
- if (!scope)
35
- return undefined;
36
- const leafIndex = targetPath[targetPath.length - 1];
37
- let settled = { change: { op: 'noop' }, textStart: 0 };
38
- let siblings = [];
39
- await ctx.controller.commitMultiScope({
40
- scopes: [scope],
41
- snapshot: 'skip',
42
- mutate: ([view]) => {
43
- // The slot may still be snapshot-shared, and the funnel's same-kind branch writes
44
- // its raw in place (G1.9).
45
- ensureUnsharedChild(view, leafIndex, view.sharing);
46
- settled = updateNodeContent({ children: view.children, ownerKind: view.node.kind, owner: view.node }, leafIndex, result.newRaw, ctx.grammar, view.sharing);
47
- siblings = view.children;
48
- stampStructuralChange(view.children, settled.change, view.sharing);
49
- return [settled.change];
50
- },
51
- op: {
52
- kind: 'updateContent',
53
- detail: { length: result.newRaw.length },
54
- eventPath: docPathFrom(targetPath)
55
- }
23
+ async function commitInlineCrossBlock(targetPath, result, ctx, start) {
24
+ const landed = await ctx.controller.commitLeafText(targetPath, result.newRaw, {
25
+ caret: result.caretOffset,
26
+ snapshotOffset: start.offset
56
27
  });
57
- // The paste can demote the slot's kind, and a settle that absorbed the join above it left
58
- // the predecessor holding the pasted bytes — so the caller's own caret target is stale.
59
- const target = settledCaretTarget(settled, leafIndex, result.caretOffset, siblings);
60
- return { path: [...targetPath.slice(0, -1), target.index], offset: target.offset };
28
+ if (!landed.wrote)
29
+ return undefined;
30
+ // The paste can make the block a container, whose caret belongs in the leaf holding the offset.
31
+ const blockPath = [...landed.caret.path];
32
+ const block = blockNodeAt(ctx.doc, blockPath);
33
+ const leaf = block?.children?.length ? leafAtRawOffset(block, landed.caret.offset) : null;
34
+ return {
35
+ path: [...blockPath, ...(leaf?.path ?? [])],
36
+ offset: leaf?.offset ?? landed.caret.offset
37
+ };
61
38
  }
62
- export async function applyStructuralResult(targetPath, result, ctx, trailingSeparator = '') {
63
- await replaceBlockAtParent({
64
- doc: ctx.doc,
65
- blockPath: targetPath,
66
- replacement: result.replacement,
67
- controller: ctx.controller,
68
- undoEntry: ctx.undoEntry ?? 'own',
69
- focusReplacementIndex: result.focusReplacementIndex,
70
- focusOffset: result.focusOffset,
39
+ export async function applyStructuralResult(targetPath, result, ctx, start, trailingSeparator = '') {
40
+ await ctx.controller.replaceBlock(targetPath, result.replacement, { replacementIndex: result.focusReplacementIndex, offset: result.focusOffset }, {
71
41
  source: 'paste-dispatch',
72
- trailingSeparator,
73
- ...(ctx.grammar ? { grammar: ctx.grammar } : {})
42
+ trailingBlank: trailingSeparator !== '',
43
+ snapshotOffset: start.offset
74
44
  });
75
45
  }