@voithos-labs/aragonite 0.10.3 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +12 -5
  3. package/dist/a11y-strings.js +61 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +13 -20
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +619 -1089
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +36 -67
  26. package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +35 -28
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +58 -32
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +144 -202
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +46 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
  102. package/dist/components/blocks/text/click-snap-guard.js +16 -5
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -105
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +243 -208
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +13 -30
  144. package/dist/components/drag-handle.js +25 -63
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -31
  162. package/dist/components/editor-root-listeners.js +49 -46
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +26 -30
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +380 -0
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +55 -68
  256. package/dist/core/inline/inline-widgets.js +55 -58
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +33 -17
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -7
  347. package/dist/cursor/height-oracle.js +26 -75
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +16 -8
  365. package/dist/cursor/scrollport.js +28 -5
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -13
  375. package/dist/cursor/visual-lines.js +72 -28
  376. package/dist/cursor/widget-edge-snap.d.ts +23 -0
  377. package/dist/cursor/widget-edge-snap.js +39 -0
  378. package/dist/cursor/widget-offset.d.ts +111 -102
  379. package/dist/cursor/widget-offset.js +352 -177
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +31 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +33 -52
  434. package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
  435. package/dist/editor-actions/focus/focus-landing.js +29 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +55 -76
  465. package/dist/editor-actions/plugin/container.js +105 -186
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +91 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +38 -8
  550. package/dist/plugin.js +102 -74
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +113 -85
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -75
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +143 -292
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +79 -81
  695. package/dist/schema/commands.js +156 -116
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +9 -11
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +73 -78
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +93 -152
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +61 -104
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +53 -146
  807. package/dist/selection/dead-space-caret.d.ts +20 -28
  808. package/dist/selection/dead-space-caret.js +79 -87
  809. package/dist/selection/drag-pointer.d.ts +22 -5
  810. package/dist/selection/drag-pointer.js +63 -31
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -39
  816. package/dist/selection/keyboard-extend.js +94 -116
  817. package/dist/selection/multi-click.d.ts +37 -0
  818. package/dist/selection/multi-click.js +197 -0
  819. package/dist/selection/native-bridge.d.ts +30 -37
  820. package/dist/selection/native-bridge.js +80 -100
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +31 -14
  824. package/dist/selection/path-lookup.js +110 -20
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +9 -0
  828. package/dist/selection/pointer-gesture.js +11 -0
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -33
  832. package/dist/selection/primitives.js +61 -53
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -19
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +52 -0
  852. package/dist/selection/selection-drop.js +317 -0
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +75 -53
  864. package/dist/styles/editor.css +248 -139
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
  960. package/dist/tree-operations/paste/replacement-parse.js +24 -0
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +329 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +267 -183
  996. package/docs/guide/plugin-guide.md +341 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +17 -21
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/invariants/split-landing.d.ts +0 -8
  1015. package/dist/invariants/split-landing.js +0 -15
  1016. package/dist/selection/double-click-trim.d.ts +0 -17
  1017. package/dist/selection/double-click-trim.js +0 -57
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Double and triple click: the second click of a run selects the word under it, the third the
3
+ * whole block's text, and a drag from either grows by that unit. The editor owns the gesture
4
+ * from the second click so the browser paints nothing of its own: its word rule varies by
5
+ * platform, it walks into non-editable widgets, and a marker here never joins a word.
6
+ */
7
+ import { asDomTextOffset } from '../cursor/coordinate-spaces';
8
+ import { caretOffsetAtPoint } from '../cursor/point-offset';
9
+ import { containerDomTextLength, maskedWalkText, rawOfWalkOffset, walkOffsetOfRaw } from '../cursor/widget-offset';
10
+ import { isWholeBlockInputProxy } from '../editor-actions/whole-block-focus-surface';
11
+ import { installDragListener } from './drag-pointer';
12
+ import { applySingleBlockRange, applySurfaceContentRange } from './native-bridge';
13
+ import { blockNearPoint } from './nearest-block';
14
+ import { readBlockPath } from './path-lookup';
15
+ // ── The word rule ────────────────────────────────────────────────────────────
16
+ let segmenter;
17
+ function wordSegmenter() {
18
+ if (segmenter === undefined) {
19
+ segmenter =
20
+ typeof Intl.Segmenter === 'function'
21
+ ? new Intl.Segmenter(undefined, { granularity: 'word' })
22
+ : null;
23
+ }
24
+ return segmenter;
25
+ }
26
+ /** The segment at `offset`: the word ending there if there is one, else the segment starting
27
+ * there, as the browser takes it. Null on a platform with no segmenter. */
28
+ export function wordSpanAt(text, offset) {
29
+ const seg = wordSegmenter();
30
+ if (!seg || text.length === 0)
31
+ return null;
32
+ const segments = seg.segment(text);
33
+ const at = Math.max(0, Math.min(offset, text.length));
34
+ const left = at > 0 ? segments.containing(at - 1) : undefined;
35
+ const right = at < text.length ? segments.containing(at) : undefined;
36
+ if (left && right && left.index === right.index)
37
+ return spanOf(left);
38
+ if (left?.isWordLike)
39
+ return spanOf(left);
40
+ const pick = right ?? left;
41
+ return pick ? spanOf(pick) : null;
42
+ }
43
+ function spanOf(segment) {
44
+ return { start: segment.index, end: segment.index + segment.segment.length };
45
+ }
46
+ /** The raw span `granularity` takes around a raw offset in `surface`; null where the word rule
47
+ * has nothing to read. */
48
+ export function spanAround(surface, granularity, rawOffset) {
49
+ if (granularity === 'block') {
50
+ return { start: 0, end: rawOfWalkOffset(surface, containerDomTextLength(surface)) };
51
+ }
52
+ const span = wordSpanAt(maskedWalkText(surface), walkOffsetOfRaw(surface, rawOffset));
53
+ if (!span)
54
+ return null;
55
+ return {
56
+ start: rawOfWalkOffset(surface, asDomTextOffset(span.start)),
57
+ end: rawOfWalkOffset(surface, asDomTextOffset(span.end))
58
+ };
59
+ }
60
+ /** The unit a click count selects; a run stays at the block unit past three clicks. */
61
+ export function granularityForClickCount(clickCount) {
62
+ if (clickCount === 2)
63
+ return 'word';
64
+ return clickCount >= 3 ? 'block' : null;
65
+ }
66
+ /** Root listeners for the gesture. The mousedown and mouseup are cancelled so the browser paints
67
+ * no caret over the range, but never the pointerdown, which would silence the click. */
68
+ export function installMultiClickSelect(deps) {
69
+ let lastPointerDown = null;
70
+ let claimed = false;
71
+ const onPointerDown = (e) => {
72
+ lastPointerDown = e;
73
+ };
74
+ const onMouseUp = (e) => {
75
+ if (claimed)
76
+ e.preventDefault();
77
+ };
78
+ const onMouseDown = (e) => {
79
+ claimed = false;
80
+ const granularity = granularityForClickCount(e.detail);
81
+ if (!granularity || e.button !== 0 || e.shiftKey || e.ctrlKey || e.metaKey || e.altKey)
82
+ return;
83
+ if (granularity === 'word' && pressesInlineWidget(e.target))
84
+ return;
85
+ // A widget already selected whole took the run with its first click, so no later click of
86
+ // that run is the block's: claiming one would paint a range over an object selection.
87
+ if (deps.pressesSelectedWidget(e.target))
88
+ return;
89
+ const press = pressedSurface(deps, e);
90
+ if (!press)
91
+ return;
92
+ const anchorSpan = selectAtPoint(press.surface, granularity, e.clientX, e.clientY);
93
+ if (!anchorSpan)
94
+ return;
95
+ e.preventDefault();
96
+ claimed = true;
97
+ const anchor = press.anchor ?? blockNearPoint(deps.editorRoot, e.clientX, e.clientY)?.endpointHere();
98
+ if (!anchor || !lastPointerDown)
99
+ return;
100
+ installDragListener({
101
+ editorRoot: deps.editorRoot,
102
+ scrollContainer: deps.getScrollContainer(),
103
+ selection: deps.selection,
104
+ getBlockElByPath: deps.getBlockElByPath,
105
+ lifetimeSignal: deps.lifetimeSignal,
106
+ granularity: createGranularity(deps.getBlockElByPath, press.surface, granularity, anchorSpan)
107
+ }, anchor, lastPointerDown);
108
+ };
109
+ deps.editorRoot.addEventListener('pointerdown', onPointerDown);
110
+ deps.editorRoot.addEventListener('mousedown', onMouseDown);
111
+ deps.editorRoot.addEventListener('mouseup', onMouseUp);
112
+ return () => {
113
+ deps.editorRoot.removeEventListener('pointerdown', onPointerDown);
114
+ deps.editorRoot.removeEventListener('mousedown', onMouseDown);
115
+ deps.editorRoot.removeEventListener('mouseup', onMouseUp);
116
+ };
117
+ }
118
+ /** The editable element a click selects in: the one under it, else the nearest block's, the
119
+ * way a single click in the margin lands there. A block with no text has no word to select. */
120
+ function pressedSurface(deps, e) {
121
+ // Up through a non-editable span inside the editable (a list's `- ` prefix) to the editable.
122
+ const own = surfaceOf(e.target);
123
+ if (own)
124
+ return isWholeBlockInputProxy(own) ? null : { surface: own, anchor: null };
125
+ const path = deps.marginBlockAt(e.target, e.clientX, e.clientY);
126
+ const block = path && deps.getBlockElByPath(path);
127
+ if (!block)
128
+ return null;
129
+ // A container's own box (a quote's gutter) selects in the leaf nearest the click, the way a
130
+ // click beside a line lands in that line.
131
+ const surface = block.contentEditable === 'true' ? block : nearestSurfaceIn(block, e.clientY);
132
+ const surfacePath = surface && pathOfSurface(surface);
133
+ const offset = surface && caretOffsetAtPoint(surface, e.clientX, e.clientY);
134
+ if (!surface)
135
+ return null;
136
+ return { surface, anchor: surfacePath && offset !== null ? { path: surfacePath, offset } : null };
137
+ }
138
+ function nearestSurfaceIn(block, clientY) {
139
+ let best = null;
140
+ let bestDistance = Infinity;
141
+ for (const el of block.querySelectorAll('[contenteditable="true"]')) {
142
+ const rect = el.getBoundingClientRect();
143
+ const distance = clientY < rect.top ? rect.top - clientY : Math.max(0, clientY - rect.bottom);
144
+ if (distance < bestDistance) {
145
+ best = el;
146
+ bestDistance = distance;
147
+ }
148
+ }
149
+ return best;
150
+ }
151
+ /** The path of the block this editable element is the text of; null for one addressed some
152
+ * other way (a table's cell), whose drag is not a character drag. */
153
+ function pathOfSurface(surface) {
154
+ const host = surface.closest('[data-block-path]');
155
+ const path = readBlockPath(host);
156
+ if (!path || !host?.contains(surface))
157
+ return null;
158
+ return host.querySelector('[contenteditable="true"]') === surface ? path : null;
159
+ }
160
+ /** Selects the unit's span at the click and returns it, in raw offsets. */
161
+ function selectAtPoint(surface, granularity, clientX, clientY) {
162
+ if (granularity === 'block') {
163
+ applySurfaceContentRange(surface);
164
+ return spanAround(surface, 'block', 0);
165
+ }
166
+ const offset = caretOffsetAtPoint(surface, clientX, clientY);
167
+ const span = offset === null ? null : spanAround(surface, 'word', offset);
168
+ if (!span || span.start === span.end)
169
+ return null;
170
+ applySingleBlockRange(surface, span.start, span.end);
171
+ return span;
172
+ }
173
+ function createGranularity(getBlockElByPath, surface, granularity, anchorSpan) {
174
+ return {
175
+ surface,
176
+ anchorSpan,
177
+ spanAround: (offset) => spanAround(surface, granularity, offset) ?? { start: offset, end: offset },
178
+ expandFocus: (point, side) => {
179
+ const el = point.cellCoordinate ? null : getBlockElByPath(point.path);
180
+ const span = el && spanAround(el, granularity, point.offset);
181
+ if (!span)
182
+ return point;
183
+ return { path: point.path.slice(), offset: side === 'after' ? span.end : span.start };
184
+ }
185
+ };
186
+ }
187
+ /** The second click on an inline widget is that widget's own gesture (a footnote's double-click
188
+ * takes its whole token), so the word level does nothing there. */
189
+ function pressesInlineWidget(target) {
190
+ return target instanceof Element && target.closest('[data-inline-widget]') !== null;
191
+ }
192
+ function surfaceOf(target) {
193
+ let el = target instanceof HTMLElement ? target : null;
194
+ while (el && el.contentEditable !== 'true')
195
+ el = el.parentElement;
196
+ return el;
197
+ }
@@ -1,47 +1,40 @@
1
1
  /**
2
- * Bridge between the browser's native Selection API and SelectionPoint. Pure: callers provide
3
- * target elements and paths, no tree walking. SelectionPoint offsets are raw-semantic, so
4
- * DOM→raw conversion subtracts the length of a leading ambient marker span, whose textContent
5
- * counts toward DOM offsets but not raw.
2
+ * Bridges the browser's Selection API and `SelectionPoint`. Callers provide the elements and
3
+ * paths; nothing here walks the tree. A `SelectionPoint` offset counts raw bytes, and every
4
+ * conversion goes through `cursor/widget-offset.ts`.
6
5
  */
