@voithos-labs/aragonite 0.10.3 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +12 -5
  3. package/dist/a11y-strings.js +61 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +13 -20
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +619 -1089
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +36 -67
  26. package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +35 -28
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +58 -32
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +144 -202
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +46 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
  102. package/dist/components/blocks/text/click-snap-guard.js +16 -5
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -105
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +243 -208
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +13 -30
  144. package/dist/components/drag-handle.js +25 -63
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -31
  162. package/dist/components/editor-root-listeners.js +49 -46
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +26 -30
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +380 -0
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +55 -68
  256. package/dist/core/inline/inline-widgets.js +55 -58
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +33 -17
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -7
  347. package/dist/cursor/height-oracle.js +26 -75
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +16 -8
  365. package/dist/cursor/scrollport.js +28 -5
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -13
  375. package/dist/cursor/visual-lines.js +72 -28
  376. package/dist/cursor/widget-edge-snap.d.ts +23 -0
  377. package/dist/cursor/widget-edge-snap.js +39 -0
  378. package/dist/cursor/widget-offset.d.ts +111 -102
  379. package/dist/cursor/widget-offset.js +352 -177
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +31 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +33 -52
  434. package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
  435. package/dist/editor-actions/focus/focus-landing.js +29 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +55 -76
  465. package/dist/editor-actions/plugin/container.js +105 -186
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +91 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +38 -8
  550. package/dist/plugin.js +102 -74
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +113 -85
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -75
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +143 -292
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +79 -81
  695. package/dist/schema/commands.js +156 -116
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +9 -11
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +73 -78
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +93 -152
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +61 -104
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +53 -146
  807. package/dist/selection/dead-space-caret.d.ts +20 -28
  808. package/dist/selection/dead-space-caret.js +79 -87
  809. package/dist/selection/drag-pointer.d.ts +22 -5
  810. package/dist/selection/drag-pointer.js +63 -31
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -39
  816. package/dist/selection/keyboard-extend.js +94 -116
  817. package/dist/selection/multi-click.d.ts +37 -0
  818. package/dist/selection/multi-click.js +197 -0
  819. package/dist/selection/native-bridge.d.ts +30 -37
  820. package/dist/selection/native-bridge.js +80 -100
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +31 -14
  824. package/dist/selection/path-lookup.js +110 -20
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +9 -0
  828. package/dist/selection/pointer-gesture.js +11 -0
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -33
  832. package/dist/selection/primitives.js +61 -53
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -19
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +52 -0
  852. package/dist/selection/selection-drop.js +317 -0
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +75 -53
  864. package/dist/styles/editor.css +248 -139
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
  960. package/dist/tree-operations/paste/replacement-parse.js +24 -0
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +329 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +267 -183
  996. package/docs/guide/plugin-guide.md +341 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +17 -21
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/invariants/split-landing.d.ts +0 -8
  1015. package/dist/invariants/split-landing.js +0 -15
  1016. package/dist/selection/double-click-trim.d.ts +0 -17
  1017. package/dist/selection/double-click-trim.js +0 -57
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
@@ -1,22 +1,25 @@
1
1
  /**
2
- * The ListContext bundle a ListBlock provides to its child ListItemBlocks. Every
3
- * mutation routes through `commitMultiScope`, whose owned scope views are the only
4
- * legal write targets — never the pre-commit `deps.scope.node` captures.
2
+ * The ListContext a ListBlock provides to its child ListItemBlocks. Every edit goes through
3
+ * `commitMultiScope`, whose copied scope views are the only legal write targets, never the
4
+ * `deps.scope.node` read before the commit.
5
5
  */
6
- import { CURSOR_EXACT_START, CURSOR_START, FOCUS_LAST_START } from '../block-component';
6
+ import { CURSOR_EXACT_START, CURSOR_START } from '../block-component';
7
7
  import { metadataOf } from '../core/nodes';
8
- import { trailingLineEnding } from '../core/lines';
9
8
  import { extendDocPath, docPathFrom } from '../cursor/coordinate-spaces';
10
- import { replacePreservingFirst, stampStructuralChange } from '../tree-operations/structural-change';
11
- import { splitNode as performSplit, assertSplitLanding, emptyParagraph } from '../tree-operations';
9
+ import { replacePreservingFirst, stampStructuralChange, trackChildIds } from '../tree-operations/structural-change';
10
+ import { spliceChildren } from '../tree-operations/children';
11
+ import { cascadeCleanupEmptyAncestors } from '../tree-operations/cleanup';
12
+ import { splitNode as performSplit, emptyParagraph } from '../tree-operations';
13
+ import { lastCaretLeaf } from '../selection/path-lookup';
12
14
  import { ensureUnsharedChild } from '../tree-operations/unshare';
