@voithos-labs/aragonite 0.10.4 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +11 -5
  3. package/dist/a11y-strings.js +60 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +12 -21
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +603 -1126
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +26 -51
  26. package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +29 -34
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +57 -39
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +141 -203
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +45 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
  102. package/dist/components/blocks/text/click-snap-guard.js +10 -7
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -108
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +212 -199
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +12 -35
  144. package/dist/components/drag-handle.js +22 -68
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -24
  162. package/dist/components/editor-root-listeners.js +49 -24
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +14 -26
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +30 -35
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +54 -75
  256. package/dist/core/inline/inline-widgets.js +54 -62
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +31 -15
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -6
  347. package/dist/cursor/height-oracle.js +26 -74
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +14 -15
  365. package/dist/cursor/scrollport.js +7 -13
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -14
  375. package/dist/cursor/visual-lines.js +45 -46
  376. package/dist/cursor/widget-edge-snap.d.ts +10 -15
  377. package/dist/cursor/widget-edge-snap.js +13 -12
  378. package/dist/cursor/widget-offset.d.ts +110 -104
  379. package/dist/cursor/widget-offset.js +344 -179
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +30 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +28 -50
  434. package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
  435. package/dist/editor-actions/focus/focus-landing.js +15 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +54 -82
  465. package/dist/editor-actions/plugin/container.js +105 -188
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +88 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +37 -8
  550. package/dist/plugin.js +100 -77
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +78 -67
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -81
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +141 -310
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +78 -84
  695. package/dist/schema/commands.js +152 -117
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +8 -10
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +63 -80
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +92 -125
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +59 -96
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +51 -134
  807. package/dist/selection/dead-space-caret.d.ts +19 -30
  808. package/dist/selection/dead-space-caret.js +70 -88
  809. package/dist/selection/drag-pointer.d.ts +7 -9
  810. package/dist/selection/drag-pointer.js +23 -33
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -40
  816. package/dist/selection/keyboard-extend.js +94 -117
  817. package/dist/selection/multi-click.d.ts +13 -18
  818. package/dist/selection/multi-click.js +32 -38
  819. package/dist/selection/native-bridge.d.ts +29 -39
  820. package/dist/selection/native-bridge.js +78 -127
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +25 -16
  824. package/dist/selection/path-lookup.js +101 -18
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +5 -5
  828. package/dist/selection/pointer-gesture.js +5 -5
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -40
  832. package/dist/selection/primitives.js +57 -67
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -23
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +34 -16
  852. package/dist/selection/selection-drop.js +159 -95
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +60 -53
  864. package/dist/styles/editor.css +201 -143
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
  960. package/dist/tree-operations/paste/replacement-parse.js +12 -10
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +327 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +253 -185
  996. package/docs/guide/plugin-guide.md +332 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +12 -16
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/cursor/scroll-hold.d.ts +0 -10
  1015. package/dist/cursor/scroll-hold.js +0 -22
  1016. package/dist/invariants/split-landing.d.ts +0 -8
  1017. package/dist/invariants/split-landing.js +0 -15
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
@@ -1,79 +1,124 @@
1
1
  /**
2
- * Dragging a selection and dropping it. The browser's own version is two native edits committed
3
- * apart — `deleteByDrag` on the source, `insertFromDrop` on the target — so undo takes two presses
4
- * over a document that lost bytes in between, and inside one block the source commit rebuilds the
5
- * surface under the drop. Owned here instead: one snapshot over two raw writes, which splice
6
- * nothing, so no path moves under the second.
2
+ * Dragging a selection and dropping it, as one undo entry over two raw writes (the cut, then
3
+ * the insert). The browser's own drag is two separate edits, which undo would take in two steps.
7
4
  */
8
5
  import { emitClipboardError } from '../editor-events';
9
- import { ambientLengthOf } from '../ambient/ambient-dom';
10
- import { toClampedRawOffset } from '../cursor/coordinate-spaces';
11
- import { domTextOffsetAtNode } from '../cursor/widget-offset';
12
- import { trailingLineEnding, trimTrailingLineEnding } from '../core/lines';
13
- import { replaceRangeRaw } from '../components/blocks/text/live-selection-edit';
14
- import { blockNodeAt, emptyParagraph, writeOwnRaw } from '../tree-operations/node-primitives';
6
+ import { rawOffsetAt, rawRangeToDomRange } from '../cursor/widget-offset';
7
+ import { documentLineEnding, trailingLineEnding, trimTrailingLineEnding } from '../core/lines';
8
+ import { blockContentElAt } from '../components/block-el-lookup';
9
+ import { blockNodeAt, emptyParagraph, normalizeOwnRaw, writeOwnRaw } from '../tree-operations/node-primitives';
15
10
  import { cloneNode } from '../tree-operations/clone';