7
- import type { SelectionPoint, EditorSelection } from './primitives';
6
+ import { type SelectionPoint, type EditorSelection } from './primitives';
8
7
  import type { SelectionState } from './selection-state.svelte';
9
8
  import type { BlockComponent } from '../block-component';
10
- /**
11
- * Read the collapsed caret inside `blockEl` into a raw-semantic SelectionPoint.
12
- * Returns null when the caret isn't inside this element.
13
- */
9
+ /** Reads the caret inside `blockEl` as a raw-offset point; null when the caret is elsewhere. */
14
10
  export declare function readNativeCaretInBlock(blockEl: HTMLElement, path: number[]): SelectionPoint | null;
15
- /**
16
- * Place a collapsed native caret at a raw-semantic SelectionPoint, translating through the block's
17
- * ambient length. The park door's twin, so the same landable clamp applies: a caret may not sit
18
- * past a hidden marker run, whatever offset the caller derived. Only collapsed carets clamp — a
19
- * selection may COVER such a run, so `applySingleBlockRange` does not. Raw offset 0 under an
20
- * ambient marker goes AFTER the span: Chromium bounces carets out of its contenteditable="false".
21
- */
11
+ /** Places a collapsed native caret at a `SelectionPoint`, clamped as `parkCaret` clamps: never
12
+ * behind a hidden marker run. */
22
13
  export declare function applyCollapsedCaret(blockEl: HTMLElement, point: SelectionPoint): void;
