@voithos-labs/aragonite 0.10.4 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +11 -5
  3. package/dist/a11y-strings.js +60 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +12 -21
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +603 -1126
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +26 -51
  26. package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +29 -34
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +57 -39
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +141 -203
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +45 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
  102. package/dist/components/blocks/text/click-snap-guard.js +10 -7
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -108
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +212 -199
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +12 -35
  144. package/dist/components/drag-handle.js +22 -68
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -24
  162. package/dist/components/editor-root-listeners.js +49 -24
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +14 -26
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +30 -35
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +54 -75
  256. package/dist/core/inline/inline-widgets.js +54 -62
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +31 -15
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -6
  347. package/dist/cursor/height-oracle.js +26 -74
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +14 -15
  365. package/dist/cursor/scrollport.js +7 -13
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -14
  375. package/dist/cursor/visual-lines.js +45 -46
  376. package/dist/cursor/widget-edge-snap.d.ts +10 -15
  377. package/dist/cursor/widget-edge-snap.js +13 -12
  378. package/dist/cursor/widget-offset.d.ts +110 -104
  379. package/dist/cursor/widget-offset.js +344 -179
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +30 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +28 -50
  434. package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
  435. package/dist/editor-actions/focus/focus-landing.js +15 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +54 -82
  465. package/dist/editor-actions/plugin/container.js +105 -188
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +88 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +37 -8
  550. package/dist/plugin.js +100 -77
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +78 -67
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -81
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +141 -310
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +78 -84
  695. package/dist/schema/commands.js +152 -117
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +8 -10
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +63 -80
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +92 -125
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +59 -96
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +51 -134
  807. package/dist/selection/dead-space-caret.d.ts +19 -30
  808. package/dist/selection/dead-space-caret.js +70 -88
  809. package/dist/selection/drag-pointer.d.ts +7 -9
  810. package/dist/selection/drag-pointer.js +23 -33
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -40
  816. package/dist/selection/keyboard-extend.js +94 -117
  817. package/dist/selection/multi-click.d.ts +13 -18
  818. package/dist/selection/multi-click.js +32 -38
  819. package/dist/selection/native-bridge.d.ts +29 -39
  820. package/dist/selection/native-bridge.js +78 -127
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +25 -16
  824. package/dist/selection/path-lookup.js +101 -18
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +5 -5
  828. package/dist/selection/pointer-gesture.js +5 -5
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -40
  832. package/dist/selection/primitives.js +57 -67
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -23
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +34 -16
  852. package/dist/selection/selection-drop.js +159 -95
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +60 -53
  864. package/dist/styles/editor.css +201 -143
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
  960. package/dist/tree-operations/paste/replacement-parse.js +12 -10
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +327 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +253 -185
  996. package/docs/guide/plugin-guide.md +332 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +12 -16
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/cursor/scroll-hold.d.ts +0 -10
  1015. package/dist/cursor/scroll-hold.js +0 -22
  1016. package/dist/invariants/split-landing.d.ts +0 -8
  1017. package/dist/invariants/split-landing.js +0 -15
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
@@ -1,85 +1,66 @@
1
- /** Shared `BlockComponent` shim for container blocks. */
1
+ /** The shared `BlockComponent` implementation for container blocks. */
2
2
  import { type BlockComponent, type ContainerBlockComponent } from '../block-component';
3
- import { type RefSlots } from '../reactivity/publish-ref.svelte';
3
+ import type { ChildList } from '../reactivity/child-list';
4
4
  import type { AnyBlockKind } from '../core/nodes';
5
5
  import type { NodeView } from '../core/node-views';
6
6
  import type { BlockEditActions, FocusActions } from '../action-contracts';
7
- import { type GlobalCommandContext } from '../schema/commands';
8
- import type { KeybindingOverrideMap } from '../schema/keybinding-overrides';
9
- import type { PluginActivation } from '../schema/plugin-activation';
10
- import type { StickyColumnState } from '../cursor/sticky-column';
11
- import type { EdgeAffinityState } from '../cursor/edge-affinity';
7
+ import { type CommandDispatchContext, type KindCommandTarget } from '../schema/block-commands';
8
+ import type { Reading } from '../schema/reading';
9
+ import type { CaretMemory } from '../cursor/caret-memory';
10
+ import type { AnyCommandId } from '../schema/command-id';
12
11
  import type { SelectionState } from '../selection/selection-state.svelte';
13
12
  import { type WholeBlockInputProxy } from './whole-block-focus-surface';
