@voithos-labs/aragonite 0.10.4 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +11 -5
  3. package/dist/a11y-strings.js +60 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +12 -21
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +603 -1126
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +26 -51
  26. package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +29 -34
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +57 -39
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +141 -203
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +45 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
  102. package/dist/components/blocks/text/click-snap-guard.js +10 -7
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -108
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +212 -199
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +12 -35
  144. package/dist/components/drag-handle.js +22 -68
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -24
  162. package/dist/components/editor-root-listeners.js +49 -24
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +14 -26
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +30 -35
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +54 -75
  256. package/dist/core/inline/inline-widgets.js +54 -62
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +31 -15
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -6
  347. package/dist/cursor/height-oracle.js +26 -74
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +14 -15
  365. package/dist/cursor/scrollport.js +7 -13
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -14
  375. package/dist/cursor/visual-lines.js +45 -46
  376. package/dist/cursor/widget-edge-snap.d.ts +10 -15
  377. package/dist/cursor/widget-edge-snap.js +13 -12
  378. package/dist/cursor/widget-offset.d.ts +110 -104
  379. package/dist/cursor/widget-offset.js +344 -179
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +30 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +28 -50
  434. package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
  435. package/dist/editor-actions/focus/focus-landing.js +15 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +54 -82
  465. package/dist/editor-actions/plugin/container.js +105 -188
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +88 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +37 -8
  550. package/dist/plugin.js +100 -77
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +78 -67
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -81
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +141 -310
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +78 -84
  695. package/dist/schema/commands.js +152 -117
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +8 -10
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +63 -80
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +92 -125
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +59 -96
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +51 -134
  807. package/dist/selection/dead-space-caret.d.ts +19 -30
  808. package/dist/selection/dead-space-caret.js +70 -88
  809. package/dist/selection/drag-pointer.d.ts +7 -9
  810. package/dist/selection/drag-pointer.js +23 -33
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -40
  816. package/dist/selection/keyboard-extend.js +94 -117
  817. package/dist/selection/multi-click.d.ts +13 -18
  818. package/dist/selection/multi-click.js +32 -38
  819. package/dist/selection/native-bridge.d.ts +29 -39
  820. package/dist/selection/native-bridge.js +78 -127
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +25 -16
  824. package/dist/selection/path-lookup.js +101 -18
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +5 -5
  828. package/dist/selection/pointer-gesture.js +5 -5
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -40
  832. package/dist/selection/primitives.js +57 -67
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -23
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +34 -16
  852. package/dist/selection/selection-drop.js +159 -95
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +60 -53
  864. package/dist/styles/editor.css +201 -143
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
  960. package/dist/tree-operations/paste/replacement-parse.js +12 -10
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +327 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +253 -185
  996. package/docs/guide/plugin-guide.md +332 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +12 -16
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/cursor/scroll-hold.d.ts +0 -10
  1015. package/dist/cursor/scroll-hold.js +0 -22
  1016. package/dist/invariants/split-landing.d.ts +0 -8
  1017. package/dist/invariants/split-landing.js +0 -15
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
@@ -1,183 +1,116 @@
1
- /**
2
- * Cross-block clipboard text collection.
3
- */
1
+ /** Builds the plain text a cross-block selection puts on the clipboard. */
4
2
  import { makeBlockNode, metadataOf } from '../core/nodes';
5
3
  import { cloneMetadata } from '../tree-operations/clone';
6
4
  import { isBlockNode, nodeAt } from '../tree-operations/node-primitives';
7
- import { walkBetween, normalize, charOffsetOf, cellIndexOf } from './primitives';
8
- import { snapCrossBlockTableEndpoints } from './table-endpoint-snap';
9
- import { isStrictAncestorOf, pathHasPrefix, pathsEqual, sharedPrefixLength } from './path-math';
5
+ import { charOffsetOf } from './primitives';
6
+ import { gridClipboard } from './grid-selection';
7
+ import { pathHasPrefix, pathsEqual } from './path-math';
10
8
  import { cellRowCol } from '../cursor/coordinate-spaces';
11
- import { displayLength, terminateLine } from '../core/lines';
9
+ import { displayLength, documentLineEnding, terminateLine, trailingLineEnding } from '../core/lines';
12
10
  import { copyRectangleAsSubTable } from '../tree-operations/sub-table-copy';
13
11
  import { isReservedChromeChild } from '../schema/reserved-chrome';
14
12
  import { getBlockKindDescriptor, tryGetBlockKindDescriptor } from '../schema/block-kind-descriptor';
15
13
  // ── Public API ─────────────────────────────────────────────────────────────