13
- import { rebuildListRaw } from '../schema/container-rebuilders';
14
15
  import { renumberOrderedList, normalizeItemMarkerToList, bumpOrderedMarker } from '../tree-operations/list/ordered-markers';
15
16
  import { buildListItem, buildListShell } from '../tree-operations/list/list-builders';
17
+ import { fragmentReaderAt } from '../tree-operations/list/task-paragraph';
16
18
  import { buildExitReplacement } from '../tree-operations/list/exit-replacement';
17
19
  import { settleSublistSeparator } from '../tree-operations/list/sublist-separator';
18
20
  import { expectStateForNode } from '../reactivity/state-registry';
19
- /** The Enter-minted follower: the previous item's marker bumped, its task-ness inherited unchecked. */
21
+ /** The item Enter creates: the previous item's marker bumped, its task checkbox inherited
22
+ * unchecked. */
20
23
  function mintFollowerItem(prevMeta, children) {
21
24
  const inheritTask = prevMeta?.taskItem === true;
22
25
  return buildListItem({
@@ -27,19 +30,24 @@ function mintFollowerItem(prevMeta, children) {
27
30
  }, children);
28
31
  }
29
32
  export function createListContext(deps) {
33
+ /** Item `index` of this list, at `offset`; a container position the landing resolves to a leaf. */
34
+ const itemAt = (index, offset) => ({
35
+ path: extendDocPath(deps.scope.path, index),
36
+ offset
37
+ });
30
38
  return {
31
39
  async indentItem(itemIndex) {
32
40
  const node = deps.scope.node;
33
41
  if (!node.children || itemIndex === 0)
34
- return;
42
+ return false;
35
43
  const prevItem = node.children[itemIndex - 1];
36
44
  if (!prevItem.children)
37
- return;
45
+ return false;
38
46
  const ordered = metadataOf(node, 'list').ordered;
39
47
  const existingNestedIdx = prevItem.children.findIndex((c) => c.kind === 'list' && metadataOf(c, 'list').ordered === ordered);
40
48
  const existingNestedList = existingNestedIdx === -1 ? undefined : prevItem.children[existingNestedIdx];
41
- // One predicate, one destination: a matching sublist adopts the item whether or not it
42
- // holds any yet, so the scope push and the mutate branch cannot disagree about the seat.
49
+ // One test, one destination: a matching sublist adopts the item whether or not it holds
50
+ // any yet, so the scope list and the mutate branch cannot disagree about where it goes.
43
51
  const destination = existingNestedList
44
52
  ? {
45
53
  node: existingNestedList,
@@ -51,34 +59,41 @@ export function createListContext(deps) {
51
59
  state: expectStateForNode(prevItem),
52
60
  path: [...deps.scope.path, itemIndex - 1]
53
61
  };
54
- await deps.controller.commitMultiScope({
62
+ // The moved item's path below this list once it lands in the previous item.
63
+ let movedTo = [];
64
+ return deps.controller.commitMultiScope({
55
65
  scopes: [{ node, state: deps.state, path: deps.scope.path }, destination],
56
66
  snapshot: { path: extendDocPath(deps.scope.path, itemIndex), offset: 0 },
57
67
  mutate: ([outerScope, destScope]) => {
58
68
  const sharing = outerScope.sharing;
59
69
  const [movedItem] = outerScope.children.splice(itemIndex, 1);
60
- let destList;
70
+ const at = destScope.children.length;
71
+ movedTo = existingNestedList
72
+ ? [itemIndex - 1, existingNestedIdx, at]
73
+ : [itemIndex - 1, at, 0];
74
+ // Each branch renumbers the moved item's marker through `sharing`, which copies it first.
61
75
  if (existingNestedList) {
62
- destList = destScope.node;
76
+ const destList = destScope.node;
63
77
  destScope.children.push(movedItem);
64
- // Adopt the destination sublist's marker style, matching paste-absorb.
65
- // A fresh shell (the else branch) has no convention to adopt.
78
+ // Adopt the destination sublist's marker style, as a paste does. A fresh list
79
+ // (the else branch) has no convention to adopt.
66
80
  const moved = ensureUnsharedChild(destList, destScope.children.length - 1, sharing);
67
81
  normalizeItemMarkerToList(moved, destList);
82
+ renumberOrderedList(destList, 0, sharing);
68
83
  }
69
84
  else {
70
85
  const shell = buildListShell(ordered, [movedItem]);
71
86
  sharing.stamp(shell);
72
87
  destScope.children.push(shell);
73
- // Write-then-re-read (tree-operations/unshare.ts): the writes below go
74
- // through the tree-held value, not the shell the proxy has now observed.
75
- destList = destScope.children[destScope.children.length - 1];
88
+ // Write, then read back (tree-operations/unshare.ts): the writes below go
89
+ // through the value in the tree, not the list the proxy has observed.
90
+ const destList = destScope.children[destScope.children.length - 1];
91
+ renumberOrderedList(destList, 0, sharing);
92
+ // A new sublist sits below the commit's chain, which never rebuilds it; the
93
+ // blank-line rule below reads its bytes too.
94
+ destScope.rebuild(destList);
95
+ settleSublistSeparator(destScope.children, destScope.children.length - 1);
76
96
  }
77
- // Renumber writes the moved item's marker — sharing unshares it.
78
- renumberOrderedList(destList, 0, sharing);
79
- rebuildListRaw(destList);
80
- // After the rebuild: the separator question is asked of the sublist's own bytes.
81
- settleSublistSeparator(destScope.children, destScope.children.length - 1);
82
97
  renumberOrderedList(outerScope.node, itemIndex, sharing);
83
98
  return [
84
99
  { op: 'delete', at: itemIndex, count: 1 },
@@ -90,28 +105,35 @@ export function createListContext(deps) {
90
105
  detail: { action: 'indentItem', itemIndex },
91
106
  eventPath: docPathFrom(deps.scope.path)
92
107
  },
93
- afterTick: () => {
94
- deps.state.innerBlockRefs[itemIndex - 1]?.focus(FOCUS_LAST_START);
108
+ // The moved item's last leaf, at its start; the walk runs over this list's own items.
109
+ landing: () => {
110
+ const items = {
111
+ kind: 'document',
112
+ prefix: '',
113
+ children: deps.scope.node.children ?? [],
114
+ suffix: ''
115
+ };
116
+ const leaf = lastCaretLeaf(items, movedTo);
117
+ return leaf && { path: docPathFrom([...deps.scope.path, ...leaf]), offset: CURSOR_START };
95
118
  }
96
119
  });
97
120
  },
98
121
  async unindentItem(itemIndex) {
99
122
  if (!deps.parentListContext || !deps.scope.node.children)
100
- return;
101
- await deps.parentListContext.promoteNestedItem(deps.parentListContext.getContainingItemIndex(), deps.scope.node, itemIndex);
123
+ return false;
124
+ return deps.parentListContext.promoteNestedItem(deps.parentListContext.getContainingItemIndex(), deps.scope.node, itemIndex);
102
125
  },
103
126
  async insertItemAfter(itemIndex, newItem) {
104
127
  const node = deps.scope.node;
105
128
  if (!node.children)
106
- return;
129
+ return false;
107
130
  if (!newItem) {
108
131
  const prevItem = node.children[itemIndex];
109
132
  newItem = mintFollowerItem(prevItem ? metadataOf(prevItem, 'listItem') : undefined,
110
- // The new item's body IS a line ending, so it takes the list's (G4.20);
111
- // rebuildListItemRaw derives the item's raw from it.
112
- [emptyParagraph('', trailingLineEnding(node.raw))]);
133
+ // rebuildListItemRaw derives the item's raw from its body's line ending.
134
+ [emptyParagraph('', deps.getLineEnding())]);
113
135
  }
114
- await deps.controller.commitMultiScope({
136
+ return deps.controller.commitMultiScope({
115
137
  scopes: [{ node, state: deps.state, path: deps.scope.path }],
116
138
  snapshot: { path: docPathFrom(deps.scope.path), offset: 0 },
117
139
  mutate: ([scope]) => {
@@ -126,40 +148,40 @@ export function createListContext(deps) {
126
148
  detail: { itemIndex },
127
149
  eventPath: docPathFrom(deps.scope.path)
128
150
  },
129
- afterTick: () => {
130
- deps.state.innerBlockRefs[itemIndex + 1]?.focus(0);
131
- }
151
+ landing: () => itemAt(itemIndex + 1, 0)
132
152
  });
133
153
  },
134
154
  async splitItemAtOffset(itemIndex, innerIndex, offset) {
135
155
  const outerList = deps.scope.node;
136
156
  if (!outerList.children)
137
- return;
157
+ return false;
138
158
  const item = outerList.children[itemIndex];
139
159
  if (!item.children)
140
- return;
160
+ return false;
141
161
  const itemState = expectStateForNode(item);
142
- // Both scopes in one commit, so mid-item Enter is a single undo entry.
143
- await deps.controller.commitMultiScope({
162
+ // Both lists in one commit, so mid-item Enter is a single undo entry.
163
+ return deps.controller.commitMultiScope({
144
164
  scopes: [
145
165
  { node: outerList, state: deps.state, path: deps.scope.path },
146
166
  { node: item, state: itemState, path: [...deps.scope.path, itemIndex] }
147
167
  ],
148
- // The true pre-edit caret: `offset` sits inside the split leaf.
168
+ // The real pre-edit caret: `offset` is inside the split leaf.
149
169
  snapshot: { path: docPathFrom([...deps.scope.path, itemIndex, innerIndex]), offset },
150
170
  mutate: ([outerScope, itemScope]) => {
151
171
  const sharing = outerScope.sharing;
152
172
  const itemChildren = itemScope.children;
153
- // The descriptor must report everything removed from innerIndex onward,
154
- // not just the child that was split.
173
+ // The change must report everything removed from innerIndex onward, not just
174
+ // the child that was split.
155
175
  const preSpliceLen = itemChildren.length;
156
- const split = performSplit({ children: itemChildren, ownerKind: itemScope.node.kind, owner: itemScope.node }, innerIndex, offset, sharing, deps.getPresentationMode?.(), deps.linkRef);
176
+ const split = performSplit(itemScope.body, innerIndex, offset, sharing, deps.reading,
177
+ // The new item inherits this one's task marker, so its first block reads
178
+ // as this item's first block does.
179
+ fragmentReaderAt(itemScope.node, 0, deps.reading.grammar));
157
180
  stampStructuralChange(itemChildren, split.change, sharing);
158
- // The primitive's landing index, not `innerIndex + 1`: a plural first half
159
- // stays with this item, and G1.34 holds the splice to it.
160
- const landing = split.secondHalfIndex;
161
- assertSplitLanding(split, landing);
162
- const secondHalf = itemChildren.splice(landing);
181
+ // The primitive's index, not `innerIndex + 1`: a first half that parses to several
182
+ // blocks stays with this item.
183
+ const cutAt = split.secondHalfIndex;
184
+ const secondHalf = itemChildren.splice(cutAt);
163
185
  if (secondHalf.length > 0) {
164
186
  secondHalf[0].leadingTrivia = '';
165
187
  }
@@ -168,10 +190,10 @@ export function createListContext(deps) {
168
190
  outerScope.children.splice(itemIndex + 1, 0, newItem);
169
191
  renumberOrderedList(outerScope.node, itemIndex + 1, sharing);
170
192
  // Net item change: [innerIndex .. preSpliceLen) replaced by the first half's
171
- // blocks — plural when the cut bytes reparse to more than one.
193
+ // blocks, several when the cut bytes reparse to more than one.
172
194
  return [
173
195
  { op: 'insert', at: itemIndex + 1, count: 1 },
174
- replacePreservingFirst(innerIndex, preSpliceLen - innerIndex, landing - innerIndex)
196
+ replacePreservingFirst(innerIndex, preSpliceLen - innerIndex, cutAt - innerIndex)
175
197
  ];
176
198
  },
177
199
  op: {
@@ -179,42 +201,35 @@ export function createListContext(deps) {
179
201
  detail: { at: offset, itemIndex, innerIndex },
180
202
  eventPath: docPathFrom(deps.scope.path)
181
203
  },
182
- afterTick: () => {
183
- deps.state.innerBlockRefs[itemIndex + 1]?.focus(CURSOR_EXACT_START);
184
- }
204
+ landing: () => itemAt(itemIndex + 1, CURSOR_EXACT_START)
185
205
  });
186
206
  },
187
207
  async promoteNestedItem(parentItemIdx, nestedListNode, nestedItemIdx) {
188
208
  const node = deps.scope.node;
189
209
  if (!node.children || !nestedListNode.children)
190
- return;
210
+ return false;
191
211
  const parentItem = node.children[parentItemIdx];
192
212
  if (!parentItem?.children)
193
- return;
213
+ return false;
194
214
  const nestedIdxInParent = parentItem.children.indexOf(nestedListNode);
195
215
  if (nestedIdxInParent === -1)
196
- return;
197
- // Removing the last item empties the nested list, which needs a third scope
198
- // to splice the now-empty list out of parentItem's children.
199
- const nestedListWillEmpty = nestedListNode.children.length === 1;
216
+ return false;
217
+ // The move can empty the nested list and then the parent item, so both are scopes.
200
218
  const scopes = [
201
219
  { node, state: deps.state, path: deps.scope.path },
202
220
  {
203
221
  node: nestedListNode,
204
222
  state: expectStateForNode(nestedListNode),
205
223
  path: [...deps.scope.path, parentItemIdx, nestedIdxInParent]
206
- }
207
- ];
208
- let parentItemScopeIdx = -1;
209
- if (nestedListWillEmpty) {
210
- parentItemScopeIdx = scopes.length;
211
- scopes.push({
224
+ },
225
+ {
212
226
  node: parentItem,
213
227
  state: expectStateForNode(parentItem),
214
228
  path: [...deps.scope.path, parentItemIdx]
215
- });
216
- }
217
- await deps.controller.commitMultiScope({
229
+ }
230
+ ];
231
+ let promotedAt = parentItemIdx + 1;
232
+ return deps.controller.commitMultiScope({
218
233
  scopes,
219
234
  // The promoted item's pre-move path (its nested-list slot).
220
235
  snapshot: {
@@ -222,64 +237,54 @@ export function createListContext(deps) {
222
237
  offset: 0
223
238
  },
224
239
  mutate: (scopeViews) => {
225
- const outerScope = scopeViews[0];
226
- const nestedScope = scopeViews[1];
240
+ const [outerScope, nestedScope] = scopeViews;
227
241
  const sharing = outerScope.sharing;
228
- // The promoted item is moved AND written (marker normalization,
229
- // renumber), so own it before it leaves the nested list.
242
+ // Opened before the move, since the cleanup below can splice any of the three lists.
243
+ const ledgers = scopeViews.map((v) => trackChildIds(v.node));
244
+ // The promoted item is moved and written (marker normalization, renumbering),
245
+ // so copy it before it leaves the nested list.
230
246
  const item = ensureUnsharedChild(nestedScope.node, nestedItemIdx, sharing);
231
- nestedScope.children.splice(nestedItemIdx, 1);
232
- const changes = new Array(scopes.length);
233
- changes[1] = { op: 'delete', at: nestedItemIdx, count: 1 };
234
- if (nestedListWillEmpty && parentItemScopeIdx !== -1) {
235
- const parentItemChildren = scopeViews[parentItemScopeIdx].children;
236
- const nestedIdx = parentItemChildren.indexOf(nestedScope.node);
237
- if (nestedIdx !== -1) {
238
- parentItemChildren.splice(nestedIdx, 1);
239
- changes[parentItemScopeIdx] = { op: 'delete', at: nestedIdx, count: 1 };
240
- }
241
- else {
242
- changes[parentItemScopeIdx] = { op: 'noop' };
243
- }
244
- }
245
- if (!nestedListWillEmpty) {
246
- renumberOrderedList(nestedScope.node, 0, sharing);
247
- }
247
+ spliceChildren(nestedScope.node, nestedItemIdx, 1, []);
248
248
  normalizeItemMarkerToList(item, outerScope.node);
249
- outerScope.children.splice(parentItemIdx + 1, 0, item);
250
- changes[0] = { op: 'insert', at: parentItemIdx + 1, count: 1 };
251
- renumberOrderedList(outerScope.node, parentItemIdx + 1, sharing);
252
- return changes;
249
+ spliceChildren(outerScope.node, promotedAt, 0, [item]);
250
+ // What the move emptied goes, up to this list, which now holds the promoted item.
251
+ const outerCount = outerScope.children.length;
252
+ cascadeCleanupEmptyAncestors(outerScope.node, [parentItemIdx, nestedIdxInParent, nestedItemIdx], sharing, deps.reading.grammar);
253
+ promotedAt -= outerCount - outerScope.children.length;
254
+ if (nestedScope.children.length > 0)
255
+ renumberOrderedList(nestedScope.node, 0, sharing);
256
+ renumberOrderedList(outerScope.node, promotedAt, sharing);
257
+ return ledgers.map((ledger) => {
258
+ const change = ledger.read();
259
+ ledger.release();
260
+ return change;
261
+ });
253
262
  },
254
263
  op: {
255
264
  kind: 'replaceBlock',
256
265
  detail: { action: 'promoteNestedItem', parentItemIdx, nestedItemIdx },
257
266
  eventPath: docPathFrom(deps.scope.path)
258
267
  },
259
- afterTick: () => {
260
- deps.state.innerBlockRefs[parentItemIdx + 1]?.focus(CURSOR_START);
261
- }
268
+ landing: () => itemAt(promotedAt, CURSOR_START)
262
269
  });
263
270
  },
264
271
  getContainingItemIndex() {
265
- // Top-level list — only nested lists return a meaningful value here.
272
+ // A top-level list; only nested lists return a meaningful value here.
266
273
  return -1;
267
274
  },
268
275
  async exitListAtItem(itemIndex) {
269
276
  const node = deps.scope.node;
270
277
  if (!node.children)
271
- return;
272
- // Nested list: one Enter outdents one level (Shift+Tab semantics). Only the
273
- // outermost list escapes straight to a paragraph.
278
+ return false;
279
+ // In a nested list one Enter outdents one level, like Shift+Tab. Only the outermost
280
+ // list exits straight to a paragraph.
274
281
  if (deps.parentListContext) {
275
- await deps.parentListContext.promoteNestedItem(deps.parentListContext.getContainingItemIndex(), node, itemIndex);
276
- return;
282
+ return deps.parentListContext.promoteNestedItem(deps.parentListContext.getContainingItemIndex(), node, itemIndex);
277
283
  }
278
- const replacement = buildExitReplacement(node, itemIndex);
279
- await deps.parentBlockEdit.replaceBlock(deps.scope.index, replacement.blocks, {
280
- replacementIndex: replacement.paragraphIndex,
281
- offset: 0
282
- });
284
+ const replacement = buildExitReplacement(node, itemIndex, deps.getLineEnding());
285
+ // The caret sat in an item, which an offset into the list can't name; the live read
286
+ // records it.
287
+ return deps.parentBlockEdit.replaceBlock(deps.scope.index, replacement.blocks, { replacementIndex: replacement.paragraphIndex, offset: 0 }, { snapshotOffset: 0 });
283
288
  }
284
289
  };
285
290
  }
@@ -1,13 +1,21 @@
1
1
  /**
2
- * Override factory for ListBlock: item-level no-ops and last-item forward-merge
3
- * delegation. Item delete and replace fall through to the shared block-edit core.
4
- * Backspace unwrap (U1/M1) is declaration-driven — the list's `unwrapRole` selects
5
- * strategies in `unwrap-strategies.ts`.
2
+ * The list's and the list item's overrides over the default child actions. The list's are
3
+ * item-level no-ops and the last item's forward merge, handed to the parent; the item's is its
4
+ * Enter. Backspace unwrap comes from the list's declared `unwrapRole`, which picks a strategy in
5
+ * `unwrap-strategies.ts`.
6
6
  */
7
- import type { BlockEditActions } from '../action-contracts';
7
+ import type { BlockEditActions, ListContext } from '../action-contracts';
8
8
  import type { NestedActionsOverrideFactory, NodeScope } from './nested/nested-actions';
9
9
  export interface ListOverridesDeps {
10
10
  scope: NodeScope;
11
11
  parentBlockEdit: BlockEditActions;
12
12
  }
13
13
  export declare function createListOverrides(deps: ListOverridesDeps): NestedActionsOverrideFactory;
14
+ export interface ListItemOverridesDeps {
15
+ scope: NodeScope;
16
+ /** The enclosing list's context, read before the item provides its own. */
17
+ listContext: ListContext;
18
+ }
19
+ /** A list item's Enter: an empty item leaves the list, at the item's end it starts the next
20
+ * item, anywhere else it splits the item. Backspace keeps the default. */
21
+ export declare function createListItemOverrides(deps: ListItemOverridesDeps): NestedActionsOverrideFactory;
@@ -1,25 +1,49 @@
1
1
  /**
2
- * Override factory for ListBlock: item-level no-ops and last-item forward-merge
3
- * delegation. Item delete and replace fall through to the shared block-edit core.
4
- * Backspace unwrap (U1/M1) is declaration-driven — the list's `unwrapRole` selects
5
- * strategies in `unwrap-strategies.ts`.
2
+ * The list's and the list item's overrides over the default child actions. The list's are
3
+ * item-level no-ops and the last item's forward merge, handed to the parent; the item's is its
4
+ * Enter. Backspace unwrap comes from the list's declared `unwrapRole`, which picks a strategy in
5
+ * `unwrap-strategies.ts`.
6
6
  */
7
+ import { refusedWrite } from './stored-caret';
8
+ import { displayLength, isBlankText } from '../core/lines';
7
9
  export function createListOverrides(deps) {
8
10
  return () => ({
9
11
  blockEdit: {
10
- // Items split through the ITEM's own bundle; nothing calls the list's, and the shared
12
+ // Items split through the item's own bundle; nothing calls the list's, and the shared
11
13
  // core would run a prose split on a `listItem` if anything ever did.
12
- splitBlock: async () => { },
13
- updateBlockContent: () => { },
14
- // Items are structural peers, not text-mergeable. Only the LAST item delegates
15
- // upward, so the following block merges into this list's deepest leaf.
14
+ splitBlock: async () => false,
15
+ updateBlockContent: () => refusedWrite(),
16
+ // Items are structural peers, not text to merge. Only the last item hands the merge
17
+ // to the parent, so the block after the list merges into the list's deepest leaf.
16
18
  mergeWithNext: async (itemIndex) => {
17
19
  const node = deps.scope.node;
20
+ if (!node.children || itemIndex < node.children.length - 1)
21
+ return false;
22
+ return deps.parentBlockEdit.mergeWithNext(deps.scope.index);
23
+ }
24
+ }
25
+ });
26
+ }
27
+ /** A list item's Enter: an empty item leaves the list, at the item's end it starts the next
28
+ * item, anywhere else it splits the item. Backspace keeps the default. */
29
+ export function createListItemOverrides(deps) {
30
+ return () => ({
31
+ blockEdit: {
32
+ splitBlock: async (innerIndex, offset) => {
33
+ const { node, index } = deps.scope;
18
34
  if (!node.children)
19
- return;
20
- if (itemIndex >= node.children.length - 1) {
21
- await deps.parentBlockEdit.mergeWithNext(deps.scope.index);
35
+ return false;
36
+ // Looser than `isItemUserEmpty`: trailing structural children stay until
37
+ // `exitListAtItem` moves them.
38
+ const firstChild = node.children[0];
39
+ if (firstChild?.kind === 'paragraph' && isBlankText(firstChild.raw)) {
40
+ return deps.listContext.exitListAtItem(index);
22
41
  }
42
+ const lastChild = node.children[node.children.length - 1];
43
+ const atEnd = innerIndex === node.children.length - 1 && offset >= displayLength(lastChild.raw);
44
+ if (atEnd)
45
+ return deps.listContext.insertItemAfter(index);
46
+ return deps.listContext.splitItemAtOffset(index, innerIndex, offset);
23
47
  }
24
48
  }
25
49
  });
@@ -1,19 +1,13 @@
1
1
  /**
2
- * Single owner of the interior-merge fallbacks, both directions: the cross-sibling merge
3
- * (`block-edit-core`), the within-list M1 merge (`unwrap-strategies.listItemCascadeMiddle`).
4
- * A merge that does not happen still moves the caret across the boundary the user pressed at.
2
+ * Where the caret goes after a merge that may not have happened, in both directions: the sibling
3
+ * merge (`block-edit-core`) and the list-item merge (`unwrap-strategies.listItemCascadeMiddle`).
4
+ * A refused merge still moves the caret across the boundary the user pressed at.
5
5
  */
6
- import { type BlockComponent } from '../block-component';
6
+ import type { CaretPosition } from '../selection/primitives';
7
7
  import type { StructuralChange } from '../tree-operations/structural-change';
8
- /**
9
- * A null result means the previous block exposed no reachable text leaf, or the join was
10
- * refused, so nothing merged: land the caret at its end instead. The nullable input makes
11
- * ignoring the no-merge case a compile error.
12
- */
13
- export declare function mergedElseFocusPrevious<T>(result: T | null, previous: BlockComponent | undefined): T | null;
14
- /**
15
- * The forward twin, over the door's own change: `noop` means the join was refused (its bytes
16
- * read as several blocks, and one slot installs one node), so the caret crosses into the block
17
- * that stayed. Returns whether the merge happened, so the caller's landing asks the same question.
18
- */
19
- export declare function mergedElseFocusNext(change: StructuralChange, next: BlockComponent | undefined): boolean;
8
+ /** Null means nothing merged (no reachable text leaf, or a refused join), so the caret goes to
9
+ * the previous block's end. */
10
+ export declare function mergedElsePrevious(joined: CaretPosition | null, previous: CaretPosition['path']): CaretPosition;
11
+ /** A `noop` change means the join was refused (the joined bytes parse as several blocks), so the
12
+ * caret crosses into the next block's start. */
13
+ export declare function mergedElseNext(change: StructuralChange, joined: CaretPosition, next: CaretPosition['path']): CaretPosition;
@@ -1,27 +1,16 @@
1
1
  /**
2
- * Single owner of the interior-merge fallbacks, both directions: the cross-sibling merge
3
- * (`block-edit-core`), the within-list M1 merge (`unwrap-strategies.listItemCascadeMiddle`).
4
- * A merge that does not happen still moves the caret across the boundary the user pressed at.
2
+ * Where the caret goes after a merge that may not have happened, in both directions: the sibling
3
+ * merge (`block-edit-core`) and the list-item merge (`unwrap-strategies.listItemCascadeMiddle`).
4
+ * A refused merge still moves the caret across the boundary the user pressed at.
5
5
  */
6
6
  import { CURSOR_END, CURSOR_START } from '../block-component';
7
- /**
8
- * A null result means the previous block exposed no reachable text leaf, or the join was
9
- * refused, so nothing merged: land the caret at its end instead. The nullable input makes
10
- * ignoring the no-merge case a compile error.
11
- */
12
- export function mergedElseFocusPrevious(result, previous) {
13
- if (result === null)
14
- previous?.focus(CURSOR_END);
15
- return result;
7
+ /** Null means nothing merged (no reachable text leaf, or a refused join), so the caret goes to
8
+ * the previous block's end. */
9
+ export function mergedElsePrevious(joined, previous) {
10
+ return joined ?? { path: previous, offset: CURSOR_END };
16
11
  }
17
- /**
18
- * The forward twin, over the door's own change: `noop` means the join was refused (its bytes
19
- * read as several blocks, and one slot installs one node), so the caret crosses into the block
20
- * that stayed. Returns whether the merge happened, so the caller's landing asks the same question.
21
- */
22
- export function mergedElseFocusNext(change, next) {
23
- if (change.op !== 'noop')
24
- return true;
25
- next?.focus(CURSOR_START);
26
- return false;
12
+ /** A `noop` change means the join was refused (the joined bytes parse as several blocks), so the
13
+ * caret crosses into the next block's start. */
14
+ export function mergedElseNext(change, joined, next) {
15
+ return change.op !== 'noop' ? joined : { path: next, offset: CURSOR_START };
27
16
  }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The action bundle a container block hands its children, built the same way for every container
3
+ * kind: its parent's actions and the editor's reading in, the children's actions provided out.
4
+ * Call it once during component init. It reads the action contexts before it sets them, so a
5
+ * caller that needs a parent context (a list's own list context) reads it before the call.
6
+ */
7
+ import type { ListContext } from '../../action-contracts';
8
+ import type { NodeView } from '../../core/node-views';
9
+ import { type BlockListState } from '../../reactivity/block-list-state.svelte';
10
+ import type { Reading } from '../../schema/reading';
11
+ import type { ChildList } from '../../reactivity/child-list';
12
+ import { type NestedActionsBundle, type NestedActionsDeps, type NestedActionsOverrideFactory, type NodeScope } from './nested-actions';
13
+ export interface ContainerActionsDeps {
14
+ getNode: () => NodeView;
15
+ getIndex: () => number;
16
+ getPath: () => number[];
17
+ /** The container's own rules over the default child actions, given its scope and its parent. */
18
+ overrides?: (parts: {
19
+ scope: NodeScope;
20
+ parent: NestedActionsDeps['parent'];
21
+ reading: Reading;
22
+ }) => NestedActionsOverrideFactory;
23
+ /** The enclosing list's context, for a list nested in one. */
24
+ parentListContext?: ListContext;
25
+ /** The container's own child list; read at use, so it may name a const declared after the
26
+ * call, which it has to since the list's window is built from `state`. */
27
+ childList: () => ChildList;
28
+ }
29
+ export interface ContainerActions {
30
+ /** The container's live index, node and path, shared by reference with every factory. */
31
+ scope: NodeScope;
32
+ state: BlockListState;
33
+ bundle: NestedActionsBundle;
34
+ parent: NestedActionsDeps['parent'];
35
+ reading: Reading;
36
+ }
37
+ export declare function createContainerActions(deps: ContainerActionsDeps): ContainerActions;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * The action bundle a container block hands its children, built the same way for every container
3
+ * kind: its parent's actions and the editor's reading in, the children's actions provided out.
4
+ * Call it once during component init. It reads the action contexts before it sets them, so a
5
+ * caller that needs a parent context (a list's own list context) reads it before the call.
6
+ */
7
+ import { getContext } from 'svelte';
8
+ import { BLOCK_EDIT_KEY, CONTAINER_EDIT_KEY, EDITOR_DOC_KEY, EDITOR_SERVICES_KEY, FOCUS_KEY } from '../../editor-keys';
9
+ import { createBlockListState } from '../../reactivity/block-list-state.svelte';
10
+ import { createStandardNestedActions, setNestedActionsContexts } from './nested-actions';
11
+ export function createContainerActions(deps) {
12
+ const parent = {
13
+ blockEdit: getContext(BLOCK_EDIT_KEY),
14
+ focus: getContext(FOCUS_KEY),
15
+ containerEdit: getContext(CONTAINER_EDIT_KEY)
16
+ };
17
+ const { caretMemory } = getContext(EDITOR_SERVICES_KEY);
18
+ const { reading } = getContext(EDITOR_DOC_KEY);
19
+ const state = createBlockListState(deps.getNode);
20
+ // Getters, never a spread: a spread would snapshot the container's position.
21
+ const scope = {
22
+ get index() {
23
+ return deps.getIndex();
24
+ },
25
+ get node() {
26
+ return deps.getNode();
27
+ },
28
+ get path() {
29
+ return deps.getPath();
30
+ }
31
+ };
32
+ const bundle = createStandardNestedActions(state, {
33
+ scope,
34
+ caretMemory,
35
+ reading,
36
+ parentListContext: deps.parentListContext,
37
+ childList: deps.childList,
38
+ parent
39
+ }, deps.overrides?.({ scope, parent, reading }));
40
+ setNestedActionsContexts(bundle);
41
+ return { scope, state, bundle, parent, reading };
42
+ }
@@ -0,0 +1,5 @@
1
+ import type { RemovalGesture } from '../../selection/caret-target';
2
+ import type { NestedActionsDeps } from './nested-actions';
3
+ /** Removes the container from its parent's list, for an edit that would take its last child: an
4
+ * emptied container goes rather than stay childless. */
5
+ export declare function removeEmptiedContainer(deps: NestedActionsDeps, gesture: RemovalGesture): Promise<boolean>;