@voithos-labs/aragonite 0.10.3 → 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 +12 -5
  3. package/dist/a11y-strings.js +61 -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 +13 -20
  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 +619 -1089
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +36 -67
  26. package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
  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 +103 -100
  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 +35 -28
  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 +58 -32
  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 +144 -202
  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 +46 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -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 +9 -4
  102. package/dist/components/blocks/text/click-snap-guard.js +16 -5
  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 +164 -180
  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 -105
  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 +243 -208
  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 +13 -30
  144. package/dist/components/drag-handle.js +25 -63
  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 -31
  162. package/dist/components/editor-root-listeners.js +49 -46
  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 +26 -30
  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 +380 -0
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
  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 +55 -68
  256. package/dist/core/inline/inline-widgets.js +55 -58
  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 +33 -17
  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 -7
  347. package/dist/cursor/height-oracle.js +26 -75
  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 +16 -8
  365. package/dist/cursor/scrollport.js +28 -5
  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 -13
  375. package/dist/cursor/visual-lines.js +72 -28
  376. package/dist/cursor/widget-edge-snap.d.ts +23 -0
  377. package/dist/cursor/widget-edge-snap.js +39 -0
  378. package/dist/cursor/widget-offset.d.ts +111 -102
  379. package/dist/cursor/widget-offset.js +352 -177
  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 +31 -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 +33 -52
  434. package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
  435. package/dist/editor-actions/focus/focus-landing.js +29 -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 +55 -76
  465. package/dist/editor-actions/plugin/container.js +105 -186
  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 +91 -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 +38 -8
  550. package/dist/plugin.js +102 -74
  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 +113 -85
  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 -75
  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 +63 -47
  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 +18 -7
  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 +143 -292
  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 +79 -81
  695. package/dist/schema/commands.js +156 -116
  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 +9 -11
  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 +73 -78
  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 +93 -152
  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 +61 -104
  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 +53 -146
  807. package/dist/selection/dead-space-caret.d.ts +20 -28
  808. package/dist/selection/dead-space-caret.js +79 -87
  809. package/dist/selection/drag-pointer.d.ts +22 -5
  810. package/dist/selection/drag-pointer.js +63 -31
  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 -39
  816. package/dist/selection/keyboard-extend.js +94 -116
  817. package/dist/selection/multi-click.d.ts +37 -0
  818. package/dist/selection/multi-click.js +197 -0
  819. package/dist/selection/native-bridge.d.ts +30 -37
  820. package/dist/selection/native-bridge.js +80 -100
  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 +31 -14
  824. package/dist/selection/path-lookup.js +110 -20
  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 +9 -0
  828. package/dist/selection/pointer-gesture.js +11 -0
  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 -33
  832. package/dist/selection/primitives.js +61 -53
  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 -19
  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 +52 -0
  852. package/dist/selection/selection-drop.js +317 -0
  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 +75 -53
  864. package/dist/styles/editor.css +248 -139
  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 +19 -0
  960. package/dist/tree-operations/paste/replacement-parse.js +24 -0
  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 +329 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +267 -183
  996. package/docs/guide/plugin-guide.md +341 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +17 -21
  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/invariants/split-landing.d.ts +0 -8
  1015. package/dist/invariants/split-landing.js +0 -15
  1016. package/dist/selection/double-click-trim.d.ts +0 -17
  1017. package/dist/selection/double-click-trim.js +0 -57
  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 -29
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
@@ -1,15 +1,15 @@
1
1
  /**
2
- * Single entry point for paste: parse the clipboard, pick inline vs structural, route
3
- * through the target's PasteSurface. Inline/structural surfaces are stateless transforms
4
- * this module applies; scoped-structural surfaces own their whole mutation including focus.
5
- * Cross-block paste (`undoEntry: 'join'`) uses DOM-level focus, because the originating
6
- * block's `pendingCursorOffset` may address a block the range delete is about to unmount.
2
+ * Single entry point for paste: parse the clipboard, pick inline or structural, and route through
3
+ * the target kind's `PasteSurface` (its paste handlers), whose inline and structural results this
4
+ * module applies; a scoped-structural handler owns its whole mutation, focus included. A
5
+ * cross-block paste focuses through the DOM, since its range delete may unmount the origin block.
7
6
  */
8
- import { parse } from '../../core/parser';
7
+ import { readBlocks } from '../../core/parser';
9
8
  import { isBlockNode, nodeAt } from '../node-primitives';
10
- import { cutRangeFromDisplay } from '../node-ops';
11
- import { trailingLineEnding, trimTrailingLineEnding } from '../../core/lines';
12
- import { getPasteSurface } from '../paste-surfaces';
9
+ import { docPathFrom } from '../../cursor/coordinate-spaces';
10
+ import { replaceRangeInLeaf } from '../leaf-range';
11
+ import { documentLineEnding, trailingLineEnding, trimTrailingLineEnding, withLineEnding } from '../../core/lines';
12
+ import { getPasteSurface, isPasteSurfaceRegistered } from '../paste-surfaces';
13
13
  import { isReservedChromeChild } from '../../schema/reserved-chrome';
14
14
  import { applyInlineResult, applyStructuralResult } from './apply';
15
15
  import { normalizeClipboardForBody } from './body-write';
@@ -19,69 +19,84 @@ import { devWarn } from '../../dev-warn';
19
19
  import { applyListAbsorb, findListAbsorb } from './list-absorb';
