@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,29 +1,23 @@
1
1
  /**
2
- * Where a caret can live BETWEEN two sibling blocks: the boundaries no block's own editing
3
- * surface can reach, read off the kinds' `gapEdges` declarations. Eligibility is pure — doc
4
- * in, boolean out; `tryGapStop` is the one seam that turns it into an arrival.
5
- * The gap is deliberately not a `SelectionPoint`: it is never a cross-block endpoint.
2
+ * Where a caret can sit between two sibling blocks: the boundaries no block's own editable
3
+ * element can reach, read off the kinds' `gapEdges`. The eligibility checks are pure (document
4
+ * in, boolean out); `tryGapStop` is the one call that places the caret. A gap is deliberately
5
+ * not a `SelectionPoint`: it is never a cross-block endpoint.
6
6
  */
7
7
  import { isBlockNode, nodeAt } from '../tree-operations/node-primitives';
8
8
  import { tryGetBlockKindDescriptor } from '../schema/block-kind-descriptor';
9
9
  import { isReadingMode } from '../presentation-mode';
10
10
  import { placeGapCaret } from './caret-doors';
11
- /**
12
- * A boundary is eligible when every block facing it declares that edge — an unregistered or
13
- * undeclared kind refuses on its side. The root's trailing boundary is excluded: the
14
- * move-past-end append (`editor-actions/focus/focus.ts`) already owns it.
15
- */
11
+ /** A boundary is eligible when every block facing it declares that edge. The root's trailing
12
+ * boundary is excluded, since the move-past-end append already handles it. */
16
13
  export function gapEligibleAt(doc, parentPath, index) {
17
14
  const children = gapScopeChildren(doc, parentPath);
18
15
  if (!children)
19
16
  return false;
20
17
  return gapEligibleAmong(children, index, parentPath.length > 0);
21
18
  }
22
- /**
23
- * The same rule for a scope that already holds its own children — the renderer, which has them
24
- * in hand and no path to resolve. `ownsTrailingBoundary` is false for the root, whose trailing
25
- * boundary belongs to the move-past-end append.
26
- */
19
+ /** The same rule for a caller that already has the children and no path to resolve;
20
+ * `ownsTrailingBoundary` is false for the root. */
27
21
  export function gapEligibleAmong(children, index, ownsTrailingBoundary) {
28
22
  if (index < 0 || index > children.length)
29
23
  return false;
@@ -34,11 +28,8 @@ export function gapEligibleAmong(children, index, ownsTrailingBoundary) {
34
28
  }
35
29
  return declaresEdge(children[index - 1], 'after') && declaresEdge(children[index], 'before');
36
30
  }
