@voithos-labs/aragonite 0.10.3 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +12 -5
  3. package/dist/a11y-strings.js +61 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +13 -20
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +619 -1089
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +36 -67
  26. package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +35 -28
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +58 -32
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +144 -202
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +46 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
  102. package/dist/components/blocks/text/click-snap-guard.js +16 -5
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -105
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +243 -208
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +13 -30
  144. package/dist/components/drag-handle.js +25 -63
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -31
  162. package/dist/components/editor-root-listeners.js +49 -46
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +26 -30
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +380 -0
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +55 -68
  256. package/dist/core/inline/inline-widgets.js +55 -58
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +33 -17
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -7
  347. package/dist/cursor/height-oracle.js +26 -75
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +16 -8
  365. package/dist/cursor/scrollport.js +28 -5
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -13
  375. package/dist/cursor/visual-lines.js +72 -28
  376. package/dist/cursor/widget-edge-snap.d.ts +23 -0
  377. package/dist/cursor/widget-edge-snap.js +39 -0
  378. package/dist/cursor/widget-offset.d.ts +111 -102
  379. package/dist/cursor/widget-offset.js +352 -177
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +31 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +33 -52
  434. package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
  435. package/dist/editor-actions/focus/focus-landing.js +29 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +55 -76
  465. package/dist/editor-actions/plugin/container.js +105 -186
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +91 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +38 -8
  550. package/dist/plugin.js +102 -74
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +113 -85
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -75
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +143 -292
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +79 -81
  695. package/dist/schema/commands.js +156 -116
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +9 -11
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +73 -78
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +93 -152
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +61 -104
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +53 -146
  807. package/dist/selection/dead-space-caret.d.ts +20 -28
  808. package/dist/selection/dead-space-caret.js +79 -87
  809. package/dist/selection/drag-pointer.d.ts +22 -5
  810. package/dist/selection/drag-pointer.js +63 -31
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -39
  816. package/dist/selection/keyboard-extend.js +94 -116
  817. package/dist/selection/multi-click.d.ts +37 -0
  818. package/dist/selection/multi-click.js +197 -0
  819. package/dist/selection/native-bridge.d.ts +30 -37
  820. package/dist/selection/native-bridge.js +80 -100
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +31 -14
  824. package/dist/selection/path-lookup.js +110 -20
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +9 -0
  828. package/dist/selection/pointer-gesture.js +11 -0
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -33
  832. package/dist/selection/primitives.js +61 -53
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -19
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +52 -0
  852. package/dist/selection/selection-drop.js +317 -0
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +75 -53
  864. package/dist/styles/editor.css +248 -139
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
  960. package/dist/tree-operations/paste/replacement-parse.js +24 -0
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +329 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +267 -183
  996. package/docs/guide/plugin-guide.md +341 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +17 -21
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/invariants/split-landing.d.ts +0 -8
  1015. package/dist/invariants/split-landing.js +0 -15
  1016. package/dist/selection/double-click-trim.d.ts +0 -17
  1017. package/dist/selection/double-click-trim.js +0 -57
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
@@ -1,8 +1,6 @@
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
5
  import { isReadingMode } from '../../presentation-mode';
8
6
  import { performCrossBlockDelete } from './ops';
@@ -17,19 +15,15 @@ export function createCrossBlockHandlers(ctx) {
17
15
  getBlockElByPath: ctx.getBlockElByPath,
18
16
  revealPath: ctx.revealPath,
19
17
  controller: ctx.controller,
20
- pushUndoSnapshot: () => ctx.controller.pushUndoSnapshot(ctx.getIndex(), ctx.getCursorOffset() ?? 0),
21
- grammar: ctx.grammar,
22
- getPresentationMode: ctx.getPresentationMode,
23
- linkRef: ctx.linkRef
18
+ reading: ctx.reading
24
19
  };
25
20
  const keydown = createCrossBlockKeydown(ctx, mutationCtx);
26
21
  const pointer = createCrossBlockPointer(ctx);
