@voithos-labs/aragonite 0.10.3 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +12 -5
  3. package/dist/a11y-strings.js +61 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +13 -20
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +619 -1089
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +36 -67
  26. package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +35 -28
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +58 -32
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +144 -202
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +46 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
  102. package/dist/components/blocks/text/click-snap-guard.js +16 -5
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -105
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +243 -208
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +13 -30
  144. package/dist/components/drag-handle.js +25 -63
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -31
  162. package/dist/components/editor-root-listeners.js +49 -46
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +26 -30
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +380 -0
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +55 -68
  256. package/dist/core/inline/inline-widgets.js +55 -58
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +33 -17
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -7
  347. package/dist/cursor/height-oracle.js +26 -75
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +16 -8
  365. package/dist/cursor/scrollport.js +28 -5
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -13
  375. package/dist/cursor/visual-lines.js +72 -28
  376. package/dist/cursor/widget-edge-snap.d.ts +23 -0
  377. package/dist/cursor/widget-edge-snap.js +39 -0
  378. package/dist/cursor/widget-offset.d.ts +111 -102
  379. package/dist/cursor/widget-offset.js +352 -177
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +31 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +33 -52
  434. package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
  435. package/dist/editor-actions/focus/focus-landing.js +29 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +55 -76
  465. package/dist/editor-actions/plugin/container.js +105 -186
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +91 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +38 -8
  550. package/dist/plugin.js +102 -74
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +113 -85
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -75
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +143 -292
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +79 -81
  695. package/dist/schema/commands.js +156 -116
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +9 -11
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +73 -78
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +93 -152
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +61 -104
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +53 -146
  807. package/dist/selection/dead-space-caret.d.ts +20 -28
  808. package/dist/selection/dead-space-caret.js +79 -87
  809. package/dist/selection/drag-pointer.d.ts +22 -5
  810. package/dist/selection/drag-pointer.js +63 -31
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -39
  816. package/dist/selection/keyboard-extend.js +94 -116
  817. package/dist/selection/multi-click.d.ts +37 -0
  818. package/dist/selection/multi-click.js +197 -0
  819. package/dist/selection/native-bridge.d.ts +30 -37
  820. package/dist/selection/native-bridge.js +80 -100
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +31 -14
  824. package/dist/selection/path-lookup.js +110 -20
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +9 -0
  828. package/dist/selection/pointer-gesture.js +11 -0
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -33
  832. package/dist/selection/primitives.js +61 -53
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -19
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +52 -0
  852. package/dist/selection/selection-drop.js +317 -0
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +75 -53
  864. package/dist/styles/editor.css +248 -139
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
  960. package/dist/tree-operations/paste/replacement-parse.js +24 -0
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +329 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +267 -183
  996. package/docs/guide/plugin-guide.md +341 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +17 -21
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/invariants/split-landing.d.ts +0 -8
  1015. package/dist/invariants/split-landing.js +0 -15
  1016. package/dist/selection/double-click-trim.d.ts +0 -17
  1017. package/dist/selection/double-click-trim.js +0 -57
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
@@ -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,21 +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 path of the editing SURFACE `el` sits in — the enclosing cell where there is one, else
31
- * the enclosing block. The pairing {@link findCellPathForElement} says every producer owes. */
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. */
42
+ export interface EditingSurface {
43
+ path: number[];
44
+ inCell: boolean;
45
+ }
46
+ /** The cell-then-block lookup {@link findCellPathForElement} requires, in one place. */
47
+ export declare function findSurfaceForElement(el: Element | null): EditingSurface | null;
48
+ /** {@link findSurfaceForElement} for a caller that needs only the path. */
32
49
  export declare function findSurfacePathForElement(el: Element | null): number[] | null;