14
- export interface EditorGlobalChordDeps extends Pick<GlobalCommandContext, 'history' | 'pluginEditor' | 'onCommandError'> {
15
- getKind: () => AnyBlockKind;
16
- getKeybindingOverrides: () => KeybindingOverrideMap | undefined;
17
- isReading: () => boolean;
18
- /** Required here though optional on the context: a whole-block surface that skipped it
19
- * would consume an unlisted plugin's chord. `undefined` = every installed plugin. */
20
- activation: PluginActivation | undefined;
21
- }
13
+ /** Undo, redo and plugin-global chords for a block focused as a whole, which neither an inner leaf
14
+ * nor the editor root runs. Consumed in reading mode too, or the browser runs its own undo. */
15
+ export declare function dispatchWholeBlockGlobalChord(e: KeyboardEvent, kind: AnyBlockKind, commands: CommandDispatchContext): boolean;
22
16
  /**
23
- * Undo/redo for a block that IS its own focus target: no inner leaf carries the global tier for
24
- * it, and the editor root declines while focus sits on the block. `true` means consumed —
25
- * including in reading mode, since bypassing `dispatchKeyCommand` would otherwise hand a read-only
26
- * document the browser's native undo.
17
+ * A chord at a container, resolved against the container's own kind only: a key that bubbled up
18
+ * from a focused leaf has already met the global chords there.
27
19
  */
28
- export declare function handleEditorGlobalChord(chord: string, deps: EditorGlobalChordDeps): boolean;
20
+ export declare function dispatchContainerChord(e: KeyboardEvent, target: KindCommandTarget, commands: CommandDispatchContext): boolean;
29
21
  export interface BlockEdgeExitDeps {
30
22
  getIndex: () => number;
31
23
  focus: Pick<FocusActions, 'moveFocus'>;
32
24
  }
33
- /**
34
- * The four plain-arrow exits out of a block, in the direction the key points. Shared by
35
- * whole-block focus and the plugin container's `moveFocusOut`, so a surface that reaches its
36
- * own edge lands the same way the built-ins do. False for any other key.
37
- */
25
+ /** The plain-arrow exits out of a block, shared by whole-block focus and a plugin container's
26
+ * `moveFocusOut`, so a plugin editor leaves its edge as the built-ins do. False for other keys. */
38
27
  export declare function focusAcrossBlockEdge(key: string, deps: BlockEdgeExitDeps): boolean;
39
28
  export interface WholeBlockKeyDeps extends BlockEdgeExitDeps {
40
29
  getRaw: () => string;
41
30
  blockEdit: Pick<BlockEditActions, 'splitBlock' | 'deleteBlock' | 'insertParagraph'>;
42
31
  isReading: () => boolean;
43
- stickyColumn: Pick<StickyColumnState, 'noteKey'>;
44
- edgeAffinity: Pick<EdgeAffinityState, 'note'>;
32
+ caretMemory: Pick<CaretMemory, 'noteKey'>;
33
+ /** What the keypress resolves to at this block's kind, overrides included. */
34
+ commandOf: (e: KeyboardEvent) => AnyCommandId | null;
45
35
  }
46
36
  /**
47
- * The whole-block-focus key tail shared by ThematicBreakBlock and the plugin container
48
- * factory, so a new gate lands once instead of at both. Navigation never gates.
37
+ * The whole-block key handling shared by ThematicBreakBlock and the plugin container
38
+ * factory, so a new check lands once instead of at both. Navigation is never checked.
49
39
  */
50
40
  export declare function handleWholeBlockKeys(e: KeyboardEvent, deps: WholeBlockKeyDeps): void;
51
41
  export interface ContainerBlockComponentDeps {
52
- /** What the mounted surface reports as `editable`, mirroring the kind's descriptor flag;
42
+ /** What the mounted component reports as `editable`, mirroring the kind's descriptor flag;
53
43
  * omitted stays `true`, the built-in containers' answer. A getter, never a snapshot. */
54
44
  readonly editable?: boolean;
55
- /** Ends a live cross-block range when `focus` lands a caret — a whole-block landing
45
+ /** Ends a live cross-block range when `focus` places a caret: focusing a whole block
56
46
  * reaches no child to borrow it from. */
57
47
  readonly selection: SelectionState;
58
48
  readonly innerBlockRefs: (BlockComponent | undefined)[];
59
- /** The same scope's slots — the array for the dispatch walks, this for the reveal's
60
- * mount-wait, which needs an identity the array's replacement can't invalidate. */
61
- readonly refSlots: RefSlots<BlockComponent>;
62
- readonly nodeChildrenLength: number;
63
- /** For the pure-data transparency test, which must work off-window where
64
- * `innerBlockRefs` is sparse (VR-6). */
49
+ /** The same children as a descent reads them: their count, ref slots, render window and
50
+ * collapse. `childList()` publishes it. */
51
+ readonly childList: ChildList;
52
+ /** For the widget-only check, which reads the node so it works for an unmounted
53
+ * container where `innerBlockRefs` is sparse (VR-6). */
65
54
  readonly node: NodeView;
66
- /** Scroll this scope so child `index` enters its window; resolves after a tick. */
67
- readonly revealChild?: (index: number) => Promise<void>;
68
- /** Lets the reveal degrade instead of hanging when a scroll missed (VR-5). */
69
- readonly isInWindow?: (index: number) => boolean;
70
- /** Collapse clamp — while true only the chrome row is mounted, so a focus extremum
71
- * entering the container clamps to it rather than no-oping on an unmounted child. */
72
- readonly isCollapsed?: () => boolean;
73
- /** Open this container so a reveal can descend into its clamped-out body, as a real
74
- * committed edit. Absent leaves the reveal to degrade on the chrome row. */
75
- readonly expandCollapsed?: () => Promise<boolean>;
76
- /** Whole-block-focus element for an opaque childless container, already composed
55
+ /** How the editor reads its bytes, whose grammar the widget-only check reads the node in. */
56
+ readonly reading: Reading;
57
+ /** The focus element of a childless container focused as a whole, already composed
77
58
  * through `composeWholeBlockFocusSurface`. */
78
59
  readonly getFocusEl?: () => HTMLElement | null | undefined;
79
- /** A childless opaque container has no child hosts to paint search/decoration
80
- * rects, so `measurePartialRects` measures the block itself off this element. */
60
+ /** A childless container has no child elements to measure search or decoration rects
61
+ * from, so `measurePartialRects` measures the block itself off this element. */
81
62
  readonly getBoxEl?: () => HTMLElement | null | undefined;
82
- /** The hidden editing host beside the declared surface, where whole-block focus lands. */
63
+ /** The hidden editing host beside the declared element, where whole-block focus lands. */
83
64
  readonly inputProxy?: WholeBlockInputProxy;
84
65
  }
