@voithos-labs/aragonite 0.10.3 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +12 -5
  3. package/dist/a11y-strings.js +61 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +13 -20
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +619 -1089
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +36 -67
  26. package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +35 -28
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +58 -32
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +144 -202
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +46 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
  102. package/dist/components/blocks/text/click-snap-guard.js +16 -5
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -105
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +243 -208
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +13 -30
  144. package/dist/components/drag-handle.js +25 -63
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -31
  162. package/dist/components/editor-root-listeners.js +49 -46
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +26 -30
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +380 -0
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +55 -68
  256. package/dist/core/inline/inline-widgets.js +55 -58
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +33 -17
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -7
  347. package/dist/cursor/height-oracle.js +26 -75
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +16 -8
  365. package/dist/cursor/scrollport.js +28 -5
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -13
  375. package/dist/cursor/visual-lines.js +72 -28
  376. package/dist/cursor/widget-edge-snap.d.ts +23 -0
  377. package/dist/cursor/widget-edge-snap.js +39 -0
  378. package/dist/cursor/widget-offset.d.ts +111 -102
  379. package/dist/cursor/widget-offset.js +352 -177
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +31 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +33 -52
  434. package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
  435. package/dist/editor-actions/focus/focus-landing.js +29 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +55 -76
  465. package/dist/editor-actions/plugin/container.js +105 -186
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +91 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +38 -8
  550. package/dist/plugin.js +102 -74
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +113 -85
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -75
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +143 -292
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +79 -81
  695. package/dist/schema/commands.js +156 -116
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +9 -11
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +73 -78
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +93 -152
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +61 -104
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +53 -146
  807. package/dist/selection/dead-space-caret.d.ts +20 -28
  808. package/dist/selection/dead-space-caret.js +79 -87
  809. package/dist/selection/drag-pointer.d.ts +22 -5
  810. package/dist/selection/drag-pointer.js +63 -31
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -39
  816. package/dist/selection/keyboard-extend.js +94 -116
  817. package/dist/selection/multi-click.d.ts +37 -0
  818. package/dist/selection/multi-click.js +197 -0
  819. package/dist/selection/native-bridge.d.ts +30 -37
  820. package/dist/selection/native-bridge.js +80 -100
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +31 -14
  824. package/dist/selection/path-lookup.js +110 -20
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +9 -0
  828. package/dist/selection/pointer-gesture.js +11 -0
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -33
  832. package/dist/selection/primitives.js +61 -53
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -19
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +52 -0
  852. package/dist/selection/selection-drop.js +317 -0
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +75 -53
  864. package/dist/styles/editor.css +248 -139
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
  960. package/dist/tree-operations/paste/replacement-parse.js +24 -0
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +329 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +267 -183
  996. package/docs/guide/plugin-guide.md +341 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +17 -21
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/invariants/split-landing.d.ts +0 -8
  1015. package/dist/invariants/split-landing.js +0 -15
  1016. package/dist/selection/double-click-trim.d.ts +0 -17
  1017. package/dist/selection/double-click-trim.js +0 -57
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
@@ -0,0 +1,317 @@
1
+ /**
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.
4
+ */
5
+ import { emitClipboardError } from '../editor-events';
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';
10
+ import { cloneNode } from '../tree-operations/clone';
11
+ import { replaceRangeInLeaf } from '../tree-operations/leaf-range';
12
+ import { rebuildAncestryRaw } from '../schema/container-raw';
13
+ import { applyPasteTransforms } from '../tree-operations/paste/paste-transforms';
14
+ import { parseReplacement } from '../tree-operations/paste/replacement-parse';
15
+ import { slotReaderAt } from '../tree-operations/list/task-paragraph';
16
+ import { blockNearPoint } from './nearest-block';
17
+ import { findSurfaceForElement } from './path-lookup';
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. */
23
+ const DECLINED = 'declined';
24
+ // ── Public entry ───────────────────────────────────────────────────────────
25
+ export function installSelectionDrop(deps) {
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
+ }
60
+ const onDragStart = (e) => {
61
+ source = readSelectionSource(deps, e.target);
62
+ };
63
+ const onDragEnd = () => {
64
+ source = null;
65
+ hideCaret();
66
+ };
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.
69
+ const onDragOver = (e) => {
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();
80
+ };
81
+ const onDrop = (e) => {
82
+ const from = source;
83
+ source = null;
84
+ hideCaret();
85
+ if (!from)
86
+ return;
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.
89
+ e.preventDefault();
90
+ if (from === DECLINED || deps.isReadOnly())
91
+ return;
92
+ const target = dropTarget(deps, e.clientX, e.clientY);
93
+ if (!target)
94
+ return;
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.
98
+ emitClipboardError(deps.events, { error, path: from.path });
99
+ });
100
+ };
101
+ deps.editorRoot.addEventListener('dragstart', onDragStart);
102
+ deps.editorRoot.addEventListener('dragend', onDragEnd);
103
+ deps.editorRoot.addEventListener('dragover', onDragOver);
104
+ deps.editorRoot.addEventListener('dragleave', onDragLeave);
105
+ deps.editorRoot.addEventListener('drop', onDrop);
106
+ return () => {
107
+ // A reinstall mid-drag hands the new listeners no caret to clear, so it goes here.
108
+ hideCaret();
109
+ deps.editorRoot.removeEventListener('dragstart', onDragStart);
110
+ deps.editorRoot.removeEventListener('dragend', onDragEnd);
111
+ deps.editorRoot.removeEventListener('dragover', onDragOver);
112
+ deps.editorRoot.removeEventListener('dragleave', onDragLeave);
113
+ deps.editorRoot.removeEventListener('drop', onDrop);
114
+ };
115
+ }
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. */
122
+ export function shiftPathAfterSplice(target, parent, at, delta) {
123
+ if (delta === 0 || target.length <= parent.length)
124
+ return target;
125
+ for (let i = 0; i < parent.length; i++)
126
+ if (target[i] !== parent[i])
127
+ return target;
128
+ if (target[parent.length] <= at)
129
+ return target;
130
+ const shifted = target.slice();
131
+ shifted[parent.length] += delta;
132
+ return shifted;
133
+ }
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. */
136
+ export function dropOffsetAfterCut(offset, start, end, shrunkBy) {
137
+ if (insideRange(offset, start, end))
138
+ return null;
139
+ return offset <= start ? offset : Math.max(0, offset - shrunkBy);
140
+ }
141
+ // ── Reading the gesture ────────────────────────────────────────────────────
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) {
145
+ const sel = window.getSelection();
146
+ if (!sel || sel.isCollapsed || sel.rangeCount === 0)
147
+ return null;
148
+ const range = sel.getRangeAt(0);
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.
151
+ if (!(dragged instanceof Node) || !range.intersectsNode(dragged))
152
+ return null;
153
+ const surface = surfaceOf(range.startContainer);
154
+ if (!surface || !deps.editorRoot.contains(surface))
155
+ return null;
156
+ // From here the drag is the editor's selection, so every remaining shape is declined.
157
+ if (!surface.contains(range.endContainer))
158
+ return DECLINED;
159
+ const found = findSurfaceForElement(surface);
160
+ if (!found)
161
+ return 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 };
168
+ }
169
+ /** The block and offset a drop point addresses, as a single-click caret would land. Null where
170
+ * the point names no character position (a whole-block unit, a table cell). */
171
+ function dropTarget(deps, clientX, clientY) {
172
+ const near = blockNearPoint(deps.editorRoot, clientX, clientY);
173
+ const point = near?.endpointHere();
174
+ if (!point || !('offset' in point) || point.cellCoordinate)
175
+ return null;
176
+ return blockNodeAt(deps.getDoc(), point.path) ? { path: point.path, offset: point.offset } : null;
177
+ }
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. */
197
+ function movedText(deps, from) {
198
+ const node = blockNodeAt(deps.getDoc(), from.path);
199
+ if (!node)
200
+ return null;
201
+ const raw = trimTrailingLineEnding(node.raw).slice(from.start, from.end);
202
+ const text = applyPasteTransforms(raw, deps.activePlugins);
203
+ return text && !/[\r\n]/.test(text) ? text : null;
204
+ }
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;
212
+ if (copy) {
213
+ await writeBlockRaw(deps, to.path, insert(to.offset, text), to.offset + text.length);
214
+ return;
215
+ }
216
+ const cut = cutFrom(deps, from);
217
+ if (!cut)
218
+ return;
219
+ if (pathsEqual(cut.path, to.path)) {
220
+ const offset = dropOffsetAfterCut(to.offset, from.start, from.end, cut.shrunkBy);
221
+ if (offset === null)
222
+ return;
223
+ const merged = spliceAt(cut.raw, offset, text);
224
+ await writeBlockRaw(deps, cut.path, () => merged, offset + text.length);
225
+ return;
226
+ }
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).
229
+ const sourceCaret = from.inCell ? 0 : from.start;
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;
234
+ const at = cut.path[cut.path.length - 1];
235
+ const target = shiftPathAfterSplice(to.path, cut.path.slice(0, -1), at, spliced);
236
+ await writeBlockRaw(deps, target, insert(to.offset, text), to.offset + text.length);
237
+ }
238
+ function insert(offset, text) {
239
+ return (raw) => spliceAt(raw, offset, text);
240
+ }
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. */
243
+ function cutFrom(deps, from) {
244
+ const node = blockNodeAt(deps.getDoc(), from.path);
245
+ if (!node)
246
+ return null;
247
+ if (from.inCell)
248
+ return cutFromCell(deps, from, node);
249
+ const before = trimTrailingLineEnding(node.raw);
250
+ const store = storedAsAt(deps.getDoc(), from.path, deps.reading);
251
+ const edit = replaceRangeInLeaf(node, { start: from.start, end: from.end }, '', store);
252
+ const raw = trimTrailingLineEnding(edit.raw);
253
+ return { path: from.path, raw, shrunkBy: before.length - raw.length };
254
+ }
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. */
257
+ function cutFromCell(deps, from, cell) {
258
+ const tablePath = from.path.slice(0, -2);
259
+ // The cell path is resolved from a DOM selector contract, so the kind is read, not assumed.
260
+ const table = blockNodeAt(deps.getDoc(), tablePath);
261
+ if (!table || table.kind !== 'table')
262
+ return null;
263
+ const store = storedAsAt(deps.getDoc(), from.path, deps.reading);
264
+ const cut = replaceRangeInLeaf(cell, { start: from.start, end: from.end }, '', store);
265
+ const rebuilt = cloneNode(table);
266
+ const inner = from.path.slice(-2);
267
+ const [rowIdx, colIdx] = inner;
268
+ const written = rebuilt.children?.[rowIdx]?.children?.[colIdx];
269
+ if (!written)
270
+ return null;
271
+ writeOwnRaw(written, trimTrailingLineEnding(cut.raw), documentLineEnding(deps.getDoc()), deps.reading.grammar);
272
+ rebuildAncestryRaw(rebuilt, inner, deps.reading.grammar);
273
+ const raw = trimTrailingLineEnding(rebuilt.raw);
274
+ return { path: tablePath, raw, shrunkBy: trimTrailingLineEnding(table.raw).length - raw.length };
275
+ }
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) {
279
+ const doc = deps.getDoc();
280
+ const node = blockNodeAt(doc, path);
281
+ if (!node)
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))
291
+ ]);
292
+ if (!parsed)
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;
299
+ }
300
+ // ── Small helpers ──────────────────────────────────────────────────────────
301
+ function spliceAt(raw, offset, text) {
302
+ const at = Math.max(0, Math.min(offset, raw.length));
303
+ return raw.slice(0, at) + text + raw.slice(at);
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
+ }
309
+ function pathsEqual(a, b) {
310
+ return a.length === b.length && a.every((v, i) => v === b[i]);
311
+ }
312
+ function surfaceOf(node) {
313
+ let el = node instanceof HTMLElement ? node : node.parentElement;
314
+ while (el && el.contentEditable !== 'true')
315
+ el = el.parentElement;
316
+ return el;
317
+ }
@@ -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
  }