37
- /**
38
- * The children a gap could live between at `parentPath`, or null when that path names no
39
- * scope a BlockList renders. Shared with the undo restore road, so a drifted path cannot
40
- * park a caret somewhere nothing would paint it.
41
- */
31
+ /** The children a gap could sit between at `parentPath`, or null when that path names no child
32
+ * list a BlockList renders, so a stale path cannot put a caret where nothing paints it. */
42
33
  export function gapScopeChildren(doc, parentPath) {
43
34
  const parent = nodeAt(doc, parentPath);
44
35
  if (!parent)
@@ -52,18 +43,15 @@ function declaresEdge(node, edge) {
52
43
  const edges = tryGetBlockKindDescriptor(node.kind)?.gapEdges;
53
44
  return edges === edge || edges === 'both';
54
45
  }
55
- /**
56
- * Whether an arriving gesture may park here. Reading mode never may: it has no caret at
57
- * all, so the gesture keeps its old landing. A caller that must act BETWEEN the decision
58
- * and the landing asks this, then goes through the door itself.
59
- */
46
+ /** Whether a gesture may put the caret in this gap; reading mode has no caret, so never. A caller
47
+ * that must act between the decision and the placement asks this, then calls `placeGapCaret`. */
60
48
  export function canGapStop(scope, parentPath, boundaryIndex) {
61
49
  if (isReadingMode(scope.getPresentationMode))
62
50
  return false;
63
51
  return gapEligibleAt(scope.getDoc(), parentPath, boundaryIndex);
64
52
  }
65
- /** Park the caret at an eligible `boundaryIndex`, reporting whether it did — so a
66
- * traversal can stop instead of entering its target. */
53
+ /** Puts the caret at an eligible `boundaryIndex` and reports whether it did, so a traversal
54
+ * can stop instead of entering its target. */
67
55
  export function tryGapStop(scope, parentPath, boundaryIndex) {
68
56
  if (!canGapStop(scope, parentPath, boundaryIndex))
69
57
  return false;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * What copying a rectangle of table cells writes: a GFM sub-table for plain text and an HTML
3
+ * table for spreadsheets. The cell's copy and the editor root's copy both write it.
4
+ */
5
+ import type { DocumentView } from '../core/node-views';
6
+ import type { GridCoverage } from './range-coverage';
7
+ export interface GridClipboard {
8
+ text: string;
9
+ html: string;
10
+ }
11
+ /** Null for a single cell, whose copy is its own text. */
12
+ export declare function gridClipboard(doc: DocumentView, grid: GridCoverage): GridClipboard | null;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * What copying a rectangle of table cells writes: a GFM sub-table for plain text and an HTML
3
+ * table for spreadsheets. The cell's copy and the editor root's copy both write it.
4
+ */
5
+ import { isBlockNode, nodeAt } from '../tree-operations/node-primitives';
6
+ import { copyRectangleAsSubTable } from '../tree-operations/sub-table-copy';
7
+ import { gridToHtmlTable, rectangleGrid } from '../tree-operations/table-grid-clipboard';
8
+ /** Null for a single cell, whose copy is its own text. */
9
+ export function gridClipboard(doc, grid) {
10
+ const { top, left, rows, cols } = grid.rect;
11
+ if (rows * cols === 1)
12
+ return null;
13
+ const table = nodeAt(doc, grid.path);
14
+ if (!table || !isBlockNode(table))
15
+ return null;
16
+ const from = { rowIdx: top, colIdx: left };
17
+ const to = { rowIdx: top + rows - 1, colIdx: left + cols - 1 };
18
+ return {
19
+ text: copyRectangleAsSubTable(table, from, to),
20
+ html: gridToHtmlTable(rectangleGrid(table, from, to))
21
+ };
22
+ }
@@ -1,43 +1,31 @@
1
- /** Cross-block keyboard extension and collapse. Pure helpers over SelectionState. */
1
+ /** Cross-block keyboard extension and collapse: `SelectionState` writes plus the native caret. */
2
2
  import type { SelectionState } from './selection-state.svelte';
3
+ import type { SelectedWidgetHandle, SelectedWidgetRange, SelectionPoint } from './primitives';
3
4
  import type { Document } from '../core/nodes';
4
- import type { BlockComponent } from '../block-component';
5
+ import type { GrammarView } from '../schema/block-openers';
6
+ import type { CaretLanding } from './caret-landing';
5
7
  import type { BlockElLookup } from '../editor-keys';
6
- /**
7
- * Collapse to start/end, restore a native caret, exit cross-block mode. `revealPath` mounts an
8
- * off-window target first. A cell-coordinate target's offset is a cell index, not a char
9
- * offset, so the caret lands at the cell's edge via the cell ref.
10
- */
11
- export declare function collapseCrossBlock(selection: SelectionState, to: 'start' | 'end', doc: Document, getBlockElByPath: (path: number[]) => HTMLElement | null, revealPath: (path: number[]) => Promise<BlockComponent | null>): Promise<void>;
12
- /**
13
- * Scroll the focus block into view when mounted. Does not itself reveal a windowed-out block:
14
- * the doc-edge extend reveals its endpoint via `revealActiveEndpoint` first, and a single-step
15
- * Shift+Arrow extend lands adjacent to the mounted window.
16
- */
17
- export declare function scrollFocusBlockIntoView(selection: SelectionState, getBlockElByPath: (path: number[]) => HTMLElement | null): void;
18
- /**
19
- * Extend focus to the next leaf in document order (Shift+ArrowDown / Shift+ArrowRight leaving
20
- * the block), entering cross-block mode if needed. Returns true if focus moved. `axis` =
21
- * 'vertical' skips vertically-transparent leaves, mirroring single-block focus dispatch;
22
- * 'horizontal' lands unconditionally so an image-only paragraph is selectable in one step.
23
- */
24
- export declare function extendFocusToNextBlock(selection: SelectionState, doc: Document, currentBlockEl: HTMLElement, currentBlockPath: number[], axis?: 'horizontal' | 'vertical', getBlockElByPath?: BlockElLookup): boolean;
25
- /**
26
- * Extend focus to the previous leaf (Shift+ArrowUp / Shift+ArrowLeft). `side` = 'end' for
27
- * ArrowLeft (cross the boundary by one char), 'start' for ArrowUp (select the whole previous
28
- * line, matching native). The vertical path skips vertically-transparent leaves.
29
- */
30
- export declare function extendFocusToPreviousBlock(selection: SelectionState, doc: Document, currentBlockEl: HTMLElement, currentBlockPath: number[], side?: 'start' | 'end', getBlockElByPath?: BlockElLookup): boolean;
31
- /**
32
- * Extend focus to the document edge (Mod+Shift+Home / Mod+Shift+End). A transparent edge
33
- * leaf is bypassed for the nearest text-bearing one, matching the cross-block extension path.
34
- */
35
- export declare function extendFocusToDocEdge(selection: SelectionState, doc: Document, currentBlockEl: HTMLElement, currentBlockPath: number[], to: 'start' | 'end', getBlockElByPath?: BlockElLookup): boolean;
36
- /** Select the entire document as a cross-block range (second Ctrl+A press). */
8
+ import type { ScrollOwner } from '../cursor/scroll-owner';
9
+ /** Collapses a cross-block range to its start or end and puts the caret back there as a stored
10
+ * byte, brought into view, mounting a windowed-out target and never opening a closed body. */
11
+ export declare function collapseCrossBlock(selection: SelectionState, to: 'start' | 'end', doc: Document, restore: CaretLanding['restore']): Promise<void>;
12
+ /** Scrolls the focus block into view if mounted, without mounting it: a document-edge extend
13
+ * mounts its endpoint first, and one Shift+Arrow step lands beside the mounted range. */
14
+ export declare function scrollFocusBlockIntoView(selection: SelectionState, scroll: Pick<ScrollOwner, 'place'>): void;
15
+ /** Extends focus to the next leaf a caret can reach. The vertical axis skips leaves the caret
16
+ * passes over (an image-only paragraph); the horizontal stops on each, so it stays selectable. */
17
+ export declare function extendFocusToNextBlock(selection: SelectionState, doc: Document, grammar: GrammarView, currentBlockEl: HTMLElement, currentBlockPath: number[], axis?: 'horizontal' | 'vertical', getBlockElByPath?: BlockElLookup): boolean;
18
+ /** Extends focus to the previous leaf: `'end'` crosses the boundary by one character, `'start'`
19
+ * takes the whole previous line as native ArrowUp does, skipping leaves the caret passes over. */
20
+ export declare function extendFocusToPreviousBlock(selection: SelectionState, doc: Document, grammar: GrammarView, currentBlockEl: HTMLElement, currentBlockPath: number[], side?: 'start' | 'end', getBlockElByPath?: BlockElLookup): boolean;
21
+ /** Extends focus to the document edge; a transparent edge leaf is bypassed for the nearest
22
+ * text-bearing one, as the one-step extension does. */
23
+ export declare function extendFocusToDocEdge(selection: SelectionState, doc: Document, grammar: GrammarView, currentBlockEl: HTMLElement, currentBlockPath: number[], to: 'start' | 'end', getBlockElByPath?: BlockElLookup): boolean;
24
+ /** Selects the entire document as a cross-block range (the second Ctrl+A). */
37
25
  export declare function selectWholeDocument(selection: SelectionState, doc: Document, getBlockElByPath?: (path: number[]) => HTMLElement | null): boolean;
38
- /**
39
- * Shift+click on a block: extend the cross-block selection, or enter cross-block mode using the
40
- * previously focused block's caret as the anchor. False when no anchor could be recovered, or
41
- * the click stayed within the same block (native shift-click handles that).
42
- */
43
- export declare function handleShiftClick(selection: SelectionState, clickedBlockEl: HTMLElement, clickedBlockPath: number[], clickedX: number, clickedY: number, previouslyFocusedBlockEl: HTMLElement | null, previouslyFocusedBlockPath: number[] | null): boolean;
26
+ /** Shift+click on a block: extends the range, grows one from an image selected whole, or enters
27
+ * cross-block mode from the last caret. False for a same-block click, left to the browser. */
28
+ export declare function handleShiftClick(selection: SelectionState, clickedBlockEl: HTMLElement, clickedBlockPath: number[], clickedX: number, clickedY: number, previouslyFocusedBlockEl: HTMLElement | null, previouslyFocusedBlockPath: number[] | null, selectedWidget: SelectedWidgetHandle): boolean;
29
+ /** The edge of a selected widget a shift-click grows from: the one away from the click, so the
30
+ * range covers the widget and everything up to the click. */
31
+ export declare function widgetShiftAnchor(widget: SelectedWidgetRange, press: SelectionPoint): SelectionPoint;
@@ -1,16 +1,14 @@
1
- /** Cross-block keyboard extension and collapse. Pure helpers over SelectionState. */
1
+ /** Cross-block keyboard extension and collapse: `SelectionState` writes plus the native caret. */
2
2
  import { isVerticallyTransparentNode } from '../core/inline/transparency';
3
- import { readNativeCaretInBlock, applyCollapsedCaret, focusCollapsedCaret, applySingleBlockRange, clearNativeSelection } from './native-bridge';
3
+ import { readNativeCaretInBlock, applyCollapsedCaret, applySingleBlockRange, clearNativeSelection } from './native-bridge';
4
4
  import { offsetFromViewportPoint } from '../cursor/point-offset';
5
- import { nextPath, previousPath, firstPath, lastPath, firstLeafAtOrAfter, lastLeafAtOrBefore, findCellPathForElement } from './path-lookup';
5
+ import { firstPath, lastPath, firstCaretLeaf, lastCaretLeaf, nextCaretPath, previousCaretPath, findCellPathForElement } from './path-lookup';
6
6
  import { nodeAt } from '../tree-operations/node-primitives';
7
- import { comparePaths, isStrictAncestorOf, pathsEqual } from './path-math';
7
+ import { comparePaths, pathsEqual } from './path-math';
8
8
  import { displayLength } from '../core/lines';
9
9
  // ── Enter / Collapse / Scroll ──────────────────────────────────────────────
10
- /**
11
- * Enter cross-block mode on a keyboard extension (Shift+Arrow leaving a block). Captures the
12
- * native caret as both anchor and focus; the caller immediately extendFocus()es to the target.
13
- */
10
+ /** Enters cross-block mode on a Shift+Arrow leaving a block, with the native caret as both
11
+ * anchor and focus; the caller extends the focus right after. */
14
12
  function enterCrossBlockFromKeyboard(selection, currentBlockEl, currentBlockPath) {
15
13
  const anchorPoint = readNativeCaretInBlock(currentBlockEl, currentBlockPath);
16
14
  if (!anchorPoint)
@@ -19,52 +17,37 @@ function enterCrossBlockFromKeyboard(selection, currentBlockEl, currentBlockPath
19
17
  path: anchorPoint.path.slice(),
20
18
  offset: anchorPoint.offset
21
19
  });
22
- // Collapse (not clear) so the focus block retains a caret, or Chromium retargets clipboard
23
- // events to <body> (same rule as `parkCaretInFocusBlock`). Best-effort: an endpoint hosting
24
- // no text position gets no caret, which is why components/editor-root-clipboard.ts exists.
20
+ // A collapsed caret stays in the focus block, or Chromium sends clipboard events to <body>;
21
+ // an endpoint with no text position gets none, and `editor-root-clipboard.ts` covers it.
25
22
  applyCollapsedCaret(currentBlockEl, anchorPoint);
26
23
  return true;
27
24
  }
28
- /**
29
- * Collapse to start/end, restore a native caret, exit cross-block mode. `revealPath` mounts an
30
- * off-window target first. A cell-coordinate target's offset is a cell index, not a char
31
- * offset, so the caret lands at the cell's edge via the cell ref.
32
- */
33
- export async function collapseCrossBlock(selection, to, doc, getBlockElByPath, revealPath) {
25
+ /** Collapses a cross-block range to its start or end and puts the caret back there as a stored
26
+ * byte, brought into view, mounting a windowed-out target and never opening a closed body. */
27
+ export async function collapseCrossBlock(selection, to, doc, restore) {
34
28
  const target = to === 'start' ? selection.start : selection.end;
35
29
  if (!target)
36
30
  return;
37
31
  selection.collapse();
38
32
  clearNativeSelection();
39
- // The cell landing seats at the cell's own edge; from there it takes the SAME seat as a
40
- // prose leaf. Seating through the cell's own focus door instead would skip the collapse
41
- // ceremony, and the byte typed at the arrival would join the construct the cell opens with
42
- // rather than land in front of it. Only the END side overrides the landing's own offset.
33
+ // A cell target takes the text-leaf caret path: the cell's own `focus` skips the collapse
34
+ // steps, and a byte typed there would join the construct the cell opens with.
43
35
  const landing = selection.cellLandingFor(target);
44
36
  const point = to === 'end' && !pathsEqual(landing.path, target.path)
45
37
  ? { path: landing.path, offset: leafOffsetEnd(doc, landing.path) }
46
38
  : landing;
47
- // The landable clamp (a caret may not sit past a hidden run) lives in applyCollapsedCaret.
48
- await revealPath(landing.path);
49
- focusCollapsedCaret(getBlockElByPath, point);
39
+ await restore({ anchor: point, focus: point }, { reveal: 'into-view' });
50
40
  }
51
- /**
52
- * Scroll the focus block into view when mounted. Does not itself reveal a windowed-out block:
53
- * the doc-edge extend reveals its endpoint via `revealActiveEndpoint` first, and a single-step
54
- * Shift+Arrow extend lands adjacent to the mounted window.
55
- */
56
- export function scrollFocusBlockIntoView(selection, getBlockElByPath) {
57
- if (!selection.focus)
58
- return;
59
- const blockEl = getBlockElByPath(selection.focus.path);
60
- blockEl?.scrollIntoView({ block: 'nearest', inline: 'nearest' });
41
+ /** Scrolls the focus block into view if mounted, without mounting it: a document-edge extend
42
+ * mounts its endpoint first, and one Shift+Arrow step lands beside the mounted range. */
43
+ export function scrollFocusBlockIntoView(selection, scroll) {
44
+ if (selection.focus) {
45
+ void scroll.place(selection.focus.path, { block: 'nearest', hold: false }).scroll();
46
+ }
61
47
  }
62
48
  // ── Keyboard Extension ─────────────────────────────────────────────────────
63
- /**
64
- * Move the cross-block focus to `target`, or restore the resulting single-block range natively
65
- * when the seam collapses (focus contracted back onto the anchor's prose leaf). Keyboard entry
66
- * parks only a collapsed caret, so the range must be re-established here to stay visible.
67
- */
49
+ /** Moves the cross-block focus to `target`, or re-creates the range natively when the focus is
50
+ * back on the anchor's block, since keyboard entry left only a collapsed caret there. */
68
51
  function extendFocusOrRestore(selection, target, offset, getBlockElByPath) {
69
52
  const anchor = selection.anchor;
70
53
  selection.extendFocus({ path: target, offset });
@@ -76,16 +59,12 @@ function extendFocusOrRestore(selection, target, offset, getBlockElByPath) {
76
59
  blockEl.focus();
77
60
  applySingleBlockRange(blockEl, Math.min(anchor.offset, offset), Math.max(anchor.offset, offset));
78
61
  }
79
- /**
80
- * Extend focus to the next leaf in document order (Shift+ArrowDown / Shift+ArrowRight leaving
81
- * the block), entering cross-block mode if needed. Returns true if focus moved. `axis` =
82
- * 'vertical' skips vertically-transparent leaves, mirroring single-block focus dispatch;
83
- * 'horizontal' lands unconditionally so an image-only paragraph is selectable in one step.
84
- */
85
- export function extendFocusToNextBlock(selection, doc, currentBlockEl, currentBlockPath, axis = 'horizontal', getBlockElByPath) {
62
+ /** Extends focus to the next leaf a caret can reach. The vertical axis skips leaves the caret
63
+ * passes over (an image-only paragraph); the horizontal stops on each, so it stays selectable. */
64
+ export function extendFocusToNextBlock(selection, doc, grammar, currentBlockEl, currentBlockPath, axis = 'horizontal', getBlockElByPath) {
86
65
  const leafTarget = axis === 'vertical'
87
- ? firstNonTransparentLeafAfter(doc, currentBlockPath)
88
- : firstLeafAfter(doc, currentBlockPath);
66
+ ? firstNonTransparentLeafAfter(doc, grammar, currentBlockPath)
67
+ : nextCaretPath(doc, currentBlockPath);
89
68
  if (!leafTarget)
90
69
  return false;
91
70
  if (!selection.isCrossBlock) {
@@ -95,15 +74,12 @@ export function extendFocusToNextBlock(selection, doc, currentBlockEl, currentBl
95
74
  extendFocusOrRestore(selection, leafTarget, 0, getBlockElByPath);
96
75
  return true;
97
76
  }
98
- /**
99
- * Extend focus to the previous leaf (Shift+ArrowUp / Shift+ArrowLeft). `side` = 'end' for
100
- * ArrowLeft (cross the boundary by one char), 'start' for ArrowUp (select the whole previous
101
- * line, matching native). The vertical path skips vertically-transparent leaves.
102
- */
103
- export function extendFocusToPreviousBlock(selection, doc, currentBlockEl, currentBlockPath, side = 'end', getBlockElByPath) {
77
+ /** Extends focus to the previous leaf: `'end'` crosses the boundary by one character, `'start'`
78
+ * takes the whole previous line as native ArrowUp does, skipping leaves the caret passes over. */
79
+ export function extendFocusToPreviousBlock(selection, doc, grammar, currentBlockEl, currentBlockPath, side = 'end', getBlockElByPath) {
104
80
  const leafTarget = side === 'start'
105
- ? lastNonTransparentLeafBefore(doc, currentBlockPath)
106
- : lastLeafBefore(doc, currentBlockPath);
81
+ ? lastNonTransparentLeafBefore(doc, grammar, currentBlockPath)
82
+ : previousCaretPath(doc, currentBlockPath);
107
83
  if (!leafTarget)
108
84
  return false;
109
85
  if (!selection.isCrossBlock) {
@@ -114,18 +90,16 @@ export function extendFocusToPreviousBlock(selection, doc, currentBlockEl, curre
114
90
  extendFocusOrRestore(selection, leafTarget, offset, getBlockElByPath);
115
91
  return true;
116
92
  }
117
- /**
118
- * Extend focus to the document edge (Mod+Shift+Home / Mod+Shift+End). A transparent edge
119
- * leaf is bypassed for the nearest text-bearing one, matching the cross-block extension path.
120
- */
121
- export function extendFocusToDocEdge(selection, doc, currentBlockEl, currentBlockPath, to, getBlockElByPath) {
122
- const edge = to === 'start' ? firstPath(doc) : lastPath(doc);
93
+ /** Extends focus to the document edge; a transparent edge leaf is bypassed for the nearest
94
+ * text-bearing one, as the one-step extension does. */
95
+ export function extendFocusToDocEdge(selection, doc, grammar, currentBlockEl, currentBlockPath, to, getBlockElByPath) {
96
+ const edge = to === 'start' ? firstCaretLeaf(doc, [0]) : lastCaretLeaf(doc, [doc.children.length - 1]);
123
97
  if (!edge)
124
98
  return false;
125
- const target = isTransparent(doc, edge)
99
+ const target = isTransparent(doc, grammar, edge)
126
100
  ? to === 'start'
127
- ? firstNonTransparentLeafFrom(doc, edge)
128
- : lastNonTransparentLeafFrom(doc, edge)
101
+ ? firstNonTransparentLeafFrom(doc, grammar, edge)
102
+ : lastNonTransparentLeafFrom(doc, grammar, edge)
129
103
  : edge;
130
104
  if (!target)
131
105
  return false;
@@ -137,16 +111,18 @@ export function extendFocusToDocEdge(selection, doc, currentBlockEl, currentBloc
137
111
  extendFocusOrRestore(selection, target, offset, getBlockElByPath);
138
112
  return true;
139
113
  }
140
- /** Select the entire document as a cross-block range (second Ctrl+A press). */
114
+ /** Selects the entire document as a cross-block range (the second Ctrl+A). */
141
115
  export function selectWholeDocument(selection, doc, getBlockElByPath) {
116
+ // Not the caret-reachable order: the range has to cover a closed container's hidden body, so
117
+ // that a delete or a copy of the whole document takes it too.
142
118
  const first = firstPath(doc);
143
119
  const last = lastPath(doc);
144
120
  if (!first || !last)
145
121
  return false;
146
122
  const lastOffset = leafOffsetEnd(doc, last);
147
123
  selection.enterCrossBlock({ path: first, offset: 0 }, { path: last, offset: lastOffset });
148
- // A single prose leaf (whole doc is one block) has no cross-block state to paint; the seam
149
- // refuses it. Select natively so a 2nd Ctrl+A on a one-block doc doesn't deselect.
124
+ // A one-block document has no cross-block range to paint and `enterCrossBlock` refuses it,
125
+ // so select natively; otherwise a second Ctrl+A would deselect.
150
126
  if (!selection.isCustomRendered) {
151
127
  selection.collapse();
152
128
  const blockEl = getBlockElByPath?.(first);
@@ -156,8 +132,8 @@ export function selectWholeDocument(selection, doc, getBlockElByPath) {
156
132
  }
157
133
  return true;
158
134
  }
159
- // Paste-dispatch anchor, see enterCrossBlockFromKeyboard. A table focus normalizes to the
160
- // table block, whose wrapper holds no caret, so park in its deep cell.
135
+ // A collapsed caret for paste dispatch, as in `enterCrossBlockFromKeyboard`. A table focus
136
+ // names the table block, whose wrapper holds no caret, so the caret goes in the cell.
161
137
  const focus = selection.focus;
162
138
  const parkPoint = focus && selection.cellLandingFor(focus);
163
139
  const focusBlockEl = parkPoint ? getBlockElByPath?.(parkPoint.path) : null;
@@ -168,12 +144,14 @@ export function selectWholeDocument(selection, doc, getBlockElByPath) {
168
144
  return true;
169
145
  }
170
146
  // ── Shift+Click ────────────────────────────────────────────────────────────
171
- /**
172
- * Shift+click on a block: extend the cross-block selection, or enter cross-block mode using the
173
- * previously focused block's caret as the anchor. False when no anchor could be recovered, or
174
- * the click stayed within the same block (native shift-click handles that).
175
- */
176
- export function handleShiftClick(selection, clickedBlockEl, clickedBlockPath, clickedX, clickedY, previouslyFocusedBlockEl, previouslyFocusedBlockPath) {
147
+ /** Shift+click on a block: extends the range, grows one from an image selected whole, or enters
148
+ * cross-block mode from the last caret. False for a same-block click, left to the browser. */
149
+ export function handleShiftClick(selection, clickedBlockEl, clickedBlockPath, clickedX, clickedY, previouslyFocusedBlockEl, previouslyFocusedBlockPath, selectedWidget) {
150
+ // While an image is selected whole there is no caret to grow from, so the image is the
151
+ // anchor; the click ends that selection either way, as a range and it never coexist.
152
+ const widget = selectedWidget.range();
153
+ if (widget)
154
+ selectedWidget.clear();
177
155
  const clickOffset = offsetFromViewportPoint(clickedBlockEl, clickedX, clickedY);
178
156
  if (clickOffset === null)
179
157
  return false;
@@ -182,71 +160,71 @@ export function handleShiftClick(selection, clickedBlockEl, clickedBlockPath, cl
182
160
  selection.extendFocus(focusPoint);
183
161
  return true;
184
162
  }
163
+ if (widget) {
164
+ const anchor = widgetShiftAnchor(widget, focusPoint);
165
+ if (comparePaths(anchor.path, focusPoint.path) === 0) {
166
+ applySingleBlockRange(clickedBlockEl, anchor.offset, focusPoint.offset);
167
+ return true;
168
+ }
169
+ selection.enterCrossBlock(anchor, focusPoint);
170
+ applyCollapsedCaret(clickedBlockEl, focusPoint);
171
+ return true;
172
+ }
185
173
  if (!previouslyFocusedBlockEl || !previouslyFocusedBlockPath)
186
174
  return false;
187
- // The anchor path comes from the DOM, and no path host exists below a table, so a caret
188
- // parked in a cell would carry the TABLE's path with a char offset. The endpoint seam can't
189
- // tell that from a cell index, so deepen to the cell here and let the seam convert.
175
+ // Nothing below a table carries a path, so a caret in a cell would read as the table's path
176
+ // with a character offset, which the endpoint snap can't tell from a cell index.
190
177
  const anchorPath = findCellPathForElement(previouslyFocusedBlockEl) ?? previouslyFocusedBlockPath;
191
178
  const anchor = readNativeCaretInBlock(previouslyFocusedBlockEl, anchorPath);
192
179
  if (!anchor)
193
180
  return false;
194
- // Same-block — native selection already produced a single-block range.
181
+ // Same block: the browser's own shift-click already made the range.
195
182
  if (comparePaths(anchor.path, focusPoint.path) === 0)
196
183
  return false;
197
184
  selection.enterCrossBlock(anchor, focusPoint);
198
- // Paste-dispatch anchor (see enterCrossBlockFromKeyboard); the click default isn't relied on.
185
+ // A collapsed caret for paste dispatch (see `enterCrossBlockFromKeyboard`); the click's
186
+ // default is not relied on.
199
187
  applyCollapsedCaret(clickedBlockEl, focusPoint);
200
188
  return true;
201
189
  }
202
- // ── Internal ───────────────────────────────────────────────────────────────
203
- /** First leaf reachable from `fromPath` going forward (descend or step). */
204
- function firstLeafAfter(doc, fromPath) {
205
- const next = nextPath(doc, fromPath);
206
- return next ? firstLeafAtOrAfter(doc, next) : null;
207
- }
208
- /** Last leaf reachable from `fromPath` going backward (descend or step). */
209
- function lastLeafBefore(doc, fromPath) {
210
- // previousPath is doc-order (ancestor-before-descendant), so a first-child leaf's "previous"
211
- // is its own container, and descending into that ancestor's LAST leaf would move the walk
212
- // forward. Skip ancestors until a genuinely preceding subtree is reached.
213
- let prev = previousPath(doc, fromPath);
214
- while (prev && isStrictAncestorOf(prev, fromPath))
215
- prev = previousPath(doc, prev);
216
- return prev ? lastLeafAtOrBefore(doc, prev) : null;
190
+ /** The edge of a selected widget a shift-click grows from: the one away from the click, so the
191
+ * range covers the widget and everything up to the click. */
192
+ export function widgetShiftAnchor(widget, press) {
193
+ const order = comparePaths(press.path, widget.path);
194
+ const pressAfter = order > 0 || (order === 0 && press.offset > widget.start);
195
+ return { path: widget.path.slice(), offset: pressAfter ? widget.start : widget.end };
217
196
  }
218
- function isTransparent(doc, path) {
197
+ // ── Internal ───────────────────────────────────────────────────────────────
198
+ function isTransparent(doc, grammar, path) {
219
199
  const node = nodeAt(doc, path);
220
200
  // nodeAt returns the Document for an empty path; narrow it out (Document has no `raw`).
221
- return node !== null && 'raw' in node && isVerticallyTransparentNode(node);
201
+ return node !== null && 'raw' in node && isVerticallyTransparentNode(node, grammar);
222
202
  }
223
- function firstNonTransparentLeafAfter(doc, fromPath) {
224
- let leaf = firstLeafAfter(doc, fromPath);
225
- while (leaf && isTransparent(doc, leaf)) {
226
- leaf = firstLeafAfter(doc, leaf);
203
+ function firstNonTransparentLeafAfter(doc, grammar, fromPath) {
204
+ let leaf = nextCaretPath(doc, fromPath);
205
+ while (leaf && isTransparent(doc, grammar, leaf)) {
206
+ leaf = nextCaretPath(doc, leaf);
227
207
  }
228
208
  return leaf;
229
209
  }
230
- function lastNonTransparentLeafBefore(doc, fromPath) {
231
- let leaf = lastLeafBefore(doc, fromPath);
232
- while (leaf && isTransparent(doc, leaf)) {
233
- leaf = lastLeafBefore(doc, leaf);
210
+ function lastNonTransparentLeafBefore(doc, grammar, fromPath) {
211
+ let leaf = previousCaretPath(doc, fromPath);
212
+ while (leaf && isTransparent(doc, grammar, leaf)) {
213
+ leaf = previousCaretPath(doc, leaf);
234
214
  }
235
215
  return leaf;
236
216
  }
237
- /**
238
- * Doc-edge resolver: start AT the edge leaf and step inward to a text-bearing leaf. Distinct
239
- * from the leafAfter/leafBefore walkers, which step away from `fromPath`.
240
- */
241
- function firstNonTransparentLeafFrom(doc, startPath) {
242
- if (!isTransparent(doc, startPath))
217
+ /** Starts at the edge leaf itself and steps inward, unlike `nextCaretPath` and
218
+ * `previousCaretPath`, which step away from their start. */
219
+ function firstNonTransparentLeafFrom(doc, grammar, startPath) {
220
+ if (!isTransparent(doc, grammar, startPath))
243
221
  return startPath;
244
- return firstNonTransparentLeafAfter(doc, startPath);
222
+ return firstNonTransparentLeafAfter(doc, grammar, startPath);
245
223
  }
246
- function lastNonTransparentLeafFrom(doc, startPath) {
247
- if (!isTransparent(doc, startPath))
224
+ function lastNonTransparentLeafFrom(doc, grammar, startPath) {
225
+ if (!isTransparent(doc, grammar, startPath))
248
226
  return startPath;
249
- return lastNonTransparentLeafBefore(doc, startPath);
227
+ return lastNonTransparentLeafBefore(doc, grammar, startPath);
250
228
  }
251
229
  function leafOffsetEnd(doc, path) {
252
230
  const node = nodeAt(doc, path);
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Double and triple click: the second click of a run selects the word under it, the third the
3
+ * whole block's text, and a drag from either grows by that unit. The editor owns the gesture
4
+ * from the second click so the browser paints nothing of its own: its word rule varies by
5
+ * platform, it walks into non-editable widgets, and a marker here never joins a word.
6
+ */
7
+ import type { UserScrollport } from '../cursor/scroll-ancestors';
8
+ import type { BlockElLookup } from '../editor-keys';
9
+ import type { SelectionState } from './selection-state.svelte';
10
+ export type ClickGranularity = 'word' | 'block';
11
+ export interface Span {
12
+ start: number;
13
+ end: number;
14
+ }
15
+ /** The segment at `offset`: the word ending there if there is one, else the segment starting
16
+ * there, as the browser takes it. Null on a platform with no segmenter. */
17
+ export declare function wordSpanAt(text: string, offset: number): Span | null;
18
+ /** The raw span `granularity` takes around a raw offset in `surface`; null where the word rule
19
+ * has nothing to read. */
20
+ export declare function spanAround(surface: HTMLElement, granularity: ClickGranularity, rawOffset: number): Span | null;
21
+ /** The unit a click count selects; a run stays at the block unit past three clicks. */
22
+ export declare function granularityForClickCount(clickCount: number): ClickGranularity | null;
23
+ export interface MultiClickDeps {
24
+ editorRoot: HTMLElement;
25
+ selection: SelectionState;
26
+ getBlockElByPath: BlockElLookup;
27
+ getScrollContainer(): UserScrollport;
28
+ lifetimeSignal?: AbortSignal;
29
+ /** A click outside every editable element (the margin, a container's own box) names the
30
+ * nearest block, as a single click there does; null when the click is on a button or handle. */
31
+ marginBlockAt(target: EventTarget | null, clientX: number, clientY: number): number[] | null;
32
+ /** Whether the click landed on an inline widget the editor already holds selected whole. */
33
+ pressesSelectedWidget(target: EventTarget | null): boolean;
34
+ }
35
+ /** Root listeners for the gesture. The mousedown and mouseup are cancelled so the browser paints
36
+ * no caret over the range, but never the pointerdown, which would silence the click. */
37
+ export declare function installMultiClickSelect(deps: MultiClickDeps): () => void;