27
- // Reading-mode gates for the mutating halves live at the composer, so every construction site
28
- // (each editable surface, the editor root) inherits them. Keydown gates its own destructive
29
- // branches, since it also carries navigation, which stays live.
30
- const reading = () => isReadingMode(ctx.getPresentationMode);
22
+ // The reading-mode checks for the mutating handlers live here so every caller inherits them;
23
+ // keydown checks its own destructive branches, since its navigation stays live.
24
+ const refusesWrites = () => isReadingMode(ctx.reading.mode);
31
25
  const insertText = async (text) => {
32
- if (reading())
26
+ if (refusesWrites())
33
27
  return true;
34
28
  if (!ctx.selection.isCrossBlock)
35
29
  return false;
@@ -41,29 +35,24 @@ export function createCrossBlockHandlers(ctx) {
41
35
  handleCompositionStart: keydown.handleCompositionStart,
42
36
  handlePointerDown: pointer.handlePointerDown,
43
37
  handlePaste: async (e, replacement) => {
44
- if (reading()) {
38
+ if (refusesWrites()) {
45
39
  e?.preventDefault();
46
40
  return true;
47
41
  }
48
42
  return handleCrossBlockPaste(ctx, mutationCtx, e, replacement);
49
43
  },
50
44
  handleBeforeInput: async (e) => {
51
- if (reading()) {
52
- e.preventDefault();
53
- return true;
54
- }
55
45
  if (!ctx.selection.isCrossBlock || e.inputType !== 'insertText')
56
46
  return false;
57
47
  e.preventDefault();
58
48
  return insertText(e.data ?? '');
59
49
  },
60
50
  insertText,
61
- performCrossBlockDeleteFromEvent: async () => {
62
- // Reached from cut handlers after the clipboard write; declining the delete
63
- // degrades a reading-mode cut to a copy.
64
- if (reading())
51
+ performCrossBlockCut: async () => {
52
+ // Declining the delete degrades a reading-mode cut to a copy.
53
+ if (refusesWrites())
65
54
  return;
66
- await performCrossBlockDelete(mutationCtx);
55
+ await performCrossBlockDelete(mutationCtx, 'cut');
67
56
  }
68
57
  };
69
58
  }
@@ -1,38 +1,35 @@
1
1
  /**
2
- * The per-block spans a cross-block format toggle rewrites, and the write over them. Pure over
3
- * the tree, like `../range-delete`: the commit ceremony lives in `./format-toggle`. Direction is
4
- * coverage across the WHOLE range — every span covered unapplies, anything else applies — so an
5
- * apply leaves an already-marked block alone instead of toggling it the other way. Each span goes
6
- * through the single-block seam, so its arms, candidates and mode verification are the same ones.
7
- * A grid joins by its cells, which the range covers whole.
2
+ * The per-block spans a cross-block format toggle rewrites, and the write over them; pure over
3
+ * the tree, with the commit in `./format-toggle`. The direction is decided over the whole range:
4
+ * every span already marked removes the mark, anything else adds it. Each span goes through the
5
+ * single-block toggle, and a table joins by its covered cells.
8
6
  */
9
7
  import type { DocumentView } from '../../core/node-views';
10
8
  import type { InlineMarkKind } from '../../schema/inline-construct-policy';
11
- import type { PresentationMode } from '../../presentation-mode';
9
+ import type { Reading } from '../../schema/reading';
12
10
  import type { GrammarView } from '../../schema/block-openers';
13
- import { type NodeParent } from '../../tree-operations/node-primitives';
11
+ import { type BodyParent } from '../../tree-operations/node-primitives';
14
12
  import type { SharingState } from '../../tree-operations/sharing';
15
- import { type SelectionPoint } from '../primitives';
13
+ import { type CoveredRange } from '../range-coverage';
16
14
  export interface CrossBlockFormatWrite {
17
15
  path: number[];
18
- /** The block's display bytes after the toggle — its raw minus the trailing line ending. */
16
+ /** The block's display bytes after the toggle: its raw minus the trailing line ending. */
19
17
  newDisplay: string;
20
18
  newSelStart: number;
21
19
  newSelEnd: number;
22
20
  }
23
21
  export interface CrossBlockFormatPlan {
24
22
  writes: CrossBlockFormatWrite[];
25
- /** The range's own endpoints after the rewrite, in document order, each in the space its own
26
- * endpoint addresses: a char offset in prose and in the grid cell a deep path names, a cell
27
- * index where the endpoint counts cells. */
23
+ /** The range's endpoints after the rewrite, each in its own space: a character offset in a
24
+ * text block or a path-named grid cell, a cell index where the endpoint counts cells. */
28
25
  startOffset: number;
29
26
  endOffset: number;
30
27
  }
31
- /** Null where no block participates: the press is still consumed, but nothing is written. */
32
- export declare function planCrossBlockFormat(doc: DocumentView, start: SelectionPoint, end: SelectionPoint, format: InlineMarkKind, mode: PresentationMode | undefined): CrossBlockFormatPlan | null;
33
- /** The pressed-state a toolbar paints over a range, every mark at once: one is active where
34
- * EVERY participating span carries it. All marks together, because a toolbar asks once per
35
- * button against the same range and the decomposition is the cost. */
36
- export declare function crossBlockActiveFormats(doc: DocumentView, start: SelectionPoint, end: SelectionPoint): ReadonlySet<InlineMarkKind>;
37
- /** Write a plan into the tree, copy-path-on-write. The caller owns the commit ceremony. */
38
- export declare function applyCrossBlockFormat(root: NodeParent, plan: CrossBlockFormatPlan, sharing: SharingState, grammar: GrammarView | undefined): void;
28
+ /** Null where no block participates: the keystroke is still consumed, but nothing is written. */
29
+ export declare function planCrossBlockFormat(doc: DocumentView, range: CoveredRange, format: InlineMarkKind, reading: Reading): CrossBlockFormatPlan | null;
30
+ /** A mark is active where every participating span carries it. All marks at once, since
31
+ * splitting the range into spans is the cost and a toolbar asks once per button. */
32
+ export declare function crossBlockActiveFormats(doc: DocumentView, range: CoveredRange, reading: Reading): ReadonlySet<InlineMarkKind>;
33
+ /** Writes a plan into the document body, copying each chain before writing. The caller owns the
34
+ * commit. */
35
+ export declare function applyCrossBlockFormat(body: BodyParent, plan: CrossBlockFormatPlan, sharing: SharingState, grammar: GrammarView): void;
@@ -1,33 +1,35 @@
1
1
  /**
2
- * The per-block spans a cross-block format toggle rewrites, and the write over them. Pure over
3
- * the tree, like `../range-delete`: the commit ceremony lives in `./format-toggle`. Direction is
4
- * coverage across the WHOLE range — every span covered unapplies, anything else applies — so an
5
- * apply leaves an already-marked block alone instead of toggling it the other way. Each span goes
6
- * through the single-block seam, so its arms, candidates and mode verification are the same ones.
7
- * A grid joins by its cells, which the range covers whole.
2
+ * The per-block spans a cross-block format toggle rewrites, and the write over them; pure over
3
+ * the tree, with the commit in `./format-toggle`. The direction is decided over the whole range:
4
+ * every span already marked removes the mark, anything else adds it. Each span goes through the
5
+ * single-block toggle, and a table joins by its covered cells.
8
6
  */
9
7
  import { activeInlineFormats, inlineFormatsCovering, isInlineFormatActive, isInlineFormatActiveAfter, toggleInlineFormat, withoutBoundaryWhitespace } from '../../core/inline/format-toggle';
10
8
  import { getContentRange } from '../../core/inline';
11
9
  import { ownTrailingLineEnding, trimTrailingLineEnding } from '../../core/lines';
12
10
  import { tryGetBlockKindDescriptor } from '../../schema/block-kind-descriptor';
13
- import { normalizeBodyWrite, writeOwnRaw } from '../../tree-operations/node-primitives';
11
+ import { blockNodeAt } from '../../tree-operations/node-primitives';
12
+ import { rewriteLeafInPlace } from '../../tree-operations/content-write';
14
13
  import { ensureUnsharedPath } from '../../tree-operations/unshare';
15
- import { rebuildUnsharedChain } from '../../tree-operations/chain-rebuild';
16
- import { comparePaths } from '../path-math';
14
+ import { rebuildUnsharedChain, sharedChainLevels } from '../../tree-operations/chain-rebuild';
15
+ import { pathsEqual } from '../path-math';
17
16
  import { charOffsetOf } from '../primitives';
18
- import { coveredGridCells, gridEndpointCellIndex } from '../table-endpoint-snap';
17
+ import { rangeCoverage } from '../range-coverage';
18
+ import { gridCellsInRect, gridCellsInRun } from '../table-endpoint-snap';
19
19
  const TAG = 'cross-block-format';
20
- /** Null where no block participates: the press is still consumed, but nothing is written. */
21
- export function planCrossBlockFormat(doc, start, end, format, mode) {
22
- const spans = spansInRange(doc, start, end);
20
+ /** Null where no block participates: the keystroke is still consumed, but nothing is written. */
21
+ export function planCrossBlockFormat(doc, range, format, reading) {
22
+ const coverage = rangeCoverage(doc, range);
23
+ const { start, end } = range;
24
+ const spans = spansInRange(doc, coverage, reading);
23
25
  if (spans.length === 0)
24
26
  return null;
25
27
  // Read once per span: the vote and the per-span skip below ask the same question, and the
26
28
  // answer costs a parse of the block's inlines.
27
29
  const covered = spans.map((span) => isInlineFormatActive(span.edit, format));
28
30
  const unapply = covered.every(Boolean);
29
- // Each endpoint's own space, carried rather than read: a participating span overwrites its side
30
- // with a char offset, and an endpoint counting cells owns no span, so its index stands.
31
+ // Each endpoint keeps its own space: a participating span overwrites its side with a
32
+ // character offset, and an endpoint counting cells owns no span, so its index stands.
31
33
  const plan = {
32
34
  writes: [],
33
35
  startOffset: start.offset,
@@ -36,7 +38,7 @@ export function planCrossBlockFormat(doc, start, end, format, mode) {
36
38
  for (const [index, span] of spans.entries()) {
37
39
  if (covered[index] !== unapply)
38
40
  continue;
39
- const toggled = toggleInlineFormat(span.edit, format, mode);
41
+ const toggled = toggleInlineFormat(span.edit, format);
40
42
  if (!toggled || !landedOnIntendedSide(span.edit, toggled, format, unapply))
41
43
  continue;
42
44
  plan.writes.push({
@@ -49,14 +51,17 @@ export function planCrossBlockFormat(doc, start, end, format, mode) {
49
51
  plan.startOffset = toggled.newSelStart;
50
52
  if (span.isEnd)
51
53
  plan.endOffset = toggled.newSelEnd;
54
+ // An end block held whole stays held at its new last byte.
55
+ if (!coverage.endEdge && pathsEqual(span.path, end.path)) {
56
+ plan.endOffset = toggled.newDisplay.length;
57
+ }
52
58
  }
53
59
  return plan.writes.length === 0 ? null : plan;
54
60
  }
55
- /** The pressed-state a toolbar paints over a range, every mark at once: one is active where
56
- * EVERY participating span carries it. All marks together, because a toolbar asks once per
57
- * button against the same range and the decomposition is the cost. */
58
- export function crossBlockActiveFormats(doc, start, end) {
59
- const spans = spansInRange(doc, start, end);
61
+ /** A mark is active where every participating span carries it. All marks at once, since
62
+ * splitting the range into spans is the cost and a toolbar asks once per button. */
63
+ export function crossBlockActiveFormats(doc, range, reading) {
64
+ const spans = spansInRange(doc, rangeCoverage(doc, range), reading);
60
65
  if (spans.length === 0)
61
66
  return new Set();
62
67
  // The running intersection is the next span's candidate set, so a span costs one parse and a
@@ -66,117 +71,113 @@ export function crossBlockActiveFormats(doc, start, end) {
66
71
  active = inlineFormatsCovering(spans[index].edit, active);
67
72
  return active;
68
73
  }
69
- /** Write a plan into the tree, copy-path-on-write. The caller owns the commit ceremony. */
70
- export function applyCrossBlockFormat(root, plan, sharing, grammar) {
74
+ /** Writes a plan into the document body, copying each chain before writing. The caller owns the
75
+ * commit. */
76
+ export function applyCrossBlockFormat(body, plan, sharing, grammar) {
71
77
  const chains = [];
72
78
  for (const write of plan.writes) {
73
- const chain = ensureUnsharedPath(root, write.path, sharing);
79
+ const chain = ensureUnsharedPath(body, write.path, sharing);
74
80
  const owned = chain[chain.length - 1];
75
81
  if (!owned)
76
82
  continue;
77
- // A line ending reaching a cell's raw would be normalized into a space at the write sink.
83
+ const owner = chain[chain.length - 2];
84
+ const holder = owner ? { children: owner.children, owner, lineEnding: body.lineEnding } : body;
85
+ // A line ending reaching a cell's raw would be turned into a space by the cell's write rule.
78
86
  const raw = write.newDisplay + ownTrailingLineEnding(owned.raw);
79
- writeOwnRaw(owned, normalizeBodyWrite(chain[chain.length - 2]?.kind, raw), grammar);
87
+ rewriteLeafInPlace(holder, write.path[write.path.length - 1], raw, grammar, sharing);
80
88
  chains.push(chain);
81
89
  }
82
- // Every write lands before any rebuild, and a chain rebuild re-emits its whole ancestry from
83
- // children that are already current, so chain order is free.
84
- for (const chain of chains)
85
- rebuildUnsharedChain(root, chain, sharing, null, grammar);
90
+ // Every write lands before any rebuild, and an ancestor the chains share is rebuilt once, by the
91
+ // last chain holding it, after every chain below it.
92
+ const levels = sharedChainLevels(chains);
93
+ chains.forEach((chain, i) => {
94
+ rebuildUnsharedChain(body, chain, sharing, null, grammar, undefined, levels[i]);
95
+ });
86
96
  }
87
- /**
88
- * The anchor block's tail, every middle block's content, the focus block's head — in document
89
- * order. Participation is the kind's own declaration, never its name: an editable, inline-bearing
90
- * leaf with a non-blank span joins, and a grid hands over its covered cells, which are leaves of
91
- * that same shape.
92
- */
93
- function spansInRange(doc, start, end) {
97
+ /** The start edge's tail, every block the range holds whole and the end edge's head, in document
98
+ * order, read off `rangeCoverage`. A kind joins by what its descriptor declares, never by name. */
99
+ function spansInRange(doc, coverage, reading) {
100
+ const { start, end } = coverage.range;
94
101
  const spans = [];
95
- const visit = (holder, path) => {
96
- const children = holder.children ?? [];
97
- for (let index = 0; index < children.length; index++) {
98
- const here = [...path, index];
99
- // Everything past the end endpoint is out of the range, subtrees included.
100
- if (comparePaths(here, end.path) > 0)
101
- return;
102
- const child = children[index];
103
- if (child.children) {
104
- if (tryGetBlockKindDescriptor(child.kind)?.containerContract === 'grid') {
105
- // Appended, never spread: covered cells outnumber an argument list (G4.60).
106
- for (const span of gridSpans(child, here, start, end))
107
- spans.push(span);
108
- }
109
- else {
110
- visit(child, here);
111
- }
112
- continue;
113
- }
114
- const span = spanFor(child, here, start, end);
115
- if (span)
116
- spans.push(span);
117
- }
102
+ // Pushed one by one, never spread: a large grid's cells can exceed the argument-list limit
103
+ // (G4.60).
104
+ const push = (cells) => {
105
+ for (const span of cells)
106
+ spans.push(span);
118
107
  };
119
- visit(doc, []);
108
+ if (coverage.grid) {
109
+ const { path, rect } = coverage.grid;
110
+ const table = blockNodeAt(doc, path);
111
+ if (table)
112
+ push(cellSpans(gridCellsInRect(table, path, rect), reading));
113
+ return spans;
114
+ }
115
+ if (coverage.startEdge && coverage.endEdge && pathsEqual(start.path, end.path)) {
116
+ push(edgeSpans(doc, start, end, null, reading));
117
+ return spans;
118
+ }
119
+ if (coverage.startEdge)
120
+ push(edgeSpans(doc, start, null, coverage.startCells, reading));
121
+ for (const root of coverage.wholeRoots)
122
+ push(wholeSpans(doc, root, reading));
123
+ if (coverage.endEdge)
124
+ push(edgeSpans(doc, null, end, coverage.endCells, reading));
120
125
  return spans;
121
126
  }
122
- function spanFor(node, path, start, end) {
123
- if (comparePaths(path, start.path) < 0 || comparePaths(path, end.path) > 0)
124
- return null;
125
- const isStart = comparePaths(path, start.path) === 0;
126
- const isEnd = comparePaths(path, end.path) === 0;
127
- const body = contentSpan(node, path, isStart ? charOffsetOf(start, TAG) : null, isEnd ? charOffsetOf(end, TAG) : null);
128
- return body && { ...body, isStart, isEnd };
127
+ /** A kept edge's part of its block: the text from the start or up to the end, or the cells a
128
+ * table edge hands over. */
129
+ function edgeSpans(doc, start, end, cells, reading) {
130
+ const point = (start ?? end);
131
+ const node = blockNodeAt(doc, point.path);
132
+ if (!node)
133
+ return [];
134
+ if (cells)
135
+ return cellSpans(gridCellsInRun(node, point.path, cells.from, cells.to - 1), reading);
136
+ const body = contentSpan(node, point.path, start ? charOffsetOf(start, TAG) : null, end ? charOffsetOf(end, TAG) : null, reading);
137
+ return body ? [{ ...body, isStart: start !== null, isEnd: end !== null }] : [];
129
138
  }
130
- /**
131
- * A grid's covered cells, each contributing its WHOLE content. An endpoint inside a grid resolves
132
- * to one of its cells, so no cell is ever cut in half: an endpoint counting cells stays on the one
133
- * it named, while one naming its cell by path follows that cell's own write.
134
- */
135
- function gridSpans(grid, path, start, end) {
136
- const from = gridEndpointCellIndex(grid, path, start);
137
- // No endpoint of its own, and the range starts after it: the grid sits wholly before the range.
138
- if (from === null && comparePaths(path, start.path) < 0)
139
+ /** Every leaf of a subtree the range holds whole, each whole, in document order. */
140
+ function wholeSpans(doc, root, reading) {
141
+ const node = blockNodeAt(doc, [...root]);
142
+ if (!node)
139
143
  return [];
140
- const cells = coveredGridCells(grid, path, from, gridEndpointCellIndex(grid, path, end));
144
+ const spans = [];
145
+ const visit = (at, atPath) => {
146
+ if (at.children) {
147
+ at.children.forEach((child, index) => visit(child, [...atPath, index]));
148
+ return;
149
+ }
150
+ const body = contentSpan(at, atPath, null, null, reading);
151
+ if (body)
152
+ spans.push({ ...body, isStart: false, isEnd: false });
153
+ };
154
+ visit(node, [...root]);
155
+ return spans;
156
+ }
157
+ /** Each cell whole; a table endpoint counting cells never names a cell path (G1.29). */
158
+ function cellSpans(cells, reading) {
141
159
  const spans = [];
142
160
  for (const cell of cells) {
143
- const body = contentSpan(cell.node, cell.path, null, null);
161
+ const body = contentSpan(cell.node, cell.path, null, null, reading);
144
162
  if (body)
145
- spans.push({
146
- ...body,
147
- isStart: addressesCell(start, cell.path),
148
- isEnd: addressesCell(end, cell.path)
149
- });
163
+ spans.push({ ...body, isStart: false, isEnd: false });
150
164
  }
151
165
  return spans;
152
166
  }
153
- /** Whether the endpoint names this cell BY PATH, which is the same question as whether its offset
154
- * is a CHAR offset: only the deep `[grid, row, col]` endpoint G1.29 permits can match a cell path,
155
- * so a table's cell index keeps its own space while a plugin grid's edge follows its cell's
156
- * rewrite, as a prose edge follows its block's. */
157
- function addressesCell(point, cellPath) {
158
- return comparePaths(point.path, cellPath) === 0;
159
- }
160
- /**
161
- * What one leaf contributes between two char offsets — null on a side meaning the block's own
162
- * content edge. Null where the kind declares itself out of inline marking, or where the boundary
163
- * trim leaves nothing to mark.
164
- */
165
- function contentSpan(node, path, from, to) {
167
+ /** What one leaf contributes between two character offsets, a null side meaning its content
168
+ * edge. Null for a kind outside inline marking, or when trimming whitespace leaves nothing. */
169
+ function contentSpan(node, path, from, to, reading) {
166
170
  const descriptor = tryGetBlockKindDescriptor(node.kind);
167
171
  if (!descriptor?.supportsInline || !descriptor.editable || descriptor.isContainer)
168
172
  return null;
169
173
  const display = trimTrailingLineEnding(node.raw);
170
174
  const content = getContentRange(node);
171
175
  const selection = withoutBoundaryWhitespace(display, clampToContent(from ?? content.start, content), clampToContent(to ?? content.end, content));
172
- return selection && { path, edit: { display, content, selection } };
176
+ return selection && { path, edit: { display, content, selection, reading } };
173
177
  }
174
178
  const clampToContent = (offset, content) => Math.min(Math.max(offset, content.start), content.end);
175
- /**
176
- * Whether the span actually changed sides. The single-block seam decides its own arm from the
177
- * span alone, so a block whose write disagreed with the range's direction is dropped rather than
178
- * committed against the press the user made.
179
- */
179
+ /** Whether the span's toggle went the range's way. The single-block toggle decides from the span
180
+ * alone, so a block that went the other way is dropped rather than written. */
180
181
  function landedOnIntendedSide(edit, toggled, format, unapply) {
181
182
  return isInlineFormatActiveAfter(edit, toggled, format) !== unapply;
182
183
  }
@@ -1,27 +1,22 @@
1
1
  /**
2
- * The cross-block arm of the inline format toggles: plan the per-block spans (`./format-range`),
3
- * write them all under ONE undo entry through the multi-scope ceremony, then put the range back
4
- * over the result through the shared restore road. The dispatch seam reaches this through an
5
- * injected router, so `schema/` keeps no edge to selection machinery.
2
+ * The cross-block half of the inline format toggles: plan the per-block spans, write them under
3
+ * one undo entry, and put the range back over the result. The key dispatcher reaches this module
4
+ * through an injected router, so `schema/` keeps no import of selection code.
6
5
  */
7
- import type { BlockComponent } from '../../block-component';
8
6
  import type { CommitController } from '../../action-contracts';
9
- import type { BlockElLookup, DocumentGetter, PresentationModeGetter } from '../../editor-keys';
7
+ import type { DocumentGetter } from '../../editor-keys';
10
8
  import type { CrossBlockCommandRouter } from '../../schema/block-commands';
11
- import type { GrammarView } from '../../schema/block-openers';
9
+ import type { Reading } from '../../schema/reading';
12
10
  import type { SelectionState } from '../selection-state.svelte';
13
11
  export interface CrossBlockCommandDeps {
14
12
  selection: SelectionState;
15
13
  getDoc: DocumentGetter;
16
- getBlockElByPath: BlockElLookup;
17
- revealPath: (path: number[]) => Promise<BlockComponent | null>;
18
14
  controller: CommitController;
19
- /** The mode each per-block rewrite verifies against. Required-nullable like the cross-block
20
- * dispatch context's own threads; `undefined` reads as source. */
21
- getPresentationMode: PresentationModeGetter | undefined;
22
- grammar: GrammarView | undefined;
23
- /** The pressed-state memo's key alongside the range: the document is mutated in place, so its
24
- * identity witnesses nothing (`docs/design/editor.md` § 7). */
15
+ /** How the blocks were drawn: each span's toggle reads its link definitions and grammar, and
16
+ * verifies its rewrite against its mode. */
17
+ reading: Reading;
18
+ /** The active-marks memo's key alongside the range: the document is mutated in place, so its
19
+ * identity says nothing about whether it changed. */
25
20
  getContentVersion: () => number;
26
21
  }
27
22
  export declare function createCrossBlockCommands(deps: CrossBlockCommandDeps): CrossBlockCommandRouter;
@@ -1,21 +1,20 @@
1
1
  /**
2
- * The cross-block arm of the inline format toggles: plan the per-block spans (`./format-range`),
3
- * write them all under ONE undo entry through the multi-scope ceremony, then put the range back
4
- * over the result through the shared restore road. The dispatch seam reaches this through an
5
- * injected router, so `schema/` keeps no edge to selection machinery.
2
+ * The cross-block half of the inline format toggles: plan the per-block spans, write them under
3
+ * one undo entry, and put the range back over the result. The key dispatcher reaches this module
4
+ * through an injected router, so `schema/` keeps no import of selection code.
6
5
  */
7
6
  import { ownTrailingLineEnding } from '../../core/lines';
8
7
  import { docPathFrom } from '../../cursor/coordinate-spaces';
9
8
  import { inlineMarkForCommand } from '../../schema/inline-construct-policy';
10
9
  import { blockNodeAt } from '../../tree-operations/node-primitives';
11
10
  import { comparePaths } from '../path-math';
12
- import { restoreSelection } from '../selection-restore';
11
+ import { coverRange } from '../range-coverage';
13
12
  import { applyCrossBlockFormat, crossBlockActiveFormats, planCrossBlockFormat } from './format-range';
14
13
  export function createCrossBlockCommands(deps) {
15
14
  const activeFormats = createActiveFormatMemo(deps);
16
15
  return {
17
- // Reachability of the arm, not participation: whether any block joins is only known once
18
- // the range is decomposed, and a press that reaches no block writes nothing.
16
+ // Whether the command has a cross-block handler, not whether any block joins, which is known
17
+ // only once the range splits into spans; a keystroke that reaches no block writes nothing.
19
18
  canRun: (id) => inlineMarkForCommand(id) !== null,
20
19
  run: (id) => {
21
20
  const mark = inlineMarkForCommand(id);
@@ -30,46 +29,49 @@ export function createCrossBlockCommands(deps) {
30
29
  }
31
30
  };
32
31
  }
33
- // ── The pressed-state memo ─────────────────────────────────────────────────
32
+ // ── The active-marks memo ──────────────────────────────────────────────────
34
33
  const NO_MARKS = new Set();
35
- /** One slot rather than a cache: a toolbar asks once per button against one range, and the previous
36
- * key is dead the moment the selection moves. Outside reactive state like `inline-cache.ts`, since
37
- * a derived read that wrote `$state` would be a write during a read. */
34
+ /** One entry, not a cache: the previous key is dead once the selection moves. Outside reactive
35
+ * state, since a derived read that wrote `$state` would be a write during a read. */
38
36
  function createActiveFormatMemo(deps) {
39
37
  let slot = null;
40
38
  return () => {
41
- const { start, end } = deps.selection;
42
- if (!start || !end)
39
+ const { anchor, focus } = deps.selection;
40
+ if (!anchor || !focus)
43
41
  return NO_MARKS;
44
- const key = `${deps.getContentVersion()}|${pointKey(start)}|${pointKey(end)}`;
42
+ const key = `${deps.getContentVersion()}|${pointKey(anchor)}|${pointKey(focus)}`;
45
43
  if (slot?.key !== key) {
46
- slot = { key, marks: crossBlockActiveFormats(deps.getDoc(), start, end) };
44
+ const doc = deps.getDoc();
45
+ const range = coverRange(doc, anchor, focus);
46
+ slot = { key, marks: crossBlockActiveFormats(doc, range, deps.reading) };
47
47
  }
48
48
  return slot.marks;
49
49
  };
50
50
  }
51
- /** The offset's SPACE is part of the identity: a cell point counts cells where a char point
52
- * counts bytes, so the flag rides the key. */
51
+ /** The offset's space is part of the identity: a cell point counts cells where a character
52
+ * point counts bytes, so the flag goes in the key. */
53
53
  const pointKey = (point) => `${point.path.join(',')}@${point.offset}${point.cellCoordinate ? 'c' : ''}`;
54
54
  // ── The commit ─────────────────────────────────────────────────────────────
55
55
  async function toggleFormatOverRange(deps, format) {
56
- const { anchor, focus, start, end } = deps.selection;
57
- if (!anchor || !focus || !start || !end)
56
+ const { anchor, focus } = deps.selection;
57
+ if (!anchor || !focus)
58
58
  return;
59
59
  const doc = deps.getDoc();
60
- const plan = planCrossBlockFormat(doc, start, end, format, deps.getPresentationMode?.());
60
+ const range = coverRange(doc, anchor, focus);
61
+ const plan = planCrossBlockFormat(doc, range, format, deps.reading);
61
62
  if (!plan)
62
63
  return;
64
+ const { start, end } = range;
63
65
  const restored = restoredRange(anchor, focus, start, end, plan);
64
66
  await deps.controller.commitMultiScope({
65
- // Doc scope alone: the writes are bytes, not splices, so no container's children array
66
- // or id list moves and each touched spine rebuilds from the leaf it owns.
67
+ // The document scope alone: the writes are bytes, not splices, so no container's children
68
+ // array or id list moves and each touched chain rebuilds from its own leaf.
67
69
  scopes: [deps.controller.getDocScope()],
68
70
  // The endpoint's own space, like the plan's offsets: undo restores through the clamp that
69
71
  // reads a grid's path as cell indices.
70
72
  snapshot: { path: docPathFrom(start.path), offset: start.offset },
71
73
  mutate: ([docScope]) => {
72
- applyCrossBlockFormat({ children: docScope.children }, plan, docScope.sharing, deps.grammar);
74
+ applyCrossBlockFormat(docScope.body, plan, docScope.sharing, deps.reading.grammar);
73
75
  return [{ op: 'noop' }];
74
76
  },
75
77
  op: {
@@ -77,14 +79,7 @@ async function toggleFormatOverRange(deps, format) {
77
79
  detail: { length: startBlockLength(doc, start, plan), crossBlock: true },
78
80
  eventPath: docPathFrom(start.path)
79
81
  },
80
- afterTick: async () => {
81
- await restoreSelection(restored, {
82
- getDoc: deps.getDoc,
83
- selectionState: deps.selection,
84
- getBlockElByPath: deps.getBlockElByPath,
85
- revealTarget: async (path) => (await deps.revealPath(path)) !== null
86
- });
87
- }
82
+ landing: () => restored
88
83
  });
89
84
  }
90
85
  /** The same pair, re-offset, with the user's anchor still on the side it was drawn from. */
@@ -100,8 +95,8 @@ const withOffset = (point, offset) => ({
100
95
  path: point.path.slice(),
101
96
  offset
102
97
  });
103
- /** The event detail's post-write length, read off the plan: `op` is spent before `mutate` runs.
104
- * A block the plan does not write reports the length it already stands at (`schema/operations.ts`). */
98
+ /** The event detail's post-write length, read off the plan, since `op` is evaluated before
99
+ * `mutate` runs. A block the plan doesn't write reports its current length. */
105
100
  function startBlockLength(doc, start, plan) {
106
101
  const raw = blockNodeAt(doc, start.path)?.raw ?? '';
107
102
  const write = plan.writes.find((entry) => comparePaths(entry.path, start.path) === 0);
@@ -1,11 +1,11 @@
1
- /**
2
- * Keydown + compositionstart half of the cross-block dispatcher. See dispatch.ts for the
3
- * composer that wires this together with the pointer half.
4
- */
1
+ /** The keydown and compositionstart half of cross-block dispatch. */
5
2
  import type { CrossBlockMutationContext } from './ops';
6
3
  import type { CrossBlockDispatchContext } from './dispatch';
4
+ import type { AnyCommandId } from '../../schema/command-id';
7
5
  export interface CrossBlockKeydown {
8
6
  handleKeyDown(e: KeyboardEvent): Promise<boolean>;
9
7
  handleCompositionStart(): boolean;
10
8
  }
11
9
  export declare function createCrossBlockKeydown(ctx: CrossBlockDispatchContext, mutCtx: CrossBlockMutationContext): CrossBlockKeydown;
10
+ /** What a keypress resolves to at the block at `getMyPath`, or at global scope with none. */
11
+ export declare function commandAtBlock(e: KeyboardEvent, ctx: Pick<CrossBlockDispatchContext, 'getDoc' | 'getMyPath' | 'commands'>): AnyCommandId | null;