@@ -1,32 +1,37 @@
1
1
  /**
2
- * Reactive state for the editor-owned selection modes: a cross-block `anchor`/`focus` pair,
3
- * and the collapsed `gapCaret` (`gap-caret.ts`). Both are null in single-block mode, where the
4
- * native browser selection rules, and the two are mutually exclusive here rather than at any
5
- * call site. Transitions: `docs/design/editor.md` § Cross-block selection.
2
+ * Reactive state for the selections the editor owns: a cross-block range, a gap caret
3
+ * (`gap-caret.ts`), or an inline widget selected whole. At most one is live, since every mutator
4
+ * writes all three through one private writer; all are null while the browser's own selection
5
+ * rules. Transitions: `docs/design/editor.md` § Cross-block selection.
6
6
  */
7
7
  import type { DocumentView } from '../core/node-views';
8
8
  import type { GapCaretPosition } from './gap-caret';
9
- import type { SelectionEndpoint, SelectionPoint } from './primitives';
9
+ import type { SelectedWidgetRange, SelectionEndpoint, SelectionPoint, WidgetTarget } from './primitives';
10
10
  export interface SelectionStateOptions {
11
- /**
12
- * Fires after any mutation, or once at the end of a {@link SelectionState.batch} that
13
- * contained one. No payload: subscribers read back via `editor.getSelection()`.
14
- */
15
- onChange?: () => void;
16
- /**
17
- * Document accessor. Absent in harnesses that only exercise cross-block semantics;
18
- * without it `isCustomRendered` cannot see intra-table rects and mirrors `isCrossBlock`.
19
- */
11
+ /** Fires after any mutation, or once at the end of a {@link SelectionState.batch} that held
12
+ * one; `placementOnly` says a caret placement was all the flush held. */
13
+ onChange?: (change: {
14
+ placementOnly: boolean;
15
+ }) => void;
16
+ /** Document accessor. Absent in harnesses that only exercise cross-block semantics, where no
17
+ * point is normalized and a table endpoint is stored as written. */
20
18
  getDoc?: () => DocumentView;
19
+ /** The live span of the widget a selection holds, or null once none starts there. Absent, a
20
+ * selected widget has no range and reports the offset it was entered at. */
21
+ widgetSpan?: (target: WidgetTarget) => {
22
+ start: number;
23
+ end: number;
24
+ } | null;
21
25
  }
