@voithos-labs/aragonite 0.10.4 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +11 -5
  3. package/dist/a11y-strings.js +60 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +12 -21
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +603 -1126
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +26 -51
  26. package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +29 -34
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +57 -39
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +141 -203
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +45 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
  102. package/dist/components/blocks/text/click-snap-guard.js +10 -7
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -108
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +212 -199
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +12 -35
  144. package/dist/components/drag-handle.js +22 -68
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -24
  162. package/dist/components/editor-root-listeners.js +49 -24
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +14 -26
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +30 -35
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +54 -75
  256. package/dist/core/inline/inline-widgets.js +54 -62
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +31 -15
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -6
  347. package/dist/cursor/height-oracle.js +26 -74
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +14 -15
  365. package/dist/cursor/scrollport.js +7 -13
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -14
  375. package/dist/cursor/visual-lines.js +45 -46
  376. package/dist/cursor/widget-edge-snap.d.ts +10 -15
  377. package/dist/cursor/widget-edge-snap.js +13 -12
  378. package/dist/cursor/widget-offset.d.ts +110 -104
  379. package/dist/cursor/widget-offset.js +344 -179
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +30 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +28 -50
  434. package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
  435. package/dist/editor-actions/focus/focus-landing.js +15 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +54 -82
  465. package/dist/editor-actions/plugin/container.js +105 -188
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +88 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +37 -8
  550. package/dist/plugin.js +100 -77
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +78 -67
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -81
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +141 -310
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +78 -84
  695. package/dist/schema/commands.js +152 -117
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +8 -10
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +63 -80
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +92 -125
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +59 -96
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +51 -134
  807. package/dist/selection/dead-space-caret.d.ts +19 -30
  808. package/dist/selection/dead-space-caret.js +70 -88
  809. package/dist/selection/drag-pointer.d.ts +7 -9
  810. package/dist/selection/drag-pointer.js +23 -33
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -40
  816. package/dist/selection/keyboard-extend.js +94 -117
  817. package/dist/selection/multi-click.d.ts +13 -18
  818. package/dist/selection/multi-click.js +32 -38
  819. package/dist/selection/native-bridge.d.ts +29 -39
  820. package/dist/selection/native-bridge.js +78 -127
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +25 -16
  824. package/dist/selection/path-lookup.js +101 -18
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +5 -5
  828. package/dist/selection/pointer-gesture.js +5 -5
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -40
  832. package/dist/selection/primitives.js +57 -67
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -23
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +34 -16
  852. package/dist/selection/selection-drop.js +159 -95
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +60 -53
  864. package/dist/styles/editor.css +201 -143
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
  960. package/dist/tree-operations/paste/replacement-parse.js +12 -10
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +327 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +253 -185
  996. package/docs/guide/plugin-guide.md +332 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +12 -16
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/cursor/scroll-hold.d.ts +0 -10
  1015. package/dist/cursor/scroll-hold.js +0 -22
  1016. package/dist/invariants/split-landing.d.ts +0 -8
  1017. package/dist/invariants/split-landing.js +0 -15
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
@@ -1,41 +1,38 @@
1
1
  /**
2
- * Caret placement from a viewport point: the dead-space click (padding beside a block, the area
3
- * below the last one) and the public `placeCaretAtPoint`, which shares the walk under the gesture
4
- * guards. A y belonging to no band may name an eligible gap boundary; otherwise the point clamps
5
- * into the nearest mounted block's box (`nearest-block.ts`) and resolves there, no kind named.
6
- * Only what is mounted is measured, so "below the last block" resolves against the CST (VR-6).
2
+ * Places the caret from a viewport point, for a click in the editor's dead space (the padding
3
+ * beside a block, the area below the last one) and the public `placeCaretAtPoint` alike. A point
4
+ * between two blocks may become a gap caret; otherwise it clamps into the nearest mounted block
5
+ * and descends to the child level with it. Only mounted blocks are measured.
7
6
  */
8
7
  import { CURSOR_END } from '../block-component';
9
- import { blockAtPoint } from './block-hit-test';
10
- import { measureBlocks, nearestBand, probePointIn } from './nearest-block';
8
+ import { blockAtPoint, holdsOwnText } from './block-hit-test';
9
+ import { descendToLevelChild, measureBlocks, nearestBand, probePointIn } from './nearest-block';
11
10
  import { placeGapCaret } from './caret-doors';
12
11
  import { canGapStop } from './gap-caret';