16
- import { cutRangeFromDisplay } from '../tree-operations/node-ops';
11
+ import { replaceRangeInLeaf } from '../tree-operations/leaf-range';
17
12
  import { rebuildAncestryRaw } from '../schema/container-raw';
18
13
  import { applyPasteTransforms } from '../tree-operations/paste/paste-transforms';
19
- import { replaceBlockAtParent } from '../tree-operations/paste/replace-block-at-parent';
20
14
  import { parseReplacement } from '../tree-operations/paste/replacement-parse';
15
+ import { slotReaderAt } from '../tree-operations/list/task-paragraph';
21
16
  import { blockNearPoint } from './nearest-block';
22
17
  import { findSurfaceForElement } from './path-lookup';
23
- import { containerAmbientPrefix } from './range-delete';
24
- /** A drag that IS this gesture but whose shape the seam does not move — a range leaving its
25
- * surface, an empty one. The drop cancels it rather than handing it back. */
18
+ import { charOffsetOf } from './primitives';
19
+ import { storedAsAt } from '../tree-operations/stored-as';
20
+ import { docPathFrom } from '../cursor/coordinate-spaces';
21
+ /** A drag of the editor's selection in a shape the drop can't move (leaving its element, empty,
22
+ * holding a line break); the drop cancels it rather than handing it back to the browser. */
26
23
  const DECLINED = 'declined';
27
24
  // ── Public entry ───────────────────────────────────────────────────────────