85
66
  export declare function createContainerBlockComponent(deps: ContainerBlockComponentDeps): ContainerBlockComponent;
@@ -1,34 +1,38 @@
1
- /** Shared `BlockComponent` shim for container blocks. */
2
- import { CURSOR_END, CURSOR_EXACT_START, CURSOR_START, FOCUS_LAST_START } from '../block-component';
3
- import { dispatchFocusByPath, dispatchFocusAtColumn, dispatchGetBlockComponentByPath } from './focus/focus-dispatch';
4
- import { revealChildOrWait } from '../reactivity/publish-ref.svelte';
1
+ /** The shared `BlockComponent` implementation for container blocks. */
2
+ import { entryEdge } from '../block-component';
3
+ import { dispatchFocusByPath, dispatchFocusAtColumn } from './focus/focus-dispatch';
5
4
  import { runGlobalChordOnKind } from '../schema/commands';
6
- import { isCharacterKey } from '../schema/keybindings';
5
+ import { dispatchKindCommand } from '../schema/block-commands';
6
+ import { eventToChord, isCharacterKey } from '../schema/keybindings';
7
7
  import { displayLength, trimTrailingLineEnding } from '../core/lines';
8
8
  import { isVerticallyTransparentNode } from '../core/inline/transparency';
9
9
  import { placeCaret } from '../selection/caret-doors';
10
10
  import { focusWholeBlockEl, holdsWholeBlockFocus } from './whole-block-focus-surface';
11
11
  import { devWarn } from '../dev-warn';