20
20
  import { applyListBreakOut, findListBreakOut } from './list-break-out';
21
21
  import { applyPasteTransforms } from './paste-transforms';
22
+ import { inlineResultInEnding } from './line-ending';
22
23
  import { contentBlocks, pickPasteStrategy } from './strategy';
24
+ import { childSlotAt } from '../list/task-paragraph';
25
+ import { storedAsAt } from '../stored-as';
23
26
  /** Execute a paste at the specified target position. */
24
27
  export async function pasteDispatch(input, ctx) {
25
28
  if (!input.pastedText)
26
29
  return {};
27
30
  // Once, before any branch below reads the text; a transform that empties it is an
28
31
  // empty paste.
29
- const transformed = applyPasteTransforms(input.pastedText, ctx.activePlugins);
32
+ const { activePlugins } = ctx;
33
+ const { reading } = ctx;
34
+ // The hooks read the LF text; every line the paste writes takes the document's own ending.
35
+ const ending = documentLineEnding(ctx.doc);
36
+ const transformed = applyPasteTransforms(input.pastedText, activePlugins);
30
37
  if (!transformed)
31
38
  return {};
32
39
  // Ahead of the fragment parse, so the strategy pick and every landed kind follow the
33
40
  // bytes a bodyWrite-declaring ancestor will actually accept.
34
41
  const pastedText = normalizeClipboardForBody(ctx.doc, input.targetPath, transformed);
35
- const parsed = parse(pastedText, { grammar: ctx.grammar, scope: 'fragment' });
36
- if (parsed.children.length === 0)
37
- return {};
38
42
  const targetNode = nodeAt(ctx.doc, input.targetPath);
39
43
  if (!targetNode)
40
44
  return {};
41
- // A reserved-chrome leaf is single-line by serialization, so paste there is forced inline
42
- // ahead of the container-paste family: a multi-block clipboard must never split it. The trim
43
- // drops the edge spaces the newline flattening minted, not bytes anyone copied.
45
+ // Undo's caret for every commit below but a scoped-structural surface's own: where the paste
46
+ // began, never where it lands.
47
+ const start = {
48
+ path: docPathFrom(input.targetPath),
49
+ offset: input.caretBefore ?? input.preDelete?.start ?? input.offset
50
+ };
51
+ const store = storedAsAt(ctx.doc, input.targetPath, reading);
52
+ const parsed = readBlocks(withLineEnding(pastedText, ending), {
53
+ grammar: reading.grammar,
54
+ scope: 'fragment'
55
+ });
56
+ if (parsed.children.length === 0)
57
+ return {};
58
+ // A reserved title child serializes on one line, so paste there is forced inline before any
59
+ // container route could split it; the trim drops only the spaces the flattening made.
44
60
  const chromeParent = nodeAt(ctx.doc, input.targetPath.slice(0, -1));
45
61
  if (chromeParent &&
46
62
  isBlockNode(chromeParent) &&
47
63
  isReservedChromeChild(chromeParent, input.targetPath[input.targetPath.length - 1])) {
48
64
  const flattened = pastedText.replace(/(\r?\n)+/g, ' ').trim();
49
- const hook = getPasteSurface(targetNode.kind)?.onInlinePaste ?? defaultInlineHook;
50
- const result = hook(targetNode, input.offset, flattened, input.preDelete, ctx.seam);
51
- const landing = await applyInlineResult(input.targetPath, result, ctx);
65
+ const hook = getPasteSurface(targetNode.kind, activePlugins)?.onInlinePaste ?? defaultInlineHook;
66
+ const result = hook(targetNode, input.offset, flattened, input.preDelete, store, ending);
67
+ const landing = await applyInlineResult(input.targetPath, result, ctx, start);
52
68
  return inlineCaretResult(result.caretOffset, landing);
53
69
  }
54
- // The delete half the container routes never ran, spent ONCE and ahead of the strategy pick:
55
- // each finder decides on the TARGET's bytes, and a range still standing there answers about
56
- // bytes the paste is removing. The hook routes cut their own, kind rules included.
57
- const target = targetAfterPreDelete(targetNode, input, ctx.seam);
58
- const unwrap = findContainerMatchingUnwrap(ctx.doc, input.targetPath, target.offset, parsed, ctx.undoEntry === 'join', target.raw);
70
+ // The delete half, applied before the container finders, which decide on the target's bytes and
71
+ // never cut the range themselves; the hook routes cut their own, kind rules included.
72
+ const target = targetAfterPreDelete(targetNode, input, store, ending);
73
+ const unwrap = findContainerMatchingUnwrap(ctx.doc, input.targetPath, target.offset, parsed, ctx.crossBlock === true, target.raw);
59
74
  if (unwrap) {
60
- await applyContainerMatchingPaste(unwrap, ctx);
75
+ await applyContainerMatchingPaste(unwrap, ctx, start);
61
76
  return {};
62
77
  }
63
- // The rest of the container paste-merge family, for single-block non-empty targets:
64
- // absorb when `matchesAncestor` accepts the enclosing container, break-out when it
65
- // does not.
78
+ // For a single-block non-empty target: absorb when `matchesAncestor` accepts the enclosing
79
+ // container, break out when it does not.
66
80
  const absorb = findListAbsorb(ctx.doc, input.targetPath, parsed, target.offset, target.raw);
67
81
  if (absorb) {
68
- await applyListAbsorb(absorb, parsed.children[0], ctx);
82
+ await applyListAbsorb(absorb, parsed.children[0], ctx, start);
69
83
  return {};
70
84
  }
71
85
  const breakOut = findListBreakOut(ctx.doc, input.targetPath, parsed, target.offset, target.raw);
72
86
  if (breakOut) {
73
- await applyListBreakOut(breakOut, parsed.children, ctx);
87
+ await applyListBreakOut(breakOut, parsed.children, ctx, start);
74
88
  return {};
75
89
  }
76
- const surface = getPasteSurface(targetNode.kind);
77
- if (surface === undefined) {
90
+ const surface = getPasteSurface(targetNode.kind, activePlugins);
91
+ // A plugin's surface this editor left out is no gap to warn about: the default hooks are meant.
92
+ if (surface === undefined && !isPasteSurfaceRegistered(targetNode.kind)) {
78
93
  devWarn('paste-dispatch', 'no paste surface registered for this kind; falling through to default hooks. Register ' +
79
94
  'via registerPasteSurface() if the kind has its own paste semantics', targetNode.kind);
80
95
  }
81
96
  const blocks = surface?.blankEdgesArePackaging ? contentBlocks(parsed.children) : parsed.children;
82
97
  const clipboardStrategy = pickPasteStrategy(blocks);
83
- // A surface omitting both structural hooks (code blocks) forces paste inline, so its
84
- // markdown stays verbatim.
98
+ // A kind whose paste handlers omit both structural hooks (code blocks) forces paste inline,
99
+ // so its markdown stays verbatim.
85
100
  const surfaceForcesInline = surface !== undefined &&
86
101
  surface.onStructuralPaste === undefined &&
87
102
  surface.onScopedStructuralPaste === undefined;
@@ -91,49 +106,49 @@ export async function pasteDispatch(input, ctx) {
91
106
  doc: ctx.doc,
92
107
  targetPath: input.targetPath,
93
108
  blocks: blocks.slice(),
94
- controller: ctx.controller,
95
- undoEntry: ctx.undoEntry ?? 'own',
96
- grammar: ctx.grammar
109
+ controller: ctx.controller
97
110
  });
98
111
  return {};
99
112
  }
