@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,10 +1,13 @@
1
1
  /**
2
2
  * Paste break-out: lift a pasted list out of an enclosing list rather than nesting it,
3
- * whenever the two ordered flags disagree — keeping the pasted list separate preserves its
3
+ * whenever the two ordered flags disagree: keeping the pasted list separate preserves its
4
4
  * semantic type. Same-type pastes go through `list-absorb`.
5
5
  */
6
6
  import type { CstNode, Document } from '../../core/nodes';
7
+ import { type LineEnding } from '../../core/lines';
7
8
  import type { PasteDispatchContext } from './dispatch';
9
+ import type { CommitSnapshotArg } from '../../action-contracts';
10
+ import type { GrammarView } from '../../schema/block-openers';
8
11
  export interface ListBreakOut {
9
12
  /** Path to the nearest enclosing list ancestor. */
10
13
  listPath: number[];
@@ -14,29 +17,27 @@ export interface ListBreakOut {
14
17
  innerIndex: number;
15
18
  /** Caret offset within the target leaf's raw. */
16
19
  offset: number;
17
- /** The target leaf's bytes AFTER the paste's delete half. */
20
+ /** The target leaf's bytes after the paste's delete half. */
18
21
  targetRaw?: string;
19
22
  }
20
23
  /**
21
- * The break-out plan, or null: requires a top block declaring `containerPaste.siblingAbsorb`
22
- * whose `matchesAncestor` REJECTS the nearest list ancestor (matching pastes belong to
23
- * `list-absorb` and must not also trigger here), targeting a direct leaf of the listItem.
24
+ * The break-out plan when a top block declaring `containerPaste.siblingAbsorb` does not match the
25
+ * nearest list and the target is a direct leaf of its item; null otherwise.
24
26
  */
25
27
  export declare function findListBreakOut(doc: Document, targetPath: number[], parsed: Document, offset: number, targetRaw?: string): ListBreakOut | null;
26
28
  /**
27
29
  * Split the enclosing list at the target item and splice the pasted blocks between the
28
30
  * halves at the list's parent level, in one multi-scope entry.
29
31
  */
30
- export declare function applyListBreakOut(plan: ListBreakOut, pastedBlocks: CstNode[], ctx: PasteDispatchContext): Promise<void>;
32
+ export declare function applyListBreakOut(plan: ListBreakOut, pastedBlocks: CstNode[], ctx: PasteDispatchContext, start: CommitSnapshotArg): Promise<void>;
31
33
  export interface ListBreakOutReplacement {
32
- /** `[firstHalfList?, ...pastedBlocks, secondHalfList?]` — halves omitted when empty. */
34
+ /** `[firstHalfList?, ...pastedBlocks, secondHalfList?]`, halves omitted when empty. */
33
35
  replacement: CstNode[];
34
36
  /** The second-half list (post-caret residue) is present as the last node. */
35
37
  hasTrailingResidue: boolean;
36
38
  }
37
39
  /**
38
- * Split `list` at `(itemIndex, innerIndex, offset)` and splice `pastedBlocks` between the
39
- * halves. `hasTrailingResidue` lets the caller land the caret on the last pasted block
40
- * rather than the residue. Input nodes are cloned, not mutated.
40
+ * Split `list` at `(itemIndex, innerIndex, offset)` and splice `pastedBlocks` between the halves,
41
+ * cloning every input node rather than mutating it.
41
42
  */
42
- export declare function buildListBreakOutReplacement(list: CstNode, itemIndex: number, innerIndex: number, offset: number, pastedBlocks: CstNode[], targetRaw?: string): ListBreakOutReplacement;
43
+ export declare function buildListBreakOutReplacement(list: CstNode, itemIndex: number, innerIndex: number, offset: number, pastedBlocks: CstNode[], ending: LineEnding, targetRaw: string | undefined, grammar: GrammarView): ListBreakOutReplacement;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Paste break-out: lift a pasted list out of an enclosing list rather than nesting it,
3
- * whenever the two ordered flags disagree — keeping the pasted list separate preserves its
3
+ * whenever the two ordered flags disagree: keeping the pasted list separate preserves its
4
4
  * semantic type. Same-type pastes go through `list-absorb`.
5
5
  */
6
6
  import { CURSOR_END } from '../../block-component';
@@ -9,19 +9,16 @@ import { cloneNode } from '../clone';
9
9
  import { spliceMany } from '../splice-many';
10
10
  import { stampStructuralChange } from '../structural-change';
11
11
  import { containerPasteFor } from './container-paste';
12
- import { rebuildListRaw } from '../../schema/container-rebuilders';
13
- import { newlineTerminateListItems } from '../list/terminator';
14
- import { trailingLineEnding } from '../../core/lines';
12
+ import { documentLineEnding } from '../../core/lines';
15
13
  import { assembleListHalf, buildSplitItems } from '../list/list-builders';
16
14
  import { orderedBaseOf } from '../list/ordered-markers';
17
15
  import { findEnclosingListForPaste } from './find-enclosing-list';
18
- import { focusIndexBeforeResidue, landedPasteOffset, trackedPasteCaret } from './focus-target';
16
+ import { focusIndexBeforeResidue, landedPastePosition, trackedPasteCaret } from './focus-target';
19
17
  import { docPathFrom } from '../../cursor/coordinate-spaces';
20
18
  import { resolveParentScope } from './parent-scope';
21
19
  /**
22
- * The break-out plan, or null: requires a top block declaring `containerPaste.siblingAbsorb`
23
- * whose `matchesAncestor` REJECTS the nearest list ancestor (matching pastes belong to
24
- * `list-absorb` and must not also trigger here), targeting a direct leaf of the listItem.
20
+ * The break-out plan when a top block declaring `containerPaste.siblingAbsorb` does not match the
21
+ * nearest list and the target is a direct leaf of its item; null otherwise.
25
22
  */
26
23
  export function findListBreakOut(doc, targetPath, parsed, offset, targetRaw) {
27
24
  if (parsed.children.length === 0)
@@ -47,25 +44,26 @@ export function findListBreakOut(doc, targetPath, parsed, offset, targetRaw) {
47
44
  * Split the enclosing list at the target item and splice the pasted blocks between the
48
45
  * halves at the list's parent level, in one multi-scope entry.
49
46
  */
50
- export async function applyListBreakOut(plan, pastedBlocks, ctx) {
47
+ export async function applyListBreakOut(plan, pastedBlocks, ctx, start) {
51
48
  const list = nodeAt(ctx.doc, plan.listPath);
52
49
  if (!list?.children)
53
50
  return;
54
- const { replacement, hasTrailingResidue } = buildListBreakOutReplacement(list, plan.itemIndex, plan.innerIndex, plan.offset, pastedBlocks, plan.targetRaw);
51
+ const lineEnding = documentLineEnding(ctx.doc);
52
+ const { replacement, hasTrailingResidue } = buildListBreakOutReplacement(list, plan.itemIndex, plan.innerIndex, plan.offset, pastedBlocks, lineEnding, plan.targetRaw, ctx.reading.grammar);
55
53
  if (replacement.length === 0)
56
54
  return;
57
55
  for (const node of replacement)
58
- ensureEditableContainers(node);
56
+ ensureEditableContainers(node, lineEnding);
59
57
  const parentScope = resolveParentScope(ctx.doc, plan.listPath, ctx.controller);
60
58
  if (!parentScope)
61
59
  return;
62
60
  const spliceIndex = plan.listPath[plan.listPath.length - 1];
63
- // The last pasted block, never the second-half residue list — and carried through the settle,
64
- // whose folds can move the slot out from under a landing chosen here.
61
+ // The last pasted block, never the second-half residue list, and kept updated through the
62
+ // fix-up, whose merges can move the position out from under a caret chosen here.
65
63
  const caret = trackedPasteCaret(replacement, spliceIndex, focusIndexBeforeResidue(replacement.length, hasTrailingResidue), CURSOR_END);
66
64
  await ctx.controller.commitMultiScope({
67
65
  scopes: [parentScope],
68
- snapshot: ctx.undoEntry === 'join' ? 'skip' : { path: docPathFrom(plan.listPath), offset: 0 },
66
+ snapshot: start,
69
67
  mutate: ([scopeView]) => {
70
68
  spliceMany(scopeView.children, spliceIndex, 1, replacement);
71
69
  const change = {
@@ -83,25 +81,28 @@ export async function applyListBreakOut(plan, pastedBlocks, ctx) {
83
81
  eventPath: docPathFrom(plan.listPath)
84
82
  },
85
83
  trackCaret: [caret],
86
- afterTick: () => {
84
+ landing: () => {
87
85
  const landed = nodeAt(ctx.doc, parentScope.path)?.children?.[caret.index];
88
- return ctx.controller.landCaret([...parentScope.path, caret.index], landedPasteOffset(landed, caret, CURSOR_END));
86
+ const at = landedPastePosition(landed, caret, CURSOR_END);
87
+ return {
88
+ path: docPathFrom([...parentScope.path, caret.index, ...at.path]),
89
+ offset: at.offset
90
+ };
89
91
  }
90
92
  });
91
93
  }
92
94
  /**
93
- * Split `list` at `(itemIndex, innerIndex, offset)` and splice `pastedBlocks` between the
94
- * halves. `hasTrailingResidue` lets the caller land the caret on the last pasted block
95
- * rather than the residue. Input nodes are cloned, not mutated.
95
+ * Split `list` at `(itemIndex, innerIndex, offset)` and splice `pastedBlocks` between the halves,
96
+ * cloning every input node rather than mutating it.
96
97
  */
97
- export function buildListBreakOutReplacement(list, itemIndex, innerIndex, offset, pastedBlocks, targetRaw) {
98
+ export function buildListBreakOutReplacement(list, itemIndex, innerIndex, offset, pastedBlocks, ending, targetRaw, grammar) {
98
99
  const items = list.children ?? [];
99
100
  const item = items[itemIndex];
100
101
  if (!item?.children)
101
102
  return { replacement: [], hasTrailingResidue: false };
102
103
  if (!item.children[innerIndex])
103
104
  return { replacement: [], hasTrailingResidue: false };
104
- const { leadingItem, trailingItem } = buildSplitItems(item, innerIndex, offset, targetRaw);
105
+ const { leadingItem, trailingItem } = buildSplitItems(item, innerIndex, offset, ending, targetRaw, grammar);
105
106
  const itemsBefore = items.slice(0, itemIndex).map(cloneNode);
106
107
  const itemsAfter = items.slice(itemIndex + 1).map(cloneNode);
107
108
  if (itemsAfter[0])
@@ -115,17 +116,8 @@ export function buildListBreakOutReplacement(list, itemIndex, innerIndex, offset
115
116
  if (firstHalfItems.length > 0) {
116
117
  replacement.push(assembleListHalf(list, firstHalfItems, base));
117
118
  }
118
- for (const block of pastedBlocks) {
119
- const cloned = cloneNode(block);
120
- // Normalize the clone's items so its rebuilt raw can't mash into the next block.
121
- // The ending comes from the list being broken out of — the pasted block lands
122
- // among its lines.
123
- if (cloned.kind === 'list' && cloned.children) {
124
- newlineTerminateListItems(cloned.children, trailingLineEnding(list.raw));
125
- rebuildListRaw(cloned);
126
- }
127
- replacement.push(cloned);
128
- }
119
+ for (const block of pastedBlocks)
120
+ replacement.push(cloneNode(block));
129
121
  const hasTrailingResidue = secondHalfItems.length > 0;
130
122
  if (hasTrailingResidue) {
131
123
  // Continue numbering across the paste gap: the split item consumes one slot in each
@@ -1,17 +1,13 @@
1
1
  /**
2
- * The commit scope a paste addresses when it re-mints or splices a block: the block's
3
- * PARENT container, resolved from the path rather than from whatever `blockEdit` is in
4
- * scope — a caller holding a nested-bundle blockEdit would misroute through the wrong
5
- * container.
2
+ * The commit scope a paste addresses when it splices at a block's parent container, resolved from
3
+ * the path rather than from whatever `blockEdit` is in scope, since a caller holding a nested
4
+ * bundle's `blockEdit` would go through the wrong container.
6
5
  */
7
- import type { CstNode, Document } from '../../core/nodes';
6
+ import type { Document } from '../../core/nodes';
7
+ import type { NodeView } from '../../core/node-views';
8
8
  import type { MultiScopeTarget, PasteCommitCoordinator } from './paste-deps';
9
9
  /** Null when `blockPath`'s parent doesn't resolve to a container. */
10
10
  export declare function resolveParentScope(doc: Document, blockPath: number[], controller: PasteCommitCoordinator): MultiScopeTarget | null;
11
- /**
12
- * A container's mounted `BlockListState`, or a detached stand-in. Never `expectState`:
13
- * these routes can be a cross-block paste whose range delete ALREADY committed, so a throw
14
- * would leave the selection deleted and nothing pasted. The ceremony writes ids to the
15
- * owned node's `childIds`, so only ref alignment is lost on the stand-in.
16
- */
17
- export declare function containerScopeState(controller: PasteCommitCoordinator, node: CstNode): MultiScopeTarget['state'];
11
+ /** A container's mounted `BlockListState`, or its ids and no refs: unmounted is normal after a
12
+ * gesture's earlier commit, and every caller lands its caret by path, so no ref is missed. */
13
+ export declare function containerScopeState(controller: Pick<PasteCommitCoordinator, 'resolveState'>, node: NodeView): MultiScopeTarget['state'];
@@ -1,11 +1,9 @@
1
1
  /**
2
- * The commit scope a paste addresses when it re-mints or splices a block: the block's
3
- * PARENT container, resolved from the path rather than from whatever `blockEdit` is in
4
- * scope — a caller holding a nested-bundle blockEdit would misroute through the wrong
5
- * container.
2
+ * The commit scope a paste addresses when it splices at a block's parent container, resolved from
3
+ * the path rather than from whatever `blockEdit` is in scope, since a caller holding a nested
4
+ * bundle's `blockEdit` would go through the wrong container.
6
5
  */
7
6
  import { nodeAt } from '../node-primitives';
8
- import { devWarn } from '../../dev-warn';
9
7
  /** Null when `blockPath`'s parent doesn't resolve to a container. */
10
8
  export function resolveParentScope(doc, blockPath, controller) {
11
9
  const parentPath = blockPath.slice(0, -1);
@@ -20,16 +18,11 @@ export function resolveParentScope(doc, blockPath, controller) {
20
18
  path: parentPath
21
19
  };
22
20
  }
23
- /**
24
- * A container's mounted `BlockListState`, or a detached stand-in. Never `expectState`:
25
- * these routes can be a cross-block paste whose range delete ALREADY committed, so a throw
26
- * would leave the selection deleted and nothing pasted. The ceremony writes ids to the
27
- * owned node's `childIds`, so only ref alignment is lost on the stand-in.
28
- */
21
+ /** A container's mounted `BlockListState`, or its ids and no refs: unmounted is normal after a
22
+ * gesture's earlier commit, and every caller lands its caret by path, so no ref is missed. */
29
23
  export function containerScopeState(controller, node) {
30
- const mounted = controller.resolveState(node);
31
- if (mounted)
32
- return mounted;
33
- devWarn('paste', `committing at an unmounted ${node.kind} scope — ids realign, component refs do not`);
34
- return { innerBlockIds: [...(node.childIds ?? [])], innerBlockRefs: [] };
24
+ return (controller.resolveState(node) ?? {
25
+ innerBlockIds: [...(node.childIds ?? [])],
26
+ innerBlockRefs: []
27
+ });
35
28
  }
@@ -3,18 +3,23 @@
3
3
  * which is what keeps the `tree-operations -> editor-actions` and
4
4
  * `tree-operations -> reactivity` back-edges out of the graph.
5
5
  */
6
- import type { CommitMultiScopeArgs, MultiScopeTarget } from '../../action-contracts';
6
+ import type { CommitMultiScopeArgs, LeafTextOptions, LeafWriteResult, MultiScopeTarget, ReplaceFocus, ReplaceSource } from '../../action-contracts';
7
7
  import type { CstNode } from '../../core/nodes';
8
+ import type { NodeView } from '../../core/node-views';
8
9
  export type { CommitMultiScopeArgs, MultiScopeTarget };
9
10
  export interface PasteCommitCoordinator {
10
- commitMultiScope<const S extends readonly MultiScopeTarget[]>(args: CommitMultiScopeArgs<S>): Promise<void>;
11
+ commitMultiScope<const S extends readonly MultiScopeTarget[]>(args: CommitMultiScopeArgs<S>): Promise<boolean>;
11
12
  getDocScope(): MultiScopeTarget;
12
13
  /** Resolve a container node to its mounted reactive state. */
13
- resolveState(node: CstNode): MultiScopeTarget['state'] | undefined;
14
- /**
15
- * Land the caret at a doc-absolute path, revealing an off-window target first. A
16
- * structural paste lands at the END of the pasted run, so its target index scales with
17
- * the clipboard and a sync ref lookup would no-op past the window's overscan (VR-12).
18
- */
19
- landCaret(path: number[], offset: number): Promise<void>;
14
+ resolveState(node: NodeView): MultiScopeTarget['state'] | undefined;
15
+ /** Write `text` into the leaf at `leafPath` as one commit at its parent list, through the write
16
+ * every keystroke takes. */
17
+ commitLeafText(leafPath: number[], text: string, opts: LeafTextOptions): Promise<LeafWriteResult>;
18
+ /** Replace the block at `blockPath` as one commit at its parent list, resolving to how many blocks
19
+ * landed or null; `snapshotOffset` is undo's caret in the block when nothing is focused. */
20
+ replaceBlock(blockPath: number[], replacement: CstNode[], focus: ReplaceFocus, opts: {
21
+ source: ReplaceSource;
22
+ trailingBlank?: boolean;
23
+ snapshotOffset: number;
24
+ }): Promise<number | null>;
20
25
  }
@@ -1,8 +1,25 @@
1
1
  /**
2
2
  * Replacement node list for a multi-block paste into a single leaf: the leaf's raw split
3
- * at the cursor, with the pasted blocks between the slices. STRUCTURAL pastes only —
4
- * routing a single-paragraph clipboard here would split it into three nodes.
3
+ * at the cursor, with the pasted blocks between the slices. Structural pastes only: routing
4
+ * a single-paragraph clipboard here would split it into three nodes.
5
5
  */
6
6
  import type { CstNode } from '../../core/nodes';
7
7
  import type { NodeView } from '../../core/node-views';
8
- export declare function buildPastedReplacement(leaf: NodeView, offset: number, blocks: CstNode[]): CstNode[];
8
+ import { type LineEnding } from '../../core/lines';
9
+ import type { GrammarView } from '../../schema/block-openers';
10
+ import { type ChildSlot } from '../list/task-paragraph';
11
+ export interface PastedReplacement {
12
+ nodes: CstNode[];
13
+ /** Index of the last pasted block in `nodes`, where the caret lands. */
14
+ lastPastedIndex: number;
15
+ }
16
+ /** `slot` is where the leaf sits; the leaf's own text around the pasted blocks is read the way a
17
+ * reload reads it at the slot it lands in. */
18
+ export declare function buildPastedReplacement(leaf: NodeView, offset: number, blocks: CstNode[], ending: LineEnding, grammar: GrammarView, slot: ChildSlot): PastedReplacement;
19
+ /** The clipboard's blocks as they land after `prev`; the commit ends the last one's line. */
20
+ export declare function landClipboardBlocks(prev: CstNode | undefined, blocks: readonly CstNode[], lineEnding: '\n' | '\r\n'): CstNode[];
21
+ /**
22
+ * A copy of `block` landing after `prev`, given a blank line where the clipboard gave none, or it
23
+ * would continue `prev` on reload; a blank `prev` already separates it.
24
+ */
25
+ export declare function landedAfter(prev: CstNode, block: CstNode, lineEnding: '\n' | '\r\n'): CstNode;
@@ -1,60 +1,91 @@
1
1
  /**
2
2
  * Replacement node list for a multi-block paste into a single leaf: the leaf's raw split
3
- * at the cursor, with the pasted blocks between the slices. STRUCTURAL pastes only —
4
- * routing a single-paragraph clipboard here would split it into three nodes.
3
+ * at the cursor, with the pasted blocks between the slices. Structural pastes only: routing
4
+ * a single-paragraph clipboard here would split it into three nodes.
5
5
  */
6
- import { snapToScalarBoundary, trailingLineEnding, trimTrailingLineEnding } from '../../core/lines';
7
- import { isBlankParagraph } from '../../core/parser';
6
+ import { ownTrailingLineEnding, trailingLineEnding } from '../../core/lines';
7
+ import { isBlankParagraph, readBlocks } from '../../core/parser';
8
8
  import { ensureEditableContainers } from '../node-primitives';
9
- import { parseFirstBlock } from '../parse-block';
10
- export function buildPastedReplacement(leaf, offset, blocks) {
9
+ import { parseCutResidue, parseFirstBlock } from '../parse-block';
10
+ import { cutKeepingStructure } from '../structural-suffix';
11
+ import { fragmentReaderAt } from '../list/task-paragraph';
12
+ /** `slot` is where the leaf sits; the leaf's own text around the pasted blocks is read the way a
13
+ * reload reads it at the slot it lands in. */
14
+ export function buildPastedReplacement(leaf, offset, blocks, ending, grammar, slot) {
11
15
  if (blocks.length === 0)
12
- return [];
16
+ return { nodes: [], lastPastedIndex: -1 };
13
17
  const leafRaw = leaf.raw;
14
- const lineEnding = trailingLineEnding(leafRaw);
15
- const display = trimTrailingLineEnding(leafRaw);
16
- // Off any scalar interior before the cut: the halves land in DIFFERENT blocks, so a pair
17
- // split here is unrecoverable bytes rather than a recoverable edit.
18
- const cut = snapToScalarBoundary(display, offset);
19
- const rawBefore = display.slice(0, cut);
20
- const rawAfter = display.slice(cut);
18
+ const lineEnding = trailingLineEnding(leafRaw, ending);
19
+ const { head: rawBefore, rest } = cutKeepingStructure(leaf, offset);
20
+ const readAt = (index) => fragmentReaderAt(slot.owner, slot.index + index, grammar);
21
+ // At least one pasted block lands before the residue.
22
+ const residue = parseCutResidue(rest, lineEnding, readAt(1));
21
23
  const originalTrivia = leaf.leadingTrivia ?? '';
22
24
  const newNodes = [];
23
- // Re-parsed so heading/list leaves round-trip through their own parser rather than
24
- // being forced back to a paragraph.
25
+ // A heading stays one, and a to-do's text stays its paragraph.
25
26
  if (rawBefore.length > 0) {
26
27
  const beforeRaw = rawBefore + lineEnding;
27
- const beforeNode = parseFirstBlock(beforeRaw);
28
+ const beforeNode = parseFirstBlock(beforeRaw, readAt(0));
28
29
  beforeNode.leadingTrivia = originalTrivia;
29
- ensureEditableContainers(beforeNode);
30
+ ensureEditableContainers(beforeNode, lineEnding);
30
31
  newNodes.push(beforeNode);
31
32
  }
32
- // A blank-line separator is forced where source trivia is empty, or the block butts
33
- // against its predecessor via a soft break and renders as one merged paragraph. A blank
34
- // predecessor already holds a run open, so its successor takes no separator of its own.
35
- for (let i = 0; i < blocks.length; i++) {
36
- const node = { ...blocks[i] };
37
- const prev = newNodes[newNodes.length - 1];
38
- if (newNodes.length === 0) {
39
- node.leadingTrivia = originalTrivia;
40
- }
41
- else if (prev !== undefined && isBlankParagraph(prev)) {
42
- node.leadingTrivia = blocks[i].leadingTrivia ?? '';
33
+ const hasResidue = residue.blocks.length > 0;
34
+ const landed = landClipboardBlocks(newNodes.at(-1), blocks, lineEnding);
35
+ if (newNodes.length === 0)
36
+ landed[0].leadingTrivia = originalTrivia;
37
+ // Appended, never spread: a paste can outnumber an argument list (G4.60).
38
+ for (const node of landed)
39
+ newNodes.push(node);
40
+ const lastPastedIndex = newNodes.length - 1;
41
+ if (hasResidue) {
42
+ const [first, ...rest] = residue.blocks;
43
+ const lastPasted = newNodes[lastPastedIndex];
44
+ // An open last pasted block sits on the cut line, so the rest of that line, blank or just its
45
+ // break, ends it; a closed one is followed by the cut line's break as a blank line.
46
+ const onCutLine = ownTrailingLineEnding(lastPasted.raw) === '';
47
+ const blankTail = !residue.endedLine && rest.length === 0 && isBlankParagraph(first);
48
+ const cutLineEnd = residue.endedLine || (onCutLine && blankTail ? first.raw : lineEnding);
49
+ if (onCutLine)
50
+ newNodes[lastPastedIndex] = endedOnCutLine(lastPasted, cutLineEnd, grammar);
51
+ if (!onCutLine || !blankTail) {
52
+ newNodes.push({ ...first, leadingTrivia: onCutLine ? '' : cutLineEnd });
43
53
  }
44
- else {
45
- node.leadingTrivia = blocks[i].leadingTrivia ? blocks[i].leadingTrivia : lineEnding;
54
+ for (const node of rest)
55
+ newNodes.push(node);
56
+ for (let i = lastPastedIndex + 1; i < newNodes.length; i++) {
57
+ ensureEditableContainers(newNodes[i], lineEnding);
46
58
  }
47
- ensureEditableContainers(node);
48
- newNodes.push(node);
49
59
  }
50
- // Separate node rather than merged into the last pasted block, which would let a
51
- // non-paragraph tail absorb it as a continuation line.
52
- if (rawAfter.length > 0) {
53
- const afterRaw = rawAfter + lineEnding;
54
- const afterNode = parseFirstBlock(afterRaw);
55
- afterNode.leadingTrivia = lineEnding;
56
- ensureEditableContainers(afterNode);
57
- newNodes.push(afterNode);
60
+ return { nodes: newNodes, lastPastedIndex };
61
+ }
62
+ /** `node` with the rest of the line it was pasted into, read back as the one block it still is. */
63
+ function endedOnCutLine(node, cutLineEnd, grammar) {
64
+ const lineEnding = trailingLineEnding(cutLineEnd, '\n');
65
+ // The clipboard's own block keeps the kind the clipboard's parse gave it, as every other pasted
66
+ // block does; what that does to a checkbox it lands behind is #624's question.
67
+ const ended = parseFirstBlock(node.raw + cutLineEnd, (text) => readBlocks(text, { grammar, scope: 'fragment' }));
68
+ ended.leadingTrivia = node.leadingTrivia;
69
+ ensureEditableContainers(ended, lineEnding);
70
+ return ended;
71
+ }
72
+ /** The clipboard's blocks as they land after `prev`; the commit ends the last one's line. */
73
+ export function landClipboardBlocks(prev, blocks, lineEnding) {
74
+ const landed = [];
75
+ for (let i = 0; i < blocks.length; i++) {
76
+ // The clipboard's parse already read its own blocks as themselves, so only the join with
77
+ // the text above is new.
78
+ const node = i === 0 && prev ? landedAfter(prev, blocks[i], lineEnding) : { ...blocks[i] };
79
+ ensureEditableContainers(node, lineEnding);
80
+ landed.push(node);
58
81
  }
59
- return newNodes;
82
+ return landed;
83
+ }
84
+ /**
85
+ * A copy of `block` landing after `prev`, given a blank line where the clipboard gave none, or it
86
+ * would continue `prev` on reload; a blank `prev` already separates it.
87
+ */
88
+ export function landedAfter(prev, block, lineEnding) {
89
+ const separated = block.leadingTrivia !== '' || isBlankParagraph(prev);
90
+ return { ...block, leadingTrivia: separated ? block.leadingTrivia : lineEnding };
60
91
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Content-keyed, pre-parse paste transforms: a plugin registers a named transform that
3
- * rewrites the raw clipboard text or declines. Register-once, throw-on-duplicate — the
3
+ * rewrites the raw clipboard text or declines. Register-once, throw-on-duplicate, the
4
4
  * `customElements` model shared with `paste-surfaces.ts`.
5
5
  */
6
6
  import type { PluginActivation } from '../../schema/plugin-activation';
@@ -12,14 +12,12 @@ export interface PasteTransform {
12
12
  }
13
13
  export declare function registerPasteTransform(transform: PasteTransform): void;
14
14
  /**
15
- * Non-throwing registration probe, so an idempotent module (HMR, a re-imported registrar) asks
15
+ * Non-throwing registration check, so an idempotent module (HMR, a re-imported registrar) asks
16
16
  * before registering instead of catching the duplicate throw.
17
17
  */
18
18
  export declare function isPasteTransformRegistered(name: string): boolean;
19
19
  /**
20
- * Run every transform over `text` in registration order, each seeing the prior's output;
21
- * a null return leaves the running text untouched. `activation` scopes the run to one
22
- * instance's plugins; absent = every installed one. A transform no plugin owns always runs.
20
+ * Run every transform `activation` resolves over `text`, its line breaks made LF, in registration
21
+ * order, each seeing the prior's output; a null return leaves the running text untouched.
23
22
  */
24
- export declare function applyPasteTransforms(text: string, activation?: PluginActivation): string;
25
- export declare function __resetPasteTransformsForTests(): void;
23
+ export declare function applyPasteTransforms(text: string, activation: PluginActivation): string;
@@ -1,35 +1,32 @@
1
- import { currentInstallingPlugin } from '../../schema/plugin-install';
2
- import { registerOnce } from '../../schema/register-once';
1
+ import { createPluginRegistry } from '../../schema/plugin-registry';
3
2
  import { devWarn } from '../../dev-warn';
4
3
  import { editorEnv } from '../../env';
5
- // Map iteration is insertion order, so `.values()` is the pipeline order while the keyed
6
- // lookup guards duplicates — one structure, no parallel array.
7
- const transforms = new Map();
4
+ import { normalizeLineEndings } from '../../core/lines';
5
+ // Registration order is the pipeline order.
6
+ const transforms = createPluginRegistry({
7
+ label: 'registerPasteTransform',
8
+ isBuiltin: () => false
9
+ });
8
10
  export function registerPasteTransform(transform) {
9
- const existing = transforms.get(transform.name);
10
- registerOnce(existing !== undefined, () => transforms.set(transform.name, { transform, owner: currentInstallingPlugin() }), `registerPasteTransform: "${transform.name}" is already registered` +
11
- (existing?.owner ? ` by plugin '${existing.owner}'` : '') +
11
+ const owner = transforms.ownerOf(transform.name);
12
+ transforms.register(transform.name, transform, `registerPasteTransform: "${transform.name}" is already registered` +
13
+ (owner ? ` by plugin '${owner}'` : '') +
12
14
  `. Paste transforms are register-once.`);
13
15
  }
14
16
  /**
15
- * Non-throwing registration probe, so an idempotent module (HMR, a re-imported registrar) asks
17
+ * Non-throwing registration check, so an idempotent module (HMR, a re-imported registrar) asks
16
18
  * before registering instead of catching the duplicate throw.
17
19
  */
18
20
  export function isPasteTransformRegistered(name) {
19
21
  return transforms.has(name);
20
22
  }
21
23
  /**
22
- * Run every transform over `text` in registration order, each seeing the prior's output;
23
- * a null return leaves the running text untouched. `activation` scopes the run to one
24
- * instance's plugins; absent = every installed one. A transform no plugin owns always runs.
24
+ * Run every transform `activation` resolves over `text`, its line breaks made LF, in registration
25
+ * order, each seeing the prior's output; a null return leaves the running text untouched.
25
26
  */
26
27
  export function applyPasteTransforms(text, activation) {
27
- if (transforms.size === 0)
28
- return text;
29
- let result = text;
30
- for (const { transform, owner } of transforms.values()) {
31
- if (owner !== null && activation && !activation.isActive(owner))
32
- continue;
28
+ let result = normalizeLineEndings(text);
29
+ for (const [, transform] of transforms.entries(activation)) {
33
30
  const next = runContained(transform, result, 'pipeline');
34
31
  if (next === null)
35
32
  continue;
@@ -38,15 +35,9 @@ export function applyPasteTransforms(text, activation) {
38
35
  }
39
36
  return result;
40
37
  }
41
- export function __resetPasteTransformsForTests() {
42
- transforms.clear();
43
- }
44
38
  /**
45
- * The one door plugin `transform()` code is called through. On the cross-block route the
46
- * covering range delete has already committed, so an escaping throw would leave the
47
- * selection deleted and nothing pasted; a throw becomes the null a decline returns. The
48
- * warning names its phase because a probe-time throw read as a decline would send the
49
- * author debugging a paste that worked.
39
+ * The one place plugin `transform()` code runs. A throw becomes a decline, since on the
40
+ * cross-block route the range delete has already committed and would leave nothing pasted.
50
41
  */
51
42
  function runContained(transform, text, phase) {
52
43
  try {
@@ -67,6 +58,6 @@ function warnIfNonIdempotent(transform, result) {
67
58
  return;
68
59
  const again = runContained(transform, result, 'probe');
69
60
  if (again !== null && again !== result) {
70
- devWarn('paste-transform', `transform '${transform.name}' is not idempotent — re-running it on its own output changed the text again`);
61
+ devWarn('paste-transform', `transform '${transform.name}' is not idempotent: re-running it on its own output changed the text again`);
71
62
  }
72
63
  }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The bytes a block is replaced by, parsed the one way every replace-at-parent caller needs them:
3
+ * their line breaks in the document's ending, terminated in the original's own ending, else the
4
+ * document's, read the way a reload reads the original's slot, carrying the original's leading
5
+ * blank lines, with editable containers ensured.
6
+ */
7
+ import type { CstNode } from '../../core/nodes';
8
+ import type { FragmentReader } from '../list/task-paragraph';
9
+ import { type LineEnding } from '../../core/lines';
10
+ export interface ParsedReplacement {
11
+ replacement: CstNode[];
12
+ /** The parse's own trailing blank, for a caller that lands one (`paste/dispatch.ts`). */
13
+ suffix: string;
14
+ }
15
+ /**
16
+ * `read` is the original's slot reader (`fragmentReaderAt`). Null where `raw` parses to nothing
17
+ * and the caller named no `fallback`: the block keeps its bytes rather than an empty splice.
18
+ */
19
+ export declare function parseReplacement(original: CstNode, raw: string, ending: LineEnding, read: FragmentReader, fallback?: () => CstNode[]): ParsedReplacement | null;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The bytes a block is replaced by, parsed the one way every replace-at-parent caller needs them:
3
+ * their line breaks in the document's ending, terminated in the original's own ending, else the
4
+ * document's, read the way a reload reads the original's slot, carrying the original's leading
5
+ * blank lines, with editable containers ensured.
6
+ */
7
+ import { terminateLine, trailingLineEnding, withLineEnding } from '../../core/lines';
8
+ import { ensureEditableContainers, normalizeReplacementTrivia } from '../node-primitives';
9
+ /**
10
+ * `read` is the original's slot reader (`fragmentReaderAt`). Null where `raw` parses to nothing
11
+ * and the caller named no `fallback`: the block keeps its bytes rather than an empty splice.
12
+ */
13
+ export function parseReplacement(original, raw, ending, read, fallback) {
14
+ const lineEnding = trailingLineEnding(original.raw, ending);
15
+ const bytes = terminateLine(withLineEnding(raw, ending), lineEnding);
16
+ const parsed = read(bytes);
17
+ const children = parsed.children.length > 0 ? parsed.children : fallback?.();
18
+ if (!children || children.length === 0)
19
+ return null;
20
+ const replacement = normalizeReplacementTrivia(original, children);
21
+ for (const node of replacement)
22
+ ensureEditableContainers(node, lineEnding);
23
+ return { replacement, suffix: parsed.suffix };
24
+ }
@@ -2,7 +2,7 @@ import type { CstNode } from '../../core/nodes';
2
2
  import type { PasteStrategy } from './dispatch';
3
3
  /**
4
4
  * The clipboard's content blocks: a blank block at either edge is the copy's packaging, which a
5
- * surface holding no blocks classifies past. Empty when nothing but packaging came across.
5
+ * kind that holds no blocks skips over. Empty when nothing but packaging came across.
6
6
  */
7
7
  export declare function contentBlocks(blocks: readonly CstNode[]): readonly CstNode[];
8
8
  /** One paragraph is text any leaf can take inline; anything else is structure. */
@@ -1,7 +1,7 @@
1
1
  import { isBlankParagraph } from '../../core/parser';
2
2
  /**
3
3
  * The clipboard's content blocks: a blank block at either edge is the copy's packaging, which a
4
- * surface holding no blocks classifies past. Empty when nothing but packaging came across.
4
+ * kind that holds no blocks skips over. Empty when nothing but packaging came across.
5
5
  */
6
6
  export function contentBlocks(blocks) {
7
7
  let start = 0;