@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,13 +1,17 @@
1
- import { parse } from '../core/parser';
1
+ import { readBlocks } from '../core/parser';
2
2
  import { cloneNode } from '../tree-operations/clone';
3
3
  import { spliceMany } from '../tree-operations/splice-many';
4
4
  import { getBlockKindDescriptor } from '../schema/block-kind-descriptor';
5
- import { normalizeBodyWrite, normalizeReplacementTrivia, writeOwnRaw } from '../tree-operations/node-primitives';
6
- import { rebuildAncestryRaw } from '../schema/container-raw';
5
+ import { installOwnRaw, normalizeReplacementTrivia } from '../tree-operations/node-primitives';
6
+ import { legalizeWrite } from '../tree-operations/content-write';
7
+ import { rebuildContainerRaw } from '../schema/container-raw';
8
+ import { rebuildUnsharedChain } from '../tree-operations/chain-rebuild';
9
+ import { createSharingState } from '../tree-operations/sharing';
7
10
  import { replacePreservingFirst, stampStructuralChange } from '../tree-operations/structural-change';
8
11
  import { applyRangesToText } from '../search/replace';
9
12
  import { toEditEvent } from '../editor-events';
10
13
  import { docPathFrom } from '../cursor/coordinate-spaces';
14
+ import { documentLineEnding } from '../core/lines';
11
15
  function descend(root, rel) {
12
16
  let node = root;
13
17
  for (const i of rel)
@@ -37,29 +41,38 @@ export function createSearchReplace(deps, controller) {
37
41
  const leaf = descend(child, rel);
38
42
  if (!leaf)
39
43
  continue;
40
- // Reparsing a private clone bypasses `updateNodeContent`, so that sink's two byte
41
- // rules — the kind's own raw rule and the owner's bodyWrite escape — apply here.
44
+ // Reparsing a private clone bypasses `updateNodeContent`, so the write rule it runs (the
45
+ // kind's own, then the container's) is applied here.
42
46
  const owner = rel.length > 0 ? descend(child, rel.slice(0, -1)) : null;
43
- const substituted = normalizeBodyWrite(owner?.kind, applyRangesToText(leaf.raw, ranges, template));
44
- writeOwnRaw(leaf, substituted, deps.grammar);
47
+ const target = owner?.children
48
+ ? { children: owner.children, owner, lineEnding: documentLineEnding(deps.doc) }
49
+ : deps.doc;
50
+ const index = owner ? rel[rel.length - 1] : topIndex;
51
+ const substituted = applyRangesToText(leaf.raw, ranges, template);
52
+ installOwnRaw(leaf, legalizeWrite(target, index, substituted, 'literal').text, deps.reading.grammar);
45
53
  }
46
- // A nested leaf's edit must propagate up the clone's materialized container raw
47
- // before the reparse from `child.raw`; a top-level leaf needs none.
54
+ // Before the reparse from `child.raw`, a nested leaf's edit is written up into the clone's
55
+ // container raws by the same rebuild typing uses; a top-level leaf needs none.
56
+ const cloneSharing = createSharingState();
48
57
  for (const ranges of byLeaf.values()) {
49
58
  const rel = ranges[0].path.slice(1);
50
- if (rel.length > 0)
51
- rebuildAncestryRaw(child, rel);
59
+ if (rel.length === 0)
60
+ continue;
61
+ const chain = [];
62
+ for (let depth = 1; depth < rel.length; depth++)
63
+ chain.push(descend(child, rel.slice(0, depth)));
64
+ rebuildUnsharedChain(child, chain, cloneSharing, null, deps.reading.grammar);
65
+ rebuildContainerRaw(child, deps.reading.grammar);
52
66
  }
53
- const newNodes = parse(child.raw, { grammar: deps.grammar, scope: 'fragment' }).children;
67
+ const newNodes = readBlocks(child.raw, {
68
+ grammar: deps.reading.grammar,
69
+ scope: 'fragment'
70
+ }).children;
54
71
  // leadingTrivia is positional and lives off `raw`, so parsing `child.raw` alone drops it.
55
72
  return normalizeReplacementTrivia(child, newNodes);
56
73
  }