22
26
  export declare function createSelectionState(options?: SelectionStateOptions): SelectionState;
27
+ export type RestoreRoute = 'collapsed' | 'single-block' | 'whole-block' | 'custom';
23
28
  export interface SelectionState {
24
29
  readonly anchor: SelectionPoint | null;
25
30
  readonly focus: SelectionPoint | null;
26
31
  readonly isCrossBlock: boolean;
27
32
  /**
28
33
  * True when the overlay paints instead of the native browser highlight: every
29
- * cross-block selection, plus same-path multi-offset selections inside tables.
34
+ * cross-block selection, plus a rectangle of two or more cells inside one table.
30
35
  */
31
36
  readonly isCustomRendered: boolean;
32
37
  readonly start: SelectionPoint | null;
@@ -34,45 +39,48 @@ export interface SelectionState {
34
39
  readonly selectAllCount: number;
35
40
  /** The third mode: a collapsed caret in a between-blocks boundary (`gap-caret.ts`). */
36
41
  readonly gapCaret: GapCaretPosition | null;
37
- /**
38
- * One block taken whole as the entire range — a press on a surface-less leaf (an equation)
39
- * dragged inside it. The stored pair spans the block's bytes on a shared path, which the
40
- * same-path guard would otherwise refuse, so the overlay reads this to paint it as a unit.
41
- */
42
+ /** One block taken whole as the range (a drag inside a leaf with no text, such as an equation),
43
+ * which the same-path check would otherwise refuse; the overlay paints it as a unit. */
42
44
  readonly wholeUnitPath: number[] | null;
45
+ /** The inline widget selected whole, or null. Copied out, like `gapCaret`. */
46
+ readonly widget: WidgetTarget | null;
47
+ /** The selected widget's span read from the live document, since its own commits move its
48
+ * end; null with no widget selected, or once no widget starts at its byte. */
49
+ widgetRange(): SelectedWidgetRange | null;
50
+ /** The caret a selected widget stands for: the edge of its span it was entered from. */
51
+ widgetCaret(): SelectionPoint | null;
43
52
  enterCrossBlock(anchor: SelectionEndpoint, focus: SelectionEndpoint): void;
44
53
  extendFocus(point: SelectionEndpoint): void;
45
54
  collapse(): void;
46
55
  clear(): void;
56
+ /** Drops whatever is live without notifying, for a document swap: it addresses the outgoing
57
+ * tree, and the restore that follows announces the new selection. */
58
+ dropForDocumentSwap(): void;
47
59
  setGapCaret(pos: GapCaretPosition): void;
48
60
  clearGapCaret(): void;
61
+ /** Selects a widget whole and announces it. A widget ending by itself announces nothing: the
62
+ * caret that replaces it announces itself. */
63
+ selectWidget(target: WidgetTarget): void;
64
+ /** Moves a selected widget by `delta` bytes when it sits in `path` at or past `editEnd`: an
65
+ * edit to another widget earlier in the block moved its bytes, not its identity. Silent. */
66
+ followWidgetEdit(path: readonly number[], editEnd: number, delta: number): void;
49
67
  incrementSelectAllCount(): void;
50
68
  resetSelectAllCount(): void;
51
- /**
52
- * Fire the channel for a selection this state cannot see. Subscribers read the editor
53
- * back through `getSelection()`, which also answers for a NATIVE caret the restore road
54
- * lands and for a document a `source` swap replaced under it — neither of which moves a
55
- * field the mutators above guard on. Coalesces inside a {@link SelectionState.batch}.
56
- */
69
+ /** Notifies for a change no mutator above sees (a caret the editor placed, a restore, a source
70
+ * swap), since subscribers read back through `getSelection()`. Coalesces inside a batch. */
57
71
  announceSelection(): void;
58
72
  /**
59
- * Hold change notification until `mutate` returns, then fire once if anything mutated.
60
- * Nests; flushes even when the body throws. An entry path that writes state AND lands a
61
- * caret must wrap both: subscribers read the editor back on notify, so a notify between
62
- * the two reports a caret the DOM half has not moved yet.
73
+ * Notifies for a caret placement. The flush says whether a placement was all it held, so a
74
+ * listener can drop one that put the caret where it already was.
63
75
  */
76
+ announcePlacement(): void;
77
+ /** Holds the change notification until `mutate` returns, then fires once; nests, and flushes on
78
+ * a throw. Wrap a state write and its caret placement so no notify lands between the two. */
64
79
  batch(mutate: () => void): void;
65
- /**
66
- * Classify an anchor/focus pair for DOM restore WITHOUT mutating state, so no phantom
67
- * cross-block onChange fires. Same-path prose is 'single-block' (native highlight); a
68
- * cross-block or intra-table cell rect is 'custom' (overlay).
69
- */
70
- restoreRoute(anchor: SelectionPoint, focus: SelectionPoint): 'collapsed' | 'single-block' | 'custom';
71
- /**
72
- * Where a caret lands for `point`: an endpoint inside a table addresses the table block by
73
- * cell INDEX, so its landing is the cell's own deep `[table,row,col]` leaf at offset 0.
74
- * Any other point lands as itself. Every reveal and every park goes through here, so no
75
- * caller can seat a cell index as a char offset on the table wrapper.
76
- */
80
+ /** Classifies a pair `resolveSelectionPoint` returned, for a DOM restore, touching no state. A
81
+ * same-path pair over a block with no character position is that block held whole. */
82
+ restoreRoute(anchor: SelectionPoint, focus: SelectionPoint): RestoreRoute;
83
+ /** Where a caret lands for `point`: a cell endpoint in its cell's `[table, row, col]` leaf at
84
+ * offset 0, any other point as itself. Every mount and caret placement goes through here. */
77
85
  cellLandingFor(point: SelectionPoint): SelectionPoint;
78
86
  }