@voithos-labs/aragonite 0.10.4 → 0.10.7

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