23
- /**
24
- * Resolve `point.path` to its mounted block element and place a focused collapsed caret there.
25
- * Returns whether an element was found; a missing target is a no-op.
26
- */
14
+ /** A focused collapsed caret in `point`'s mounted block, scrolled to by the focus call itself: kept
15
+ * for the cross-block delete, typing and paste until they land through the caret landing. */
27
16
  export declare function focusCollapsedCaret(getBlockElByPath: (path: number[]) => HTMLElement | null, point: SelectionPoint): boolean;
28
- export declare function applySingleBlockRange(blockEl: HTMLElement, startOffset: number, endOffset: number): void;
17
+ /** Selects an editable element's whole content, past its marker prefix: the first Ctrl+A
18
+ * range and the triple-click one. */
19
+ export declare function applySurfaceContentRange(el: HTMLElement): void;
20
+ /** Selects raw `[anchorOffset, focusOffset]` in one block, backward when the focus comes first. */
21
+ export declare function applySingleBlockRange(blockEl: HTMLElement, anchorOffset: number, focusOffset: number): void;
29
22
  export declare function clearNativeSelection(): void;
30
- /**
31
- * Keep focus inside the editor when an editable block holding it is windowed out; it would
32
- * otherwise fall to <body>. The root is non-editable (`tabindex="-1"`), so focusing it creates
33
- * no native range to sync. No-op unless this block holds focus and the root is still connected.
34
- */
23
+ /** Keeps focus in the editor when a focused block is windowed out, or it would fall to <body>.
24
+ * The root is non-editable, so focusing it creates no native range to sync. */
35
25
  export declare function parkFocusOnEditorRoot(blockEl: HTMLElement | null, editorRoot: HTMLElement | null): void;