@@ -1,5 +1,7 @@
1
- /** Document-tree path navigation. Pure functions over a Document + path. */
2
- import { nodeAt } from '../tree-operations/node-primitives';
1
+ /** Walks the document tree by path, and reads block paths off the DOM. */
2
+ import { isBlockNode, nodeAt } from '../tree-operations/node-primitives';
3
+ import { caretChildCount, isCollapsedContainer } from '../schema/reserved-chrome';
4
+ import { TABLE_CELL_SELECTOR } from '../components/block-content-selector';
3
5
  /** Block immediately after `path` in doc order (children before siblings), else null. */
4
6
  export function nextPath(doc, path) {
5
7
  const node = nodeAt(doc, path);
@@ -65,7 +67,8 @@ export function firstLeafAtOrAfter(doc, path) {
65
67
  export function lastLeafAtOrBefore(doc, path) {
66
68
  let cur = path;
67
69
  while (cur) {
68
- // Annotated: overload resolution + the `cur` reassignment below otherwise cycle inference.
70
+ // Annotated because overload resolution and the `cur` reassignment below otherwise make
71
+ // TypeScript's inference cycle.
69
72
  const node = nodeAt(doc, cur);
70
73
  if (!node)
71
74
  return null;
@@ -75,16 +78,101 @@ export function lastLeafAtOrBefore(doc, path) {
75
78
  }
76
79
  return null;
77
80
  }
78
- /**
79
- * The document path an element's own `data-block-path` carries. A plugin may own the attribute
80
- * with non-JSON content, so a parse failure resolves to null, never a throw.
81
- */
81
+ // ── Caret-reachable order ──────────────────────────────────────────────────
82
+ // The same order as above, but a collapsed container is only its title row, since a caret never
83
+ // sits in its hidden body; select-all keeps the functions above, as its range covers that body.
84
+ /** The first leaf a caret can reach at or inside `path`, or null when `path` does not resolve. */
85
+ export function firstCaretLeaf(doc, path) {
86
+ return descendToCaretLeaf(doc, path, () => 0);
87
+ }
88
+ /** The last leaf a caret can reach at or inside `path`, or null when `path` does not resolve. */
89
+ export function lastCaretLeaf(doc, path) {
90
+ return descendToCaretLeaf(doc, path, (node) => reachableChildCount(node) - 1);
91
+ }
92
+ /** The first caret leaf after `path` in document order, descending into it first when it has
93
+ * children, as {@link nextPath} does. */
94
+ export function nextCaretPath(doc, path) {
95
+ const node = nodeAt(doc, [...path]);
96
+ if (!node || path.length === 0)
97
+ return null;
98
+ if (reachableChildCount(node) > 0)
99
+ return firstCaretLeafFrom(doc, [...path, 0]);
100
+ return firstCaretLeafFrom(doc, [...path.slice(0, -1), path[path.length - 1] + 1]);
101
+ }
102
+ /** The last caret leaf before `path`'s subtree in document order; an ancestor of `path` is never
103
+ * the answer. `path` need not resolve, so the position a removed block left reads the same. */
104
+ export function previousCaretPath(doc, path) {
105
+ const hiding = collapsedContainerHiding(doc, path);
106
+ if (hiding)
107
+ return lastCaretLeaf(doc, [...hiding, 0]);
108
+ let slot = [...path];
109
+ while (slot.length > 0) {
110
+ const parentPath = slot.slice(0, -1);
111
+ const parent = nodeAt(doc, parentPath);
112
+ if (!parent)
113
+ return null;
114
+ const before = Math.min(slot[slot.length - 1], reachableChildCount(parent)) - 1;
115
+ if (before >= 0)
116
+ return lastCaretLeaf(doc, [...parentPath, before]);
117
+ slot = parentPath;
118
+ }
119
+ return null;
120
+ }
121
+ /** The first caret leaf at `slot` or after it, where `slot` may sit one past the end of its list
122
+ * (the place a removed last child left). */
123
+ export function firstCaretLeafFrom(doc, slot) {
124
+ const hiding = collapsedContainerHiding(doc, slot);
125
+ let at = hiding ? [...hiding.slice(0, -1), hiding[hiding.length - 1] + 1] : [...slot];
126
+ while (at.length > 0) {
127
+ const parentPath = at.slice(0, -1);
128
+ const parent = nodeAt(doc, parentPath);
129
+ if (!parent)
130
+ return null;
131
+ if (at[at.length - 1] < reachableChildCount(parent))
132
+ return firstCaretLeaf(doc, at);
133
+ if (parentPath.length === 0)
134
+ return null;
135
+ at = [...parentPath.slice(0, -1), parentPath[parentPath.length - 1] + 1];
136
+ }
137
+ return null;
138
+ }
139
+ /** The outermost collapsed container whose hidden body `path` runs through, or null. */
140
+ export function collapsedContainerHiding(doc, path) {
141
+ for (let depth = 1; depth < path.length; depth++) {
142
+ if (path[depth] < 1)
143
+ continue;
144
+ const container = nodeAt(doc, path.slice(0, depth));
145
+ if (container && isBlockNode(container) && isCollapsedContainer(container)) {
146
+ return path.slice(0, depth);
147
+ }
148
+ }
149
+ return null;
150
+ }
151
+ function descendToCaretLeaf(doc, path, pick) {
152
+ const leaf = [...path];
153
+ let node = nodeAt(doc, leaf);
154
+ if (!node)
155
+ return null;
156
+ while (reachableChildCount(node) > 0) {
157
+ const index = pick(node);
158
+ leaf.push(index);
159
+ node = node.children[index];
160
+ }
161
+ return leaf.length > 0 ? leaf : null;
162
+ }
163
+ // The document root is never collapsed, and has no descriptor to ask.
164
+ function reachableChildCount(node) {
165
+ return isBlockNode(node) ? caretChildCount(node) : node.children.length;
166
+ }
167
+ /** The path an element's own `data-block-path` carries, read in one place: a plugin may own the
168
+ * attribute with content of its own, so anything but a list of numbers reads as null. */
82
169
  export function readBlockPath(el) {
83
170
  const attr = el?.getAttribute('data-block-path');
84
171
  if (!attr)
85
172
  return null;
86
173
  try {
87
- return JSON.parse(attr);
174
+ const parsed = JSON.parse(attr);
175
+ return Array.isArray(parsed) && parsed.every((n) => typeof n === 'number') ? parsed : null;
88
176
  }
89
177
  catch {
90
178
  return null;
@@ -100,15 +188,10 @@ export function findBlockPathForElement(el) {
100
188
  }
101
189
  return null;
102
190
  }
103
- /**
104
- * The deep `[...tablePath, row, col]` path of an element inside a table cell. Only block hosts
105
- * emit `data-block-path`, so {@link findBlockPathForElement} stops at the table and returns a
106
- * path whose offsets are cell indices while a caret read from the same element is in characters.
107
- * Any producer resolving an endpoint path from the DOM must come through here. Null outside a
108
- * cell grid; addresses the grid by selector contract (`data-table-row-idx`, `role="cell"`).
109
- */
191
+ /** The `[...tablePath, row, col]` path of an element in a table cell: only block hosts carry a
192
+ * path, so a DOM-read endpoint in a cell must come through here or it reads as the table's. */
110
193
  export function findCellPathForElement(el) {
111
- const cellEl = el?.closest('[role="cell"]') ?? null;
194
+ const cellEl = el?.closest(TABLE_CELL_SELECTOR) ?? null;
112
195
  if (!cellEl)
113
196
  return null;
114
197
  const rowEl = cellEl.closest('[data-table-row-idx]');
@@ -120,13 +203,20 @@ export function findCellPathForElement(el) {
120
203
  const rowIdx = Number(rowEl.getAttribute('data-table-row-idx'));
121
204
  if (!Number.isInteger(rowIdx))
122
205
  return null;
123
- const colIdx = Array.from(rowEl.querySelectorAll(':scope > [role="cell"]')).indexOf(cellEl);
206
+ const colIdx = Array.from(rowEl.querySelectorAll(`:scope > ${TABLE_CELL_SELECTOR}`)).indexOf(cellEl);
124
207
  if (colIdx < 0)
125
208
  return null;
126
209
  return [...tablePath, rowIdx, colIdx];
127
210
  }
128
- /** The path of the editing SURFACE `el` sits in — the enclosing cell where there is one, else
129
- * the enclosing block. The pairing {@link findCellPathForElement} says every producer owes. */
211
+ /** The cell-then-block lookup {@link findCellPathForElement} requires, in one place. */
212
+ export function findSurfaceForElement(el) {
213
+ const cellPath = findCellPathForElement(el);
214
+ if (cellPath)
215
+ return { path: cellPath, inCell: true };
216
+ const blockPath = findBlockPathForElement(el);
217
+ return blockPath ? { path: blockPath, inCell: false } : null;
218
+ }
219
+ /** {@link findSurfaceForElement} for a caller that needs only the path. */
130
220
  export function findSurfacePathForElement(el) {
131
- return findCellPathForElement(el) ?? findBlockPathForElement(el);
221
+ return findSurfaceForElement(el)?.path ?? null;
132
222
  }
@@ -1,14 +1,14 @@
1
1
  /**
2
- * Pure predicates over CST paths, plus the `DocPath` brand home. No DOM, no document lookups.
3
- * The predicates take `readonly number[]`: they order any path-shaped array regardless of what
4
- * space it addresses, so brand-typing them to `DocPath` would force a cast at every call site.
2
+ * Pure predicates over CST paths, plus the `DocPath` brand. The predicates take
3
+ * `readonly number[]` rather than `DocPath`: they order any path-shaped array whatever it
4
+ * addresses, and the brand would force a cast at every call site.
5
5
  */
6
6
  declare const docPathBrand: unique symbol;
7
7
  /**
8
- * A path whose every prefix resolves from the document root: the dialect the commit seam
9
- * requires and G1.16 checks (`op.eventPath` and `snapshot.path` carry it). `asDocPath` is the
10
- * base mint; op families compose through `extendDocPath`/`docPathFrom` in
11
- * `cursor/coordinate-spaces.ts`. G1.16 stays the runtime belt for JS callers types don't bind.
8
+ * A path resolved from the document root, which a commit requires of `op.eventPath` and
9
+ * `snapshot.path`, checked at runtime for callers the types don't bind (G1.16). `asDocPath` is
10
+ * the base constructor; `extendDocPath` and `docPathFrom` in `cursor/coordinate-spaces.ts`
11
+ * build on it.
12
12
  */
13
13
  export type DocPath = number[] & {
14
14
  readonly [docPathBrand]: true;
@@ -27,9 +27,7 @@ export declare function sharedPrefixLength(a: readonly number[], b: readonly num
27
27
  export declare function lowestCommonAncestor(a: readonly number[], b: readonly number[]): number[];
28
28
  /** True if `path` is strictly between `start` and `end` in document order. */
29
29
  export declare function isPathBetween(path: readonly number[], start: readonly number[], end: readonly number[]): boolean;
30
- /**
31
- * True when path's entire subtree fits strictly inside (start, end). Stronger
32
- * than `walkBetween`'s doc-order "between", which includes endpoint ancestors.
33
- */
30
+ /** True when `path`'s entire subtree fits strictly inside (start, end). Stronger than
31
+ * `walkBetween`'s document-order "between", which includes endpoint ancestors. */
34
32
  export declare function isPathSubtreeBetween(path: readonly number[], start: readonly number[], end: readonly number[]): boolean;
35
33
  export {};
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Pure predicates over CST paths, plus the `DocPath` brand home. No DOM, no document lookups.
3
- * The predicates take `readonly number[]`: they order any path-shaped array regardless of what
4
- * space it addresses, so brand-typing them to `DocPath` would force a cast at every call site.
2
+ * Pure predicates over CST paths, plus the `DocPath` brand. The predicates take
3
+ * `readonly number[]` rather than `DocPath`: they order any path-shaped array whatever it
4
+ * addresses, and the brand would force a cast at every call site.
5
5
  */
6
6
  export function asDocPath(indices) {
7
7
  return indices;
@@ -76,10 +76,8 @@ export function lowestCommonAncestor(a, b) {
76
76
  export function isPathBetween(path, start, end) {
77
77
  return comparePaths(path, start) > 0 && comparePaths(path, end) < 0;
78
78
  }
79
- /**
80
- * True when path's entire subtree fits strictly inside (start, end). Stronger
81
- * than `walkBetween`'s doc-order "between", which includes endpoint ancestors.
82
- */
79
+ /** True when `path`'s entire subtree fits strictly inside (start, end). Stronger than
80
+ * `walkBetween`'s document-order "between", which includes endpoint ancestors. */
83
81
  export function isPathSubtreeBetween(path, start, end) {
84
82
  return (!isStrictAncestorOf(path, start) &&
85
83
  !isStrictAncestorOf(start, path) &&
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The attribute a widget sets on an element whose pointer drags are its own gesture (a diagram's
3
+ * pan, a canvas's brush), so the editor's pointer handlers ignore a pointerdown inside it. It is
4
+ * an attribute because pointer events are delegated at the app root: a component's own
5
+ * `stopPropagation` runs after the editor's handler.
6
+ */
7
+ /** Set on the gesture's element itself; a pointerdown on any descendant counts. */
8
+ export declare const POINTER_GESTURE_ATTR = "data-pointer-gesture";
9
+ export declare function claimsPointerGesture(target: EventTarget | null): boolean;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The attribute a widget sets on an element whose pointer drags are its own gesture (a diagram's
3
+ * pan, a canvas's brush), so the editor's pointer handlers ignore a pointerdown inside it. It is
4
+ * an attribute because pointer events are delegated at the app root: a component's own
5
+ * `stopPropagation` runs after the editor's handler.
6
+ */
7
+ /** Set on the gesture's element itself; a pointerdown on any descendant counts. */
8
+ export const POINTER_GESTURE_ATTR = 'data-pointer-gesture';
9
+ export function claimsPointerGesture(target) {
10
+ return target instanceof Element && target.closest(`[${POINTER_GESTURE_ATTR}]`) !== null;
11
+ }
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Shared pointer-drag session: the document-listener + rAF-coalescing scaffold every drag
3
- * lifecycle builds on. Owns the pointer-ownership filter, autoscroll wiring, and idempotent
4
- * teardown; callers supply the per-surface move/end behavior and the options that genuinely
5
- * differ. rAF here is frame-paced pointermove coalescing, not async sequencing (G4.4).
2
+ * The shared pointer-drag session every drag builds on: document-level listeners, one move per
3
+ * animation frame, the pointer-id filter, autoscroll, and a teardown that is safe to run twice.
4
+ * Callers supply the move and end behaviour. The rAF here coalesces pointermove events to one
5
+ * per frame; it is not used to sequence anything (G4.4).
6
6
  */
7
7
  import { type AutoScrollDeps } from './autoscroll';
8
8
  export interface PointerPosition {
@@ -13,29 +13,23 @@ export interface PointerDragSessionOptions {
13
13
  /** Coalesced to one call per animation frame with the latest pointer: intermediate positions
14
14
  * are dropped, so a consumer must answer the point it gets rather than wait for a better one. */
15
15
  onMove(pointer: PointerPosition): void;
16
- /**
17
- * pointerup / pointercancel finalize, after the pending move flushes and the session tears
18
- * down. NOT run on Escape or lifetime abort: those are pure teardowns.
19
- */
16
+ /** Runs on pointerup or pointercancel, after the pending move flushes and the session tears
17
+ * down; Escape and a lifetime abort only tear down. */
20
18
  onEnd?(reason: 'up' | 'cancel'): void;
21
19
  /** Caller cleanup, run once on every teardown path (up, cancel, Escape, abort). */
22
20
  onTeardown?(): void;
23
21
  /** Scroll targets + axis; the session supplies the live pointer and rescroll. */
24
22
  autoScroll: Pick<AutoScrollDeps, 'getTargets' | 'axis'>;
25
- /**
26
- * Drag/click discriminator in px: below this travel from `down` the gesture stays a click.
27
- * Omit where the pointerdown already committed to a drag.
28
- */
23
+ /** Drag/click discriminator in px: below this travel from `down` the gesture stays a click.
24
+ * Omitted where the pointerdown already committed to a drag. */
29
25
  threshold?: number;
30
26
  onDragRecognized?(): void;
31
27
  /** Install a document keydown so Escape tears the session down. */
32
28
  escape?: boolean;
33
29
  /** Suppress native text selection for the drag's duration. */
34
30
  disableUserSelect?: boolean;
35
- /**
36
- * Aborted on editor unmount. Without it an unmount mid-drag leaks the document listeners:
37
- * pointerup never fires once the originating element is gone.
38
- */
31
+ /** Aborted on editor unmount; without it an unmount mid-drag leaks the document listeners,
32
+ * since pointerup never fires once the originating element is gone. */
39
33
  lifetimeSignal?: AbortSignal;
40
34
  }
41
35
  export declare function createPointerDragSession(down: PointerEvent, opts: PointerDragSessionOptions): {
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Shared pointer-drag session: the document-listener + rAF-coalescing scaffold every drag
3
- * lifecycle builds on. Owns the pointer-ownership filter, autoscroll wiring, and idempotent
4
- * teardown; callers supply the per-surface move/end behavior and the options that genuinely
5
- * differ. rAF here is frame-paced pointermove coalescing, not async sequencing (G4.4).
2
+ * The shared pointer-drag session every drag builds on: document-level listeners, one move per
3
+ * animation frame, the pointer-id filter, autoscroll, and a teardown that is safe to run twice.
4
+ * Callers supply the move and end behaviour. The rAF here coalesces pointermove events to one
5
+ * per frame; it is not used to sequence anything (G4.4).
6
6
  */
7
7
  import { createAutoScroll } from './autoscroll';
8
8
  export function createPointerDragSession(down, opts) {
@@ -41,9 +41,8 @@ export function createPointerDragSession(down, opts) {
41
41
  autoScroll.maybeStart();
42
42
  });
43
43
  }
44
- // A release before the coalescing rAF runs would otherwise drop the final move (a stale drop
45
- // index, or isCrossBlock false on a fast flick / pointercancel). Guard on a LIVE rAF so an
46
- // already-processed move is never replayed.
44
+ // A release before the frame callback runs would otherwise drop the final move; the guard on
45
+ // a pending frame keeps an already processed move from replaying.
47
46
  function flushPendingMove() {
48
47
  if (rafId !== null && pending)
49
48
  opts.onMove(pending);
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Pure primitives for cross-block selection: types, document-order walking, overlay
3
- * classification, the delete-commit snapshot rule. No DOM, no state. Path-level predicates
4
- * live in `./path-math`.
2
+ * Pure primitives for cross-block selection: types, overlay classification of a covered range,
3
+ * the delete-commit snapshot rule. Path-level predicates live in `./path-math`.
5
4
  */
6
- import type { CommitSnapshotArg, UndoEntryMode } from '../action-contracts';
7
- import type { DocumentView } from '../core/node-views';
5
+ import type { CommitSnapshotArg } from '../action-contracts';
6
+ import type { RangeCoverage } from './range-coverage';
7
+ import { type DocPath } from './path-math';
8
8
  import { type CellIndex, type RawOffset } from '../cursor/coordinate-spaces';
9
9
  /** Char-space endpoint: `offset` is a character index into the leaf's `raw`. */
10
10
  export interface CharSelectionPoint {
@@ -12,6 +12,26 @@ export interface CharSelectionPoint {
12
12
  offset: number;
13
13
  cellCoordinate?: false;
14
14
  }
15
+ /** An inline widget selected whole, by the block it sits in and the byte it starts at. A snapshot:
16
+ * a popover commit targets the image it opened on, and writes nothing once another holds it. */
17
+ export interface WidgetTarget {
18
+ paragraphPath: number[];
19
+ sourceStart: number;
20
+ /** The caret just before the widget was selected: the edge it was entered from, and where
21
+ * undo puts the caret back. */
22
+ preSelectOffset: number;
23
+ }
24
+ /** An inline widget selected whole (an image), as the raw span of the block at `path`. */
25
+ export interface SelectedWidgetRange {
26
+ path: number[];
27
+ start: number;
28
+ end: number;
29
+ }
30
+ /** The widget selected whole, read live, and the way to end that selection. */
31
+ export interface SelectedWidgetHandle {
32
+ range(): SelectedWidgetRange | null;
33
+ clear(): void;
34
+ }
15
35
  /** Cell-space endpoint: `offset` is a row-major table cell index; `path` addresses the table block. */
16
36
  export interface CellSelectionPoint {
17
37
  path: number[];
@@ -19,23 +39,33 @@ export interface CellSelectionPoint {
19
39
  cellCoordinate: true;
20
40
  }
21
41
  /**
22
- * A single selection endpoint, discriminated on `cellCoordinate`; empty path is the
23
- * document root. `offset` keeps its name on both arms, and its space is the
24
- * discriminant's job: read it through {@link charOffsetOf} / {@link cellIndexOf}.
25
- * Exception: intra-table selections share the table path and carry cell-valued offsets
26
- * on UNFLAGGED points, established by their shared scope rather than the flag.
42
+ * One selection endpoint, discriminated on `cellCoordinate`; an empty path is the document
43
+ * root. `offset` keeps its name on both variants and the flag says which space it is in, so
44
+ * read it through {@link charOffsetOf} or {@link cellIndexOf}. `SelectionState` flags every
45
+ * point on a table path, so a host may pass plain numbers there.
27
46
  */
28
47
  export type SelectionPoint = CharSelectionPoint | CellSelectionPoint;
29
- /** An endpoint whose block offered no position to land on; the funnel resolves the side. */
48
+ /** An endpoint whose block offered no position to land on; its side is resolved against the
49
+ * other endpoint when the range is entered. */
30
50
  export interface WholeBlockEndpoint {
31
51
  path: number[];
32
52
  wholeBlock: true;
33
53
  }
34
54
  /**
35
- * What an entry path may hand the selection funnel. Only {@link SelectionPoint} is ever
36
- * stored, so an unresolved endpoint cannot reach a consumer.
55
+ * What a gesture may hand `enterCrossBlock`. Only a {@link SelectionPoint} is ever stored, so
56
+ * an unresolved endpoint cannot reach a consumer.
37
57
  */
38
58
  export type SelectionEndpoint = SelectionPoint | WholeBlockEndpoint;
59
+ /** Where a caret goes after an edit: a document path, which may name a container, and an offset
60
+ * into the node there, raw or one of the special caret values in `block-component.ts`. */
61
+ export interface CaretPosition {
62
+ readonly path: DocPath;
63
+ readonly offset: number;
64
+ }
65
+ /** What an edit hands back for the caret: a position, or a stored selection to put back. */
66
+ export type Landing = CaretPosition | EditorSelection;
67
+ /** A cell endpoint: the grid's path, a row-major cell index, and the flag saying so. */
68
+ export declare function cellPoint(path: readonly number[], cellIdx: number): CellSelectionPoint;
39
69
  export declare function isWholeBlockEndpoint(endpoint: SelectionEndpoint): endpoint is WholeBlockEndpoint;
40
70
  /**
41
71
  * Anchor/focus pair. Same path + same offset is collapsed; same path + different offsets
@@ -46,30 +76,31 @@ export interface EditorSelection {
46
76
  anchor: SelectionPoint;
47
77
  focus: SelectionPoint;
48
78
  }
49
- /** Offset as a char index into the leaf's `raw`. DEV-warns on a cell point, but always returns. */
79
+ /** Whether two snapshots name the same selection. The coordinate space counts: the same
80
+ * numbers as a cell index and as a character offset are different positions. */
81
+ export declare function selectionsEqual(a: EditorSelection | null, b: EditorSelection | null): boolean;
82
+ /** Offset as a char index into the leaf's `raw`. Warns in dev on a cell point, but always returns. */
50
83
  export declare function charOffsetOf(point: SelectionPoint, tag: string): RawOffset;
51
- /** Offset as a row-major table cell index. DEV-warns on a char point, but always returns. */
84
+ /** Offset as a row-major table cell index. Warns in dev on a char point, but always returns. */
52
85
  export declare function cellIndexOf(point: SelectionPoint, tag: string): CellIndex;
53
- /**
54
- * `{start, end}` in document order: by path, then by offset when paths match. Published on the
55
- * consumer barrel as `normalizeSelection`, which is what a host anchors UI to. The offset tiebreak
56
- * is coordinate-space agnostic: two endpoints sharing a table's path carry row-major CELL indices,
57
- * whose order IS document order inside that table. A caller with no selection has nothing to
58
- * order, since `getSelection()` answers null with nothing focused and at a gap caret.
59
- */
86
+ /** `{start, end}` in document order: by path, then by offset, which orders cell indices on a
87
+ * shared table path too, since row-major order is document order inside the table. */
60
88
  export declare function normalize(selection: EditorSelection): {
61
89
  start: SelectionPoint;
62
90
  end: SelectionPoint;
63
91
  };
64
- /** A join delete rides the caller's snapshot; every other one seats undo at its own coordinate. */
65
- export declare function deleteSnapshot(options: {
66
- undoEntry?: UndoEntryMode;
67
- } | undefined, path: number[], offset?: number): CommitSnapshotArg;
68
- /** Every block path strictly between `start` and `end`, at every nesting level. */
69
- export declare function walkBetween(doc: DocumentView, start: number[], end: number[]): number[][];
92
+ /** Where undo puts the caret back after a range delete, when nothing is focused. */
93
+ export declare function deleteSnapshot(path: number[], offset?: number): CommitSnapshotArg;
70
94
  export type BlockSelectionClass = 'outside' | 'start' | 'middle' | 'end' | 'single-block';
71
- /**
72
- * Position of a block relative to a selection, for overlay rendering. 'single-block'
73
- * tells the caller to delegate to the browser instead of painting.
74
- */
75
- export declare function classifyBlockForSelection(path: number[], selection: EditorSelection): BlockSelectionClass;
95
+ /** Where a block stands in a covered range, for the overlay: 'single-block' delegates to the
96
+ * browser, and a subtree the range holds whole is 'middle' with nothing inside it painting. */
97
+ export declare function classifyBlockForSelection(path: readonly number[], coverage: RangeCoverage): BlockSelectionClass;
98
+ /** Whether the block paints the range over its whole box, so a container's own decoration (an
99
+ * alert's badge), which no child host covers, is painted too; its children then paint nothing. */
100
+ export declare function blockPaintsWholeBox(path: readonly number[], coverage: RangeCoverage, wholeUnitPath: readonly number[] | null): boolean;
101
+ /** The end-exclusive offsets an endpoint block measures its highlight between: a kept table
102
+ * edge's cells, or its text from the start or up to the end. */
103
+ export declare function endpointMeasureSpan(classification: BlockSelectionClass, coverage: RangeCoverage): {
104
+ from: number;
105
+ to: number;
106
+ };