13
- import { offsetFromViewportPoint } from '../cursor/point-offset';
12
+ import { caretOffsetAtPoint } from '../cursor/point-offset';
13
+ import { docPathFrom } from '../cursor/coordinate-spaces';
14
14
  export function createDeadSpaceCaret(deps) {
15
- // The press half of the gesture, because `click` alone cannot tell a dead-space click from a
16
- // drag that STARTED on a block and released in the margin: both report dead space as target.
15
+ // Tracked from pointerdown because `click` alone cannot tell a dead-space click from a drag
16
+ // that started on a block and released in the margin: both report dead space as the target.
17
17
  let pressedOnDeadSpace = false;
18
- /** The end-of-document gesture when the tail is windowed out: reveal the real last block,
19
- * then land at its end — which is where the trailing-corner probe below lands when the
20
- * slice already reaches it. */
18
+ /** A click below the document when its tail is not mounted: land at the real last block's end,
19
+ * which is where the clamped point below lands once the tail is mounted. */
21
20
  async function landAtDocumentEnd() {
22
21
  const index = deps.lastBlockIndex();
23
22
  if (index < 0)
24
23
  return;
25
- const component = await deps.revealBlock(index);
26
- if (!component?.focusable)
27
- return;
24
+ // Before the landing, which then records the end it lands at as the outside of a closer.
28
25
  deps.resetSelectionForClick();
29
- component.focus(CURSOR_END);
26
+ await deps.land({ path: docPathFrom([index]), offset: CURSOR_END });
30
27
  }
31
28
  function placeAtPoint(root, x, y) {
32
- // One measuring pass for both walks: the boundary question and the band clamp read the
33
- // same layout, and a second query would force it again inside one click.
29
+ // One measuring pass: the gap check and the nearest-block clamp read the same layout, and
30
+ // a second query would force layout again inside one click.
34
31
  const blocks = measureBlocks(root);
35
32
  const boundary = rootBoundaryOutsideBands(blocks, y);
36
33
  if (boundary !== null && canGapStop(deps.gapScope, [], boundary)) {
37
- // The preamble first, as on the block landing below — it clears the gap, so
38
- // nothing may run between it and the door. The door ends a live range (G2.12).
34
+ // The reset runs first, as for a block below: it clears the gap caret, so nothing may
35
+ // run between it and `placeGapCaret`, which also ends a live range (G2.12).
39
36
  deps.resetSelectionForClick();
40
37
  placeGapCaret(deps.gapScope.selection, { parentPath: [], index: boundary });
41
38
  return true;
@@ -43,22 +40,18 @@ export function createDeadSpaceCaret(deps) {
43
40
  const band = nearestBand(blocks.map((b) => b.rect), y);
44
41
  if (!band)
45
42
  return false;
46
- // Below the last MOUNTED block is not below the document while a tail is windowed out,
47
- // and a host's own below-the-editor handler resolves against the whole document — so
48
- // the two would land a document apart. The reveal road is the only answer available
49
- // here: the target has no box to probe until it mounts.
43
+ // Below the last mounted block is not below the document while a tail is windowed out,
44
+ // and the real last block has no box to hit-test until it mounts.
50
45
  if (band.belowAll && lastMountedTopLevel(blocks) !== deps.lastBlockIndex()) {
51
46
  void landAtDocumentEnd();
52
47
  return true;
53
48
  }
54
- const { x: probeX, y: probeY } = probePointIn(blocks[band.index].rect, x, y, band.belowAll);
55
- const hit = blockAtPoint(root, probeX, probeY);
56
- if (!hit)
49
+ const near = hitInBand(root, blocks, band, x, y);
50
+ if (!near)
57
51
  return false;
58
- // Prose lands the caret on the line the click is level with, as any editor does. A block
59
- // with no character surface (an equation, a table, a rule) has no such line, and a revealed
60
- // source is one only while it is being edited: a click that was not ON the block is a click
61
- // on nothing, and focuses nothing (the click's owner then blurs what was being edited).
52
+ const { hit, x: probeX, y: probeY } = near;
53
+ // A block with no text line (an equation, a table, source shown only while editing) takes
54
+ // only a click on its content; a click beside it focuses nothing, so the edit blurs.
62
55
  const transient = hit.charSurface?.classList.contains('md-source-surface') ?? false;
63
56
  if ((!hit.charSurface || transient) && !pressedOnBlockContent(root, x, y))
64
57
  return false;
@@ -68,27 +61,28 @@ export function createDeadSpaceCaret(deps) {
68
61
  const component = deps.getBlockComponent(hit.path);
69
62
  if (!component?.focusable)
70
63
  return false;
71
- // An internal landing needs the deep door; a block declaring the hook without it
72
- // can't be reached, and declining here keeps the selection intact.
64
+ // A caret target inside a grid needs `focusByPath`; declining a block that lacks it keeps
65
+ // the selection intact.
73
66
  if (landing.path.length > 0 && !component.focusByPath)
74
67
  return false;
75
- // Only once the landing is known, so a declined point leaves the selection as it
76
- // found it: a live range stays painted over a caret placed elsewhere, and the next
77
- // printable key type-replaces the whole of it.
68
+ // The reset waits for a known caret target, so a declined point leaves a live range painted
69
+ // and the next printable key replaces the whole of it.
78
70
  deps.resetSelectionForClick();
79
- // Both doors end the live range (`selection/caret-doors.ts`); `focusByPath` reaches
80
- // the leaf's own `focus`.
71
+ // Both calls end a live range (`selection/caret-doors.ts`); `focusByPath` reaches the
72
+ // leaf's own `focus`.
81
73
  if (landing.path.length === 0)
82
74
  component.focus(landing.offset);
83
75
  else
84
76
  component.focusByPath(landing.path, landing.offset);
85
- // The probe point is inside the block's box, so the surface answers it exactly as it
86
- // answers a click there: a landing at an atomic widget's edge has nothing to show for
87
- // itself until the surface's own snap paints it.
88
- leafOf(component, landing.path)?.snapCaretToPoint?.(probeX, probeY);
77
+ // The block's own snap answers the clamped point as a click there, so a caret beside a
78
+ // non-editable widget is painted rather than showing nothing.
79
+ const leaf = landing.path.length === 0
80
+ ? component
81
+ : deps.getBlockComponent([...hit.path, ...landing.path]);
82
+ leaf?.snapCaretToPoint?.(probeX, probeY);
89
83
  return true;
90
84
  }
91
- /** The nearest block's hit for a press, with the probe point clamped into its band. */
85
+ /** The nearest block's hit for a click, with the point clamped into its box. */
92
86
  function hitNearPoint(root, x, y) {
93
87
  const blocks = measureBlocks(root);
94
88
  const band = nearestBand(blocks.map((b) => b.rect), y);
@@ -96,19 +90,15 @@ export function createDeadSpaceCaret(deps) {
96
90
  return null;
97
91
  if (band.belowAll && lastMountedTopLevel(blocks) !== deps.lastBlockIndex())
98
92
  return null;
99
- const { x: probeX, y: probeY } = probePointIn(blocks[band.index].rect, x, y, band.belowAll);
100
- const hit = blockAtPoint(root, probeX, probeY);
101
- return hit && { hit, probeX, probeY };
93
+ return hitInBand(root, blocks, band, x, y);
102
94
  }
103
95
  function anchorAtPoint(root, x, y) {
104
96
  const near = hitNearPoint(root, x, y);
105
97
  if (!near)
106
98
  return null;
107
- const { hit, probeX, probeY } = near;
108
- // No character surface to measure against — a rendered equation, a rule, a table — so the
109
- // block is the unit, and the funnel picks the side by the drag's direction. An offset would
110
- // put a range END at the block's start and leave it out; a cell would make the drag a caret
111
- // placement in the nearest column. A rule names no landing at all, and is a unit all the same.
99
+ const { hit, x: probeX, y: probeY } = near;
100
+ // No text to measure against: an offset would put a range end at the block's start and
101
+ // leave the block out, and a cell would turn the drag into a caret placement.
112
102
  if (!hit.charSurface)
113
103
  return { path: hit.path.slice(), wholeBlock: true };
114
104
  const landing = landingFor(hit, probeX, probeY);
@@ -137,9 +127,8 @@ export function createDeadSpaceCaret(deps) {
137
127
  pressedOnDeadSpace = false;
138
128
  if (!pressed || !isDeadSpace(root, event.target))
139
129
  return false;
140
- // A drag that ended in the margin leaves a real range behind; collapsing it would
141
- // throw away what the user just selected. This sees only NATIVE ranges: a cross-block
142
- // range is overlay-painted with the native selection empty, and is ended below instead.
130
+ // A drag that ended in the margin leaves a native range the user just selected. A
131
+ // cross-block range leaves the native selection empty, so it is ended below instead.
143
132
  const native = root.ownerDocument.defaultView?.getSelection();
144
133
  if (native && native.rangeCount > 0 && !native.isCollapsed)
145
134
  return false;
@@ -149,7 +138,7 @@ export function createDeadSpaceCaret(deps) {
149
138
  };
150
139
  }
151
140
  // ── Internal ───────────────────────────────────────────────────────────────
152
- /** The last top-level index the slice currently holds; -1 when none is mounted. */
141
+ /** The last mounted top-level index; -1 when none is mounted. */
153
142
  function lastMountedTopLevel(blocks) {
154
143
  for (let i = blocks.length - 1; i >= 0; i--) {
155
144
  const path = blocks[i].path;
@@ -158,18 +147,14 @@ function lastMountedTopLevel(blocks) {
158
147
  }
159
148
  return -1;
160
149
  }
161
- /**
162
- * The root-level boundary a `y` belonging to NO band names: the editor's leading padding,
163
- * and the space between two adjacent bands where a layout leaves one. Below the last band
164
- * is excluded — that y is the end-of-document gesture, and under windowing the last MOUNTED
165
- * band is not the last block. Indices come off the path attribute for the same reason.
166
- */
150
+ /** The root-level gap a `y` outside every block's box names. Below the last block is excluded:
151
+ * that click means end of document, and the last mounted block may not be the last block. */
167
152
  function rootBoundaryOutsideBands(blocks, y) {
168
153
  const bands = blocks.flatMap((b) => b.path?.length === 1 ? [{ index: b.path[0], top: b.rect.top, bottom: b.rect.bottom }] : []);
169
154
  if (bands.length === 0)
170
155
  return null;
171
- // Only when the document's own first block is mounted: above a windowed-out slice the
172
- // blocks the point sits over are not the ones the boundary would name.
156
+ // Only when the document's first block is mounted: above a windowed-out head, the blocks
157
+ // under the point are not the ones the gap would name.
173
158
  if (y < bands[0].top)
174
159
  return bands[0].index === 0 ? 0 : null;
175
160
  for (let i = 1; i < bands.length; i++) {
@@ -180,26 +165,22 @@ function rootBoundaryOutsideBands(blocks, y) {
180
165
  }
181
166
  return null;
182
167
  }
183
- /** The component the landing addresses: this one on a character surface, else the leaf a
184
- * coordinate-addressed kind's internal path names. */
185
- function leafOf(component, path) {
186
- if (path.length === 0)
187
- return component;
188
- return component.getBlockComponentByPath?.(path) ?? null;
168
+ /** The block a band answers for a point: the point clamped into the band's box, then handed
169
+ * down to the child level with it when the box is a container's. */
170
+ function hitInBand(root, blocks, band, x, y) {
171
+ const probe = probePointIn(blocks[band.index].rect, x, y, band.belowAll);
172
+ const hit = blockAtPoint(root, probe.x, probe.y);
173
+ return hit && descendToLevelChild(root, { hit, ...probe }, band.belowAll);
189
174
  }
190
- /**
191
- * The targets that mean "dead space": the root, and any block list inside it. A host that
192
- * widens or pads `.block-list` moves the whole visible side gutter onto the list, which
193
- * reports itself rather than the root. Everything else the editor renders has its own
194
- * identity and is declined here.
195
- */
175
+ /** The root and any block list inside it: a host that pads `.block-list` moves the side gutter
176
+ * onto the list, which then reports itself as the click target. */
196
177
  function isDeadSpace(root, target) {
197
178
  if (target === root)
198
179
  return true;
199
180
  return target instanceof Element && target.classList.contains('block-list');
200
181
  }
201
- /** Whether the ORIGINAL point (not the clamped probe) sits inside some block's content: on a
202
- * descendant of a host, not on the host's own box or the dead space around it. */
182
+ /** Whether the original point (not the clamped one) sits inside some block's content: on a
183
+ * descendant of a block host, not on the host's own box or the dead space around it. */
203
184
  function pressedOnBlockContent(root, x, y) {
204
185
  const direct = document.elementFromPoint(x, y);
205
186
  if (!(direct instanceof Element) || isDeadSpace(root, direct))
@@ -207,23 +188,24 @@ function pressedOnBlockContent(root, x, y) {
207
188
  const host = direct.closest('[data-block-path]');
208
189
  return host !== null && host !== direct;
209
190
  }
210
- /**
211
- * Where the caret goes for a resolved hit: an internal child path (empty for a
212
- * character-addressed surface) plus the offset within that leaf. Null declines the click.
213
- */
191
+ /** Where the caret goes for a hit: an inner child path (empty for a text block) and the offset
192
+ * within that leaf; null declines the click. */
214
193
  function landingFor(hit, probeX, probeY) {
215
194
  if (hit.caretTargetAtPoint)
216
195
  return hit.caretTargetAtPoint(probeX, probeY);
217
- // A kind with only the drag hook addresses cells and named no caret landing.
196
+ // A kind with only the drag hook addresses cells and names no caret target.
218
197
  if (hit.foreignDragHitTest)
219
198
  return null;
220
- // A leaf with no character surface (a rule, a folded equation) reached here was pressed on
221
- // its own box: the block itself is the landing, and its `focus` ignores the offset.
199
+ // A leaf with no text (a rule, a rendered equation) reaches here only when clicked on its
200
+ // own box: the block itself is the target, and its `focus` ignores the offset.
222
201
  if (!hit.charSurface)
223
202
  return { path: [], offset: 0 };
224
- // Reading mode flips contenteditable off, and a non-editable leaf has no character position.
225
- if (!hit.charSurface.matches('[contenteditable="true"]'))
203
+ // Reading mode turns editing off, so no text is a block's own there. A container that kept
204
+ // the point has only its children's text, none of it level with the point.
205
+ if (!holdsOwnText(hit))
226
206
  return null;
227
- const offset = offsetFromViewportPoint(hit.charSurface, probeX, probeY);
207
+ // A block whose box pads its own text (a code block) lands a point in that padding on the
208
+ // nearest line.
209
+ const offset = caretOffsetAtPoint(hit.charSurface, probeX, probeY);
228
210
  return offset === null ? null : { path: [], offset };
229
211
  }
@@ -16,18 +16,16 @@ export interface DragContext {
16
16
  getBlockElByPath: BlockElLookup;
17
17
  /** Aborted on editor unmount; forwarded to the session's teardown. */
18
18
  lifetimeSignal?: AbortSignal;
19
- /**
20
- * The press began outside every editable surface (the editor's margin), so no native drag
21
- * is extending a selection underneath: the session paints the same-block range itself.
22
- */
23
- paintSameBlock?: boolean;
24
- /** A drag continuing a multi-click: the range grows by that rung's unit. */
19
+ /** Read at each move: the drag began where no native drag extends a selection underneath (the
20
+ * editor's margin, a press it placed itself), so the session paints the same-block range. */
21
+ paintSameBlock?: () => boolean;
22
+ /** A drag continuing a double or triple click: the range grows by that click's unit. */
25
23
  granularity?: DragGranularity;
26
24
  }
27
- /** The unit a multi-click drag grows by. Spans are raw offsets; the press's own span is the
28
- * floor the range never shrinks below. */
25
+ /** The unit a multi-click drag grows by. Spans are raw offsets; the span the click itself
26
+ * selected is the floor the range never shrinks below. */
29
27
  export interface DragGranularity {
30
- /** Where the press selected; a pointer that names no other block paints here. */
28
+ /** The element the click selected in; a pointer over no other block paints here. */
31
29
  surface: HTMLElement;
32
30
  anchorSpan: {
33
31
  start: number;
@@ -13,9 +13,8 @@ import { blockNearPoint } from './nearest-block';
13
13
  /** Document-level pointer listeners for a cross-block drag started at `down`, plus a disposer. */
14
14
  export function installDragListener(ctx, anchorPoint, down) {
15
15
  function processMove(clientX, clientY) {
16
- // The nearest block, not the one under the pointer: moves coalesce to one per frame, so a
17
- // burst ending in the margin would otherwise discard every on-block sample in it, and an
18
- // autoscrolling drag sends nothing but off-block points.
16
+ // The nearest block, not the one under the pointer: moves coalesce to one per frame, and
17
+ // an autoscrolling drag sends nothing but off-block points.
19
18
  const near = blockNearPoint(ctx.editorRoot, clientX, clientY);
20
19
  if (!near)
21
20
  return;
@@ -25,17 +24,16 @@ export function installDragListener(ctx, anchorPoint, down) {
25
24
  }
26
25
  if (comparePaths(near.path, anchorPoint.path) === 0) {
27
26
  if (!('offset' in anchorPoint)) {
28
- if (ctx.paintSameBlock)
27
+ if (ctx.paintSameBlock?.())
29
28
  takeAnchorBlockWhole();
30
29
  return;
31
30
  }
32
31
  if (ctx.selection.isCrossBlock) {
33
- // Pointer returned to the anchor block: collapse so the overlay stops painting a
34
- // stale remote range. The browser's drag has been extending the native selection
35
- // underneath all along, so handing back gives the right single-block highlight.
32
+ // Back in the anchor block: the browser's drag has been extending the native
33
+ // selection all along, so collapsing the cross-block range restores its highlight.
36
34
  ctx.selection.collapse();
37
35
  }
38
- if (ctx.paintSameBlock)
36
+ if (ctx.paintSameBlock?.())
39
37
  paintSameBlockRange(near.endpointHere());
40
38
  return;
41
39
  }
@@ -44,8 +42,8 @@ export function installDragListener(ctx, anchorPoint, down) {
44
42
  return;
45
43
  if (isWholeBlockEndpoint(focusPoint) && !reachedCentreLine(near.path, clientY))
46
44
  return;
47
- // A whole unit re-enters rather than extends: its anchor's side is resolved against the
48
- // new focus by the entry, where an extend would keep the unit's start as the anchor.
45
+ // A whole-block range re-enters rather than extends: entering picks the anchor's side
46
+ // against the new focus, where extending would keep the block's start as the anchor.
49
47
  if (!ctx.selection.isCrossBlock || ctx.selection.wholeUnitPath) {
50
48
  ctx.selection.enterCrossBlock(anchorPoint, focusPoint);
51
49
  }
@@ -53,8 +51,8 @@ export function installDragListener(ctx, anchorPoint, down) {
53
51
  ctx.selection.extendFocus(focusPoint);
54
52
  }
55
53
  }
56
- // The anchor's side flips with the drag's direction (the press's span ends the range going up,
57
- // starts it going down), so a flip re-enters; a same-side move only extends.
54
+ // The anchor's side follows the drag's direction (the clicked span ends the range going up,
55
+ // starts it going down), so a direction change re-enters; a same-side move only extends.
58
56
  let anchorAfter = null;
59
57
  function processGranularMove(unit, near, clientX, clientY) {
60
58
  const anchorIsChar = 'offset' in anchorPoint && !anchorPoint.cellCoordinate;
@@ -90,10 +88,8 @@ export function installDragListener(ctx, anchorPoint, down) {
90
88
  ctx.selection.extendFocus(focus);
91
89
  }
92
90
  }
93
- // A block with no positions inside it is in or out as a unit, and the unit joins the range
94
- // once the pointer has crossed its centre line coming from the anchor's side: a sweep that
95
- // merely touched its edge has not asked for it. Not reached, the last focus stands, so the
96
- // range grows to the block only when the pointer commits to it.
91
+ // A block with no positions inside joins the range only once the pointer crosses its centre
92
+ // line from the anchor's side; a sweep that merely touches its edge has not asked for it.
97
93
  function reachedCentreLine(path, clientY) {
98
94
  const box = ctx.getBlockElByPath(path)?.getBoundingClientRect();
99
95
  if (!box)
@@ -101,16 +97,13 @@ export function installDragListener(ctx, anchorPoint, down) {
101
97
  const middle = box.top + box.height / 2;
102
98
  return comparePaths(anchorPoint.path, path) < 0 ? clientY >= middle : clientY <= middle;
103
99
  }
104
- // A whole-block anchor (a table, an equation) has nothing to paint natively either, and a range
105
- // that only appears once the pointer reaches ANOTHER block reads as a drag that does nothing.
106
- // The block is taken whole the moment the pointer moves, as the unit the state stores and the
107
- // overlay paints (`wholeUnitPath`); a pointer returning from outside takes it whole again.
100
+ // A whole-block anchor (a table, an equation) has nothing to paint natively, so the block is
101
+ // taken whole the moment the pointer moves, or the drag would look like it does nothing.
108
102
  function takeAnchorBlockWhole() {
109
103
  if (ctx.selection.wholeUnitPath)
110
104
  return;
111
- // Both ends whole: the pointer's position INSIDE the block is not a rectangle to grow (a
112
- // press beside a table dragged up over it would otherwise select the rows below the
113
- // pointer, the opposite of the sweep). The block is the unit until the drag leaves it.
105
+ // Both ends whole: a click beside a table dragged up over it would otherwise select the
106
+ // rows below the pointer, the opposite of the sweep.
114
107
  ctx.selection.enterCrossBlock(anchorPoint, {
115
108
  path: anchorPoint.path.slice(),
116
109
  wholeBlock: true
@@ -129,8 +122,8 @@ export function installDragListener(ctx, anchorPoint, down) {
129
122
  blockEl.focus({ preventScroll: true });
130
123
  applySingleBlockRange(blockEl, Math.min(anchorPoint.offset, focusPoint.offset), Math.max(anchorPoint.offset, focusPoint.offset));
131
124
  }
132
- // Pointer may land on a scrollable element directly (the table's `.table-block` edge), so
133
- // search from `target` itself, not its parent.
125
+ // The pointer may land on a scrollable element directly (the table's `.table-block` edge),
126
+ // so the search starts from `target` itself, not its parent.
134
127
  function scrollableSelfOrAncestor(target) {
135
128
  let cur = target;
136
129
  while (cur && cur !== ctx.editorRoot) {
@@ -164,24 +157,21 @@ export function installDragListener(ctx, anchorPoint, down) {
164
157
  lifetimeSignal: ctx.lifetimeSignal
165
158
  });
166
159
  }
167
- /**
168
- * Plant a collapsed native caret in the focus block as a paste/key-dispatch anchor; without it
169
- * Chromium routes paste events to <body>. The highlight still comes from SelectionOverlay.
170
- */
160
+ /** Plants a collapsed native caret in the focus block so paste and key events have a target;
161
+ * without it Chromium routes paste events to <body>. */
171
162
  function parkCaretInFocusBlock(ctx) {
172
163
  const focus = ctx.selection.focus;
173
164
  if (!focus)
174
165
  return;
175
- // A whole unit has no text node for a caret: focus parks on the editor root, whose keydown
176
- // and clipboard arms serve a custom range (as they do for a windowed-out block), with no
177
- // native range left behind for the browser to act on.
166
+ // A whole-block range has no text node for a caret, so the editor root takes focus and its
167
+ // keydown and clipboard handlers serve the range.
178
168
  if (ctx.selection.wholeUnitPath) {
179
169
  clearNativeSelection();
180
170
  ctx.editorRoot.focus({ preventScroll: true });
181
171
  return;
182
172
  }
183
173
  // A drag ending inside a table leaves a focus addressing the table block by cell index; the
184
- // landing is the cell that actually holds a caret.
174
+ // caret goes in the cell that actually holds one.
185
175
  const landing = ctx.selection.cellLandingFor(focus);
186
176
  const blockEl = ctx.getBlockElByPath(landing.path);
187
177
  if (!blockEl)
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Where a caret can live BETWEEN two sibling blocks: the boundaries no block's own editing
3
- * surface can reach, read off the kinds' `gapEdges` declarations. Eligibility is pure — doc
4
- * in, boolean out; `tryGapStop` is the one seam that turns it into an arrival.
5
- * The gap is deliberately not a `SelectionPoint`: it is never a cross-block endpoint.
2
+ * Where a caret can sit between two sibling blocks: the boundaries no block's own editable
3
+ * element can reach, read off the kinds' `gapEdges`. The eligibility checks are pure (document
4
+ * in, boolean out); `tryGapStop` is the one call that places the caret. A gap is deliberately
5
+ * not a `SelectionPoint`: it is never a cross-block endpoint.
6
6
  */
7
7
  import type { DocumentView, NodeView } from '../core/node-views';
8
8
  import { type PresentationMode } from '../presentation-mode';
@@ -12,36 +12,25 @@ export interface GapCaretPosition {
12
12
  parentPath: number[];
13
13
  index: number;
14
14
  }
15
- /**
16
- * A boundary is eligible when every block facing it declares that edge — an unregistered or
17
- * undeclared kind refuses on its side. The root's trailing boundary is excluded: the
18
- * move-past-end append (`editor-actions/focus/focus.ts`) already owns it.
19
- */
15
+ /** A boundary is eligible when every block facing it declares that edge. The root's trailing
16
+ * boundary is excluded, since the move-past-end append already handles it. */
20
17
  export declare function gapEligibleAt(doc: DocumentView, parentPath: number[], index: number): boolean;
21
- /**
22
- * The same rule for a scope that already holds its own children — the renderer, which has them
23
- * in hand and no path to resolve. `ownsTrailingBoundary` is false for the root, whose trailing
24
- * boundary belongs to the move-past-end append.
25
- */
18
+ /** The same rule for a caller that already has the children and no path to resolve;
19
+ * `ownsTrailingBoundary` is false for the root. */
26
20
  export declare function gapEligibleAmong(children: readonly NodeView[], index: number, ownsTrailingBoundary: boolean): boolean;
27
- /**
28
- * The children a gap could live between at `parentPath`, or null when that path names no
29
- * scope a BlockList renders. Shared with the undo restore road, so a drifted path cannot
30
- * park a caret somewhere nothing would paint it.
31
- */
21
+ /** The children a gap could sit between at `parentPath`, or null when that path names no child
22
+ * list a BlockList renders, so a stale path cannot put a caret where nothing paints it. */
32
23
  export declare function gapScopeChildren(doc: DocumentView, parentPath: number[]): readonly NodeView[] | null;
33
- /** What an arrival needs beyond the boundary itself. Getters, so a bound stop reads live. */
24
+ /** What placing a gap caret needs beyond the boundary itself. Its reads are getters, so a stop
25
+ * bound early sees live values. */
34
26
  export interface GapStopScope {
35
27
  getDoc: () => DocumentView;
36
28
  selection: SelectionState;
37
- getPresentationMode?: () => PresentationMode;
29
+ getPresentationMode: () => PresentationMode;
38
30
  }
39
- /**
40
- * Whether an arriving gesture may park here. Reading mode never may: it has no caret at
41
- * all, so the gesture keeps its old landing. A caller that must act BETWEEN the decision
42
- * and the landing asks this, then goes through the door itself.
43
- */
31
+ /** Whether a gesture may put the caret in this gap; reading mode has no caret, so never. A caller
32
+ * that must act between the decision and the placement asks this, then calls `placeGapCaret`. */
44
33
  export declare function canGapStop(scope: GapStopScope, parentPath: number[], boundaryIndex: number): boolean;
45
- /** Park the caret at an eligible `boundaryIndex`, reporting whether it did — so a
46
- * traversal can stop instead of entering its target. */
34
+ /** Puts the caret at an eligible `boundaryIndex` and reports whether it did, so a traversal
35
+ * can stop instead of entering its target. */
47
36
  export declare function tryGapStop(scope: GapStopScope, parentPath: number[], boundaryIndex: number): boolean;
@@ -1,29 +1,23 @@
1
1
  /**
2
- * Where a caret can live BETWEEN two sibling blocks: the boundaries no block's own editing
3
- * surface can reach, read off the kinds' `gapEdges` declarations. Eligibility is pure — doc
4
- * in, boolean out; `tryGapStop` is the one seam that turns it into an arrival.
5
- * The gap is deliberately not a `SelectionPoint`: it is never a cross-block endpoint.
2
+ * Where a caret can sit between two sibling blocks: the boundaries no block's own editable
3
+ * element can reach, read off the kinds' `gapEdges`. The eligibility checks are pure (document
4
+ * in, boolean out); `tryGapStop` is the one call that places the caret. A gap is deliberately
5
+ * not a `SelectionPoint`: it is never a cross-block endpoint.
6
6
  */
7
7
  import { isBlockNode, nodeAt } from '../tree-operations/node-primitives';
8
8
  import { tryGetBlockKindDescriptor } from '../schema/block-kind-descriptor';
9
9
  import { isReadingMode } from '../presentation-mode';
10
10
  import { placeGapCaret } from './caret-doors';
11
- /**
12
- * A boundary is eligible when every block facing it declares that edge — an unregistered or
13
- * undeclared kind refuses on its side. The root's trailing boundary is excluded: the
14
- * move-past-end append (`editor-actions/focus/focus.ts`) already owns it.
15
- */
11
+ /** A boundary is eligible when every block facing it declares that edge. The root's trailing
12
+ * boundary is excluded, since the move-past-end append already handles it. */
16
13
  export function gapEligibleAt(doc, parentPath, index) {
17
14
  const children = gapScopeChildren(doc, parentPath);
18
15
  if (!children)
19
16
  return false;
20
17
  return gapEligibleAmong(children, index, parentPath.length > 0);
21
18
  }
22
- /**
23
- * The same rule for a scope that already holds its own children — the renderer, which has them
24
- * in hand and no path to resolve. `ownsTrailingBoundary` is false for the root, whose trailing
25
- * boundary belongs to the move-past-end append.
26
- */
19
+ /** The same rule for a caller that already has the children and no path to resolve;
20
+ * `ownsTrailingBoundary` is false for the root. */
27
21
  export function gapEligibleAmong(children, index, ownsTrailingBoundary) {
28
22
  if (index < 0 || index > children.length)
29
23
  return false;
@@ -34,11 +28,8 @@ export function gapEligibleAmong(children, index, ownsTrailingBoundary) {
34
28
  }
35
29
  return declaresEdge(children[index - 1], 'after') && declaresEdge(children[index], 'before');
36
30
  }
37
- /**
38
- * The children a gap could live between at `parentPath`, or null when that path names no
39
- * scope a BlockList renders. Shared with the undo restore road, so a drifted path cannot
40
- * park a caret somewhere nothing would paint it.
41
- */
31
+ /** The children a gap could sit between at `parentPath`, or null when that path names no child
32
+ * list a BlockList renders, so a stale path cannot put a caret where nothing paints it. */
42
33
  export function gapScopeChildren(doc, parentPath) {
43
34
  const parent = nodeAt(doc, parentPath);
44
35
  if (!parent)
@@ -52,18 +43,15 @@ function declaresEdge(node, edge) {
52
43
  const edges = tryGetBlockKindDescriptor(node.kind)?.gapEdges;
53
44
  return edges === edge || edges === 'both';
54
45
  }
55
- /**
56
- * Whether an arriving gesture may park here. Reading mode never may: it has no caret at
57
- * all, so the gesture keeps its old landing. A caller that must act BETWEEN the decision
58
- * and the landing asks this, then goes through the door itself.
59
- */
46
+ /** Whether a gesture may put the caret in this gap; reading mode has no caret, so never. A caller
47
+ * that must act between the decision and the placement asks this, then calls `placeGapCaret`. */
60
48
  export function canGapStop(scope, parentPath, boundaryIndex) {
61
49
  if (isReadingMode(scope.getPresentationMode))
62
50
  return false;
63
51
  return gapEligibleAt(scope.getDoc(), parentPath, boundaryIndex);
64
52
  }
65
- /** Park the caret at an eligible `boundaryIndex`, reporting whether it did — so a
66
- * traversal can stop instead of entering its target. */
53
+ /** Puts the caret at an eligible `boundaryIndex` and reports whether it did, so a traversal
54
+ * can stop instead of entering its target. */
67
55
  export function tryGapStop(scope, parentPath, boundaryIndex) {
68
56
  if (!canGapStop(scope, parentPath, boundaryIndex))
69
57
  return false;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * What copying a rectangle of table cells writes: a GFM sub-table for plain text and an HTML
3
+ * table for spreadsheets. The cell's copy and the editor root's copy both write it.
4
+ */
5
+ import type { DocumentView } from '../core/node-views';
6
+ import type { GridCoverage } from './range-coverage';
7
+ export interface GridClipboard {
8
+ text: string;
9
+ html: string;
10
+ }
11
+ /** Null for a single cell, whose copy is its own text. */
12
+ export declare function gridClipboard(doc: DocumentView, grid: GridCoverage): GridClipboard | null;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * What copying a rectangle of table cells writes: a GFM sub-table for plain text and an HTML
3
+ * table for spreadsheets. The cell's copy and the editor root's copy both write it.
4
+ */
5
+ import { isBlockNode, nodeAt } from '../tree-operations/node-primitives';
6
+ import { copyRectangleAsSubTable } from '../tree-operations/sub-table-copy';
7
+ import { gridToHtmlTable, rectangleGrid } from '../tree-operations/table-grid-clipboard';
8
+ /** Null for a single cell, whose copy is its own text. */
9
+ export function gridClipboard(doc, grid) {
10
+ const { top, left, rows, cols } = grid.rect;
11
+ if (rows * cols === 1)
12
+ return null;
13
+ const table = nodeAt(doc, grid.path);
14
+ if (!table || !isBlockNode(table))
15
+ return null;
16
+ const from = { rowIdx: top, colIdx: left };
17
+ const to = { rowIdx: top + rows - 1, colIdx: left + cols - 1 };
18
+ return {
19
+ text: copyRectangleAsSubTable(table, from, to),
20
+ html: gridToHtmlTable(rectangleGrid(table, from, to))
21
+ };
22
+ }