36
- /**
37
- * Cross-block from SelectionState if active; otherwise the focused block's cursor as a deep
38
- * path (via getCursorPosition) or a shallow one. Null when no block reports a cursor.
39
- */
26
+ /** The editor's live selection, for every caller outside a gesture. A selected widget reads as its
27
+ * caret, ahead of the caret the browser briefly puts at its paragraph's start. */
40
28
  export declare function readCurrentSelection(selectionState: SelectionState, blockRefs: (BlockComponent | undefined)[]): EditorSelection | null;
41
- /**
42
- * Restore an EditorSelection to the DOM: custom-rendered selections (intra-table, cross-block)
43
- * route through SelectionState's overlay, same-path prose uses the native selection. State
44
- * write and caret landing run inside ONE SelectionState batch, so the single notification
45
- * carries the settled selection. False = the target resolved in the model but not in the DOM.
46
- */
47
- export declare function applySelectionToDom(selection: EditorSelection, selectionState: SelectionState, getBlockElByPath: (path: number[]) => HTMLElement | null): boolean;
29
+ /** What a restore writes into, beside the selection state. */
30
+ export interface RestoreTarget {
31
+ selectionState: SelectionState;
32
+ getBlockElByPath: (path: number[]) => HTMLElement | null;
33
+ /** Where the caret goes for an endpoint: the leaf a caret can sit in, never a hidden one. */
34
+ caretAt: (point: SelectionPoint) => SelectionPoint;
35
+ /** Takes focus for a block held whole, which has no text for a caret, as a drag leaves it. */
36
+ getEditorRoot: () => HTMLElement | null;
37
+ }
38
+ /** Restores an `EditorSelection` to the DOM in one `SelectionState` batch, so the single
39
+ * notification carries the final selection. False when the target is not mounted. */
40
+ export declare function applySelectionToDom(selection: EditorSelection, target: RestoreTarget): boolean;
@@ -1,17 +1,14 @@
1
1
  /**
2
- * Bridge between the browser's native Selection API and SelectionPoint. Pure: callers provide
3
- * target elements and paths, no tree walking. SelectionPoint offsets are raw-semantic, so
4
- * DOM→raw conversion subtracts the length of a leading ambient marker span, whose textContent
5
- * counts toward DOM offsets but not raw.
2
+ * Bridges the browser's Selection API and `SelectionPoint`. Callers provide the elements and
3
+ * paths; nothing here walks the tree. A `SelectionPoint` offset counts raw bytes, and every
4
+ * conversion goes through `cursor/widget-offset.ts`.
6
5
  */