16
- /**
17
- * Plain text spanning a cross-block selection: the start block's tail, every middle block's
18
- * leadingTrivia + raw, the end block's head. Descendants of an already-collected container
19
- * are skipped, since a container's raw already holds its children's text. Full-boundary leaf
20
- * endpoints promote to their deepest non-shared container ancestor so list markers and
21
- * blockquote prefixes survive; a start inside reserved chrome re-emits its container once.
22
- */
23
- export function collectCrossBlockText(doc, anchor, focus) {
24
- const normalized = normalize({ anchor, focus });
25
- const { start, end } = snapCrossBlockTableEndpoints(doc, normalized.start, normalized.end);
14
+ /** The plain text of a covered range: whatever the coverage says is covered end to end is copied
15
+ * whole, markers included, and a selection inside one table copies its rectangle. */
16
+ export function collectCrossBlockText(doc, coverage) {
17
+ const { start, end } = coverage.range;
18
+ if (coverage.grid)
19
+ return gridClipboard(doc, coverage.grid)?.text ?? '';
26
20
  const startNode = nodeAt(doc, start.path);
27
21
  const endNode = nodeAt(doc, end.path);
28
22
  if (!startNode || !endNode)
29
23
  return '';
30
- // On a table, offsets index half-open cell ranges (see `SelectionPoint`), not characters,
31
- // so the three table branches route through emitTablePortion. Same-path intra-table offsets
32
- // are context-established (unflagged) and read directly; cross-block ones use cellIndexOf.
33
- if (pathsEqual(start.path, end.path) && isBlockNode(startNode) && startNode.kind === 'table') {
34
- // Cell offsets are inclusive on both ends (hence the `+ 1`). A collapsed pair is a caret
35
- // in a cell, not a rect, so copy nothing and let the cell's native copy handle it.
36
- if (start.offset === end.offset)
37
- return '';
38
- return emitTablePortion(startNode, start.offset, end.offset + 1);
39
- }
40
24
  const startRaw = isBlockNode(startNode) ? startNode.raw : '';
41
25
  const endRaw = isBlockNode(endNode) ? endNode.raw : '';
42
- // One leaf taken whole (`SelectionState.wholeUnitPath`): the only same-path prose pair the
43
- // state stores, and the head/tail split below would emit its bytes twice.
44
- if (pathsEqual(start.path, end.path) && !start.cellCoordinate) {
26
+ // One block selected whole (`SelectionState.wholeUnitPath`) is the only character pair on one
27
+ // path, and the head/tail split below would emit its bytes twice.
28
+ if (pathsEqual(start.path, end.path)) {
45
29
  return startRaw.slice(start.offset, end.offset);
46
30
  }
31
+ const startRoot = coverage.coveredRootHolding(start.path);
32
+ const endRoot = coverage.coveredRootHolding(end.path);
33
+ if (startRoot && endRoot && pathsEqual(startRoot, endRoot))
34
+ return rawAt(doc, startRoot);
47
35
  let effectiveStartPath = start.path;
48
36
  let chromeStart = null;
49
37
  let startTail = '';
50
- if (isBlockNode(startNode) && startNode.kind === 'table') {
51
- const tableNode = startNode;
52
- const colCount = metadataOf(tableNode, 'table').columnCount;
53
- const allCellsCount = tableNode.children.length * colCount;
54
- startTail = emitTablePortion(tableNode, cellIndexOf(start, 'collectCrossBlockText:startTable'), allCellsCount);
38
+ if (startRoot) {
39
+ effectiveStartPath = startRoot;
40
+ startTail = rawAt(doc, startRoot);
41
+ }
42
+ else if (coverage.startCells && isBlockNode(startNode)) {
43
+ startTail = emitTablePortion(startNode, coverage.startCells.from, coverage.startCells.to);
55
44
  }
56
45
  else {
57
46
  const startOffset = charOffsetOf(start, 'collectCrossBlockText:start');
58
- if (startOffset === 0 && start.path.length > 1) {
59
- const promoted = promoteToContainer(doc, start.path, end.path, 'start');
60
- if (promoted) {
61
- effectiveStartPath = promoted.path;
62
- startTail = promoted.raw;
63
- }
64
- else {
65
- startTail = startRaw.slice(startOffset);
66
- }
67
- }
68
- else if (startOffset > 0 && start.path.length > 1) {
69
- // A chrome start emits nothing here: its wrapper needs the body it encloses,
70
- // which only the walk below knows.
71
- chromeStart = startChromeContainer(doc, start, startRaw, startOffset);
72
- if (!chromeStart) {
73
- const marker = soleChildContainerPrefix(doc, start.path, startRaw);
74
- startTail = (marker ?? '') + startRaw.slice(startOffset);
75
- }
76
- }
77
- else {
78
- startTail = startRaw.slice(startOffset);
47
+ // A start inside a container's title line emits nothing yet: the container's opener
48
+ // is rebuilt around the body, which the copy collects below.
49
+ chromeStart =
50
+ start.path.length > 1 ? startChromeContainer(doc, start, startRaw, startOffset) : null;
51
+ if (!chromeStart) {
52
+ const marker = start.path.length > 1 ? soleChildContainerPrefix(doc, start.path, startRaw) : null;
53
+ startTail = (marker ?? '') + startRaw.slice(startOffset);
79
54
  }
80
55
  }
56
+ // An end block covered to its last byte and held by no container keeps its line ending out, as
57
+ // a slice does; a container covered whole brings its own.
81
58
  let effectiveEndPath = end.path;
82
59
  let endHead;
83
- if (isBlockNode(endNode) && endNode.kind === 'table') {
84
- // Snapped end cell is the inclusive last cell of its row; emitTablePortion takes an
85
- // exclusive end, so +1 makes the captured rows match the delete.
86
- endHead = emitTablePortion(endNode, 0, cellIndexOf(end, 'collectCrossBlockText:endTable') + 1);
60
+ if (endRoot && endRoot.length < end.path.length) {
61
+ effectiveEndPath = endRoot;
62
+ endHead = rawAt(doc, endRoot);
63
+ }
64
+ else if (coverage.endCells && isBlockNode(endNode)) {
65
+ endHead = emitTablePortion(endNode, coverage.endCells.from, coverage.endCells.to);
87
66
  }
88
67
  else {
89
68
  const endOffset = charOffsetOf(end, 'collectCrossBlockText:end');
90
69
  const chromeBytes = endOffset > 0 ? endChromeContainerBytes(doc, end, endRaw, endOffset) : null;
91
- if (chromeBytes !== null) {
92
- endHead = chromeBytes;
93
- }
94
- else if (endOffset === displayLength(endRaw) && end.path.length > 1) {
95
- const promoted = promoteToContainer(doc, end.path, start.path, 'end');
96
- if (promoted) {
97
- effectiveEndPath = promoted.path;
98
- endHead = promoted.raw;
99
- }
100
- else {
101
- endHead = endRaw.slice(0, endOffset);
102
- }
103
- }
104
- else if (endOffset > 0 && endOffset < displayLength(endRaw) && end.path.length > 1) {
105
- const marker = soleChildContainerPrefix(doc, end.path, endRaw);
106
- endHead = (marker ?? '') + endRaw.slice(0, endOffset);
107
- }
108
- else {
109
- endHead = endRaw.slice(0, endOffset);
110
- }
70
+ const partial = endOffset > 0 && endOffset < displayLength(endRaw) && end.path.length > 1;
71
+ const marker = partial ? soleChildContainerPrefix(doc, end.path, endRaw) : null;
72
+ endHead = chromeBytes ?? (marker ?? '') + endRaw.slice(0, endOffset);
111
73
  }
112
74
  let middle = '';
113
75
  let chromeBody = '';
114
- const collectedContainers = [];
115
- for (const path of walkBetween(doc, effectiveStartPath, effectiveEndPath)) {
116
- if (isStrictAncestorOf(path, effectiveStartPath))
76
+ for (const root of coverage.coveredWhole) {
77
+ if (pathHasPrefix(effectiveStartPath, root) || pathHasPrefix(effectiveEndPath, root))
117
78
  continue;
118
- if (isStrictAncestorOf(path, effectiveEndPath))
119
- continue;
120
- if (isStrictAncestorOf(effectiveStartPath, path))
121
- continue;
122
- if (isStrictAncestorOf(effectiveEndPath, path))
123
- continue;
124
- if (collectedContainers.some((cp) => isStrictAncestorOf(cp, path)))
125
- continue;
126
- const node = nodeAt(doc, path);
79
+ const node = nodeAt(doc, root);
127
80
  if (!node || !isBlockNode(node))
128
81
  continue;
129
- if (chromeStart && pathHasPrefix(path, chromeStart.path)) {
82
+ if (chromeStart && pathHasPrefix(root, chromeStart.path)) {
130
83
  chromeBody += node.leadingTrivia + node.raw;
131
84
  }
132
85
  else {
133
86
  middle += node.leadingTrivia + node.raw;
134
87
  }
135
- if (node.children && node.children.length > 0) {
136
- collectedContainers.push(path);
137
- }
138
88
  }
139
89
  // Without endLead, blank lines between paragraphs drop and paste reparses as one paragraph.
140
- let endLead = '';
141
- if (!pathsEqual(effectiveStartPath, effectiveEndPath)) {
142
- const endNode = nodeAt(doc, effectiveEndPath);
143
- if (endNode && isBlockNode(endNode)) {
144
- endLead = endNode.leadingTrivia;
145
- }
146
- }
90
+ const effectiveEnd = nodeAt(doc, effectiveEndPath);
91
+ const endLead = effectiveEnd && isBlockNode(effectiveEnd) ? effectiveEnd.leadingTrivia : '';
147
92
  if (chromeStart) {
148
93
  // The container's subtree is one contiguous doc-order run, so an end inside it
149
94
  // leaves `middle` empty and puts the end's own bytes inside the wrapper too.
150
95
  const exited = !pathHasPrefix(effectiveEndPath, chromeStart.path);
151
96
  const tail = endLead + endHead;
152
- const wrapped = wrapChromeStartContainer(chromeStart, exited ? chromeBody : chromeBody + tail, exited);
97
+ const wrapped = wrapChromeStartContainer(chromeStart, exited ? chromeBody : chromeBody + tail, exited, documentLineEnding(doc));
153
98
  return exited ? wrapped + middle + tail : wrapped;
154
99
  }
155
100
  return startTail + middle + endLead + endHead;
156
101
  }
157
102
  // ── Internal ───────────────────────────────────────────────────────────────
158
- /**
159
- * Table portion for the half-open cell range `[startCellIdx, endCellIdxExclusive)`. Selection
160
- * is row-rectangular by GFM constraint, so emit `[startRow..endRow] × all columns`.
161
- */
103
+ /** The table rows a kept table edge's cells touch, every column included, as a sub-table. */
162
104
  function emitTablePortion(table, startCellIdx, endCellIdxExclusive) {
163
105
  if (startCellIdx >= endCellIdxExclusive)
164
106
  return '';
165
107
  const colCount = metadataOf(table, 'table').columnCount;
166
- const allCellsCount = table.children.length * colCount;
167
- if (startCellIdx === 0 && endCellIdxExclusive === allCellsCount) {
168
- return table.raw;
169
- }
170
108
  const startRow = cellRowCol(startCellIdx, colCount).row;
171
109
  const endRow = cellRowCol(endCellIdxExclusive - 1, colCount).row;
172
110
  return copyRectangleAsSubTable(table, { rowIdx: startRow, colIdx: 0 }, { rowIdx: endRow, colIdx: colCount - 1 });
173
111
  }
174
- /**
175
- * The container marker prefix a partial-leaf slice must keep when the leaf is the sole child
176
- * of a strip container ("3. " so "3. thi" survives rather than "thi"). Without it CommonMark
177
- * §5.2 stops a following "N." line from interrupting the paragraph and the round-trip
178
- * collapses into one block. Eligibility is the descriptor's `strip` contract, not a kind list.
179
- * Sole-child is required: earlier siblings sit between the marker and the leaf's raw.
180
- */
112
+ /** The list or quote marker a partial slice of a sole-child leaf keeps ("3. thi", not "thi"):
113
+ * without it, a following "N." line joins the pasted paragraph and the text becomes one block. */
181
114
  function soleChildContainerPrefix(doc, leafPath, leafRaw) {
182
115
  const parent = nodeAt(doc, leafPath.slice(0, -1));
183
116
  if (!parent || !isBlockNode(parent) || !parent.children)
@@ -192,13 +125,8 @@ function soleChildContainerPrefix(doc, leafPath, leafRaw) {
192
125
  return null;
193
126
  return parent.raw.slice(0, parent.raw.length - leafRaw.length);
194
127
  }
195
- /**
196
- * The rebuild a chrome-wrapper synthesis may run for `container`, or null when re-emitting its
197
- * wrapper isn't faithful. Both chrome endpoint paths consult this and nothing else, so the
198
- * rule cannot hold on one endpoint and not the other. Only `'opaque'` qualifies: its syntax is
199
- * an opener plus a closer, so a truncated chrome IS an opener. `'strip'` has nothing to close
200
- * (`soleChildContainerPrefix` is its seam); `'grid'` declares no chrome and rides the table arm.
201
- */
128
+ /** The kind's `rebuildRaw` when a copy endpoint in `container`'s title line can be re-emitted as
129
+ * a truncated opener; only an `'opaque'` container's shortened title stays a valid opener. */
202
130
  function chromeWrapperRebuild(container, childIndex) {
203
131
  if (!isReservedChromeChild(container, childIndex))
204
132
  return null;
@@ -207,13 +135,8 @@ function chromeWrapperRebuild(container, childIndex) {
207
135
  return null;
208
136
  return descriptor.rebuildRaw ?? null;
209
137
  }
210
- /**
211
- * Bytes for a copy endpoint landing inside a container's reserved chrome. A generic raw.slice
212
- * emits wrapper-less bytes that reparse to a bare paragraph, losing the kind on paste, so
213
- * synthesize a chrome-only container (truncated chrome, empty body) and run the kind's own
214
- * rebuildRaw. Metadata is shallow-copied (primitive-valued by G1.6) because rebuildRaw is
215
- * plugin code fed a node that would otherwise alias the LIVE tree.
216
- */
138
+ /** The bytes for a copy that ends inside a container's title line, rebuilt as a container with
139
+ * an empty body, since a plain `raw.slice` would paste back as a bare paragraph. */
217
140
  function endChromeContainerBytes(doc, end, endRaw, endOffset) {
218
141
  const childIndex = end.path[end.path.length - 1];
219
142
  const parent = nodeAt(doc, end.path.slice(0, -1));
@@ -226,6 +149,7 @@ function endChromeContainerBytes(doc, end, endRaw, endOffset) {
226
149
  kind: parent.kind,
227
150
  leadingTrivia: '',
228
151
  raw: '',
152
+ // `rebuildRaw` is plugin code, so it gets a copy of the metadata, never the live tree's.
229
153
  metadata: parent.metadata ? cloneMetadata(parent.metadata) : undefined,
230
154
  innerPrefix: '',
231
155
  innerSuffix: '',
@@ -240,10 +164,8 @@ function endChromeContainerBytes(doc, end, endRaw, endOffset) {
240
164
  rebuildRaw(synthetic);
241
165
  return synthetic.raw;
242
166
  }
243
- /**
244
- * The container a copy STARTS inside the chrome of, when re-emitting its wrapper around the
245
- * collected body is faithful; null when it isn't. Eligibility is `chromeWrapperRebuild`'s.
246
- */
167
+ /** The container whose title line the copy starts inside, when its opener can be re-emitted
168
+ * around the collected body. */
247
169
  function startChromeContainer(doc, start, startRaw, startOffset) {
248
170
  const containerPath = start.path.slice(0, -1);
249
171
  const container = nodeAt(doc, containerPath);
@@ -259,20 +181,15 @@ function startChromeContainer(doc, start, startRaw, startOffset) {
259
181
  rebuildRaw
260
182
  };
261
183
  }
262
- /**
263
- * Re-emit the container around `body` with the truncated chrome back in the opener line. ONE
264
- * rebuildRaw call over the real body is what makes the closer trustworthy: a directive fence
265
- * widens when its body reproduces the terminator, so opener and closer derived in the same call
266
- * cannot disagree about width. `exited` means the walk left the subtree, i.e. the body ran to
267
- * the end, so the trailing inner trivia belongs to the copy; otherwise line-terminate instead.
268
- */
269
- function wrapChromeStartContainer(start, body, exited) {
184
+ /** Re-emits the container around `body` in one `rebuildRaw` call, so a fence that widens for its
185
+ * body keeps opener and closer in agreement. `exited`: the selection ran past the container. */
186
+ function wrapChromeStartContainer(start, body, exited, ending) {
270
187
  const { node } = start;
271
188
  const innerSuffix = exited ? (node.innerSuffix ?? '') : '';
272
189
  const synthetic = makeBlockNode({
273
190
  kind: node.kind,
274
191
  leadingTrivia: '',
275
- // The live raw, so the rebuild reads the authored closer line ending (G4.20).
192
+ // The live raw, so the rebuild copies the closer line's own line ending.
276
193
  raw: node.raw,
277
194
  metadata: node.metadata ? cloneMetadata(node.metadata) : undefined,
278
195
  innerPrefix: node.innerPrefix ?? '',
@@ -284,36 +201,16 @@ function wrapChromeStartContainer(start, body, exited) {
284
201
  makeBlockNode({
285
202
  kind: 'paragraph',
286
203
  leadingTrivia: '',
287
- raw: innerSuffix === '' && body !== '' ? terminateLine(body, node.raw) : body
204
+ raw: innerSuffix === '' && body !== ''
205
+ ? terminateLine(body, trailingLineEnding(node.raw, ending))
206
+ : body
288
207
  })
289
208
  ]
290
209
  });
291
210
  start.rebuildRaw(synthetic);
292
211
  return synthetic.raw;
293
212
  }
294
- /**
295
- * Walk up from a leaf endpoint to the deepest container ancestor entirely inside the
296
- * selection. Start-side promotion is safe only while each child is first; end-side, last.
297
- */
298
- function promoteToContainer(doc, leafPath, otherPath, side) {
299
- const lcaDepth = sharedPrefixLength(leafPath, otherPath);
300
- let bestPath = null;
301
- for (let depth = leafPath.length - 1; depth > lcaDepth; depth--) {
302
- const parentPath = leafPath.slice(0, depth);
303
- const parent = nodeAt(doc, parentPath);
304
- if (!parent || !parent.children)
305
- break;
306
- const childIndex = leafPath[depth];
307
- if (side === 'start' && childIndex !== 0)
308
- break;
309
- if (side === 'end' && childIndex !== parent.children.length - 1)
310
- break;
311
- bestPath = parentPath;
312
- }
313
- if (!bestPath || bestPath.length <= lcaDepth)
314
- return null;
315
- const node = nodeAt(doc, bestPath);
316
- if (!node || !isBlockNode(node))
317
- return null;
318
- return { path: bestPath, raw: node.raw };
213
+ function rawAt(doc, path) {
214
+ const node = nodeAt(doc, path);
215
+ return node && isBlockNode(node) ? node.raw : '';
319
216
  }
@@ -1,10 +1,8 @@
1
1
  /**
2
- * The block a range holds whole, for the gestures that insert over it. Such a range has no seam
3
- * inside it to merge at: the block leaves the tree entirely, so bytes that follow must land in
4
- * its SLOT rather than at a caret in whatever took the slot.
2
+ * The block a range covers whole, for the paste and typing paths that replace it, read off
3
+ * `rangeCoverage`. There is no join inside such a range to merge at: the block leaves the tree, so
4
+ * the new bytes go into its list position rather than at a caret in whatever block took it.
5
5
  */
6
- import type { DocumentView } from '../core/node-views';
7
- import type { SelectionPoint } from './primitives';
8
- /** The block both endpoints address and jointly span, or null. Cell coordinates index a grid
9
- * rather than characters: the table's own coverage rule is `cross-block/paste.ts`'s. */
10
- export declare function blockCoveredWhole(doc: DocumentView, anchor: SelectionPoint | null, focus: SelectionPoint | null): number[] | null;
6
+ import type { RangeCoverage } from './range-coverage';
7
+ /** The one block both endpoints sit in and the range holds whole, a table included, or null. */
8
+ export declare function blockCoveredWhole(coverage: RangeCoverage): number[] | null;
@@ -1,24 +1,13 @@
1
1
  /**
2
- * The block a range holds whole, for the gestures that insert over it. Such a range has no seam
3
- * inside it to merge at: the block leaves the tree entirely, so bytes that follow must land in
4
- * its SLOT rather than at a caret in whatever took the slot.
2
+ * The block a range covers whole, for the paste and typing paths that replace it, read off
3
+ * `rangeCoverage`. There is no join inside such a range to merge at: the block leaves the tree, so
4
+ * the new bytes go into its list position rather than at a caret in whatever block took it.
5
5
  */
6
- import { displayLength } from '../core/lines';
7
- import { isBlockNode, nodeAt } from '../tree-operations/node-primitives';
8
6
  import { pathsEqual } from './path-math';
9
- /** The block both endpoints address and jointly span, or null. Cell coordinates index a grid
10
- * rather than characters: the table's own coverage rule is `cross-block/paste.ts`'s. */
11
- export function blockCoveredWhole(doc, anchor, focus) {
12
- if (!anchor || !focus)
7
+ /** The one block both endpoints sit in and the range holds whole, a table included, or null. */
8
+ export function blockCoveredWhole(coverage) {
9
+ const { start, end } = coverage.range;
10
+ if (!pathsEqual(start.path, end.path) || coverage.wholeRoots.length !== 1)
13
11
  return null;
14
- if (!pathsEqual(anchor.path, focus.path))
15
- return null;
16
- if (anchor.cellCoordinate || focus.cellCoordinate)
17
- return null;
18
- const node = nodeAt(doc, anchor.path);
19
- if (!node || !isBlockNode(node))
20
- return null;
21
- const low = Math.min(anchor.offset, focus.offset);
22
- const high = Math.max(anchor.offset, focus.offset);
23
- return low === 0 && high >= displayLength(node.raw) ? anchor.path.slice() : null;
12
+ return coverage.wholeRoots[0].slice();
24
13
  }
@@ -1,6 +1,7 @@
1
1
  /**
2
- * Shared cross-block copy/cut prologue: each surface owns its intra-block logic but delegates
3
- * the cross-block branch here. The boolean return lets callers keep their own fall-through.
2
+ * The cross-block branch of copy and cut, shared by every editable block and the editor root:
3
+ * each block keeps its own single-block logic and delegates the cross-block case here, a cell
4
+ * rectangle included. The boolean return lets callers keep their own fall-through.
4
5
  */
5
6
  import type { DocumentGetter } from '../../editor-keys';
6
7
  import type { CrossBlockHandlers } from './dispatch';
@@ -1,20 +1,29 @@
1
1
  /**
2
- * Shared cross-block copy/cut prologue: each surface owns its intra-block logic but delegates
3
- * the cross-block branch here. The boolean return lets callers keep their own fall-through.
2
+ * The cross-block branch of copy and cut, shared by every editable block and the editor root:
3
+ * each block keeps its own single-block logic and delegates the cross-block case here, a cell
4
+ * rectangle included. The boolean return lets callers keep their own fall-through.
4
5
  */
5
6
  import { collectCrossBlockText } from '../clipboard-text';
7
+ import { gridClipboard } from '../grid-selection';
8
+ import { coverRange, rangeCoverage } from '../range-coverage';
6
9
  export function writeCrossBlockCopy(e, deps) {
7
10
  const { selection } = deps;
8
11
  if (!selection.isCrossBlock || !selection.anchor || !selection.focus)
9
12
  return false;
10
13
  e.preventDefault();
11
- e.clipboardData?.setData('text/plain', collectCrossBlockText(deps.getDoc(), selection.anchor, selection.focus));
14
+ const doc = deps.getDoc();
15
+ const coverage = rangeCoverage(doc, coverRange(doc, selection.anchor, selection.focus));
16
+ const cells = coverage.grid && gridClipboard(doc, coverage.grid);
17
+ e.clipboardData?.setData('text/plain', cells ? cells.text : collectCrossBlockText(doc, coverage));
18
+ // A rectangle of cells also goes on as an HTML table, which spreadsheets read.
19
+ if (cells)
20
+ e.clipboardData?.setData('text/html', cells.html);
12
21
  return true;
13
22
  }
14
23
  export async function writeCrossBlockCut(e, deps) {
15
24
  if (!writeCrossBlockCopy(e, deps))
16
25
  return false;
17
26
  // Clipboard written synchronously above, so the cut survives an interrupted delete.
18
- await deps.crossBlock.performCrossBlockDeleteFromEvent();
27
+ await deps.crossBlock.performCrossBlockCut();
19
28
  return true;
20
29
  }
@@ -1,81 +1,85 @@
1
1
  /**
2
- * Cross-block event dispatch, wired by `components/blocks/editable-surface.ts` and by
3
- * `Editor.svelte` for editor-root routing. The factory returns handlers each caller runs at the
4
- * top of its own event handlers; single-block handling stays with the caller. This file is the
5
- * composer: keydown in keydown.ts, pointer in pointer.ts, paste / type-replace passthroughs.
2
+ * Cross-block event dispatch: handlers an editable block, or the editor root, runs at the top of
3
+ * its own event handlers, before its single-block handling.
6
4
  */
7
- import type { BlockEditActions, HistoryActions } from '../../action-contracts';
5
+ import type { BlockEditActions } from '../../action-contracts';
8
6
  import type { BlockComponent } from '../../block-component';
9
- import type { BlockElLookup, DocumentGetter, LinkReferenceResolverRef, PluginEditorLookup, PresentationModeGetter } from '../../editor-keys';
7
+ import type { BlockElLookup, DocumentGetter } from '../../editor-keys';
10
8
  import type { UserScrollport } from '../../cursor/scroll-ancestors';
9
+ import type { ScrollOwner } from '../../cursor/scroll-owner';
11
10
  import type { SelectionState } from '../selection-state.svelte';
12
- import type { StickyColumnState } from '../../cursor/sticky-column';
13
- import type { EdgeAffinityState } from '../../cursor/edge-affinity';
11
+ import type { SelectedWidgetHandle } from '../primitives';
12
+ import type { CaretMemory } from '../../cursor/caret-memory';
13
+ import type { CaretLanding } from '../caret-landing';
14
14
  import type { CommitController } from '../../action-contracts';
15
- import type { KeybindingOverrideMap } from '../../schema/keybinding-overrides';
16
- import type { CommandErrorSink, CrossBlockCommandRouter } from '../../schema/block-commands';
15
+ import type { CommandDispatchContext } from '../../schema/block-commands';
17
16
  import type { EditorEvents } from '../../editor-events';
18
- import type { GrammarView } from '../../schema/block-openers';
17
+ import type { Reading } from '../../schema/reading';
19
18
  import type { PluginActivation } from '../../schema/plugin-activation';
20
19
  import type { PasteCommitCoordinator } from '../../tree-operations/paste/paste-deps';
20
+ import { type PaddingPress } from './pointer';
21
21
  export interface CrossBlockDispatchContext {
22
22
  getEl: () => HTMLElement | null;
23
23
  getMyPath: () => number[];
24
- getIndex: () => number;
25
24
  selection: SelectionState;
26
25
  getDoc: DocumentGetter;
27
26
  getBlockElByPath: BlockElLookup;
27
+ /** Where a collapse, an extend's parked caret and a command's target block are put down. */
28
+ caretLanding: Pick<CaretLanding, 'restore' | 'park' | 'mount'>;
29
+ /** A mount for the delete, typing and paste over a range, which still place their own caret. */
28
30
  revealPath: (path: number[]) => Promise<BlockComponent | null>;
29
31
  getEditorRoot: () => HTMLElement | null;
30
32
  /** What autoscrolls a drag-select that reaches an edge: the root, the host's scroller, or the
31
33
  * window. See `cursor/scroll-ancestors`. */
32
34
  getScrollHost: () => UserScrollport | null;
35
+ /** Brings the endpoint a keyboard extend reached to the nearest edge. */
36
+ scrollOwner: Pick<ScrollOwner, 'place'>;
33
37
  /** Aborted when the owning editor unmounts. See the document facet's `lifetime`. */
34
38
  getEditorLifetime: () => AbortSignal | null;
35
- stickyColumn: StickyColumnState;
36
- edgeAffinity: EdgeAffinityState;
39
+ caretMemory: CaretMemory;
37
40
  blockEdit: BlockEditActions;
38
41
  controller: CommitController;
39
- history: HistoryActions;
40
- pluginEditor: PluginEditorLookup | undefined;
41
- /** The effective presentation mode; the destructive-branch reading gate keys off this. */
42
- getPresentationMode: PresentationModeGetter | undefined;
43
- /** The instance's link-reference resolver, forwarded to the delete's join seam. Required-
44
- * nullable like `pluginEditor`, so a new construction site can't silently skip the thread. */
45
- linkRef: LinkReferenceResolverRef | undefined;
46
- onCommandError: CommandErrorSink | undefined;
47
- /** The arm a format chord takes over the live range; the seam routes there rather than
48
- * declining. Non-nullable: without it a rewrite chord is swallowed and nothing else. */
49
- crossBlockCommands: CrossBlockCommandRouter;
50
- getKeybindingOverrides: () => KeybindingOverrideMap;
42
+ /** How the editor reads its bytes: the delete's join cleanup and the paste reparse read it, and
43
+ * the destructive branches refuse its reading mode. */
44
+ reading: Reading;
45
+ /** The editor's command dispatch, which runs a chord pressed over a range. */
46
+ commands: CommandDispatchContext;
51
47
  pasteCoordinator: PasteCommitCoordinator;
52
- /** Block grammar forwarded to the join-paste reparse. Required-nullable like `pluginEditor`
53
- * so a new construction site can't silently skip the thread; `undefined` = global. */
54
- grammar: GrammarView | undefined;
55
- /** The plugins this instance activated, forwarded to the paste-transform pipeline.
56
- * Required-nullable like `grammar`; `undefined` means every installed plugin. */
57
- activePlugins: PluginActivation | undefined;
58
- /** The instance event surface, the paste arm's only channel for a gesture it consumed but
48
+ /** The plugins this instance activated, forwarded to the paste hooks. */
49
+ activePlugins: PluginActivation;
50
+ /** The editor's event emitter, the paste handler's only channel for a gesture it consumed but
59
51
  * could not land. Non-nullable: skipping it drops a paste in silence. */
60
52
  events: EditorEvents;
61
- getCursorOffset: () => number | null;
62
- /** Svelte's tick() — awaited after mutations so the DOM settles. */
53
+ /** An image selected whole, which a shift-press grows its range from. */
54
+ selectedWidget: SelectedWidgetHandle;
55
+ /** Svelte's `tick()`, awaited after mutations so the DOM has updated. */
63
56
  afterReactivity: () => Promise<void>;
64
57
  }
58
+ /** What the block handling a press knows about it that the shared pointer handler cannot read. */
59
+ export interface PointerPressOptions {
60
+ /** The press landed on a non-editable inline widget (an emoji), which the browser starts no
61
+ * drag from, so the block paints the range itself or the drag selects nothing. */
62
+ paintSameBlock?: boolean;
63
+ /** The raw offset the press anchors at, from a block that resolves its own press better than
64
+ * the browser's hit test does. Absent, the point is hit-tested. */
65
+ anchorOffset?: number;
66
+ /** A block that runs its own drag from a press (a table's cell rectangle) installs it here, told
67
+ * of a press in the padding the editor placed itself, where no native drag runs. */
68
+ ownDrag?: (padding: PaddingPress | null) => void;
69
+ }
65
70
  export interface CrossBlockHandlers {
66
71
  /** Returns true if the event was fully handled (caller should return). */
67
72
  handleKeyDown(e: KeyboardEvent): Promise<boolean>;
68
- handlePointerDown(e: PointerEvent): boolean;
69
- /** `replacement` stands in for the clipboard's own text, for a caller that already turned the
70
- * payload into markdown and must not re-read the event past its awaits. A null event is a
71
- * programmatic insertion: no gesture to consume, so `replacement` carries the payload. */
73
+ handlePointerDown(e: PointerEvent, press?: PointerPressOptions): boolean;
74
+ /** `replacement` stands in for the clipboard text, for a caller that already converted the
75
+ * payload and can't re-read the event after its awaits. A null event is a scripted insert. */
72
76
  handlePaste(e: ClipboardEvent | null, replacement?: string): Promise<boolean>;
73
77
  handleBeforeInput(e: InputEvent): Promise<boolean>;
74
- /** Type-replace from a door that carries no InputEvent: the editor root, where a range over a
75
- * block with no character position leaves no editing surface for `beforeinput` to fire on. */
78
+ /** Type-replace from a caller with no `InputEvent`: the editor root, where a range over a block
79
+ * with no character position leaves no editable element for `beforeinput` to fire on. */
76
80
  insertText(text: string): Promise<boolean>;
77
81
  handleCompositionStart(): boolean;
78
- /** Cross-block range delete for Cut handlers, after they synchronously wrote the clipboard. */
79
- performCrossBlockDeleteFromEvent(): Promise<void>;
82
+ /** The delete half of a cut, run once the handler wrote the clipboard synchronously. */
83
+ performCrossBlockCut(): Promise<void>;
80
84
  }
81
85
  export declare function createCrossBlockHandlers(ctx: CrossBlockDispatchContext): CrossBlockHandlers;