12
- /**
13
- * Undo/redo for a block that IS its own focus target: no inner leaf carries the global tier for
14
- * it, and the editor root declines while focus sits on the block. `true` means consumed —
15
- * including in reading mode, since bypassing `dispatchKeyCommand` would otherwise hand a read-only
16
- * document the browser's native undo.
17
- */
18
- export function handleEditorGlobalChord(chord, deps) {
19
- return runGlobalChordOnKind(chord, deps.getKind(), deps.getKeybindingOverrides(), {
20
- isReading: deps.isReading(),
21
- history: deps.history,
22
- pluginEditor: deps.pluginEditor,
23
- onCommandError: deps.onCommandError,
24
- activation: deps.activation
25
- });
12
+ /** Undo, redo and plugin-global chords for a block focused as a whole, which neither an inner leaf
13
+ * nor the editor root runs. Consumed in reading mode too, or the browser runs its own undo. */
14
+ export function dispatchWholeBlockGlobalChord(e, kind, commands) {
15
+ const chord = eventToChord(e);
16
+ if (!chord || !runGlobalChordOnKind(chord, kind, commands))
17
+ return false;
18
+ e.preventDefault();
19
+ return true;
26
20
  }
27
21
  /**
28
- * The four plain-arrow exits out of a block, in the direction the key points. Shared by
29
- * whole-block focus and the plugin container's `moveFocusOut`, so a surface that reaches its
30
- * own edge lands the same way the built-ins do. False for any other key.
22
+ * A chord at a container, resolved against the container's own kind only: a key that bubbled up
23
+ * from a focused leaf has already met the global chords there.
31
24
  */
25
+ export function dispatchContainerChord(e, target, commands) {
26
+ if (e.defaultPrevented)
27
+ return false;
28
+ const chord = eventToChord(e);
29
+ if (!chord || !dispatchKindCommand(chord, target, commands))
30
+ return false;
31
+ e.preventDefault();
32
+ return true;
33
+ }
34
+ /** The plain-arrow exits out of a block, shared by whole-block focus and a plugin container's
35
+ * `moveFocusOut`, so a plugin editor leaves its edge as the built-ins do. False for other keys. */
32
36
  export function focusAcrossBlockEdge(key, deps) {
33
37
  const index = deps.getIndex();
34
38
  if (key === 'ArrowUp')
@@ -44,15 +48,13 @@ export function focusAcrossBlockEdge(key, deps) {
44
48
  return true;
45
49
  }
46
50
  /**
47
- * The whole-block-focus key tail shared by ThematicBreakBlock and the plugin container
48
- * factory, so a new gate lands once instead of at both. Navigation never gates.
51
+ * The whole-block key handling shared by ThematicBreakBlock and the plugin container
52
+ * factory, so a new check lands once instead of at both. Navigation is never checked.
49
53
  */
50
54
  export function handleWholeBlockKeys(e, deps) {
51
- // The classification doors, before any branch: skipping them let a column captured
52
- // outside survive a horizontal traversal through, and the arrival side the exit lands
53
- // with is the same one an arrow means anywhere. No `measureX` — no caret here.
54
- deps.stickyColumn.noteKey(e);
55
- deps.edgeAffinity.note(e);
55
+ // Before any branch, or a column captured elsewhere survives a horizontal move through this
56
+ // block. No `measureX`: a block focused whole has no caret to measure.
57
+ deps.caretMemory.noteKey(e, deps.commandOf(e));
56
58
  if (e.key === 'Enter') {
57
59
  e.preventDefault();
58
60
  if (!deps.isReading())
@@ -62,18 +64,18 @@ export function handleWholeBlockKeys(e, deps) {
62
64
  if (e.key === 'Backspace' || e.key === 'Delete') {
63
65
  e.preventDefault();
64
66
  if (!deps.isReading())
65
- void deps.blockEdit.deleteBlock(deps.getIndex());
67
+ void deps.blockEdit.deleteBlock(deps.getIndex(), e.key);
66
68
  return;
67
69
  }
68
- // Mod+C / Mod+X on the block's own markdown: a keydown carries no ClipboardEvent,
69
- // and preventDefault suppresses the native copy, so writeText is the sole writer.
70
+ // Mod+C and Mod+X copy the block's own markdown: a keydown carries no ClipboardEvent,
71
+ // and preventDefault suppresses the native copy, so writeText is the only writer.
70
72
  if ((e.ctrlKey || e.metaKey) && !e.altKey && !e.shiftKey && (e.key === 'c' || e.key === 'x')) {
71
73
  e.preventDefault();
72
74
  void copyFocusedWholeBlock(deps, e.key === 'x');
73
75
  return;
74
76
  }
75
- // A typed character has nowhere to land on a block that IS its own focus target, so it mints
76
- // the paragraph below carrying it (`editor-actions/block-edit-core.ts :: insertParagraph`).
77
+ // A typed character has nowhere to land on a block focused as a whole, so it creates the
78
+ // paragraph below carrying it (`editor-actions/block-edit-core.ts :: insertParagraph`).
77
79
  if (isCharacterKey(e.key) && !e.isComposing && !e.ctrlKey && !e.metaKey && !e.altKey) {
78
80
  e.preventDefault();
79
81
  if (!deps.isReading())
@@ -84,8 +86,8 @@ export function handleWholeBlockKeys(e, deps) {
84
86
  if (plainArrow && focusAcrossBlockEdge(e.key, deps))
85
87
  e.preventDefault();
86
88
  }
87
- // Copy is a read, so it never gates; cut's delete gates on reading mode and only runs
88
- // once the write resolves, so a rejected write leaves the block in place.
89
+ // Copy is a read, so it is never blocked; cut's delete is blocked in reading mode and only
90
+ // runs once the clipboard write resolves, so a rejected write leaves the block in place.
89
91
  async function copyFocusedWholeBlock(deps, cut) {
90
92
  try {
91
93
  await navigator.clipboard.writeText(trimTrailingLineEnding(deps.getRaw()));
@@ -95,37 +97,32 @@ async function copyFocusedWholeBlock(deps, cut) {
95
97
  return;
96
98
  }
97
99
  if (cut && !deps.isReading())
98
- void deps.blockEdit.deleteBlock(deps.getIndex());
100
+ void deps.blockEdit.deleteBlock(deps.getIndex(), 'cut');
99
101
  }
100
102
  export function createContainerBlockComponent(deps) {
101
103
  const landFocus = (declared) => deps.inputProxy ? deps.inputProxy.focus(declared) : focusWholeBlockEl(declared);
102
104
  /**
103
- * `focus` lands in a child that never forwarded the park door; `parkCaret` skips it,
104
- * because for an extend a missed park costs a caret and `focus` costs the range.
105
+ * `focus` lands in a child that has no `parkCaret`; `parkCaret` skips it, because during a
106
+ * selection extend a missed `parkCaret` costs a caret and `focus` costs the range.
105
107
  */
106
108
  function walkInto(offset, land) {
107
- // Whole-block focus: any caret entry lands on the block itself, so the element
108
- // offset carries no meaning.
109
+ // Whole-block focus: any caret entry lands on the block itself, so the offset means
110
+ // nothing.
109
111
  const focusEl = deps.getFocusEl?.();
110
112
  if (focusEl) {
111
113
  landFocus(focusEl);
112
114
  return;
113
115
  }
114
- if (deps.nodeChildrenLength === 0)
115
- return;
116
- // Collapsed: only the chrome row is mounted, so a walk-in from below clamps to
117
- // it rather than no-oping on the unmounted last child.
118
- const last = deps.isCollapsed?.() ? 0 : deps.nodeChildrenLength - 1;
119
- const entersFirst = offset === 0 || offset === CURSOR_START || offset === CURSOR_EXACT_START;
120
- const child = entersFirst ? deps.innerBlockRefs[0] : deps.innerBlockRefs[last];
121
- if (!child)
116
+ const count = deps.childList.count();
117
+ if (count === 0)
122
118
  return;
123
- if (offset === FOCUS_LAST_START)
124
- land(child, FOCUS_LAST_START);
125
- else if (entersFirst)
126
- land(child, offset);
127
- else
128
- land(child, CURSOR_END);
119
+ // Collapsed: only the title row is mounted, so an entry from below clamps to it
120
+ // rather than doing nothing on the unmounted last child.
121
+ const last = deps.childList.isCollapsed?.() ? 0 : count - 1;
122
+ const edge = entryEdge(offset);
123
+ const child = deps.innerBlockRefs[edge.child === 'first' ? 0 : last];
124
+ if (child)
125
+ land(child, edge.offset);
129
126
  }
130
127
  function parkCaret(offset) {
131
128
  walkInto(offset, (child, at) => child.parkCaret?.(at));
@@ -165,59 +162,36 @@ export function createContainerBlockComponent(deps) {
165
162
  focusByPath(path, offset) {
166
163
  dispatchFocusByPath(deps.innerBlockRefs, path, offset);
167
164
  },
168
- getBlockComponentByPath(path) {
169
- return dispatchGetBlockComponentByPath(deps.innerBlockRefs, path);
170
- },
171
- async revealByPath(path) {
172
- if (path.length === 0)
173
- return null;
174
- const [head, ...rest] = path;
175
- // Only a body target needs the door opened; the chrome row stays mounted.
176
- // Awaited because everything below must run against the post-commit window.
177
- if (head >= 1 && deps.isCollapsed?.())
178
- await deps.expandCollapsed?.();
179
- if (deps.revealChild) {
180
- await revealChildOrWait(head, {
181
- slots: deps.refSlots,
182
- childCount: deps.nodeChildrenLength,
183
- revealChild: deps.revealChild,
184
- isInWindow: deps.isInWindow
185
- });
186
- }
187
- const ref = deps.innerBlockRefs[head];
188
- if (!ref)
189
- return null;
190
- if (rest.length === 0)
191
- return ref;
192
- return ref.revealByPath
193
- ? ref.revealByPath(rest)
194
- : (ref.getBlockComponentByPath?.(rest) ?? null);
195
- },
165
+ childList: () => deps.childList,
196
166
  focusAtColumn(x, from) {
197
- // Whole-block focus has no column to land in, so a vertical entry focuses the
198
- // block itself, mirroring the plain-arrow path.
167
+ // Whole-block focus has no column to land in, so a vertical entry focuses the block
168
+ // itself, like the plain-arrow path.
199
169
  const focusEl = deps.getFocusEl?.();
200
170
  if (focusEl) {
201
171
  landFocus(focusEl);
172
+ // Announced here because this branch reaches neither `placeCaret` nor a text block's
173
+ // editable element, the two placements that announce for everything else.
174
+ deps.selection.announceSelection();
202
175
  return;
203
176
  }
204
- if (deps.nodeChildrenLength === 0)
177
+ if (deps.childList.count() === 0)
205
178
  return;
206
179
  dispatchFocusAtColumn(deps.innerBlockRefs, x, from);
207
180
  },
208
181
  isVerticallyTransparent() {
209
- return isVerticallyTransparentNode(deps.node);
182
+ return isVerticallyTransparentNode(deps.node, deps.reading.grammar);
210
183
  },
211
184
  enterEdgeWidget(side) {
212
- if (deps.nodeChildrenLength === 0)
185
+ const count = deps.childList.count();
186
+ if (count === 0)
213
187
  return false;
214
- const edge = side === 'start' ? 0 : deps.nodeChildrenLength - 1;
188
+ const edge = side === 'start' ? 0 : count - 1;
215
189
  return deps.innerBlockRefs[edge]?.enterEdgeWidget?.(side) ?? false;
216
190
  },
217
191
  measurePartialRects(start, end) {
218
- // Opaque single-unit: a childless container paints the whole box. A
219
- // child-bearing one returns nothing — the overlay routes to its children.
220
- if (deps.nodeChildrenLength > 0)
192
+ // A childless container is one unit and measures its whole box. One with children
193
+ // returns nothing; the overlay measures its children instead.
194
+ if (deps.childList.count() > 0)
221
195
  return [];
222
196
  const box = deps.getBoxEl?.();
223
197
  if (!box || end <= start)
@@ -1,6 +1,8 @@
1
1
  /**
2
- * ContainerEditActions factory: the debounced checkpoint pusher for raw typing
3
- * outside the commit primitive, the doc-root reactivity nudge, and `commitContainer`.
2
+ * The root ContainerEditActions: what a container reaches the editor root for, which is the
3
+ * document's line ending, the container commit, the two things a keystroke needs the root for
4
+ * (grouping it with its typing burst, and the write that keeps the leaf in place), and the caret
5
+ * landing with the whole-document read a delete's caret needs.
4
6
  */
5
7
  import type { ContainerEditActions } from '../action-contracts';
6
8
  import type { EditorActionsDeps, UndoController } from './deps';
@@ -1,50 +1,20 @@
1
1
  /**
2
- * ContainerEditActions factory: the debounced checkpoint pusher for raw typing
3
- * outside the commit primitive, the doc-root reactivity nudge, and `commitContainer`.
2
+ * The root ContainerEditActions: what a container reaches the editor root for, which is the
3
+ * document's line ending, the container commit, the two things a keystroke needs the root for
4
+ * (grouping it with its typing burst, and the write that keeps the leaf in place), and the caret
5
+ * landing with the whole-document read a delete's caret needs.
4
6
  */
5
- import { ensureUnsharedPath } from '../tree-operations/unshare';
6
- import { rebuildUnsharedChain } from '../tree-operations/chain-rebuild';
7
- import { publishAncestryFolds, publishScopeFold } from './ancestry-folds';
7
+ import { documentLineEnding } from '../core/lines';
8
+ import { createLeafTyping } from './leaf-write';
9
+ import { survivorAfterRemoval } from '../selection/caret-target';
8
10
  export function createContainerEditActions(deps, controller) {
11
+ const { typeInLeaf, writeLeafInPlace } = createLeafTyping(deps, controller);
9
12
  return {
10
- pushDebouncedCheckpoint(leafPath, offset, batchKey) {
11
- deps.stickyColumn.reset();
12
- deps.edgeAffinity.reset();
13
- controller.pushUndoSnapshotDebounced(leafPath, offset, batchKey);
14
- },
15
- armDebouncedPause() {
16
- controller.armUndoPause();
17
- },
18
- nudgeReactivity() {
19
- // Raw mutations made outside the commit primitive surface through this nudge,
20
- // so Svelte re-reads doc.children.
21
- deps.doc.children = [...deps.doc.children];
22
- },
23
- withUnsharedSpine(absPath, write) {
24
- const chain = ensureUnsharedPath(deps.doc, absPath, deps.sharing);
25
- // Read before the write: it is the one byte-state no level of the rebuild can capture
26
- // for itself, and the ancestry splice needs it to place the leaf's own region.
27
- const leafPreviousRaw = chain[chain.length - 1]?.raw;
28
- const written = write(chain, deps.sharing) ?? { op: 'noop' };
29
- // Unconditional: this door exists to carry bytes, and a short chain or a `noop`
30
- // settle says nothing about whether `write` moved any.
31
- deps.bumpContentVersion();
32
- // The write's own settle can splice the scope it wrote in, and a short chain means the
33
- // unshare never reached that scope, so there is nothing to publish against.
34
- if (chain.length === absPath.length) {
35
- publishScopeFold(deps, chain[absPath.length - 2], written);
36
- }
37
- // The ANCESTRY settle's folds — a container's own slot in its PARENT, not the write's
38
- // scope published above. Their unwind is discarded on purpose: nothing rolls back at a
39
- // door that is not a ceremony. Their caret landing (`foldLandingFor`) wants a tick this
40
- // synchronous door has not got, and no producer reaches one.
41
- const folds = [];
42
- const replacements = rebuildUnsharedChain(deps.doc, chain, deps.sharing, folds, deps.grammar, leafPreviousRaw === undefined ? undefined : { path: absPath, leafPreviousRaw });
43
- publishAncestryFolds(deps, folds);
44
- return replacements.length > 0;
45
- },
46
- commitContainer(args) {
47
- return controller.commitContainerStructural(args);
48
- }
13
+ lineEnding: () => documentLineEnding(deps.doc),
14
+ commitContainer: (args) => controller.commitContainerStructural(args),
15
+ typeInLeaf,
16
+ writeLeafInPlace,
17
+ land: (pos) => deps.caretLanding.land(pos),
18
+ survivorAfterRemoval: (removedPath, gesture) => survivorAfterRemoval(deps.doc, removedPath, gesture)
49
19
  };
50
20
  }
@@ -1,16 +1,18 @@
1
1
  /**
2
- * Override factory every plugin-seam container shares: the Enter-on-empty-last-child exit.
3
- * Backspace unwrap (U2) is declaration-driven — the kind's `unwrapRole` selects strategies
4
- * in `unwrap-strategies.ts`.
2
+ * The override every plugin container shares: Enter on an empty last child exits the
3
+ * container. Backspace unwrap comes from the kind's declared `unwrapRole`, which picks a
4
+ * strategy in `unwrap-strategies.ts` (`docs/design/editor.md` § Container unwrap).
5
5
  */
6
6
  import type { BlockEditActions } from '../action-contracts';
7
+ import type { Reading } from '../schema/reading';
7
8
  import type { NestedActionsBundle, NodeScope } from './nested/nested-actions';
8
9
  export interface ContainerExitOverridesDeps {
9
10
  scope: NodeScope;
10
11
  parentBlockEdit: BlockEditActions;
12
+ reading: Reading;
11
13
  }
12
14
  export declare function createContainerExitOverrides(deps: ContainerExitOverridesDeps): (defaults: NestedActionsBundle) => {
13
15
  blockEdit: {
14
- splitBlock: (innerIndex: number, offset: number) => Promise<void>;
16
+ splitBlock: (innerIndex: number, offset: number) => Promise<boolean>;
15
17
  };
16
18
  };
@@ -1,37 +1,35 @@
1
1
  /**
2
- * Override factory every plugin-seam container shares: the Enter-on-empty-last-child exit.
3
- * Backspace unwrap (U2) is declaration-driven — the kind's `unwrapRole` selects strategies
4
- * in `unwrap-strategies.ts`.
2
+ * The override every plugin container shares: Enter on an empty last child exits the
3
+ * container. Backspace unwrap comes from the kind's declared `unwrapRole`, which picks a
4
+ * strategy in `unwrap-strategies.ts` (`docs/design/editor.md` § Container unwrap).
5
5
  */
6
- import { displayLength } from '../core/lines';
6
+ import { displayLength, isBlankText } from '../core/lines';
7
7
  import { buildQuoteExitReplacement } from '../tree-operations/blockquote';
8
8
  export function createContainerExitOverrides(deps) {
9
9
  return (defaults) => ({
10
10
  blockEdit: {
11
- // Enter on an empty trailing paragraph exits the container instead of appending another
12
- // inner line, and MINTS the blank it lands on: Enter is never down-nav, so a block
13
- // below is left alone and a nested container is escaped one level per press.
11
+ // Enter on an empty last paragraph exits onto a new blank paragraph after the container,
12
+ // never into an existing block, so nested containers are escaped one level per Enter.
14
13
  splitBlock: async (innerIndex, offset) => {
15
14
  const { parentBlockEdit } = deps;
16
15
  const { node, index } = deps.scope;
17
16
  if (!node.children)
18
- return;
17
+ return false;
19
18
  const child = node.children[innerIndex];
20
19
  const isLastChild = innerIndex === node.children.length - 1;
21
- const isEmpty = child.kind === 'paragraph' && child.raw.trim() === '';
22
- if (isLastChild && isEmpty) {
23
- if (node.children.length <= 1) {
24
- await parentBlockEdit.splitBlock(index, displayLength(node.raw));
25
- }
26
- else {
27
- await parentBlockEdit.replaceBlock(index, buildQuoteExitReplacement(node), {
28
- replacementIndex: 1,
29
- offset: 0
30
- });
31
- }
32
- return;
20
+ const isEmpty = child.kind === 'paragraph' && isBlankText(child.raw);
21
+ if (!isLastChild || !isEmpty)
22
+ return defaults.blockEdit.splitBlock(innerIndex, offset);
23
+ if (node.children.length <= 1) {
24
+ return parentBlockEdit.splitBlock(index, displayLength(node.raw));
33
25
  }
34
- return defaults.blockEdit.splitBlock(innerIndex, offset);
26
+ return parentBlockEdit.replaceBlock(index, buildQuoteExitReplacement(node, deps.reading.grammar), {
27
+ replacementIndex: 1,
28
+ offset: 0
29
+ },
30
+ // The caret sat in a child leaf, which an offset into the quote can't name; the
31
+ // live read records it.
32
+ { snapshotOffset: 0 });
35
33
  }
36
34
  }
37
35
  });
@@ -1,60 +1,53 @@
1
1
  import type { BlockComponent } from '../block-component';
2
2
  import type { Document } from '../core/nodes';
3
- import type { StickyColumnState } from '../cursor/sticky-column';
4
- import type { EdgeAffinityState } from '../cursor/edge-affinity';
5
- import type { BlockElLookup, PresentationModeGetter } from '../editor-keys';
3
+ import type { CaretMemory } from '../cursor/caret-memory';
4
+ import type { BlockElLookup } from '../editor-keys';
6
5
  import type { SelectionState } from '../selection/selection-state.svelte';
7
6
  import type { UndoEntry, UndoManager } from '../undo/types';
8
7
  import type { SharingState } from '../tree-operations/sharing';
9
8
  import type { EditorEvents } from '../editor-events';
10
9
  import type { CommitController } from '../action-contracts';
11
- import type { GrammarView } from '../schema/block-openers';
12
- import type { InlineResolverRef } from '../schema/inline-construct-policy';
10
+ import type { Reading } from '../schema/reading';
13
11
  import type { RefSlots } from '../reactivity/publish-ref.svelte';
12
+ import type { CaretLanding } from '../selection/caret-landing';
14
13
  export interface EditorActionsDeps {
15
14
  get doc(): Document;
16
15
  get blockIds(): string[];
17
16
  get blockRefs(): (BlockComponent | undefined)[];
18
- /** The top-level scope's slot identity, so the doc-scope adapter reports the same
19
- * scope the editor's own BlockList publishes into. */
17
+ /** The root block list's ref slots, so the document-scope adapter reports the same
18
+ * list the editor's own BlockList writes into. */
20
19
  blockRefSlots: RefSlots<BlockComponent>;
21
20
  setDoc(doc: Document): void;
22
21
  setBlockIds(ids: string[]): void;
23
22
  setBlockRefs(refs: (BlockComponent | undefined)[]): void;
24
- /** Announce that this door moved the document's bytes
25
- * (`reactivity/content-version.svelte.ts`). The ceremony owes one call per commit; the
26
- * writers outside it owe their own, which is the census G4.52 keeps honest. */
23
+ /** Announce that the document's bytes changed. A commit calls it once; a writer outside a
24
+ * commit must call it itself (G4.52). */
27
25
  bumpContentVersion(): void;
28
26
  undoManager: UndoManager;
29
27
  sharing: SharingState;
30
- stickyColumn: StickyColumnState;
31
- edgeAffinity: EdgeAffinityState;
28
+ caretMemory: CaretMemory;
32
29
  selectionState: SelectionState;
33
30
  getBlockElByPath: BlockElLookup;
34
- /** Scroll an off-window top-level block into the render window and await its
35
- * mount, then return its component (null if unreachable). Already-mounted
36
- * targets return synchronously without scrolling. */
37
- revealPath(path: number[]): Promise<BlockComponent | null>;
31
+ /** Where every commit's caret and every restored selection is put down, and the counter an
32
+ * undo, redo or swap bumps. */
33
+ caretLanding: CaretLanding;
38
34
  events: EditorEvents;
39
- /** The instance's block grammar, so a disabled kind's opener stays skipped when
40
- * the editor re-parses an edited block. Absent = the global grammar. */
41
- grammar?: GrammarView;
42
- /** Live EFFECTIVE mode, for the seams that must not act in reading mode. Absent in
43
- * harnesses, which `isReadingMode` reads as not-reading. */
44
- getPresentationMode?: PresentationModeGetter;
45
- /** The instance's link-reference resolver, for the byte rewrites that must parse the reference
46
- * forms the render path drew. Absent in harnesses, which have no definitions to resolve. */
47
- linkRef?: InlineResolverRef;
35
+ /** How the editor reads its bytes: a re-parse or completer reads only the syntax it switched
36
+ * on, a rewrite parses the reference links the renderer drew, a write refuses reading mode. */
37
+ reading: Reading;
48
38
  }
49
39
  /**
50
- * The history-typed members added to the contracts-leaf `CommitController`. They stay here so
51
- * that leaf keeps no edge to `undo/`.
40
+ * `CommitController` plus the members typed against `undo/`. They live here so
41
+ * `action-contracts` keeps no import from `undo/`.
52
42
  */
53
43
  export interface UndoController extends CommitController {
44
+ /** Call a keystroke's commit into the undo entry its typing batch already holds, so a key that
45
+ * reparses into several blocks undoes with the typing around it. Covers the call only. */
46
+ joinTypingBatch<T>(write: () => T): T;
54
47
  captureCurrentState(): UndoEntry;
55
- /** Monotonic stamp of the last history swap. A caret landing captures it before its
56
- * reveal and declines when it moved: the tree it was aimed at is no longer on screen. */
57
- historyGeneration(): number;
58
- /** Announce a swap. The restore road's own call — nothing else may bump it. */
59
- noteHistorySwap(): void;
48
+ }
49
+ /** The editor root's deps and controller, which a write addressed by document path starts from. */
50
+ export interface EditorRoot {
51
+ deps: EditorActionsDeps;
52
+ controller: UndoController;
60
53
  }