7
- import { asRawOffset, toClampedRawOffset, toDomTextOffset } from '../cursor/coordinate-spaces';
8
- import { clampToLandableRaw, createRangeAtDomTextOffsets, domTextOffsetAtNode } from '../cursor/widget-offset';
9
- import { ambientLengthOf, placeCaretAfterAmbientSpan } from '../ambient/ambient-dom';
6
+ import { cellPoint } from './primitives';
7
+ import { assertInvariant } from '../assert';
8
+ import { checkPlacementEndsWidget } from '../invariants/placement-ends-widget';
9
+ import { placeCaretAtRaw, rawOffsetAt, selectRawRange, selectSurfaceContent } from '../cursor/widget-offset';
10
10
  // ── Read native → SelectionPoint ────────────────────────────────────────────
11
- /**
12
- * Read the collapsed caret inside `blockEl` into a raw-semantic SelectionPoint.
13
- * Returns null when the caret isn't inside this element.
14
- */
11
+ /** Reads the caret inside `blockEl` as a raw-offset point; null when the caret is elsewhere. */
15
12
  export function readNativeCaretInBlock(blockEl, path) {
16
13
  if (document.activeElement !== blockEl)
17
14
  return null;
@@ -19,43 +16,21 @@ export function readNativeCaretInBlock(blockEl, path) {
19
16
  if (!sel || sel.rangeCount === 0)
20
17
  return null;
21
18
  const range = sel.getRangeAt(0);
22
- // The anchor is the fixed end the selection grew from; for a BACKWARD selection it sits at
23
- // range.end, so reading range.start would capture the moving focus and drop the highlighted
24
- // span. Use the real anchor when it resolves inside this block, else keep range.start.
19
+ // In a backward selection the anchor sits at the range's end, so the range start would be the
20
+ // moving focus; the real anchor is used whenever it lies inside the block.
25
21
  const useAnchor = !sel.isCollapsed && sel.anchorNode !== null && blockEl.contains(sel.anchorNode);
26
22
  const node = useAnchor ? sel.anchorNode : range.startContainer;
27
23
  const nodeOffset = useAnchor ? sel.anchorOffset : range.startOffset;
28
- const content = domTextOffsetAtNode(blockEl, node, nodeOffset);
29
- return {
30
- path: path.slice(),
31
- offset: toClampedRawOffset(content, ambientLengthOf(blockEl))
32
- };
24
+ return { path: path.slice(), offset: rawOffsetAt(blockEl, node, nodeOffset) };
33
25
  }
34
26
  // ── Apply SelectionPoint → native ───────────────────────────────────────────
35
- /**
36
- * Place a collapsed native caret at a raw-semantic SelectionPoint, translating through the block's
37
- * ambient length. The park door's twin, so the same landable clamp applies: a caret may not sit
38
- * past a hidden marker run, whatever offset the caller derived. Only collapsed carets clamp — a
39
- * selection may COVER such a run, so `applySingleBlockRange` does not. Raw offset 0 under an
40
- * ambient marker goes AFTER the span: Chromium bounces carets out of its contenteditable="false".
41
- */
27
+ /** Places a collapsed native caret at a `SelectionPoint`, clamped as `parkCaret` clamps: never
28
+ * behind a hidden marker run. */
42
29
  export function applyCollapsedCaret(blockEl, point) {
43
- const ambient = ambientLengthOf(blockEl);
44
- const offset = clampToLandableRaw(blockEl, point.offset, ambient);
45
- if (ambient > 0 && offset <= 0 && placeCaretAfterAmbientSpan(blockEl))
46
- return;
47
- const target = toDomTextOffset(asRawOffset(offset), ambient);
48
- const range = createRangeAtDomTextOffsets(blockEl, target, target);
49
- if (!range)
50
- return;
51
- const sel = window.getSelection();
52
- sel?.removeAllRanges();
53
- sel?.addRange(range);
30
+ placeCaretAtRaw(blockEl, point.offset, { clamp: 'reachable' });
54
31
  }
55
- /**
56
- * Resolve `point.path` to its mounted block element and place a focused collapsed caret there.
57
- * Returns whether an element was found; a missing target is a no-op.
58
- */
32
+ /** A focused collapsed caret in `point`'s mounted block, scrolled to by the focus call itself: kept
33
+ * for the cross-block delete, typing and paste until they land through the caret landing. */
59
34
  export function focusCollapsedCaret(getBlockElByPath, point) {
60
35
  const blockEl = getBlockElByPath(point.path);
61
36
  if (!blockEl)
@@ -64,37 +39,44 @@ export function focusCollapsedCaret(getBlockElByPath, point) {
64
39
  blockEl.focus();
65
40
  return true;
66
41
  }
67
- export function applySingleBlockRange(blockEl, startOffset, endOffset) {
68
- const ambient = ambientLengthOf(blockEl);
69
- const range = createRangeAtDomTextOffsets(blockEl, toDomTextOffset(asRawOffset(startOffset), ambient), toDomTextOffset(asRawOffset(endOffset), ambient));
70
- if (!range)
71
- return;
72
- const sel = window.getSelection();
73
- sel?.removeAllRanges();
74
- sel?.addRange(range);
42
+ // A restore's caret; the restore's reveal policy decides the scroll.
43
+ function restoreCollapsedCaret(getBlockElByPath, point) {
44
+ const blockEl = getBlockElByPath(point.path);
45
+ if (!blockEl)
46
+ return false;
47
+ applyCollapsedCaret(blockEl, point);
48
+ blockEl.focus({ preventScroll: true });
49
+ return true;
50
+ }
51
+ /** Selects an editable element's whole content, past its marker prefix: the first Ctrl+A
52
+ * range and the triple-click one. */
53
+ export function applySurfaceContentRange(el) {
54
+ selectSurfaceContent(el);
55
+ }
56
+ /** Selects raw `[anchorOffset, focusOffset]` in one block, backward when the focus comes first. */
57
+ export function applySingleBlockRange(blockEl, anchorOffset, focusOffset) {
58
+ selectRawRange(blockEl, anchorOffset, focusOffset);
75
59
  }
76
60
  export function clearNativeSelection() {
77
61
  window.getSelection()?.removeAllRanges();
78
62
  }
79
- /**
80
- * Keep focus inside the editor when an editable block holding it is windowed out; it would
81
- * otherwise fall to <body>. The root is non-editable (`tabindex="-1"`), so focusing it creates
82
- * no native range to sync. No-op unless this block holds focus and the root is still connected.
83
- */
63
+ /** Keeps focus in the editor when a focused block is windowed out, or it would fall to <body>.
64
+ * The root is non-editable, so focusing it creates no native range to sync. */
84
65
  export function parkFocusOnEditorRoot(blockEl, editorRoot) {
85
66
  if (!blockEl || !editorRoot?.isConnected)
86
67
  return;
87
- // preventScroll: the implicit focus scroll would fight the reveal path's, whichever port
88
- // owns the scrolling.
68
+ // `preventScroll`: the focus call's own scroll would fight the scroll-into-view that mounts
69
+ // the block.
89
70
  if (document.activeElement === blockEl)
90
71
  editorRoot.focus({ preventScroll: true });
91
72
  }
92
- // ── Selection read/restore for undo ─────────────────────────────────────────
93
- /**
94
- * Cross-block from SelectionState if active; otherwise the focused block's cursor as a deep
95
- * path (via getCursorPosition) or a shallow one. Null when no block reports a cursor.
96
- */
73
+ // ── Selection read/restore ───────────────────────────────────────────────────
74
+ /** The editor's live selection, for every caller outside a gesture. A selected widget reads as its
75
+ * caret, ahead of the caret the browser briefly puts at its paragraph's start. */
97
76
  export function readCurrentSelection(selectionState, blockRefs) {
77
+ const widget = selectionState.widgetCaret();
78
+ if (widget)
79
+ return collapsedSelectionAt(widget.path, widget.offset);
98
80
  if (selectionState.isCrossBlock && selectionState.anchor && selectionState.focus) {
99
81
  return {
100
82
  anchor: copySelectionPoint(selectionState.anchor),
@@ -120,11 +102,8 @@ export function readCurrentSelection(selectionState, blockRefs) {
120
102
  function collapsedSelectionAt(path, offset) {
121
103
  return { anchor: { path: path.slice(), offset }, focus: { path: path.slice(), offset } };
122
104
  }
123
- /**
124
- * The focused block's native selection as distinct anchor/focus raw offsets, so getSelection()
125
- * reports a within-block range instead of collapsing it to the caret. Null when collapsed or
126
- * outside the active block. Offsets convert through that block's ambient length.
127
- */
105
+ /** The focused block's native selection as distinct raw offsets, so a within-block range is not
106
+ * reported collapsed to the caret. Null when collapsed or outside the active block. */
128
107
  function nativeRangeInFocusedBlock(path) {
129
108
  // Node-env callers (undo snapshot capture in unit tests) have no DOM; fall back to the
130
109
  // single caret offset rather than touching document/window.
@@ -138,65 +117,66 @@ function nativeRangeInFocusedBlock(path) {
138
117
  return null;
139
118
  if (!active.contains(sel.anchorNode) || !active.contains(sel.focusNode))
140
119
  return null;
141
- const ambient = ambientLengthOf(active);
142
- const anchorOffset = toClampedRawOffset(domTextOffsetAtNode(active, sel.anchorNode, sel.anchorOffset), ambient);
143
- const focusOffset = toClampedRawOffset(domTextOffsetAtNode(active, sel.focusNode, sel.focusOffset), ambient);
144
120
  return {
145
- anchor: { path: path.slice(), offset: anchorOffset },
146
- focus: { path: path.slice(), offset: focusOffset }
121
+ anchor: { path: path.slice(), offset: rawOffsetAt(active, sel.anchorNode, sel.anchorOffset) },
122
+ focus: { path: path.slice(), offset: rawOffsetAt(active, sel.focusNode, sel.focusOffset) }
147
123
  };
148
124
  }
149
- // A restored table endpoint must keep cellCoordinate, or it skips the whole-row snap and the
150
- // deep-cell collapse routing; the two-branch copy carries the union variant through undo.
125
+ // A restored table endpoint must keep `cellCoordinate`, or it skips the whole-row snap and the
126
+ // collapse into the cell; the two branches keep the union variant intact through undo.
151
127
  function copySelectionPoint(point) {
152
128
  if (point.cellCoordinate) {
153
- return { path: point.path.slice(), offset: point.offset, cellCoordinate: true };
129
+ return cellPoint(point.path, point.offset);
154
130
  }
155
131
  return { path: point.path.slice(), offset: point.offset };
156
132
  }
157
- /**
158
- * Restore an EditorSelection to the DOM: custom-rendered selections (intra-table, cross-block)
159
- * route through SelectionState's overlay, same-path prose uses the native selection. State
160
- * write and caret landing run inside ONE SelectionState batch, so the single notification
161
- * carries the settled selection. False = the target resolved in the model but not in the DOM.
162
- */
163
- export function applySelectionToDom(selection, selectionState, getBlockElByPath) {
133
+ /** Restores an `EditorSelection` to the DOM in one `SelectionState` batch, so the single
134
+ * notification carries the final selection. False when the target is not mounted. */
135
+ export function applySelectionToDom(selection, target) {
164
136
  let placed = false;
165
- selectionState.batch(() => {
166
- placed = placeRestoredSelection(selection, selectionState, getBlockElByPath);
167
- // Announced, not inferred from the arm's own mutation: a restore onto an already-clear
168
- // state changes no editor-owned field and still moves the caret subscribers read back.
169
- selectionState.announceSelection();
137
+ target.selectionState.batch(() => {
138
+ placed = placeRestoredSelection(selection, target);
139
+ assertInvariant('placement-ends-widget', () => checkPlacementEndsWidget(target.selectionState.widget));
140
+ // Announced explicitly: a restore onto an already clear state changes no field of the
141
+ // selection state and still moves the caret that subscribers read back.
142
+ target.selectionState.announceSelection();
170
143
  });
171
144
  return placed;
172
145
  }
173
- function placeRestoredSelection(selection, selectionState, getBlockElByPath) {
174
- // Classify before mutating state so a single-block restore never mints a phantom transient
175
- // cross-block state (enterCrossBlock → clear).
146
+ function placeRestoredSelection(selection, target) {
147
+ const { selectionState, getBlockElByPath } = target;
148
+ // Classify before touching state, so a single-block restore never passes through a transient
149
+ // cross-block state (`enterCrossBlock` then `clear`).
176
150
  const route = selectionState.restoreRoute(selection.anchor, selection.focus);
177
151
  if (route === 'collapsed') {
178
152
  selectionState.clear();
179
- // Through the landing like the custom arm below: a collapsed CELL point reaches this arm
180
- // (equal offsets classify before coordinate space does) carrying a cell index, which a
181
- // char walk on the table wrapper would seat somewhere in the grid's rendered text.
182
- return focusCollapsedCaret(getBlockElByPath, selectionState.cellLandingFor(selection.anchor));
153
+ return restoreCollapsedCaret(getBlockElByPath, target.caretAt(selection.anchor));
154
+ }
155
+ if (route === 'whole-block') {
156
+ const whole = { path: selection.anchor.path.slice(), wholeBlock: true };
157
+ selectionState.enterCrossBlock(whole, whole);
158
+ clearNativeSelection();
159
+ const root = target.getEditorRoot();
160
+ root?.focus({ preventScroll: true });
161
+ return root !== null;
183
162
  }
184
- // No landing translation on this arm: a same-path pair whose block is a table routes 'custom',
185
- // so every pair reaching here is a char range on a prose leaf.
163
+ // No cell translation here: a same-path pair inside a table routes to the overlay, so every
164
+ // pair reaching this branch is a character range on a text leaf.
186
165
  if (route === 'single-block') {
187
166
  selectionState.clear();
188
167
  const blockEl = getBlockElByPath(selection.anchor.path);
189
168
  if (!blockEl)
190
169
  return false;
191
170
  applySingleBlockRange(blockEl, selection.anchor.offset, selection.focus.offset);
192
- blockEl.focus();
171
+ blockEl.focus({ preventScroll: true });
193
172
  return true;
194
173
  }
195
- // Custom: the overlay paints. Park a collapsed caret in the focus block as a paste/key
196
- // dispatch anchor (Chromium otherwise routes paste to <body>). A cell-coordinate focus
197
- // addresses the table wrapper by cell index, so park in its deep cell instead.
174
+ // The overlay paints the range; a collapsed caret in the focus block (or its cell) gives paste
175
+ // and key events a target, since Chromium otherwise routes paste to <body>.
198
176
  selectionState.enterCrossBlock(selection.anchor, selection.focus);
199
- if (focusCollapsedCaret(getBlockElByPath, selectionState.cellLandingFor(selection.focus))) {
177
+ // The stored focus, which normalization may have turned into a cell index.
178
+ const focus = selectionState.focus ?? selection.focus;
179
+ if (restoreCollapsedCaret(getBlockElByPath, target.caretAt(focus))) {
200
180
  return true;
201
181
  }
202
182
  clearNativeSelection();
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * The mounted block nearest a viewport point, and the endpoint that point addresses. A gesture
3
- * that must answer EVERY point — the dead-space click, a drag into the margin — resolves an
4
- * off-block point through here instead of declining it. The probe point never leaves the module:
5
- * a caller hit-testing at its own raw point gets no offset at all on a character surface.
6
- * Only mounted blocks are measured; a caller answering for a windowed-out tail reconciles itself.
3
+ * that must answer every point (a dead-space click, a drag into the margin) resolves an off-block
4
+ * point here: clamped into the nearest box, then handed down a container to the child level with
5
+ * it. Only mounted blocks are measured; a caller handling an unmounted tail does so itself.
7
6
  */
7
+ import { type BlockHit } from './block-hit-test';
8
8
  import type { SelectionEndpoint } from './primitives';
9
9
  export interface BlockBand {
10
10
  top: number;
@@ -17,18 +17,14 @@ export interface MeasuredBlock {
17
17
  }
18
18
  /** Document order, since bands may nest and every walk over them depends on it. */
19
19
  export declare function measureBlocks(root: HTMLElement): MeasuredBlock[];
20
- /**
21
- * The band a `y` belongs to. `belowAll` marks a point past the last band, the end-of-document
22
- * gesture, which lands at a trailing corner rather than under its own x. A y in a gap resolves to
23
- * the nearest band, so no point is left unanswered. Bands arrive in document order and may nest,
24
- * so containment scans forward, outermost wins.
25
- */
20
+ /** The band a `y` belongs to; a y in a gap resolves to the nearest band, so no point is left
21
+ * unanswered. `belowAll` marks a point past the last band, which lands at a trailing corner. */
26
22
  export declare function nearestBand(bands: BlockBand[], y: number): {
27
23
  index: number;
28
24
  belowAll: boolean;
29
25
  } | null;
30
- /** The band's own probe point: {@link clampPointIntoBox}, except that `belowAll` takes the
31
- * trailing corner — the block's last position — rather than the point's own x. */
26
+ /** The point a band is hit-tested at: {@link clampPointIntoBox}, except that `belowAll` takes the
27
+ * trailing corner (the block's last position) rather than the point's own x. */
32
28
  export declare function probePointIn(rect: DOMRect, x: number, y: number, belowAll: boolean): {
33
29
  x: number;
34
30
  y: number;
@@ -41,3 +37,12 @@ export interface NearestBlock {
41
37
  /** The block a point addresses: the one under it, else the nearest one with the point clamped
42
38
  * into its box. Null only where nothing is mounted. */
43
39
  export declare function blockNearPoint(editorRoot: HTMLElement, clientX: number, clientY: number): NearestBlock | null;
40
+ /** A hit and the point it was hit-tested at. */
41
+ export interface ProbedHit {
42
+ hit: BlockHit;
43
+ x: number;
44
+ y: number;
45
+ }
46
+ /** Hands a point on a container's own box (a quote's gutter, a list's indent) down to the child
47
+ * level with it, at any depth; a container with its own editable row keeps an unmatched point. */
48
+ export declare function descendToLevelChild(root: HTMLElement, probed: ProbedHit, belowAll?: boolean): ProbedHit;