57
- /**
58
- * A match can land on a container node itself. A CHILDLESS one scanned as a leaf, and this
59
- * path reparses rather than writing in place — so the kind re-derives its own metadata from
60
- * the substituted bytes and nothing goes stale. One with children is excluded: its raw is a
61
- * rebuild of theirs, and substituting into it would drift (G1.12/G1.13).
62
- */
74
+ /** A childless container matched as a leaf is reparsed, so its metadata follows the new bytes;
75
+ * one with children is excluded, as its raw is rebuilt from theirs. */
63
76
  function isReplaceable(match) {
64
77
  const top = deps.doc.children[match.path[0]];
65
78
  const node = top ? descend(top, match.path.slice(1)) : null;
@@ -67,15 +80,11 @@ export function createSearchReplace(deps, controller) {
67
80
  return false;
68
81
  return !getBlockKindDescriptor(node.kind).isContainer || (node.children?.length ?? 0) === 0;
69
82
  }
70
- /**
71
- * The one hazard the reparse cannot absorb: a substitution that breaks a container's opener
72
- * line comes back as a different kind entirely — a diagram silently becoming a plain code
73
- * block. Accepted for leaves, declined here.
74
- */
83
+ /** A substitution that breaks a container's opener line reparses as another kind (a diagram
84
+ * becoming a code block). Leaves accept that; a container's replace is declined. */
75
85
  function keepsItsKind(before, after) {
76
- // Only where the substitution wrote the container's OWN raw — a childless one, scanned as a
77
- // leaf. One with children had a CHILD edited, and re-kinding there is the ordinary
78
- // structural replace every leaf already gets.
86
+ // Only a childless container had its own raw substituted; in one with children a child
87
+ // was edited, and a kind change there is the ordinary structural replace.
79
88
  const childless = (before.children?.length ?? 0) === 0;
80
89
  if (!childless || !getBlockKindDescriptor(before.kind).isContainer)
81
90
  return true;
@@ -88,52 +97,47 @@ export function createSearchReplace(deps, controller) {
88
97
  if (indices.length === 0)
89
98
  return 0;
90
99
  const seed = groups.get(indices[indices.length - 1])[0];
91
- // One pushed snapshot + per-subtree skip-commits = one undo entry, so a throw
92
- // mid-batch still recovers in one Ctrl+Z. Intentional.
93
- // The push happens outside the commit ceremony, so its rollback register is ours too: a
94
- // batch whose FIRST subtree throws applies nothing and must leave no entry behind, or the
95
- // next Ctrl+Z spends itself restoring the document to where it already is.
96
- const stacksBeforePush = deps.undoManager.getStacks();
97
- controller.pushUndoSnapshotPath(seed.path, seed.start);
98
100
  let newBlockCount = 0;
99
101
  let applied = 0;
100
- for (const topIndex of indices) {
101
- const group = groups.get(topIndex);
102
- let newNodes;
103
- try {
104
- newNodes = buildSubtree(topIndex, group, template);
105
- }
106
- catch (error) {
107
- // buildSubtree dispatches into the kind's `rebuildRaw` — plugin code running
108
- // outside every commit ceremony, so nothing else would attribute this.
109
- deps.events.emit('error', {
110
- origin: 'commit',
111
- error,
112
- context: { op: 'replaceBlock', path: docPathFrom([topIndex]) }
102
+ // One entry for the whole batch, and none when it applies nothing.
103
+ await controller.undoStep({ path: docPathFrom(seed.path), offset: seed.start }, async () => {
104
+ for (const topIndex of indices) {
105
+ const group = groups.get(topIndex);
106
+ let newNodes;
107
+ try {
108
+ newNodes = buildSubtree(topIndex, group, template);
109
+ }
110
+ catch (error) {
111
+ // buildSubtree calls the kind's `rebuildRaw`, plugin code running outside any
112
+ // commit, so nothing else would report this error.
113
+ deps.events.emit('error', {
114
+ origin: 'commit',
115
+ error,
116
+ context: { op: 'replaceBlock', path: docPathFrom([topIndex]) }
117
+ });
118
+ break;
119
+ }
120
+ if (!keepsItsKind(deps.doc.children[topIndex], newNodes))
121
+ continue;
122
+ const wrote = await controller.commitStructural({
123
+ snapshot: { path: docPathFrom([topIndex]), offset: 0 },
124
+ mutate: (children) => {
125
+ spliceMany(children, topIndex, 1, newNodes);
126
+ const change = replacePreservingFirst(topIndex, 1, newNodes.length);
127
+ stampStructuralChange(children, change, deps.sharing);
128
+ return change;
129
+ }
130
+ // op omitted: no per-commit edit event; one is emitted after the batch
113
131
  });
114
- break;
132
+ if (!wrote)
133
+ continue;
134
+ newBlockCount += newNodes.length;
135
+ applied += group.length;
115
136
  }
116
- if (!keepsItsKind(deps.doc.children[topIndex], newNodes))
117
- continue;
118
- newBlockCount += newNodes.length;
119
- applied += group.length;
120
- await controller.commitStructural({
121
- snapshot: 'skip', // batch shares the single snapshot pushed above
122
- mutate: (children) => {
123
- spliceMany(children, topIndex, 1, newNodes);
124
- const change = replacePreservingFirst(topIndex, 1, newNodes.length);
125
- stampStructuralChange(children, change, deps.sharing);
126
- return change;
127
- }
128
- // op omitted → no per-commit edit event; one is emitted after the batch
129
- });
130
- }
131
- if (applied === 0) {
132
- deps.undoManager.restoreStacks(stacksBeforePush);
137
+ });
138
+ if (applied === 0)
133
139
  return 0;
134
- }
135
- // A single-subtree replace has one operated node, so the aggregate event carries
136
- // its doc-absolute path (editor.md §12); a multi-subtree batch genuinely has none.
140
+ // A single-subtree replace names its block's path in the event; a multi-subtree batch has none.
137
141
  const eventPath = indices.length === 1 ? docPathFrom([indices[0]]) : [];
138
142
  deps.events.emit('edit', toEditEvent({ kind: 'replaceBlock', detail: { count: newBlockCount } }, eventPath, Date.now()));
139
143
  return applied;
@@ -0,0 +1,7 @@
1
+ /** Builds the value every `updateBlockContent` returns: the write's promise, carrying its caret. */
2
+ import type { AdmittedContentWrite, ContentWrite } from '../action-contracts';
3
+ /** An admitted write. `storedOffset` defaults to the identity, right for a write no rule rewrites;
4
+ * `keepsCaret` is false when the write places the caret itself. */
5
+ export declare function withStoredCaret(done: Promise<boolean>, caret: number, storedOffset?: (offset: number) => number, keepsCaret?: boolean): Promise<boolean> & AdmittedContentWrite;
6
+ /** A write the reading-mode check refused, or one with no block to write: no bytes, no caret. */
7
+ export declare function refusedWrite(): ContentWrite;
@@ -0,0 +1,10 @@
1
+ /** Builds the value every `updateBlockContent` returns: the write's promise, carrying its caret. */
2
+ /** An admitted write. `storedOffset` defaults to the identity, right for a write no rule rewrites;
3
+ * `keepsCaret` is false when the write places the caret itself. */
4
+ export function withStoredCaret(done, caret, storedOffset = (offset) => offset, keepsCaret = true) {
5
+ return Object.assign(done, { admitted: true, caret, storedOffset, keepsCaret });
6
+ }
7
+ /** A write the reading-mode check refused, or one with no block to write: no bytes, no caret. */
8
+ export function refusedWrite() {
9
+ return Object.assign(Promise.resolve(false), { admitted: false });
10
+ }
@@ -1,16 +1,16 @@
1
1
  /**
2
- * The TableContext mutation bundle. The component keeps sticky-column state,
3
- * focused-cell tracking, DOM helpers, and BlockComponent — only structural mutations
4
- * live here.
2
+ * The TableContext edits. The component keeps the sticky column, the focused cell, DOM
3
+ * helpers and BlockComponent; only structural edits live here, each handing its commit the cell
4
+ * the caret goes to.
5
5
  */
6
- import type { CellPosition, ContainerEditActions, TableContext } from '../action-contracts';
7
- import type { GrammarView } from '../schema/block-openers';
6
+ import type { ContainerEditActions, TableContext } from '../action-contracts';
7
+ import type { Reading } from '../schema/reading';
8
8
  import type { NodeView } from '../core/node-views';
9
9
  import type { UndoController } from './deps';
10
10
  import type { BlockListState } from '../reactivity/block-list-state.svelte';
11
11
  /**
12
- * The header (row 0) is positionally fixed. Null skips the commit, so a boundary
13
- * press pushes no undo entry.
12
+ * The header (row 0) stays where it is. Null skips the commit, so a keypress at the edge
13
+ * pushes no undo entry.
14
14
  */
15
15
  export declare function tableRowReorderTarget(rowIdx: number, dir: -1 | 1, rowCount: number): number | null;
16
16
  /**
@@ -28,10 +28,8 @@ export interface TableMutationsContextDeps {
28
28
  } | null;
29
29
  parentContainerEdit: ContainerEditActions;
30
30
  controller: UndoController;
31
- focusCell: (rowIdx: number, colIdx: number, position: CellPosition) => void;
32
- announceReorder: (message: string) => void;
33
- /** The instance grammar the cell byte-write door threads (absent: the global one). */
34
- grammar?: GrammarView;
31
+ /** The editor's reading, whose grammar the cell writes use. */
32
+ reading: Reading;
35
33
  }
36
34
  export type TableMutationsContext = Pick<TableContext, 'insertRowAbove' | 'insertRowBelow' | 'insertColumnLeft' | 'insertColumnRight' | 'deleteRow' | 'deleteColumn' | 'reorderRowTo' | 'moveRowUp' | 'moveRowDown' | 'reorderColumnTo' | 'moveColumnLeft' | 'moveColumnRight' | 'cycleAlignment' | 'setColumnAlignment' | 'pasteGrid'>;
37
35
  export declare function createTableMutationsContext(deps: TableMutationsContextDeps): TableMutationsContext;
@@ -1,21 +1,21 @@
1
1
  /**
2
- * The TableContext mutation bundle. The component keeps sticky-column state,
3
- * focused-cell tracking, DOM helpers, and BlockComponent — only structural mutations
4
- * live here.
2
+ * The TableContext edits. The component keeps the sticky column, the focused cell, DOM
3
+ * helpers and BlockComponent; only structural edits live here, each handing its commit the cell
4
+ * the caret goes to.
5
5
  */
6
+ import { CURSOR_END, CURSOR_START } from '../block-component';
6
7
  import { metadataOf } from '../core/nodes';
7
8
  import { extendDocPath, docPathFrom } from '../cursor/coordinate-spaces';
8
9
  import { getStateForNode } from '../reactivity/state-registry';
9
10
  import { assertInvariant } from '../assert';
10
11
  import { columnAligned, COLUMN_ALIGNMENT_CLEARED, DELETED_COLUMN, DELETED_ROW, INSERTED_COLUMN, INSERTED_ROW, movedColumnToPosition, movedRowToPosition } from '../a11y-strings';
11
12
  import { ensureUnsharedChildren, ensureUnsharedSubtree } from '../tree-operations/unshare';
12
- import { rebuildTableRowRaw, rebuildTableRaw } from '../schema/container-rebuilders';
13
13
  import { writeOwnRaw } from '../tree-operations/node-primitives';
14
14
  import { reorderChildren } from '../tree-operations/reorder';
15
15
  import { insertEmptyRow, insertEmptyColumn, deleteRow as mutDeleteRow, deleteColumn as mutDeleteColumn, moveColumn as mutMoveColumn, cycleAlignment as mutCycleAlignment, setAlignment as mutSetAlignment, canDeleteRow, canDeleteColumn } from '../tree-operations/table-mutations';
16
16
  /**
17
- * The header (row 0) is positionally fixed. Null skips the commit, so a boundary
18
- * press pushes no undo entry.
17
+ * The header (row 0) stays where it is. Null skips the commit, so a keypress at the edge
18
+ * pushes no undo entry.
19
19
  */
20
20
  export function tableRowReorderTarget(rowIdx, dir, rowCount) {
21
21
  if (rowIdx === 0)
@@ -36,8 +36,13 @@ export function tableColumnReorderTarget(colIdx, dir, colCount) {
36
36
  return to;
37
37
  }
38
38
  export function createTableMutationsContext(deps) {
39
+ /** The cell at `rowIdx`, `colIdx`, addressed by path so the landing can mount a windowed row. */
40
+ const cellAt = (rowIdx, colIdx, offset = CURSOR_START) => ({
41
+ path: docPathFrom([...deps.myPath, rowIdx, colIdx]),
42
+ offset
43
+ });
39
44
  async function insertRow(rowIdx, side) {
40
- const { node, myPath, rowsState, parentContainerEdit, focusCell } = deps;
45
+ const { node, myPath, rowsState, parentContainerEdit } = deps;
41
46
  const insertAt = side === 'above' ? rowIdx : rowIdx + 1;
42
47
  await parentContainerEdit.commitContainer({
43
48
  containerNode: node,
@@ -47,7 +52,6 @@ export function createTableMutationsContext(deps) {
47
52
  mutate: (scope) => {
48
53
  insertEmptyRow(scope.node, rowIdx, side);
49
54
  scope.sharing.stamp(scope.children[insertAt]);
50
- rebuildTableRowRaw(scope.children[insertAt]);
51
55
  return { op: 'insert', at: insertAt, count: 1 };
52
56
  },
53
57
  op: {
@@ -55,17 +59,12 @@ export function createTableMutationsContext(deps) {
55
59
  detail: { rowIdx, side },
56
60
  eventPath: extendDocPath(myPath, insertAt)
57
61
  },
58
- afterTick: () => {
59
- focusCell(insertAt, 0, 'start');
60
- deps.announceReorder(INSERTED_ROW);
61
- }
62
+ landing: () => cellAt(insertAt, 0),
63
+ announce: () => INSERTED_ROW
62
64
  });
63
65
  }
64
- /**
65
- * The table scope plus one per MOUNTED row: a row's BlockListState registers on
66
- * mount, so scoping a windowed-out row throws and takes the gesture with it. The
67
- * bytes still reach every row, through the table scope.
68
- */
66
+ /** The table scope plus one per mounted row: an unmounted row has no registered state and
67
+ * would throw, and the table scope carries the bytes to every row anyway. */
69
68
  function mountedColumnScopes() {
70
69
  const { node, myPath, rowsState } = deps;
71
70
  const scopes = [{ node, state: rowsState, path: [...myPath] }];
@@ -84,33 +83,33 @@ export function createTableMutationsContext(deps) {
84
83
  const { scopes, rowIndices } = mountedColumnScopes();
85
84
  await controller.commitMultiScope({
86
85
  scopes,
87
- // Columns aren't nodes: the table itself is the restore coordinate.
86
+ // Columns are not nodes: undo restores to the table itself.
88
87
  snapshot: { path: docPathFrom(myPath), offset: 0 },
89
88
  mutate: ([tableScope, ...rowScopes]) => {
90
- // Reaches the windowed-out rows the scopes skip, so the per-row cell splice
91
- // below never writes through a snapshot-shared row (G1.9).
89
+ // Reaches the unmounted rows the scopes skip, so the per-row cell splice below
90
+ // never writes through a row an undo snapshot shares (G1.9).
92
91
  ensureUnsharedChildren(tableScope.node, tableScope.sharing);
93
- // The splice walks the owned table's rows, so the row scopes' ids/refs only
94
- // sync correctly while each row view IS the child at the index it covers.
92
+ // The splice walks the copied table's rows, so the row scopes' ids and refs only
93
+ // sync correctly while each row view is the child at the index it covers.
95
94
  assertInvariant('column-scope-alignment', () => rowScopes.every((s, i) => s.node === tableScope.node.children?.[rowIndices[i]])
96
95
  ? null
97
96
  : {
98
97
  code: 'column-scope-alignment',
99
98
  message: 'commitColumnEdit: row scopes misaligned with owned table children'
100
99
  });
101
- // One change per row, in row order — pair the mounted rows with theirs.
100
+ // One change per row, in row order; pair the mounted rows with theirs.
102
101
  const perRow = opts.mutateColumns(tableScope.node);
103
102
  return [{ op: 'noop' }, ...rowIndices.map((i) => perRow[i])];
104
103
  },
105
104
  op: { ...opts.op, eventPath: docPathFrom(myPath) },
106
- afterTick: opts.afterTick
105
+ landing: opts.landing,
106
+ announce: opts.announce
107
107
  });
108
108
  }
109
- // Grown at the bottom and the right only, so each scope's change is one contiguous insert:
110
- // rows for the table, cells for every mounted row. Cell texts go through the cell kind's own
111
- // raw rule in place, and the table raw is rebuilt once, delimiter line included.
109
+ // The table grows only at the bottom and right, so each scope's change is one contiguous
110
+ // insert; cell texts take the cell kind's raw rule in place, and the commit rebuilds the table.
112
111
  async function pasteGrid(origin, grid) {
113
- const { myPath, controller, focusCell } = deps;
112
+ const { myPath, controller } = deps;
114
113
  const rows = grid.length;
115
114
  let cols = 0;
116
115
  for (const line of grid)
@@ -122,9 +121,8 @@ export function createTableMutationsContext(deps) {
122
121
  scopes,
123
122
  snapshot: { path: docPathFrom(myPath), offset: 0 },
124
123
  mutate: ([tableScope, ...rowScopes]) => {
125
- // Subtree, not children: the cell writes below land at depth two, and a row's
126
- // cells stay shared with the undo snapshot when only the rows are unshared —
127
- // the write would go through it and undo would restore the pasted bytes.
124
+ // The subtree, not just the children: cell writes land at depth two, and cells still
125
+ // shared with the undo snapshot would carry the paste into it.
128
126
  ensureUnsharedSubtree(tableScope.node, tableScope.sharing);
129
127
  assertInvariant('column-scope-alignment', () => rowScopes.every((s, i) => s.node === tableScope.node.children?.[rowIndices[i]])
130
128
  ? null
@@ -143,9 +141,8 @@ export function createTableMutationsContext(deps) {
143
141
  insertEmptyColumn(table, c - 1, 'right');
144
142
  grid.forEach((line, r) => {
145
143
  const cells = table.children[origin.rowIdx + r].children;
146
- line.forEach((text, c) => writeOwnRaw(cells[origin.colIdx + c], text, deps.grammar));
144
+ line.forEach((text, c) => writeOwnRaw(cells[origin.colIdx + c], text, tableScope.lineEnding, deps.reading.grammar));
147
145
  });
148
- rebuildTableRaw(table);
149
146
  const addedRows = needRows - oldRows;
150
147
  const addedCols = needCols - oldCols;
151
148
  const tableChange = addedRows > 0 ? { op: 'insert', at: oldRows, count: addedRows } : { op: 'noop' };
@@ -157,52 +154,40 @@ export function createTableMutationsContext(deps) {
157
154
  detail: { rowIdx: origin.rowIdx, colIdx: origin.colIdx, rows, cols },
158
155
  eventPath: docPathFrom(myPath)
159
156
  },
160
- afterTick: () => focusCell(origin.rowIdx + rows - 1, origin.colIdx + cols - 1, 'end')
157
+ landing: () => cellAt(origin.rowIdx + rows - 1, origin.colIdx + cols - 1, CURSOR_END)
161
158
  });
162
159
  }
163
160
  async function insertColumn(colIdx, side) {
164
- const { focusCell, focusedCell } = deps;
161
+ const { focusedCell } = deps;
165
162
  const insertAt = side === 'left' ? colIdx : colIdx + 1;
166
163
  await commitColumnEdit({
167
164
  mutateColumns: (table) => insertEmptyColumn(table, colIdx, side),
168
165
  op: { kind: 'tableInsertColumn', detail: { colIdx, side } },
169
- afterTick: () => {
170
- const targetRow = focusedCell?.rowIdx ?? 0;
171
- focusCell(targetRow, insertAt, 'start');
172
- deps.announceReorder(INSERTED_COLUMN);
173
- }
166
+ landing: () => cellAt(focusedCell?.rowIdx ?? 0, insertAt),
167
+ announce: () => INSERTED_COLUMN
174
168
  });
175
169
  }
176
170
  async function reorderRowTo(from, to) {
177
171
  if (from === to)
178
172
  return;
179
- const { node, myPath, rowsState, parentContainerEdit, focusCell, focusedCell } = deps;
173
+ const { node, myPath, rowsState, parentContainerEdit, focusedCell } = deps;
180
174
  const rowCount = node.children?.length ?? 0;
181
- // Guard the SOURCE against the live count: a keyboard/menu/drag commit can carry
182
- // a `from` staled by a concurrent structural edit. `to` is already clamped.
175
+ // Check the source against the live count: a keyboard, menu or drag commit can carry a
176
+ // `from` made stale by a concurrent structural edit. `to` is already clamped.
183
177
  if (from < 0 || from >= rowCount)
184
178
  return;
185
- // focusout nulls focusedCell on the post-commit re-render, so capture the column
186
- // now; the afterTick would otherwise land at column 0.
179
+ // focusout nulls focusedCell on the re-render after the commit, so read the column
180
+ // now; the landing would otherwise go to column 0.
187
181
  const col = focusedCell?.colIdx ?? 0;
188
182
  await parentContainerEdit.commitContainer({
189
183
  containerNode: node,
190
184
  path: [...myPath],
191
185
  state: rowsState,
192
186
  snapshot: { path: extendDocPath(myPath, from), offset: 0 },
193
- mutate: (scope) => {
194
- // rebuildTableRaw rewrites EVERY row's raw, so the rows must be unshared
195
- // first — reorderChildren only permutes references.
196
- ensureUnsharedChildren(scope.node, scope.sharing);
197
- const change = reorderChildren(scope.node.children, from, to);
198
- rebuildTableRaw(scope.node);
199
- return change;
200
- },
187
+ mutate: (scope) => reorderChildren(scope.node.children, from, to),
201
188
  op: { kind: 'tableReorderRow', detail: { from, to }, eventPath: extendDocPath(myPath, to) },
202
- afterTick: () => {
203
- focusCell(to, col, 'start');
204
- deps.announceReorder(movedRowToPosition(to, rowCount - 1));
205
- }
189
+ landing: () => cellAt(to, col),
190
+ announce: () => movedRowToPosition(to, rowCount - 1)
206
191
  });
207
192
  }
208
193
  async function moveRow(rowIdx, dir) {
@@ -215,21 +200,19 @@ export function createTableMutationsContext(deps) {
215
200
  async function reorderColumnTo(from, to) {
216
201
  if (from === to)
217
202
  return;
218
- const { node, focusCell, focusedCell } = deps;
203
+ const { node, focusedCell } = deps;
219
204
  const columnCount = metadataOf(node, 'table').columnCount;
220
- // Guard the SOURCE against the live count — see reorderRowTo.
205
+ // Check the source against the live count, as reorderRowTo does.
221
206
  if (from < 0 || from >= columnCount)
222
207
  return;
223
- // focusout nulls focusedCell on the post-commit re-render, so capture the row
224
- // now; the afterTick would otherwise land at row 0.
208
+ // focusout nulls focusedCell on the re-render after the commit, so read the row now;
209
+ // the landing would otherwise go to row 0.
225
210
  const row = focusedCell?.rowIdx ?? 0;
226
211
  await commitColumnEdit({
227
212
  mutateColumns: (table) => mutMoveColumn(table, from, to),
228
213
  op: { kind: 'tableReorderColumn', detail: { from, to } },
229
- afterTick: () => {
230
- focusCell(row, to, 'start');
231
- deps.announceReorder(movedColumnToPosition(to + 1, columnCount));
232
- }
214
+ landing: () => cellAt(row, to),
215
+ announce: () => movedColumnToPosition(to + 1, columnCount)
233
216
  });
234
217
  }
235
218
  async function moveColumn(colIdx, dir) {
@@ -252,7 +235,7 @@ export function createTableMutationsContext(deps) {
252
235
  moveColumnLeft: (colIdx) => moveColumn(colIdx, -1),
253
236
  moveColumnRight: (colIdx) => moveColumn(colIdx, 1),
254
237
  async deleteRow(rowIdx) {
255
- const { node, myPath, rowsState, parentContainerEdit, focusCell, focusedCell } = deps;
238
+ const { node, myPath, rowsState, parentContainerEdit, focusedCell } = deps;
256
239
  if (!canDeleteRow(rowIdx, node.children?.length ?? 0))
257
240
  return;
258
241
  await parentContainerEdit.commitContainer({
@@ -261,8 +244,6 @@ export function createTableMutationsContext(deps) {
261
244
  state: rowsState,
262
245
  snapshot: { path: extendDocPath(myPath, rowIdx), offset: 0 },
263
246
  mutate: (scope) => {
264
- // deleteRow promotes the next row to header (a metadata write).
265
- ensureUnsharedChildren(scope.node, scope.sharing);
266
247
  mutDeleteRow(scope.node, rowIdx);
267
248
  return { op: 'delete', at: rowIdx, count: 1 };
268
249
  },
@@ -271,44 +252,42 @@ export function createTableMutationsContext(deps) {
271
252
  detail: { rowIdx },
272
253
  eventPath: extendDocPath(myPath, rowIdx)
273
254
  },
274
- afterTick: () => {
275
- deps.announceReorder(DELETED_ROW);
276
- // Read through `deps.node`: the captured `node` is the pre-commit object
277
- // the snapshot still shares, so its child count is stale after the delete.
255
+ announce: () => DELETED_ROW,
256
+ landing: () => {
257
+ // Read through `deps.node`: the `node` read above is the pre-commit object the
258
+ // undo snapshot still shares, so its child count is stale after the delete.
278
259
  const newRowCount = deps.node.children?.length ?? 0;
279
260
  if (newRowCount === 0)
280
- return;
261
+ return null;
281
262
  const columnCount = metadataOf(deps.node, 'table').columnCount;
282
263
  const targetRow = Math.min(rowIdx, newRowCount - 1);
283
264
  const targetCol = focusedCell ? Math.min(focusedCell.colIdx, columnCount - 1) : 0;
284
- focusCell(targetRow, targetCol, 'start');
265
+ return cellAt(targetRow, targetCol);
285
266
  }
286
267
  });
287
268
  },
288
269
  async deleteColumn(colIdx) {
289
- const { node, focusCell, focusedCell } = deps;
270
+ const { node, focusedCell } = deps;
290
271
  const meta = metadataOf(node, 'table');
291
272
  if (!canDeleteColumn(meta.columnCount))
292
273
  return;
293
274
  await commitColumnEdit({
294
275
  mutateColumns: (table) => mutDeleteColumn(table, colIdx),
295
276
  op: { kind: 'tableDeleteColumn', detail: { colIdx } },
296
- afterTick: () => {
297
- deps.announceReorder(DELETED_COLUMN);
298
- // deps.node, not the stale pre-commit capture — see deleteRow.
277
+ announce: () => DELETED_COLUMN,
278
+ landing: () => {
279
+ // deps.node, not the stale pre-commit object, as in deleteRow.
299
280
  const newColumnCount = metadataOf(deps.node, 'table').columnCount;
300
281
  if (newColumnCount === 0)
301
- return;
302
- const targetCol = Math.min(colIdx, newColumnCount - 1);
303
- const targetRow = focusedCell?.rowIdx ?? 0;
304
- focusCell(targetRow, targetCol, 'start');
282
+ return null;
283
+ return cellAt(focusedCell?.rowIdx ?? 0, Math.min(colIdx, newColumnCount - 1));
305
284
  }
306
285
  });
307
286
  },
308
287
  async cycleAlignment(colIdx) {
309
288
  const { node, myPath, rowsState, parentContainerEdit } = deps;
310
- // Distinct OperationKind so consumers can count alignment cycles apart from
311
- // metadata edits. The event targets the TABLE: a column index is not a path.
289
+ // A distinct OperationKind so consumers can count alignment cycles apart from
290
+ // metadata edits. The event targets the table: a column index is not a path.
312
291
  await parentContainerEdit.commitContainer({
313
292
  containerNode: node,
314
293
  path: [...myPath],
@@ -322,12 +301,12 @@ export function createTableMutationsContext(deps) {
322
301
  });
323
302
  },
324
303
  async setColumnAlignment(colIdx, alignment) {
325
- const { node, myPath, rowsState, parentContainerEdit, focusCell, focusedCell } = deps;
326
- // Capture before the menu's focusout nulls it: the alignment button unmounts
327
- // on commit, so without a refocus the caret falls to <body>.
304
+ const { node, myPath, rowsState, parentContainerEdit, focusedCell } = deps;
305
+ // Read before the menu's focusout nulls it: the alignment button unmounts on
306
+ // commit, so without a landing the caret falls to <body>.
328
307
  const cell = focusedCell;
329
- // Commits unconditionally: the first table mutation also normalizes cell
330
- // padding, so a same-value set is not a byte no-op.
308
+ // Commits unconditionally: the first table edit also normalizes cell padding, so
309
+ // setting the same value is not a byte no-op.
331
310
  await parentContainerEdit.commitContainer({
332
311
  containerNode: node,
333
312
  path: [...myPath],
@@ -338,10 +317,8 @@ export function createTableMutationsContext(deps) {
338
317
  return { op: 'noop' };
339
318
  },
340
319
  op: { kind: 'tableSetAlignment', detail: { colIdx }, eventPath: docPathFrom(myPath) },
341
- afterTick: () => {
342
- focusCell(cell?.rowIdx ?? 0, colIdx, 'start');
343
- deps.announceReorder(alignment === 'none' ? COLUMN_ALIGNMENT_CLEARED : columnAligned(alignment));
344
- }
320
+ landing: () => cellAt(cell?.rowIdx ?? 0, colIdx),
321
+ announce: () => (alignment === 'none' ? COLUMN_ALIGNMENT_CLEARED : columnAligned(alignment))
345
322
  });
346
323
  }
347
324
  };
@@ -1,7 +1,6 @@
1
1
  /**
2
- * Unwrap strategy implementations, selected by a container's declared
3
- * `unwrapRole` (schema/block-kind-descriptor.ts) from the nested blockEdit
4
- * dispatcher.
2
+ * The Backspace unwrap strategies a container's declared `unwrapRole` selects, run from the
3
+ * container's blockEdit (`docs/design/editor.md` § Container unwrap).
5
4
  */
6
5
  import type { UnwrapRole } from '../schema/block-kind-descriptor';
7
6
  import type { BlockListState } from '../reactivity/block-list-state.svelte';
@@ -10,5 +9,5 @@ export interface UnwrapStrategyDeps {
10
9
  deps: NestedActionsDeps;
11
10
  state: BlockListState;
12
11
  }
13
- export declare const firstChildUnwrapStrategies: Record<UnwrapRole['firstChildBackspace'], (deps: UnwrapStrategyDeps) => Promise<void>>;
14
- export declare const middleChildUnwrapStrategies: Record<'list-item-cascade', (deps: UnwrapStrategyDeps, innerIndex: number) => Promise<void>>;
12
+ export declare const firstChildUnwrapStrategies: Record<UnwrapRole['firstChildBackspace'], (deps: UnwrapStrategyDeps) => Promise<boolean>>;
13
+ export declare const middleChildUnwrapStrategies: Record<'list-item-cascade', (deps: UnwrapStrategyDeps, innerIndex: number) => Promise<boolean>>;