28
25
  export function installSelectionDrop(deps) {
29
26
  let source = null;
27
+ // Where the painted caret stands. A drag fires `dragover` over and over at one position,
28
+ // and only a move to a different drop point has a new caret to draw.
29
+ let caretAt = null;
30
+ function hideCaret() {
31
+ if (!caretAt)
32
+ return;
33
+ caretAt = null;
34
+ deps.setDropCaret(null);
35
+ }
36
+ /** The caret saying where a release would land: cancelling the browser's drop takes its own
37
+ * caret away, so the editor's stands where the drop would land and declines where it does. */
38
+ function drawCaretAt(clientX, clientY, copy) {
39
+ const from = source;
40
+ if (!from || from === DECLINED || deps.isReadOnly())
41
+ return hideCaret();
42
+ const target = dropTarget(deps, clientX, clientY);
43
+ if (!target)
44
+ return hideCaret();
45
+ // The same refusal `dropOffsetAfterCut` makes once the cut has shrunk the block, tested
46
+ // here before the cut: a move has nowhere to put bytes inside the range it took them from.
47
+ const inside = pathsEqual(target.path, from.path) && insideRange(target.offset, from.start, from.end);
48
+ if (inside && !copy) {
49
+ return hideCaret();
50
+ }
51
+ if (caretAt && caretAt.offset === target.offset && pathsEqual(caretAt.path, target.path)) {
52
+ return;
53
+ }
54
+ const rect = dropCaretRect(deps.editorRoot, target.path, target.offset);
55
+ if (!rect)
56
+ return hideCaret();
57
+ caretAt = target;
58
+ deps.setDropCaret(rect);
59
+ }
30
60
  const onDragStart = (e) => {
31
- source = readSelectionSource(deps.editorRoot, e.target);
61
+ source = readSelectionSource(deps, e.target);
32
62
  };
33
63
  const onDragEnd = () => {
34
64
  source = null;
65
+ hideCaret();
35
66
  };
36
- // The editor is the drop target for every drag this seam recognized, declined ones included:
37
- // the drop below must RUN to cancel the browser's pair of native edits.
67
+ // The editor is the drop target for every drag recognised here, declined ones included: the
68
+ // drop handler below must run to cancel the browser's pair of native edits.
38
69
  const onDragOver = (e) => {
39
- if (source)
40
- e.preventDefault();
70
+ if (!source)
71
+ return;
72
+ e.preventDefault();
73
+ drawCaretAt(e.clientX, e.clientY, isCopyDrag(e));
74
+ };
75
+ // `dragleave` also fires for every child the pointer crosses, so the caret goes only once
76
+ // the point is outside the editor's own box.
77
+ const onDragLeave = (e) => {
78
+ if (source && !isInside(deps.editorRoot, e.clientX, e.clientY))
79
+ hideCaret();
41
80
  };
42
81
  const onDrop = (e) => {
43
82
  const from = source;
44
83
  source = null;
84
+ hideCaret();
45
85
  if (!from)
46
86
  return;
47
- // Before every decline below, not after: the browser's two edits land apart and its undo
48
- // is not ours, so a shape this seam declines mutates nothing rather than half of it.
87
+ // Before every decline below, not after: the browser's two edits land separately and its
88
+ // undo is not the editor's, so a declined shape changes nothing rather than half of it.
49
89
  e.preventDefault();
50
90
  if (from === DECLINED || deps.isReadOnly())
51
91
  return;
52
92
  const target = dropTarget(deps, e.clientX, e.clientY);
53
93
  if (!target)
54
94
  return;
55
- const text = movedText(deps, from);
56
- if (text === null)
57
- return;
58
- void runDrop(deps, from, target, text, e.ctrlKey || e.altKey).catch((error) => {
59
- // A throw between the two writes leaves a snapshot pushed and half the move applied;
60
- // the host hears it on the channel the paste route reports through.
95
+ void runDrop(deps, from, target, isCopyDrag(e)).catch((error) => {
96
+ // A throw between the two writes leaves half the move applied; the host hears about it on
97
+ // the same channel paste errors use.
61
98
  emitClipboardError(deps.events, { error, path: from.path });
62
99
  });
63
100
  };
64
101
  deps.editorRoot.addEventListener('dragstart', onDragStart);
65
102
  deps.editorRoot.addEventListener('dragend', onDragEnd);
66
103
  deps.editorRoot.addEventListener('dragover', onDragOver);
104
+ deps.editorRoot.addEventListener('dragleave', onDragLeave);
67
105
  deps.editorRoot.addEventListener('drop', onDrop);
68
106
  return () => {
107
+ // A reinstall mid-drag hands the new listeners no caret to clear, so it goes here.
108
+ hideCaret();
69
109
  deps.editorRoot.removeEventListener('dragstart', onDragStart);
70
110
  deps.editorRoot.removeEventListener('dragend', onDragEnd);
71
111
  deps.editorRoot.removeEventListener('dragover', onDragOver);
112
+ deps.editorRoot.removeEventListener('dragleave', onDragLeave);
72
113
  deps.editorRoot.removeEventListener('drop', onDrop);
73
114
  };
74
115
  }
75
- /** Where a splice of `delta` blocks at `at` inside `parent` leaves `target`: what the drop's
76
- * second write addresses once the first one's reparse changed its slot's block count. */
116
+ /** Ctrl, or Alt (Option, macOS's copy key for a drag): the release copies instead of moving. */
117
+ function isCopyDrag(e) {
118
+ return e.ctrlKey || e.altKey;
119
+ }
120
+ /** Where `target` ends up after a splice of `delta` blocks at `at` inside `parent`: what the
121
+ * drop's second write addresses once the first write's reparse changed the block count. */
77
122
  export function shiftPathAfterSplice(target, parent, at, delta) {
78
123
  if (delta === 0 || target.length <= parent.length)
79
124
  return target;
@@ -86,42 +131,40 @@ export function shiftPathAfterSplice(target, parent, at, delta) {
86
131
  shifted[parent.length] += delta;
87
132
  return shifted;
88
133
  }
89
- /** Where a drop at `offset` lands once `[start, end)` left the same block, `shrunkBy` bytes
90
- * shorter than the range was wide once the join seam cleaned up. Null inside the range. */
134
+ /** Where a drop at `offset` lands once `[start, end)` has left the same block, which shrank by
135
+ * `shrunkBy` bytes after the join cleanup. Null inside the range. */
91
136
  export function dropOffsetAfterCut(offset, start, end, shrunkBy) {
92
- if (offset > start && offset < end)
137
+ if (insideRange(offset, start, end))
93
138
  return null;
94
139
  return offset <= start ? offset : Math.max(0, offset - shrunkBy);
95
140
  }
96
141
  // ── Reading the gesture ────────────────────────────────────────────────────
97
- /**
98
- * The native range the drag carries, in its surface's raw offsets. `null` is "not this gesture" and
99
- * leaves the drag to the browser; {@link DECLINED} is this gesture in a shape the seam does not
100
- * move, which the drop cancels. A cross-block selection reaches neither: it paints through the
101
- * overlay and leaves no native range for the browser to drag.
102
- */
103
- function readSelectionSource(editorRoot, dragged) {
142
+ /** The native range the drag carries, in raw offsets: null leaves the drag to the browser, and
143
+ * {@link DECLINED} is the editor's selection in a shape the drop cancels. */
144
+ function readSelectionSource(deps, dragged) {
104
145
  const sel = window.getSelection();
105
146
  if (!sel || sel.isCollapsed || sel.rangeCount === 0)
106
147
  return null;
107
148
  const range = sel.getRangeAt(0);
108
- // A draggable of its own (a rendered link, an image) is not this gesture, even with a range
109
- // painted elsewhere: a selection drag grips a node the range covers.
149
+ // An element that is draggable on its own (a rendered link, an image) is not this gesture,
150
+ // even with a range painted elsewhere: a selection drag starts on a node the range covers.
110
151
  if (!(dragged instanceof Node) || !range.intersectsNode(dragged))
111
152
  return null;
112
153
  const surface = surfaceOf(range.startContainer);
113
- if (!surface || !editorRoot.contains(surface))
154
+ if (!surface || !deps.editorRoot.contains(surface))
114
155
  return null;
115
- // Past this point the drag IS the editor's selection, so every remaining shape declines.
156
+ // From here the drag is the editor's selection, so every remaining shape is declined.
116
157
  if (!surface.contains(range.endContainer))
117
158
  return DECLINED;
118
159
  const found = findSurfaceForElement(surface);
119
160
  if (!found)
120
161
  return DECLINED;
121
- const ambient = ambientLengthOf(surface);
122
- const start = toClampedRawOffset(domTextOffsetAtNode(surface, range.startContainer, range.startOffset), ambient);
123
- const end = toClampedRawOffset(domTextOffsetAtNode(surface, range.endContainer, range.endOffset), ambient);
124
- return start < end ? { ...found, start, end } : DECLINED;
162
+ const start = rawOffsetAt(surface, range.startContainer, range.startOffset);
163
+ const end = rawOffsetAt(surface, range.endContainer, range.endOffset);
164
+ if (start >= end)
165
+ return DECLINED;
166
+ const text = movedText(deps, { ...found, start, end });
167
+ return text === null ? DECLINED : { ...found, start, end, text };
125
168
  }
126
169
  /** The block and offset a drop point addresses, as a single-click caret would land. Null where
127
170
  * the point names no character position (a whole-block unit, a table cell). */
@@ -132,8 +175,25 @@ function dropTarget(deps, clientX, clientY) {
132
175
  return null;
133
176
  return blockNodeAt(deps.getDoc(), point.path) ? { path: point.path, offset: point.offset } : null;
134
177
  }
135
- /** The source surface's own bytes for the range, past the paste transforms. Null for a payload
136
- * this seam does not own: a line break needs the structural paste route. */
178
+ /** Viewport rect of the caret at `offset` in the block at `path`. A block whose offset names no
179
+ * text position falls back to its own box, and an unmounted one to null. */
180
+ function dropCaretRect(root, path, offset) {
181
+ const el = blockContentElAt(root, path);
182
+ if (!el)
183
+ return null;
184
+ const at = charOffsetOf({ path, offset }, 'selection-drop:caret');
185
+ const rect = rawRangeToDomRange(el, at, at)?.getBoundingClientRect();
186
+ if (rect && rect.height > 0)
187
+ return { left: rect.left, top: rect.top, height: rect.height };
188
+ const box = el.getBoundingClientRect();
189
+ return box.height > 0 ? { left: box.left, top: box.top, height: box.height } : null;
190
+ }
191
+ function isInside(el, clientX, clientY) {
192
+ const box = el.getBoundingClientRect();
193
+ return clientX >= box.left && clientX <= box.right && clientY >= box.top && clientY <= box.bottom;
194
+ }
195
+ /** The source element's bytes for the range, after the paste transforms. Null for text this
196
+ * module does not handle: a line break needs the structural paste path. */
137
197
  function movedText(deps, from) {
138
198
  const node = blockNodeAt(deps.getDoc(), from.path);
139
199
  if (!node)
@@ -142,10 +202,15 @@ function movedText(deps, from) {
142
202
  const text = applyPasteTransforms(raw, deps.activePlugins);
143
203
  return text && !/[\r\n]/.test(text) ? text : null;
144
204
  }
145
- // ── The commit ceremony ────────────────────────────────────────────────────
146
- async function runDrop(deps, from, to, text, copy) {
205
+ // ── The commit ─────────────────────────────────────────────────────────────
206
+ export function runDrop(deps, from, to, copy) {
207
+ // One entry for the cut and the insert, and none when neither lands.
208
+ return deps.controller.undoStep({ path: docPathFrom(from.path), offset: from.start }, () => moveOrCopy(deps, from, to, copy));
209
+ }
210
+ async function moveOrCopy(deps, from, to, copy) {
211
+ const text = from.text;
147
212
  if (copy) {
148
- await writeBlockRaw(deps, to.path, insert(to.offset, text), to.offset + text.length, true);
213
+ await writeBlockRaw(deps, to.path, insert(to.offset, text), to.offset + text.length);
149
214
  return;
150
215
  }
151
216
  const cut = cutFrom(deps, from);
@@ -156,23 +221,25 @@ async function runDrop(deps, from, to, text, copy) {
156
221
  if (offset === null)
157
222
  return;
158
223
  const merged = spliceAt(cut.raw, offset, text);
159
- await writeBlockRaw(deps, cut.path, () => merged, offset + text.length, true);
224
+ await writeBlockRaw(deps, cut.path, () => merged, offset + text.length);
160
225
  return;
161
226
  }
162
- deps.controller.pushUndoSnapshotPath(from.path, from.start);
163
- // A table's caret door reads a cell landing, never a character offset (G1.29), so the
164
- // transient caret the second write moves off is its first cell.
227
+ // A table's `focus` takes a cell, never a character offset, so the temporary caret the second
228
+ // write moves away from is its first cell (G1.29).
165
229
  const sourceCaret = from.inCell ? 0 : from.start;
166
- const spliced = await writeBlockRaw(deps, cut.path, () => cut.raw, sourceCaret, false);
230
+ const spliced = await writeBlockRaw(deps, cut.path, () => cut.raw, sourceCaret);
231
+ // An insert after a cut that never landed would turn the move into a copy.
232
+ if (spliced === null)
233
+ return;
167
234
  const at = cut.path[cut.path.length - 1];
168
235
  const target = shiftPathAfterSplice(to.path, cut.path.slice(0, -1), at, spliced);
169
- await writeBlockRaw(deps, target, insert(to.offset, text), to.offset + text.length, false);
236
+ await writeBlockRaw(deps, target, insert(to.offset, text), to.offset + text.length);
170
237
  }
171
238
  function insert(offset, text) {
172
239
  return (raw) => spliceAt(raw, offset, text);
173
240
  }
174
- /** The source surface's display bytes with the dragged range gone, through the delete seam so a
175
- * live-mode join cleans up after itself. */
241
+ /** The source element's display bytes with the dragged range gone, cut as any in-leaf edit is so
242
+ * a live-mode join cleans up after itself. */
176
243
  function cutFrom(deps, from) {
177
244
  const node = blockNodeAt(deps.getDoc(), from.path);
178
245
  if (!node)
@@ -180,68 +247,65 @@ function cutFrom(deps, from) {
180
247
  if (from.inCell)
181
248
  return cutFromCell(deps, from, node);
182
249
  const before = trimTrailingLineEnding(node.raw);
183
- const edit = replaceRangeRaw(node, { start: from.start, end: from.end }, '', deps.getPresentationMode?.(), deps.linkRef, containerAmbientPrefix(deps.getDoc(), from.path));
250
+ const store = storedAsAt(deps.getDoc(), from.path, deps.reading);
251
+ const edit = replaceRangeInLeaf(node, { start: from.start, end: from.end }, '', store);
184
252
  const raw = trimTrailingLineEnding(edit.raw);
185
253
  return { path: from.path, raw, shrunkBy: before.length - raw.length };
186
254
  }
187
- /** A cell's bytes are joined into its row, so the TABLE is the block the cut rewrites: the cell's
188
- * own range-delete on a copy, then the kind's escape and the ancestry rebuild around it. */
255
+ /** A cell's bytes are joined into its row, so the table is the block the cut rewrites: the cell's
256
+ * own cut on a copy, then the kind's escaping and the ancestor rebuild around it. */
189
257
  function cutFromCell(deps, from, cell) {
190
258
  const tablePath = from.path.slice(0, -2);
191
259
  // The cell path is resolved from a DOM selector contract, so the kind is read, not assumed.
192
260
  const table = blockNodeAt(deps.getDoc(), tablePath);
193
261
  if (!table || table.kind !== 'table')
194
262
  return null;
195
- const cut = cutRangeFromDisplay(cell, cell.raw, { start: from.start, end: from.end }, deps.getPresentationMode?.(), deps.linkRef);
263
+ const store = storedAsAt(deps.getDoc(), from.path, deps.reading);
264
+ const cut = replaceRangeInLeaf(cell, { start: from.start, end: from.end }, '', store);
196
265
  const rebuilt = cloneNode(table);
197
266
  const inner = from.path.slice(-2);
198
267
  const [rowIdx, colIdx] = inner;
199
268
  const written = rebuilt.children?.[rowIdx]?.children?.[colIdx];
200
269
  if (!written)
201
270
  return null;
202
- writeOwnRaw(written, cut.display, deps.grammar);
203
- rebuildAncestryRaw(rebuilt, inner);
271
+ writeOwnRaw(written, trimTrailingLineEnding(cut.raw), documentLineEnding(deps.getDoc()), deps.reading.grammar);
272
+ rebuildAncestryRaw(rebuilt, inner, deps.reading.grammar);
204
273
  const raw = trimTrailingLineEnding(rebuilt.raw);
205
274
  return { path: tablePath, raw, shrunkBy: trimTrailingLineEnding(table.raw).length - raw.length };
206
275
  }
207
- /**
208
- * Replace the block at `path` with the reparse of the bytes `rewrite` returns, at its parent
209
- * scope. Answers how many blocks the slot grew or shrank by, which is what keeps a second
210
- * write's path honest. `own` pushes this write's own undo entry.
211
- */
212
- async function writeBlockRaw(deps, path, rewrite, caret, own) {
276
+ /** Replaces the block at `path` with the reparse of `rewrite`'s bytes. Returns the change in block
277
+ * count at that position, so a second write's path stays right, or null when nothing landed. */
278
+ async function writeBlockRaw(deps, path, rewrite, caret) {
213
279
  const doc = deps.getDoc();
214
280
  const node = blockNodeAt(doc, path);
215
281
  if (!node)
216
- return 0;
217
- const written = rewrite(trimTrailingLineEnding(node.raw));
218
- // A block emptied by the cut keeps its slot as a blank paragraph: no splice, so the second
219
- // write's path is still the one this gesture resolved.
220
- const parsed = parseReplacement(node, written, deps.grammar, () => [
221
- emptyParagraph(node.leadingTrivia ?? '', trailingLineEnding(node.raw))
282
+ return null;
283
+ // The bytes are built outside the block's own element, so the kind's write rule runs here.
284
+ const lineEnding = documentLineEnding(doc);
285
+ const written = normalizeOwnRaw(node, rewrite(trimTrailingLineEnding(node.raw)), lineEnding);
286
+ // A block emptied by the cut keeps its position as a blank paragraph: no splice, so the
287
+ // second write's path is still the one resolved at the drop.
288
+ const read = slotReaderAt(doc, path, deps.reading.grammar);
289
+ const parsed = parseReplacement(node, written, lineEnding, read, () => [
290
+ emptyParagraph(node.leadingTrivia ?? '', trailingLineEnding(node.raw, lineEnding))
222
291
  ]);
223
292
  if (!parsed)
224
- return 0;
225
- const landed = await replaceBlockAtParent({
226
- doc,
227
- blockPath: path,
228
- replacement: parsed.replacement,
229
- controller: deps.coordinator,
230
- undoEntry: own ? 'own' : 'join',
231
- focusReplacementIndex: parsed.replacement.length - 1,
232
- focusOffset: caret,
233
- source: 'selection-drop',
234
- ...(deps.grammar ? { grammar: deps.grammar } : {})
235
- });
236
- // The LANDED count, not the parse's: a body rule inside the scope can rewrite the list. Zero
237
- // is the unmounted-scope decline, which wrote nothing and so moved nothing.
238
- return Math.max(0, landed - 1);
293
+ return null;
294
+ const landed = await deps.coordinator.replaceBlock(path, parsed.replacement, { replacementIndex: parsed.replacement.length - 1, offset: caret },
295
+ // The drop's undo step records the selection, so this offset is never read.
296
+ { source: 'selection-drop', snapshotOffset: 0 });
297
+ // The count that landed, not the parse's: a container's body rule can rewrite the list.
298
+ return landed === null ? null : landed - 1;
239
299
  }
240
300
  // ── Small helpers ──────────────────────────────────────────────────────────
241
301
  function spliceAt(raw, offset, text) {
242
302
  const at = Math.max(0, Math.min(offset, raw.length));
243
303
  return raw.slice(0, at) + text + raw.slice(at);
244
304
  }
305
+ /** Strictly between `start` and `end`: a position the dragged range itself covers. */
306
+ function insideRange(offset, start, end) {
307
+ return offset > start && offset < end;
308
+ }
245
309
  function pathsEqual(a, b) {
246
310
  return a.length === b.length && a.every((v, i) => v === b[i]);
247
311
  }
@@ -1,46 +1,33 @@
1
1
  /**
2
- * The one road from a stored selection back onto the live editor: resolve against the current
3
- * tree, reveal what the caret will be parked at, then land it. Both entry paths (undo/redo
4
- * swap, the consumer's `setSelection`) funnel through here, so the resolve/clamp/reveal rules
5
- * can't be carried by only one. A gap caret takes {@link restoreGapCaret}, the same road minus
6
- * the endpoint pair.
2
+ * The checks a stored selection passes before it goes back onto the live editor: each endpoint
3
+ * resolved against the current tree and clamped into its block. `caret-landing.ts :: restore` puts
4
+ * every stored selection back, a gap caret through {@link restoreGapCaret}.
7
5
  */
8
6
  import type { DocumentView } from '../core/node-views';
9
- import type { BlockElLookup } from '../editor-keys';
10
- import type { EditorSelection, SelectionPoint } from './primitives';
7
+ import type { BlockComponent } from '../block-component';
8
+ import { type SelectionPoint } from './primitives';
11
9
  import { type GapCaretPosition } from './gap-caret';
12
10
  import type { SelectionState } from './selection-state.svelte';
11
+ import type { CaretMemory } from '../cursor/caret-memory';
13
12
  /**
14
13
  * `unresolvable` is decided before anything happens and is the only outcome that leaves the
15
- * editor untouched. `unplaced` is everything short of both halves landing; the reveal and, on
16
- * the custom route, the cross-block state write have already run.
14
+ * editor untouched. `unplaced` is everything short of both halves landing; the mount and, on
15
+ * the overlay route, the cross-block state write have already run.
17
16
  */
18
17
  export type SelectionRestoreOutcome = 'applied' | 'unresolvable' | 'unplaced';
19
- export interface SelectionRestoreDeps {
18
+ export interface GapCaretRestoreDeps {
20
19
  getDoc(): DocumentView;
21
20
  selectionState: SelectionState;
22
- getBlockElByPath: BlockElLookup;
23
- /** Make the park target ready and report whether it is. Injected because WHICH path gets
24
- * revealed is this module's rule, how strongly is the caller's. */
25
- revealTarget(path: number[]): Promise<boolean>;
21
+ /** Mounts the block at `path`: the caret landing's `mount`. */
22
+ mount(path: number[]): Promise<BlockComponent | null>;
23
+ /** Brings the mounted block into view as the restore's reveal policy says. */
24
+ reveal(path: number[]): Promise<void>;
25
+ /** Cleared on each restore, since a placed caret did not arrive by a key. */
26
+ caretMemory: Pick<CaretMemory, 'forget'>;
26
27
  }
27
- /**
28
- * Restore a snapshot. Never throws; an endpoint whose path no longer addresses a block is
29
- * declined before the reveal, so a dead snapshot cannot move the viewport or disturb a live
30
- * selection. What a decline does about the on-screen selection is the caller's policy.
31
- */
32
- export declare function restoreSelection(selection: EditorSelection, deps: SelectionRestoreDeps): Promise<SelectionRestoreOutcome>;
33
- /**
34
- * Restore a gap caret. The scope check is `gapEligibleAt`'s, not a full eligibility gate:
35
- * the tree being restored is the one the gap was minted against, so `gapEdges` cannot have
36
- * changed under it, but the PATH can now name something no BlockList renders.
37
- */
38
- export declare function restoreGapCaret(pos: GapCaretPosition, deps: SelectionRestoreDeps): Promise<SelectionRestoreOutcome>;
39
- /**
40
- * Clamp an endpoint into its block's addressable range, or null when its path no longer
41
- * resolves to a block (the document root included). The NODE KIND picks the coordinate space,
42
- * not the `cellCoordinate` flag: an intra-table endpoint is unflagged (see
43
- * {@link SelectionPoint}) yet still carries a cell index. The char-space bound is `raw`, which
44
- * on a marker-bearing kind runs past the content end; the DOM walk lands such an offset there.
45
- */
28
+ /** Restores a gap caret with only the child-list check: the tree is the one the gap was made
29
+ * against, so its `gapEdges` hold, but the path may name something no BlockList renders. */
30
+ export declare function restoreGapCaret(pos: GapCaretPosition, deps: GapCaretRestoreDeps): Promise<SelectionRestoreOutcome>;
31
+ /** Clamps an endpoint into its block's whole `raw`, markers included, or null when its path names
32
+ * no block. An offset on a table path comes back flagged as a cell index, even a plain one. */
46
33
  export declare function resolveSelectionPoint(doc: DocumentView, point: SelectionPoint): SelectionPoint | null;
@@ -1,66 +1,43 @@
1
1
  /**
2
- * The one road from a stored selection back onto the live editor: resolve against the current
3
- * tree, reveal what the caret will be parked at, then land it. Both entry paths (undo/redo
4
- * swap, the consumer's `setSelection`) funnel through here, so the resolve/clamp/reveal rules
5
- * can't be carried by only one. A gap caret takes {@link restoreGapCaret}, the same road minus
6
- * the endpoint pair.
2
+ * The checks a stored selection passes before it goes back onto the live editor: each endpoint
3
+ * resolved against the current tree and clamped into its block. `caret-landing.ts :: restore` puts
4
+ * every stored selection back, a gap caret through {@link restoreGapCaret}.
7
5
  */
8
6
  import { isBlockNode, nodeAt } from '../tree-operations/node-primitives';
9
- import { applySelectionToDom } from './native-bridge';
7
+ import { cellPoint } from './primitives';
10
8
  import { placeGapCaret } from './caret-doors';
11
9
  import { gapScopeChildren } from './gap-caret';
12
- import { tableCellCount } from './table-endpoint-snap';
13
- /**
14
- * Restore a snapshot. Never throws; an endpoint whose path no longer addresses a block is
15
- * declined before the reveal, so a dead snapshot cannot move the viewport or disturb a live
16
- * selection. What a decline does about the on-screen selection is the caller's policy.
17
- */
18
- export async function restoreSelection(selection, deps) {
19
- const doc = deps.getDoc();
20
- const anchor = resolveSelectionPoint(doc, selection.anchor);
21
- const focus = resolveSelectionPoint(doc, selection.focus);
22
- if (!anchor || !focus)
23
- return 'unresolvable';
24
- // Reveal exactly what the applier parks the caret at: a cell-coordinate focus parks in its
25
- // deep [table, row, col] cell, and table rows window too.
26
- const revealed = await deps.revealTarget(deps.selectionState.cellLandingFor(focus).path);
27
- const placed = applySelectionToDom({ anchor, focus }, deps.selectionState, deps.getBlockElByPath);
28
- return revealed && placed ? 'applied' : 'unplaced';
29
- }
30
- /**
31
- * Restore a gap caret. The scope check is `gapEligibleAt`'s, not a full eligibility gate:
32
- * the tree being restored is the one the gap was minted against, so `gapEdges` cannot have
33
- * changed under it, but the PATH can now name something no BlockList renders.
34
- */
10
+ import { clampCellIndex, countsCells } from '../schema/block-kind-descriptor';
11
+ /** Restores a gap caret with only the child-list check: the tree is the one the gap was made
12
+ * against, so its `gapEdges` hold, but the path may name something no BlockList renders. */
35
13
  export async function restoreGapCaret(pos, deps) {
36
14
  const children = gapScopeChildren(deps.getDoc(), pos.parentPath);
37
15
  if (!children)
38
16
  return 'unresolvable';
17
+ deps.caretMemory.forget();
39
18
  const index = Math.min(Math.max(pos.index, 0), children.length);
40
19
  // The boundary itself mounts nothing; what must be on screen is the block it sits
41
20
  // against, so the gap's own BlockList is inside a live window when it renders.
42
21
  const neighbour = index < children.length ? index : index - 1;
43
- const revealed = await deps.revealTarget([...pos.parentPath, neighbour]);
22
+ const neighbourPath = [...pos.parentPath, neighbour];
23
+ const mounted = (await deps.mount(neighbourPath)) !== null;
24
+ if (mounted)
25
+ await deps.reveal(neighbourPath);
44
26
  placeGapCaret(deps.selectionState, { parentPath: pos.parentPath, index });
45
- return revealed ? 'applied' : 'unplaced';
27
+ return mounted ? 'applied' : 'unplaced';
46
28
  }
47
- /**
48
- * Clamp an endpoint into its block's addressable range, or null when its path no longer
49
- * resolves to a block (the document root included). The NODE KIND picks the coordinate space,
50
- * not the `cellCoordinate` flag: an intra-table endpoint is unflagged (see
51
- * {@link SelectionPoint}) yet still carries a cell index. The char-space bound is `raw`, which
52
- * on a marker-bearing kind runs past the content end; the DOM walk lands such an offset there.
53
- */
29
+ /** Clamps an endpoint into its block's whole `raw`, markers included, or null when its path names
30
+ * no block. An offset on a table path comes back flagged as a cell index, even a plain one. */
54
31
  export function resolveSelectionPoint(doc, point) {
55
32
  const node = nodeAt(doc, point.path);
56
33
  if (node === null || !isBlockNode(node))
57
34
  return null;
58
- // Through the extent helper, not a local product: this ceiling and `cellEndpointDeepPath`'s
59
- // bounds check must be the same number, or a clamped index is rejected by that check.
60
- const limit = node.kind === 'table' ? tableCellCount(node) - 1 : node.raw.length;
61
- const offset = Math.min(Math.max(point.offset, 0), Math.max(limit, 0));
35
+ const cells = countsCells(node);
36
+ const offset = cells
37
+ ? clampCellIndex(node, point.offset)
38
+ : Math.min(Math.max(point.offset, 0), node.raw.length);
62
39
  // Path copied so a restored endpoint never aliases the caller's snapshot.
63
- return point.cellCoordinate
64
- ? { path: point.path.slice(), offset, cellCoordinate: true }
40
+ return cells || point.cellCoordinate
41
+ ? cellPoint(point.path, offset)
65
42
  : { path: point.path.slice(), offset };
66
43
  }