100
113
  if (strategy === 'inline') {
101
114
  const hook = surface?.onInlinePaste ?? defaultInlineHook;
102
- const result = hook(targetNode, input.offset, pastedText, input.preDelete, ctx.seam);
103
- const landing = await applyInlineResult(input.targetPath, result, ctx);
115
+ const result = inlineResultInEnding(targetNode.raw, hook(targetNode, input.offset, pastedText, input.preDelete, store, ending), ending);
116
+ const landing = await applyInlineResult(input.targetPath, result, ctx, start);
104
117
  return inlineCaretResult(result.caretOffset, landing);
105
118
  }
106
119
  const hook = surface?.onStructuralPaste ?? defaultStructuralHook;
107
- const result = hook(targetNode, input.offset, blocks.slice(), input.preDelete, ctx.seam);
108
- await applyStructuralResult(input.targetPath, result, ctx, trailingSeparatorOf(parsed, result, surface));
120
+ const slot = childSlotAt(ctx.doc, input.targetPath);
121
+ const result = hook(targetNode, input.offset, blocks.slice(), input.preDelete, store, ending, slot);
122
+ await applyStructuralResult(input.targetPath, result, ctx, start, trailingSeparatorOf(parsed, result, surface));
109
123
  return {};
110
124
  }
111
- /** The target's bytes and caret as the paste's delete half leaves them. */
112
- function targetAfterPreDelete(node, input, seam) {
125
+ /** The target's bytes and caret as the paste's delete half leaves them: what a Delete over the range
126
+ * writes, since the container routes put their blocks after it. */
127
+ function targetAfterPreDelete(node, input, store, lineEnding) {
113
128
  if (!input.preDelete)
114
129
  return { raw: node.raw, offset: input.offset };
115
- const cut = cutRangeFromDisplay(node, trimTrailingLineEnding(node.raw), input.preDelete, seam?.presentationMode, seam?.linkRef);
116
- return { raw: cut.display + trailingLineEnding(node.raw), offset: cut.offset };
130
+ const cut = replaceRangeInLeaf(node, input.preDelete, '', store);
131
+ return {
132
+ raw: trimTrailingLineEnding(cut.raw) + trailingLineEnding(node.raw, lineEnding),
133
+ offset: cut.caret
134
+ };
117
135
  }
118
136
  /**
119
- * A clipboard's trailing blank line is CONTENT: a parse folds exactly one into `suffix`
120
- * while a second already materializes as a block, and the inline route splices the bytes verbatim
121
- * — so consuming children alone made one route keep the copied separation and its twin lose it.
122
- * Spent only where the splice leaves nothing behind the pasted blocks; a residue or a follower
123
- * already carries a separator of its own, and a packaging surface declines the whole question.
137
+ * The clipboard's trailing blank line (`suffix`), which the inline route pastes verbatim too;
138
+ * landed only where no residue follows the pasted blocks and the kind keeps blank edges.
124
139
  */
125
140
  function trailingSeparatorOf(parsed, result, surface) {
126
141
  if (surface?.blankEdgesArePackaging)
127
142
  return '';
128
- // `focusReplacementIndex` IS the last pasted node (`paste/focus-target.ts`), so anything past
143
+ // `focusReplacementIndex` is the last pasted node (`paste/focus-target.ts`), so anything past
129
144
  // it is reattached residue.
130
145
  return result.focusReplacementIndex === result.replacement.length - 1 ? parsed.suffix : '';
131
146
  }
132
- /** The hook's own caret offset, overridden by the settled landing where a fold moved it. */
147
+ /** The hook's own caret offset, overridden by where the caret ended up when a merge moved it. */
133
148
  function inlineCaretResult(caretOffset, landing) {
134
149
  if (!landing)
135
150
  return { inlineCaretOffset: caretOffset };
136
151
  return { inlineCaretOffset: landing.offset, inlineCaretPath: landing.path };
137
152
  }
138
153
  export { pickPasteStrategy } from './strategy';
139
- export { defaultInlineHook, defaultStructuralHook, __getDefaultTextSurface } from './hooks';
154
+ export { defaultInlineHook, defaultStructuralHook } from './hooks';
@@ -1,27 +1,24 @@
1
1
  /**
2
- * The caret a `[prefix?, ...pasted, residue?]` replacement lands, on both sides of the splice
3
- * settle: which node the door aims at, the position the settle's folds carry for it, and the
4
- * offset that position is landable at.
2
+ * The caret a `[prefix?, ...pasted, residue?]` replacement lands, on both sides of the separator
3
+ * fix-up: which node the paste aims at, the position the fix-up's merges keep updated for it,
4
+ * and the leaf and offset the caret can actually sit at there.
5
5
  */
6
6
  import type { CstNode } from '../../core/nodes';
7
7
  import type { NodeView } from '../../core/node-views';
8
8
  import type { TrackedPosition } from '../settle';
9
+ import { type LeafPosition } from '../container-offsets';
9
10
  /**
10
- * Focus index for the replacement: the last PASTED node. Single-sourced so every structural
11
- * route skips the reattached residue identically. Applies only where the residue is a SEPARATE
12
- * node; a route that reattaches it inside the last pasted leaf lands at a char offset in a
13
- * different coordinate space.
11
+ * The last pasted node's index, shared so every structural route skips a residue node the same
12
+ * way; a residue reattached inside the last pasted leaf is not a node and isn't counted.
14
13
  */
15
14
  export declare function focusIndexBeforeResidue(replacementLength: number, hasResidue: boolean): number;
16
15
  /**
17
- * The position the splice settle must carry: the end of the pasted bytes, in the scope's slots.
18
- * `CURSOR_END` resolves to the node's own display end here — a sentinel handed to the tracker
19
- * would clamp to whatever the fold reattached behind it, which is the bug it exists to prevent.
16
+ * The end of the pasted bytes, for the fix-up's merges to keep updated. `CURSOR_END` resolves to
17
+ * the node's display end here, or the tracker would clamp it past whatever a merge reattached.
20
18
  */
21
19
  export declare function trackedPasteCaret(replacement: readonly CstNode[], at: number, focusIndex: number, focusOffset: number): TrackedPosition;
22
20
  /**
23
- * The offset {@link trackedPasteCaret}'s settled position is landable at. Only a known leaf spends
24
- * the tracked byte: a container walks any numeric offset to its last child, so its raw offsets
25
- * address no caret seat. Anything the caller named itself stands as given.
21
+ * The leaf and offset holding the tracked byte inside the landed block. An offset the caller named
22
+ * stands as given, and a block whose bytes map to no leaf (a table) takes the caret at its end.
26
23
  */
27
- export declare function landedPasteOffset(landed: NodeView | undefined, tracked: TrackedPosition, focusOffset: number): number;
24
+ export declare function landedPastePosition(landed: NodeView | undefined, tracked: TrackedPosition, focusOffset: number): LeafPosition;
@@ -1,24 +1,21 @@
1
1
  /**
2
- * The caret a `[prefix?, ...pasted, residue?]` replacement lands, on both sides of the splice
3
- * settle: which node the door aims at, the position the settle's folds carry for it, and the
4
- * offset that position is landable at.
2
+ * The caret a `[prefix?, ...pasted, residue?]` replacement lands, on both sides of the separator
3
+ * fix-up: which node the paste aims at, the position the fix-up's merges keep updated for it,
4
+ * and the leaf and offset the caret can actually sit at there.
5
5
  */
6
6
  import { CURSOR_END } from '../../block-component';
7
7
  import { trimTrailingLineEnding } from '../../core/lines';
8
- import { tryGetBlockKindDescriptor } from '../../schema/block-kind-descriptor';
8
+ import { leafAtRawOffset } from '../container-offsets';
9
9
  /**
10
- * Focus index for the replacement: the last PASTED node. Single-sourced so every structural
11
- * route skips the reattached residue identically. Applies only where the residue is a SEPARATE
12
- * node; a route that reattaches it inside the last pasted leaf lands at a char offset in a
13
- * different coordinate space.
10
+ * The last pasted node's index, shared so every structural route skips a residue node the same
11
+ * way; a residue reattached inside the last pasted leaf is not a node and isn't counted.
14
12
  */
15
13
  export function focusIndexBeforeResidue(replacementLength, hasResidue) {
16
14
  return hasResidue && replacementLength >= 2 ? replacementLength - 2 : replacementLength - 1;
17
15
  }
18
16
  /**
19
- * The position the splice settle must carry: the end of the pasted bytes, in the scope's slots.
20
- * `CURSOR_END` resolves to the node's own display end here — a sentinel handed to the tracker
21
- * would clamp to whatever the fold reattached behind it, which is the bug it exists to prevent.
17
+ * The end of the pasted bytes, for the fix-up's merges to keep updated. `CURSOR_END` resolves to
18
+ * the node's display end here, or the tracker would clamp it past whatever a merge reattached.
22
19
  */
23
20
  export function trackedPasteCaret(replacement, at, focusIndex, focusOffset) {
24
21
  const displayEnd = trimTrailingLineEnding(replacement[focusIndex]?.raw ?? '').length;
@@ -28,13 +25,11 @@ export function trackedPasteCaret(replacement, at, focusIndex, focusOffset) {
28
25
  };
29
26
  }
30
27
  /**
31
- * The offset {@link trackedPasteCaret}'s settled position is landable at. Only a known leaf spends
32
- * the tracked byte: a container walks any numeric offset to its last child, so its raw offsets
33
- * address no caret seat. Anything the caller named itself stands as given.
28
+ * The leaf and offset holding the tracked byte inside the landed block. An offset the caller named
29
+ * stands as given, and a block whose bytes map to no leaf (a table) takes the caret at its end.
34
30
  */
35
- export function landedPasteOffset(landed, tracked, focusOffset) {
31
+ export function landedPastePosition(landed, tracked, focusOffset) {
36
32
  if (focusOffset !== CURSOR_END)
37
- return focusOffset;
38
- const leaf = landed && tryGetBlockKindDescriptor(landed.kind)?.isContainer === false;
39
- return leaf ? tracked.offset : CURSOR_END;
33
+ return { path: [], offset: focusOffset };
34
+ return (landed && leafAtRawOffset(landed, tracked.offset)) ?? { path: [], offset: CURSOR_END };
40
35
  }
@@ -3,15 +3,10 @@
3
3
  * for every built-in kind whose descriptor advertises `supportsInline`.
4
4
  */
5
5
  import { type CstNode } from '../../core/nodes';
6
- import { type PasteSurface, type PasteRange, type PasteSeam, type InlinePasteResult, type StructuralPasteResult } from '../paste-surfaces';
7
- export declare function defaultInlineHook(node: CstNode, offset: number, text: string, preDelete?: PasteRange, seam?: PasteSeam): InlinePasteResult;
8
- export declare function defaultStructuralHook(node: CstNode, offset: number, blocks: CstNode[], preDelete?: PasteRange, seam?: PasteSeam): StructuralPasteResult;
9
- /**
10
- * Caret target for a structural paste: the end of the PASTED content, not the trailing
11
- * residue. A mid-block caret leaves the post-caret slice as the replacement's last node,
12
- * so the pasted content ends one node earlier. Takes the display and offset the delete half
13
- * already resolved — a seam cleanup moves both, and re-deriving them here would disagree.
14
- */
15
- export declare function pastedContentFocusIndex(display: string, offset: number, replacementLength: number): number;
16
- /** Test-only: produce a default text surface descriptor. */
17
- export declare function __getDefaultTextSurface(kind: PasteSurface['kind']): PasteSurface;
6
+ import { type LineEnding } from '../../core/lines';
7
+ import type { ChildSlot } from '../list/task-paragraph';
8
+ import { type PasteRange, type InlinePasteResult, type StructuralPasteResult } from '../paste-surfaces';
9
+ import type { StoredAs } from '../../schema/stored-as';
10
+ /** The pasted text over the selection, or at the caret, written as typing it there would be. */
11
+ export declare function defaultInlineHook(node: CstNode, offset: number, text: string, preDelete: PasteRange | undefined, store: StoredAs, lineEnding: LineEnding): InlinePasteResult;
12
+ export declare function defaultStructuralHook(node: CstNode, offset: number, blocks: CstNode[], preDelete: PasteRange | undefined, store: StoredAs, lineEnding: LineEnding, slot: ChildSlot): StructuralPasteResult;
@@ -6,54 +6,65 @@ import { CURSOR_END } from '../../block-component';
6
6
  import { isBuiltinBlockKind } from '../../core/nodes';
7
7
  import { trailingLineEnding, trimTrailingLineEnding } from '../../core/lines';
8
8
  import { buildPastedReplacement } from './paste-replacement';
9
- import { cutRangeFromDisplay } from '../node-ops';
10
- import { focusIndexBeforeResidue } from './focus-target';
9
+ import { replaceRangeInLeaf } from '../leaf-range';
10
+ import { getContentRange, readInline } from '../../core/inline';
11
+ import { CONTENT_VISIBILITY, visibleRuns } from '../../core/inline/visibility';
11
12
  import { getAllRegisteredKinds, tryGetBlockKindDescriptor } from '../../schema/block-kind-descriptor';
12
13
  import { registerPasteSurface } from '../paste-surfaces';
13
14
  // Registered by their own component instead of the loop below. One registrar per kind, so
14
15
  // correctness doesn't hinge on module load order.
15
16
  const BESPOKE_SURFACE_KINDS = new Set(['tableCell']);
16
- /**
17
- * The leaf's bytes and caret after the paste's DELETE half — through the one join seam, so a cut
18
- * that stranded a delimiter run the reader never saw drops it here rather than pasting it into
19
- * view (live-mode.md § 4.5). The range is forwarded whole: the endpoints are the seam's to read.
20
- */
21
- function applyPreDelete(node, display, preDelete, offset, seam) {
22
- if (!preDelete)
23
- return { display, offset };
24
- return cutRangeFromDisplay(node, display, preDelete, seam?.presentationMode, seam?.linkRef);
25
- }
26
- export function defaultInlineHook(node, offset, text, preDelete, seam) {
27
- const display = trimTrailingLineEnding(node.raw);
28
- const lineEnding = trailingLineEnding(node.raw);
29
- const { display: effectiveDisplay, offset: effectiveOffset } = applyPreDelete(node, display, preDelete, offset, seam);
30
- const newDisplay = effectiveDisplay.slice(0, effectiveOffset) + text + effectiveDisplay.slice(effectiveOffset);
31
- return {
32
- newRaw: newDisplay + lineEnding,
33
- caretOffset: effectiveOffset + text.length
34
- };
35
- }
36
- export function defaultStructuralHook(node, offset, blocks, preDelete, seam) {
37
- const display = trimTrailingLineEnding(node.raw);
38
- const cut = applyPreDelete(node, display, preDelete, offset, seam);
39
- // Compare the BYTES rather than the range: a cleanup can drop more than the selection did,
40
- // and an empty range leaves them equal, which is exactly when the original node stands.
41
- const synthLeaf = cut.display === display ? node : { ...node, raw: cut.display + trailingLineEnding(node.raw) };
42
- const replacement = buildPastedReplacement(synthLeaf, cut.offset, blocks);
17
+ /** The pasted text over the selection, or at the caret, written as typing it there would be. */
18
+ export function defaultInlineHook(node, offset, text, preDelete, store, lineEnding) {
19
+ const range = preDelete ?? { start: offset, end: offset };
20
+ const bare = dropClosingLineEnding(text);
21
+ const probe = replaceRangeInLeaf(node, range, bare, store);
22
+ const edit = bare === text || endsVisibleLine(node, probe, store)
23
+ ? probe
24
+ : replaceRangeInLeaf(node, range, text, store);
43
25
  return {
44
- replacement,
45
- focusReplacementIndex: pastedContentFocusIndex(cut.display, cut.offset, replacement.length),
46
- focusOffset: CURSOR_END
26
+ newRaw: trimTrailingLineEnding(edit.raw) + trailingLineEnding(node.raw, lineEnding),
27
+ caretOffset: edit.caret
47
28
  };
48
29
  }
49
30
  /**
50
- * Caret target for a structural paste: the end of the PASTED content, not the trailing
51
- * residue. A mid-block caret leaves the post-caret slice as the replacement's last node,
52
- * so the pasted content ends one node earlier. Takes the display and offset the delete half
53
- * already resolved — a seam cleanup moves both, and re-deriving them here would disagree.
31
+ * `text` without the ending of its last line, which against a line end would leave a blank line
32
+ * in the paragraph; a whole blank last line stays, since the clipboard carried it as a block.
54
33
  */
55
- export function pastedContentFocusIndex(display, offset, replacementLength) {
56
- return focusIndexBeforeResidue(replacementLength, offset < display.length);
34
+ function dropClosingLineEnding(text) {
35
+ const closing = /\r?\n$/.exec(text);
36
+ if (!closing)
37
+ return text;
38
+ const rest = text.slice(0, closing.index);
39
+ return rest === '' || /\r?\n$/.test(rest) ? text : rest;
40
+ }
41
+ /** Whether nothing the user sees follows the caret on its line: a delimiter run the reading
42
+ * hides there, such as a bold word's closer, still ends the line. */
43
+ function endsVisibleLine(node, edit, store) {
44
+ const after = trimTrailingLineEnding(edit.raw).slice(edit.caret);
45
+ if (after === '' || /^\r?\n/.test(after))
46
+ return true;
47
+ if (!store.reading.hidesDelimitersAtCaret())
48
+ return false;
49
+ const lineEnd = edit.caret + (/\r?\n/.exec(after)?.index ?? after.length);
50
+ const content = getContentRange({ ...node, raw: edit.raw });
51
+ const { resolver, grammar } = store.reading;
52
+ const inlines = readInline(edit.raw, content.start, content.end, resolver, grammar);
53
+ return !visibleRuns(inlines, edit.raw, CONTENT_VISIBILITY, { grammar }).some((run) => run.visible && run.text !== '' && run.end > edit.caret && run.start < lineEnd);
54
+ }
55
+ export function defaultStructuralHook(node, offset, blocks, preDelete, store, lineEnding, slot) {
56
+ // The blocks go in after the cut, as a split does, so the cut takes no text of its own.
57
+ const cut = preDelete && replaceRangeInLeaf(node, preDelete, '', store);
58
+ const display = cut && trimTrailingLineEnding(cut.raw);
59
+ // Compare the bytes rather than the range: a cleanup can drop more than the selection did,
60
+ // and an empty range leaves them equal, which is exactly when the original node stands.
61
+ const synthLeaf = !cut || display === trimTrailingLineEnding(node.raw)
62
+ ? node
63
+ : { ...node, raw: display + trailingLineEnding(node.raw, lineEnding) };
64
+ const { nodes, lastPastedIndex } = buildPastedReplacement(synthLeaf, cut ? cut.caret : offset, blocks, lineEnding, store.reading.grammar, slot);
65
+ // The caret lands where the pasted bytes end, which the fix-up tracks when it merges the
66
+ // residue into the last pasted block.
67
+ return { replacement: nodes, focusReplacementIndex: lastPastedIndex, focusOffset: CURSOR_END };
57
68
  }
58
69
  // Built-in kinds are all registered by the time this top level runs; a plugin kind
59
70
  // registering later must register its own paste surface.
@@ -70,11 +81,3 @@ for (const kind of getAllRegisteredKinds()) {
70
81
  });
71
82
  }
72
83
  }
73
- /** Test-only: produce a default text surface descriptor. */
74
- export function __getDefaultTextSurface(kind) {
75
- return {
76
- kind,
77
- onInlinePaste: defaultInlineHook,
78
- onStructuralPaste: defaultStructuralHook
79
- };
80
- }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The pasted line breaks written in the document's own ending. The clipboard reaches the paste
3
+ * transforms and hooks as LF, so an inline hook's result is rewritten here on its way in.
4
+ */
5
+ import type { LineEnding } from '../../core/lines';
6
+ import type { InlinePasteResult } from '../paste-surfaces';
7
+ /**
8
+ * An inline hook's result with the breaks it spliced in written as `ending`; only the bytes
9
+ * between the unchanged head and tail are the paste's, so the block's own endings stay.
10
+ */
11
+ export declare function inlineResultInEnding(before: string, result: InlinePasteResult, ending: LineEnding): InlinePasteResult;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The pasted line breaks written in the document's own ending. The clipboard reaches the paste
3
+ * transforms and hooks as LF, so an inline hook's result is rewritten here on its way in.
4
+ */
5
+ /**
6
+ * An inline hook's result with the breaks it spliced in written as `ending`; only the bytes
7
+ * between the unchanged head and tail are the paste's, so the block's own endings stay.
8
+ */
9
+ export function inlineResultInEnding(before, result, ending) {
10
+ if (ending === '\n')
11
+ return result;
12
+ const after = result.newRaw;
13
+ let head = 0;
14
+ while (head < before.length && before[head] === after[head])
15
+ head++;
16
+ let tail = 0;
17
+ while (tail < before.length - head &&
18
+ tail < after.length - head &&
19
+ before[before.length - 1 - tail] === after[after.length - 1 - tail]) {
20
+ tail++;
21
+ }
22
+ const end = after.length - tail;
23
+ let lengthened = 0;
24
+ const newRaw = after.replace(/(?<!\r)\n/g, (lf, at) => {
25
+ if (at < head || at >= end)
26
+ return lf;
27
+ if (at < result.caretOffset)
28
+ lengthened++;
29
+ return ending;
30
+ });
31
+ return { newRaw, caretOffset: result.caretOffset + lengthened };
32
+ }
@@ -1,29 +1,26 @@
1
1
  /**
2
- * Paste absorb: a same-type list pasted into a non-empty list item flattens as siblings of
3
- * the target, with markers normalized to the enclosing list's style — the flat result most
4
- * markdown editors produce. Covers the single-block non-empty same-type case that runs
5
- * after `findContainerMatchingUnwrap` and would otherwise fall through to the default
6
- * structural paste; mismatched types go to `list-break-out` instead.
2
+ * Paste absorb: a same-type list pasted into a non-empty list item lands as siblings of the target
3
+ * item, markers restyled to the enclosing list's, as most markdown editors do. Runs after
4
+ * `findContainerMatchingUnwrap`; a mismatched type goes to `list-break-out` instead.
7
5
  */
8
6
  import type { CstNode, Document } from '../../core/nodes';
9
7
  import type { PasteDispatchContext } from './dispatch';
8
+ import type { CommitSnapshotArg } from '../../action-contracts';
10
9
  export interface ListAbsorb {
11
10
  listPath: number[];
12
11
  itemIndex: number;
13
12
  innerIndex: number;
14
13
  offset: number;
15
- /** The target leaf's bytes AFTER the paste's delete half. */
14
+ /** The target leaf's bytes after the paste's delete half. */
16
15
  targetRaw?: string;
17
16
  }
18
17
  /**
19
- * The absorb plan, or null when any precondition fails: a single top block declaring
20
- * `containerPaste.siblingAbsorb`, whose `matchesAncestor` accepts the nearest list
21
- * ancestor, targeting a direct leaf of the listItem. Mismatched types fall through to
22
- * `findListBreakOut`.
18
+ * The absorb plan when a single top block declaring `containerPaste.siblingAbsorb` matches the
19
+ * nearest list and the target is a direct leaf of its item; null otherwise.
23
20
  */
24
21
  export declare function findListAbsorb(doc: Document, targetPath: number[], parsed: Document, offset: number, targetRaw?: string): ListAbsorb | null;
25
22
  /**
26
23
  * Split the target item at the caret, splice the pasted items between the halves,
27
24
  * normalize markers, renumber. One undo entry on the list's scope.
28
25
  */
29
- export declare function applyListAbsorb(plan: ListAbsorb, pastedList: CstNode, ctx: PasteDispatchContext): Promise<void>;
26
+ export declare function applyListAbsorb(plan: ListAbsorb, pastedList: CstNode, ctx: PasteDispatchContext, start: CommitSnapshotArg): Promise<void>;
@@ -1,28 +1,25 @@
1
1
  /**
2
- * Paste absorb: a same-type list pasted into a non-empty list item flattens as siblings of
3
- * the target, with markers normalized to the enclosing list's style — the flat result most
4
- * markdown editors produce. Covers the single-block non-empty same-type case that runs
5
- * after `findContainerMatchingUnwrap` and would otherwise fall through to the default
6
- * structural paste; mismatched types go to `list-break-out` instead.
2
+ * Paste absorb: a same-type list pasted into a non-empty list item lands as siblings of the target
3
+ * item, markers restyled to the enclosing list's, as most markdown editors do. Runs after
4
+ * `findContainerMatchingUnwrap`; a mismatched type goes to `list-break-out` instead.
7
5
  */
8
6
  import { CURSOR_END } from '../../block-component';
9
7
  import { metadataOf } from '../../core/nodes';
8
+ import { documentLineEnding } from '../../core/lines';
10
9
  import { nodeAt, ensureEditableContainers } from '../node-primitives';
11
10
  import { cloneNode } from '../clone';
12
11
  import { containerPasteFor } from './container-paste';
13
12
  import { stampStructuralChange } from '../structural-change';
14
13
  import { renumberOrderedList, templatePastedItemMarkers } from '../list/ordered-markers';
15
- import { spliceTerminatedItems } from '../list/terminator';
14
+ import { spliceMany } from '../splice-many';
16
15
  import { containerScopeState } from './parent-scope';
17
16
  import { buildSplitItems } from '../list/list-builders';
18
17
  import { findEnclosingListForPaste } from './find-enclosing-list';
19
18
  import { focusIndexBeforeResidue } from './focus-target';
20
19
  import { docPathFrom } from '../../cursor/coordinate-spaces';
21
20
  /**
22
- * The absorb plan, or null when any precondition fails: a single top block declaring
23
- * `containerPaste.siblingAbsorb`, whose `matchesAncestor` accepts the nearest list
24
- * ancestor, targeting a direct leaf of the listItem. Mismatched types fall through to
25
- * `findListBreakOut`.
21
+ * The absorb plan when a single top block declaring `containerPaste.siblingAbsorb` matches the
22
+ * nearest list and the target is a direct leaf of its item; null otherwise.
26
23
  */
27
24
  export function findListAbsorb(doc, targetPath, parsed, offset, targetRaw) {
28
25
  if (parsed.children.length !== 1)
@@ -48,7 +45,7 @@ export function findListAbsorb(doc, targetPath, parsed, offset, targetRaw) {
48
45
  * Split the target item at the caret, splice the pasted items between the halves,
49
46
  * normalize markers, renumber. One undo entry on the list's scope.
50
47
  */
51
- export async function applyListAbsorb(plan, pastedList, ctx) {
48
+ export async function applyListAbsorb(plan, pastedList, ctx, start) {
52
49
  const outer = nodeAt(ctx.doc, plan.listPath);
53
50
  if (!outer?.children)
54
51
  return;
@@ -58,7 +55,8 @@ export async function applyListAbsorb(plan, pastedList, ctx) {
58
55
  return;
59
56
  if (!item.children[plan.innerIndex])
60
57
  return;
61
- const { leadingItem, trailingItem } = buildSplitItems(item, plan.innerIndex, plan.offset, plan.targetRaw);
58
+ const lineEnding = documentLineEnding(ctx.doc);
59
+ const { leadingItem, trailingItem } = buildSplitItems(item, plan.innerIndex, plan.offset, lineEnding, plan.targetRaw, ctx.reading.grammar);
62
60
  const pastedItems = (pastedList.children ?? []).map((c) => cloneNode(c));
63
61
  const replacement = [];
64
62
  if (leadingItem)
@@ -68,16 +66,16 @@ export async function applyListAbsorb(plan, pastedList, ctx) {
68
66
  if (trailingItem)
69
67
  replacement.push(trailingItem);
70
68
  for (const node of replacement)
71
- ensureEditableContainers(node);
69
+ ensureEditableContainers(node, lineEnding);
72
70
  const outerOrdered = metadataOf(outer, 'list')?.ordered ?? false;
73
71
  templatePastedItemMarkers(replacement, outer, plan.itemIndex);
74
72
  await ctx.controller.commitMultiScope({
75
73
  scopes: [{ node: outer, state: outerState, path: plan.listPath }],
76
- snapshot: ctx.undoEntry === 'join' ? 'skip' : { path: docPathFrom(plan.listPath), offset: 0 },
74
+ snapshot: start,
77
75
  mutate: ([scopeView]) => {
78
76
  const sharing = scopeView.sharing;
79
- spliceTerminatedItems(scopeView.children, plan.itemIndex, 1, replacement);
80
- // Only items AFTER the replacement region: their proxies already exist, so marker
77
+ spliceMany(scopeView.children, plan.itemIndex, 1, replacement);
78
+ // Only items after the replacement region: their proxies already exist, so marker
81
79
  // mutations propagate to the DOM.
82
80
  const afterReplacementIdx = plan.itemIndex + replacement.length;
83
81
  if (outerOrdered && afterReplacementIdx < scopeView.children.length) {
@@ -97,10 +95,10 @@ export async function applyListAbsorb(plan, pastedList, ctx) {
97
95
  detail: { source: 'list-absorb', listPath: plan.listPath },
98
96
  eventPath: docPathFrom(plan.listPath)
99
97
  },
100
- afterTick: () => {
101
- // The shared structural-paste landing rule: last pasted item, before the residue.
98
+ landing: () => {
99
+ // The shared structural-paste caret rule: last pasted item, before the residue.
102
100
  const lastPastedIdx = plan.itemIndex + focusIndexBeforeResidue(replacement.length, trailingItem !== null);
103
- return ctx.controller.landCaret([...plan.listPath, lastPastedIdx], CURSOR_END);
101
+ return { path: docPathFrom([...plan.listPath, lastPastedIdx]), offset: CURSOR_END };
104
102
  }
105
103
  });
106
104
  }