@voithos-labs/aragonite 0.10.4 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +11 -5
  3. package/dist/a11y-strings.js +60 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +12 -21
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +603 -1126
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +26 -51
  26. package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +29 -34
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +57 -39
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +141 -203
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +45 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
  102. package/dist/components/blocks/text/click-snap-guard.js +10 -7
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -108
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +212 -199
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +12 -35
  144. package/dist/components/drag-handle.js +22 -68
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -24
  162. package/dist/components/editor-root-listeners.js +49 -24
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +14 -26
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +30 -35
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +54 -75
  256. package/dist/core/inline/inline-widgets.js +54 -62
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +31 -15
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -6
  347. package/dist/cursor/height-oracle.js +26 -74
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +14 -15
  365. package/dist/cursor/scrollport.js +7 -13
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -14
  375. package/dist/cursor/visual-lines.js +45 -46
  376. package/dist/cursor/widget-edge-snap.d.ts +10 -15
  377. package/dist/cursor/widget-edge-snap.js +13 -12
  378. package/dist/cursor/widget-offset.d.ts +110 -104
  379. package/dist/cursor/widget-offset.js +344 -179
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +30 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +28 -50
  434. package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
  435. package/dist/editor-actions/focus/focus-landing.js +15 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +54 -82
  465. package/dist/editor-actions/plugin/container.js +105 -188
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +88 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +37 -8
  550. package/dist/plugin.js +100 -77
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +78 -67
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -81
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +141 -310
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +78 -84
  695. package/dist/schema/commands.js +152 -117
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +8 -10
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +63 -80
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +92 -125
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +59 -96
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +51 -134
  807. package/dist/selection/dead-space-caret.d.ts +19 -30
  808. package/dist/selection/dead-space-caret.js +70 -88
  809. package/dist/selection/drag-pointer.d.ts +7 -9
  810. package/dist/selection/drag-pointer.js +23 -33
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -40
  816. package/dist/selection/keyboard-extend.js +94 -117
  817. package/dist/selection/multi-click.d.ts +13 -18
  818. package/dist/selection/multi-click.js +32 -38
  819. package/dist/selection/native-bridge.d.ts +29 -39
  820. package/dist/selection/native-bridge.js +78 -127
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +25 -16
  824. package/dist/selection/path-lookup.js +101 -18
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +5 -5
  828. package/dist/selection/pointer-gesture.js +5 -5
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -40
  832. package/dist/selection/primitives.js +57 -67
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -23
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +34 -16
  852. package/dist/selection/selection-drop.js +159 -95
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +60 -53
  864. package/dist/styles/editor.css +201 -143
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
  960. package/dist/tree-operations/paste/replacement-parse.js +12 -10
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +327 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +253 -185
  996. package/docs/guide/plugin-guide.md +332 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +12 -16
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/cursor/scroll-hold.d.ts +0 -10
  1015. package/dist/cursor/scroll-hold.js +0 -22
  1016. package/dist/invariants/split-landing.d.ts +0 -8
  1017. package/dist/invariants/split-landing.js +0 -15
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
@@ -1,10 +1,11 @@
1
+ import { trimWhitespace } from '../lines';
1
2
  import { joinRaw, isBlankLine } from '../parser';
2
3
  import { lineStartsOuterBlock } from '../../schema/block-openers';
3
4
  // ── Cell splitter ──────────────────────────────────────────────────────────
4
- // Cell padding is cosmetic. Pre-edit bytes survive in `table.raw`; post-edit,
5
- // rebuildTableRowRaw emits canonical single-space padding for every row.
5
+ // Cell padding is cosmetic: a rebuilt row writes single spaces. GFM §4.10 trims spaces, so a
6
+ // non-breaking space at a cell's edge is content and survives the rebuild.
6
7
  export function splitRowCells(rowText) {
7
- const trimmed = rowText.trim();
8
+ const trimmed = trimWhitespace(rowText);
8
9
  const head = trimmed.startsWith('|') ? trimmed.slice(1) : trimmed;
9
10
  const inner = head.endsWith('|') ? head.slice(0, -1) : head;
10
11
  const cells = [];
@@ -13,21 +14,18 @@ export function splitRowCells(rowText) {
13
14
  for (let i = 0; i < inner.length; i++) {
14
15
  const ch = inner[i];
15
16
  if (ch === '|' && !escaped) {
16
- cells.push(current.trim());
17
+ cells.push(trimWhitespace(current));
17
18
  current = '';
18
19
  continue;
19
20
  }
20
21
  current += ch;
21
22
  escaped = ch === '\\' && !escaped;
22
23
  }
23
- cells.push(current.trim());
24
+ cells.push(trimWhitespace(current));
24
25
  return cells;
25
26
  }
26
- /**
27
- * The cells a line offers as a table header row, or null when it offers none — the one home for
28
- * the shape, so a row the continuation scan accepts and the Enter completer refuses cannot exist.
29
- * Arity against the delimiter is the caller's check.
30
- */
27
+ /** The cells a line offers as a header row, or null: the one definition, so the continuation scan
28
+ * and the Enter completer cannot disagree. Arity against the delimiter is the caller's check. */
31
29
  export function tableHeaderCells(text) {
32
30
  if (!text.includes('|'))
33
31
  return null;
@@ -35,14 +33,14 @@ export function tableHeaderCells(text) {
35
33
  }
36
34
  // ── Delimiter row ──────────────────────────────────────────────────────────
37
35
  export function matchTableDelimiterRow(text) {
38
- const trimmed = text.trim();
36
+ const trimmed = trimWhitespace(text);
39
37
  if (!trimmed.includes('|'))
40
38
  return null;
41
39
  const inner = trimmed.replace(/^\||\|$/g, '');
42
40
  const cells = inner.split('|');
43
41
  const alignments = [];
44
42
  for (const cell of cells) {
45
- const c = cell.trim();
43
+ const c = trimWhitespace(cell);
46
44
  if (!/^:?-+:?$/.test(c))
47
45
  return null;
48
46
  const left = c.startsWith(':');
@@ -59,17 +57,17 @@ export function matchTableDelimiterRow(text) {
59
57
  return { columnCount: cells.length, alignments };
60
58
  }
61
59
  // ── Block parser ───────────────────────────────────────────────────────────
62
- export function parseTable(lines, startIndex, endIndex, leadingTrivia, delimiter) {
63
- // GFM: the table breaks at a blank line or the start of another block, so a body row is a
64
- // pipe-carrying line no opener claims. No paragraph is open here, so nothing is transparent
65
- // but the definition, which is never a block start.
60
+ /** Whether a table takes `lines[index]` as one more row, pipe or none: GFM ends a table only at a
61
+ * blank line or a block start (spec example 201), judged in the editor's grammar. */
62
+ export function tableTakesLine(lines, index, end, grammar) {
63
+ const line = lines[index];
64
+ return (!isBlankLine(line.text) &&
65
+ !lineStartsOuterBlock(line, { paragraphOpen: false, grammar, window: { lines, index, end } }));
66
+ }
67
+ export function parseTable(lines, startIndex, endIndex, leadingTrivia, delimiter, grammar) {
66
68
  let i = startIndex + 2;
67
- while (i < endIndex &&
68
- !isBlankLine(lines[i].text) &&
69
- lines[i].text.includes('|') &&
70
- !lineStartsOuterBlock(lines[i], { paragraphOpen: false })) {
69
+ while (i < endIndex && tableTakesLine(lines, i, endIndex, grammar))
71
70
  i++;
72
- }
73
71
  const rows = [];
74
72
  rows.push(buildRow(lines[startIndex], delimiter.columnCount, true));
75
73
  for (let r = startIndex + 2; r < i; r++) {
@@ -87,14 +85,13 @@ export function parseTable(lines, startIndex, endIndex, leadingTrivia, delimiter
87
85
  consumed: i - startIndex
88
86
  };
89
87
  }
90
- // GFM pads short BODY rows and truncates long ones to the delimiter column count. The header
91
- // always matches: a mismatch rejects the whole table at recognition (GFM §4.10, paragraph.ts).
88
+ // GFM pads short body rows and renders a long one's first cells, keeping the rest as surplus bytes;
89
+ // a header mismatch rejects the whole table at recognition (paragraph.ts).
92
90
  function buildRow(line, columnCount, isHeader) {
93
91
  const cellTexts = splitRowCells(line.text);
94
92
  while (cellTexts.length < columnCount)
95
93
  cellTexts.push('');
96
- if (cellTexts.length > columnCount)
97
- cellTexts.length = columnCount;
94
+ const surplusCells = cellTexts.splice(columnCount);
98
95
  const cells = cellTexts.map((text) => ({
99
96
  kind: 'tableCell',
100
97
  leadingTrivia: '',
@@ -104,7 +101,7 @@ function buildRow(line, columnCount, isHeader) {
104
101
  kind: 'tableRow',
105
102
  leadingTrivia: '',
106
103
  raw: line.raw,
107
- metadata: { isHeader },
104
+ metadata: surplusCells.length > 0 ? { isHeader, surplusCells } : { isHeader },
108
105
  children: cells
109
106
  };
110
107
  }
@@ -1,19 +1,20 @@
1
1
  // Ambiguity with setext underlines is resolved in paragraph.ts; top-level
2
2
  // dispatch only reaches here after a blank line or a non-paragraph state.
3
+ import { indentColumns, OPTIONAL_LINE_ENDING } from '../lines';
4
+ // CommonMark §4.1: only spaces and tabs sit around the markers, so a non-breaking space makes the
5
+ // line a paragraph.
6
+ const breakOf = (marker) => new RegExp(`^[ \\t]*(?:\\${marker}[ \\t]*){3,}${OPTIONAL_LINE_ENDING}$`);
7
+ const BREAKS = [
8
+ [breakOf('*'), '*'],
9
+ [breakOf('-'), '-'],
10
+ [breakOf('_'), '_']
11
+ ];
3
12
  export function matchThematicBreak(text) {
4
- // CommonMark §4.1: 0-3 columns of indent; 4+ is indented code (tabs advance to the next 4).
5
- let col = 0;
6
- for (let i = 0; i < text.length && (text[i] === ' ' || text[i] === '\t'); i++) {
7
- col += text[i] === '\t' ? 4 - (col % 4) : 1;
8
- if (col >= 4)
9
- return null;
10
- }
11
- const trimmed = text.trim();
12
- if (/^(\*[ \t]*){3,}$/.test(trimmed))
13
- return '*';
14
- if (/^(-[ \t]*){3,}$/.test(trimmed))
15
- return '-';
16
- if (/^(_[ \t]*){3,}$/.test(trimmed))
17
- return '_';
13
+ // 0-3 columns of indent; 4+ is indented code.
14
+ if (indentColumns(text) >= 4)
15
+ return null;
16
+ for (const [pattern, marker] of BREAKS)
17
+ if (pattern.test(text))
18
+ return marker;
18
19
  return null;
19
20
  }
@@ -0,0 +1,13 @@
1
+ /** Traversals of the block tree by path. */
2
+ import type { CstNode, Document } from './nodes';
3
+ import type { DocumentView, NodeView } from './node-views';
4
+ type WalkControl = void | 'skip' | 'stop';
5
+ /** Every block under `root`, not `root` itself, parents first; each path starts with `basePath` and
6
+ * is the visitor's to keep. `'skip'` leaves out a node's children; `'stop'` ends it, returning true. */
7
+ export declare function walkBlocks(root: Document | CstNode, visit: (node: CstNode, path: number[]) => WalkControl, basePath?: readonly number[]): boolean;
8
+ export declare function walkBlocks(root: DocumentView | NodeView, visit: (node: NodeView, path: number[]) => WalkControl, basePath?: readonly number[]): boolean;
9
+ /** The blocks strictly between `root` and the block at `path`, outermost first; the steps past a
10
+ * missing child are left out. */
11
+ export declare function ancestorsOf(root: Document | CstNode, path: readonly number[]): CstNode[];
12
+ export declare function ancestorsOf(root: DocumentView | NodeView, path: readonly number[]): NodeView[];
13
+ export {};
@@ -0,0 +1,31 @@
1
+ /** Traversals of the block tree by path. */
2
+ export function walkBlocks(root, visit, basePath = []) {
3
+ return walkChildren(root.children, [...basePath], visit);
4
+ }
5
+ export function ancestorsOf(root, path) {
6
+ const ancestors = [];
7
+ let children = root.children;
8
+ for (const index of path.slice(0, -1)) {
9
+ const node = children?.[index];
10
+ if (!node)
11
+ break;
12
+ ancestors.push(node);
13
+ children = node.children;
14
+ }
15
+ return ancestors;
16
+ }
17
+ // `trail` is the traversal's own path, copied for each visit so a visitor's array stays its own.
18
+ function walkChildren(children, trail, visit) {
19
+ if (!children)
20
+ return false;
21
+ for (let index = 0; index < children.length; index++) {
22
+ trail.push(index);
23
+ const control = visit(children[index], trail.slice());
24
+ const stopped = control === 'stop' ||
25
+ (control !== 'skip' && walkChildren(children[index].children, trail, visit));
26
+ trail.pop();
27
+ if (stopped)
28
+ return true;
29
+ }
30
+ return false;
31
+ }
@@ -1,8 +1 @@
1
- /**
2
- * The walk behind every "widen the opener past its own body" rule: raise `minimum` one past
3
- * each body line that would close the block at the width reached so far. A core leaf because
4
- * the fence grammar and the directive grammar both need it, and neither should import the
5
- * other's directory. Per-syntax knowledge stays in `closerRun`, which reports the closing
6
- * line's run length or `null` for a line that does not close.
7
- */
8
1
  export declare function escalateTerminatorRun(body: string, minimum: number, closerRun: (text: string, required: number) => number | null): number;
@@ -1,15 +1,12 @@
1
1
  /**
2
- * The walk behind every "widen the opener past its own body" rule: raise `minimum` one past
3
- * each body line that would close the block at the width reached so far. A core leaf because
4
- * the fence grammar and the directive grammar both need it, and neither should import the
5
- * other's directory. Per-syntax knowledge stays in `closerRun`, which reports the closing
6
- * line's run length or `null` for a line that does not close.
2
+ * The run length a fence or directive opener needs so no body line closes it: `minimum`, raised
3
+ * one past each body line that would close the block at the width reached so far. `closerRun`
4
+ * reports a closing line's run length, or `null` for a line that does not close.
7
5
  */
6
+ import { displayLines } from './lines';
8
7
  export function escalateTerminatorRun(body, minimum, closerRun) {
9
8
  let required = minimum;
10
- for (const line of body.split('\n')) {
11
- // Splitting on `\n` leaves a CRLF body's `\r` on the tail; a closer line's text excludes it.
12
- const text = line.endsWith('\r') ? line.slice(0, -1) : line;
9
+ for (const { text } of displayLines(body)) {
13
10
  const run = closerRun(text, required);
14
11
  if (run !== null)
15
12
  required = run + 1;
@@ -6,9 +6,6 @@
6
6
  export declare function isAllowedHrefScheme(url: string): boolean;
7
7
  /** Same rule as href over a different set: schemes that hand bytes to an `<img>`. */
8
8
  export declare function isAllowedImageSrcScheme(url: string): boolean;
9
- /**
10
- * The default when a consumer supplies no `onLinkActivate`, gated on the href allowlist. A block
11
- * is a security-relevant signal a production host can act on, so it reports through `onBlocked`
12
- * (the editor's `error` channel) rather than only reaching a dev console.
13
- */
9
+ /** The default when a consumer supplies no `onLinkActivate`, gated on the href allowlist. A block
10
+ * reports through `onBlocked` (the `error` channel), since a production host may act on it. */
14
11
  export declare function defaultLinkActivation(url: string, _event: MouseEvent, onBlocked?: (url: string) => void): void;
@@ -3,14 +3,13 @@
3
3
  * URLs cannot smuggle script execution into the DOM. `defaultLinkActivation` is the one DOM sink.
4
4
  */
5
5
  import { devWarn } from '../dev-warn';
6
- const ALLOWED_HREF_SCHEMES = new Set(['http', 'https', 'mailto', 'tel']);
7
- // `asset:` is a desktop shell's local-file protocol off Windows, where the same URL arrives as
8
- // `http://asset.localhost/...`, so omitting it blocks every image on macOS and Linux while
9
- // passing on a Windows dev box. It carries no script capability: no browser resolves it.
6
+ // `xmpp` hands the address to a chat client the way `mailto` hands it to a mail client.
7
+ const ALLOWED_HREF_SCHEMES = new Set(['http', 'https', 'mailto', 'tel', 'xmpp']);
8
+ // `asset:` is a desktop shell's local-file protocol off Windows, needed for images on macOS and
9
+ // Linux; it carries no script capability, since no browser resolves it.
10
10
  const ALLOWED_IMG_SCHEMES = new Set(['http', 'https', 'data', 'asset']);
11
- // Matches the WHATWG URL parser's pre-scheme normalization: it strips ASCII tab/newline anywhere
12
- // and leading C0-control-or-space. `java\tscript:` runs in the browser, so normalizing the same
13
- // way here is what stops a control byte from trivially bypassing the allowlist.
11
+ // Mirrors the WHATWG URL parser's pre-scheme normalization, or a control byte (`java\tscript:`)
12
+ // would slip past the allowlist.
14
13
  function schemeOf(url) {
15
14
  const stripped = url.replace(/[\t\n\r]/g, '');
16
15
  let i = 0;
@@ -29,11 +28,8 @@ export function isAllowedImageSrcScheme(url) {
29
28
  const scheme = schemeOf(url);
30
29
  return scheme === null || ALLOWED_IMG_SCHEMES.has(scheme);
31
30
  }
32
- /**
33
- * The default when a consumer supplies no `onLinkActivate`, gated on the href allowlist. A block
34
- * is a security-relevant signal a production host can act on, so it reports through `onBlocked`
35
- * (the editor's `error` channel) rather than only reaching a dev console.
36
- */
31
+ /** The default when a consumer supplies no `onLinkActivate`, gated on the href allowlist. A block
32
+ * reports through `onBlocked` (the `error` channel), since a production host may act on it. */
37
33
  export function defaultLinkActivation(url, _event, onBlocked) {
38
34
  if (isAllowedHrefScheme(url)) {
39
35
  window.open(url, '_blank', 'noopener,noreferrer');
@@ -0,0 +1,34 @@
1
+ /**
2
+ * What the editor remembers about how the caret arrived: the sticky column (the x a run of
3
+ * Up/Down arrows keeps), the edge affinity (which side of a hidden marker run the caret means)
4
+ * and the pending marks (the formats a toggle promised the next typed byte). All three share one
5
+ * lifetime: a keydown updates them through `noteKey`, and any other caret move calls `forget`,
6
+ * which drops all three at once.
7
+ */
8
+ import type { EditorX } from './coordinate-spaces';
9
+ import { type EdgeAffinity } from './edge-affinity';
10
+ import { type PendingMarks } from './pending-marks';
11
+ import type { AnyCommandId } from '../schema/command-id';
12
+ /** The parts of a keydown the classifiers read. */
13
+ export type ArrivalKey = Pick<KeyboardEvent, 'key'> & Partial<Pick<KeyboardEvent, 'metaKey'>>;
14
+ export interface CaretMemory {
15
+ /** The editor-relative x a vertical move aims for, or null outside an Up/Down run. */
16
+ column(): EditorX | null;
17
+ /** Which side of a hidden marker run the caret means; null leaves the typing path's default. */
18
+ side(): EdgeAffinity | null;
19
+ /** The marks a toggle at a collapsed caret promised; `forget` drops them with the rest. */
20
+ readonly pendingMarks: PendingMarks;
21
+ /** Classify a keydown; `command` is the chord's meaning at the focused block, so a rebound chord
22
+ * reads as what it does. Without `measureX` (a caller holding a range) the column is kept. */
23
+ noteKey(e: ArrivalKey, command: AnyCommandId | null, measureX?: () => EditorX | null): void;
24
+ /** A committed keystroke: the byte belongs to the content, whatever arrival preceded it. */
25
+ noteTyping(): void;
26
+ /** The caret was placed at an end rather than stepped there, so it means the outside. */
27
+ noteExtreme(): void;
28
+ /** Record a column a surface measured itself on the way out (the table, which has no caret
29
+ * of its own at the moment it leaves). Keeps a column already held. */
30
+ captureColumn(x: EditorX): void;
31
+ /** A caret move that is not a key: a click, a paste, an undo, a document swap, a blur. */
32
+ forget(): void;
33
+ }
34
+ export declare function createCaretMemory(): CaretMemory;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * What the editor remembers about how the caret arrived: the sticky column (the x a run of
3
+ * Up/Down arrows keeps), the edge affinity (which side of a hidden marker run the caret means)
4
+ * and the pending marks (the formats a toggle promised the next typed byte). All three share one
5
+ * lifetime: a keydown updates them through `noteKey`, and any other caret move calls `forget`,
6
+ * which drops all three at once.
7
+ */
8
+ import { classifyStickyKey } from './sticky-column';
9
+ import { classifyArrivalKey } from './edge-affinity';
10
+ import { flipMark } from './pending-marks';
11
+ import { BLOCK_MOVE_COMMAND_IDS } from '../schema/commands';
12
+ import { isInteractionTraceEnabled, traceStickyCapture, traceStickyReset } from '../debug/interaction-trace';
13
+ export function createCaretMemory() {
14
+ let column = null;
15
+ let side = null;
16
+ let marks = null;
17
+ function dropColumn() {
18
+ // Runs on nearly every keystroke, so the enabled check short-circuits first.
19
+ if (isInteractionTraceEnabled() && column !== null)
20
+ traceStickyReset();
21
+ column = null;
22
+ }
23
+ function captureColumn(x) {
24
+ if (column !== null || !Number.isFinite(x))
25
+ return;
26
+ column = x;
27
+ traceStickyCapture(x);
28
+ }
29
+ // Promised marks belong to one side of the caret, so a caret that changed sides drops them.
30
+ function settleSide(next) {
31
+ side = next;
32
+ marks = null;
33
+ }
34
+ return {
35
+ column: () => column,
36
+ side: () => side,
37
+ pendingMarks: {
38
+ get: () => marks,
39
+ toggle: (kind) => {
40
+ marks = flipMark(marks, kind);
41
+ },
42
+ consume: () => {
43
+ const spent = marks;
44
+ marks = null;
45
+ return spent;
46
+ },
47
+ restore: (unspent) => {
48
+ if (marks === null)
49
+ marks = unspent;
50
+ }
51
+ },
52
+ noteKey: (e, command, measureX) => {
53
+ // A block move leaves the caret where it was; the move's own commit forgets the memory.
54
+ if (command !== null && BLOCK_MOVE_COMMAND_IDS.has(command))
55
+ return;
56
+ const columnAction = classifyStickyKey(e.key);
57
+ if (columnAction === 'reset')
58
+ dropColumn();
59
+ else if (columnAction === 'capture') {
60
+ const x = measureX?.();
61
+ if (x !== null && x !== undefined)
62
+ captureColumn(x);
63
+ }
64
+ const sideAction = classifyArrivalKey(e.key, e.metaKey);
65
+ // A preserved key left the caret where it was: the chord that pends a mark and the
66
+ // character that spends it both preserve, so neither may clear the marks.
67
+ if (sideAction === 'preserve')
68
+ return;
69
+ settleSide(sideAction === 'reset' ? null : sideAction);
70
+ },
71
+ noteTyping: () => {
72
+ dropColumn();
73
+ settleSide('near');
74
+ },
75
+ noteExtreme: () => settleSide('outside'),
76
+ captureColumn,
77
+ forget: () => {
78
+ dropColumn();
79
+ settleSide(null);
80
+ }
81
+ };
82
+ }
@@ -1,27 +1,26 @@
1
1
  /**
2
2
  * The editor's coordinate spaces as branded numbers (G3.7), so mixing them is a type error
3
- * at the seam instead of a caret bug later. A brand is produced only by its space's home
4
- * module or an `as*` boundary mint at a declared public door — the coordinate-brand-mints
5
- * lint holds that list closed — and moves between spaces only through the named
6
- * conversions below, one home per direction. Public API doors keep `number` and mint once.
3
+ * instead of a caret bug later. A brand is produced only by the module that owns its space or
4
+ * by an `as*` cast at a declared public entry point (G4.15's rows in `lint/file-rules.test.ts`
5
+ * hold that list closed), and moves between spaces only through the conversions below, one
6
+ * function per direction. Public API entry points take `number` and brand it once.
7
7
  */
8
8
  import type { DocPath } from '../selection/path-math';
9
9
  declare const rawOffsetBrand: unique symbol;
10
- /** Byte offset into a block node's raw content (CST-facing; ambient marker excluded). */
10
+ /** Byte offset into a block node's raw content (CST-facing; the container's marker prefix excluded). */
11
11
  export type RawOffset = number & {
12
12
  readonly [rawOffsetBrand]: true;
13
13
  };
14
14
  declare const domTextOffsetBrand: unique symbol;
15
15
  /**
16
- * Offset in the widget-offset walk space: raw offset plus the leading ambient marker's
17
- * text length. Home: `cursor/widget-offset.ts`, with `cursor/content-offsets.ts` as the
18
- * widget-free equivalent.
16
+ * Offset as the DOM walk counts it: the raw offset plus the leading marker prefix's text length.
17
+ * Produced only by `cursor/widget-offset.ts`.
19
18
  */
20
19
  export type DomTextOffset = number & {
21
20
  readonly [domTextOffsetBrand]: true;
22
21
  };
23
22
  declare const editorXBrand: unique symbol;
24
- /** Editor-relative pixel X (viewport X minus the editor container's left) — scroll-invariant. */
23
+ /** Editor-relative pixel X (viewport X minus the editor container's left), unaffected by scrolling. */
25
24
  export type EditorX = number & {
26
25
  readonly [editorXBrand]: true;
27
26
  };
@@ -31,15 +30,15 @@ export type ViewportX = number & {
31
30
  readonly [viewportXBrand]: true;
32
31
  };
33
32
  declare const cellIndexBrand: unique symbol;
34
- /** Row-major table cell index. Declared ahead of its home's conversion so the
33
+ /** Row-major table cell index, declared here rather than in the table code so the
35
34
  * `as CellIndex` lint rule exists before the first cast does. */
36
35
  export type CellIndex = number & {
37
36
  readonly [cellIndexBrand]: true;
38
37
  };
39
38
  export declare function toDomTextOffset(raw: RawOffset, ambientLength: number): DomTextOffset;
40
39
  export declare function toRawOffset(domText: DomTextOffset, ambientLength: number): RawOffset;
41
- /** `toRawOffset` clamped to raw 0, for DOM reads that may land inside the leading ambient
42
- * marker, where the unclamped result goes negative. */
40
+ /** `toRawOffset` clamped to raw 0, for DOM reads that may land inside the leading marker
41
+ * prefix, where the unclamped result goes negative. */
43
42
  export declare function toClampedRawOffset(domText: DomTextOffset, ambientLength: number): RawOffset;
44
43
  export declare function toEditorX(viewport: ViewportX, editorLeft: number): EditorX;
45
44
  export declare function toViewportX(editor: EditorX, editorLeft: number): ViewportX;
@@ -48,18 +47,26 @@ export declare function asDomTextOffset(n: number): DomTextOffset;
48
47
  export declare function asEditorX(n: number): EditorX;
49
48
  export declare function asViewportX(n: number): ViewportX;
50
49
  export declare function asCellIndex(n: number): CellIndex;
51
- /**
52
- * Row-major cell index → `{ row, col }` for a table of `colCount` columns — the one home
53
- * for the divmod the selection and table-overlay paths otherwise hand-roll. Takes a plain
54
- * number so a `CellIndex` holder and a bare loop counter both reach it without a cast.
55
- */
50
+ /** Row-major cell index to `{ row, col }` for a table of `colCount` columns. Takes a plain
51
+ * number so a `CellIndex` and a bare loop counter both reach it without a cast. */
56
52
  export declare function cellRowCol(cellIdx: number, colCount: number): {
57
53
  row: number;
58
54
  col: number;
59
55
  };
60
- /** Append a child index to a parent path, yielding a doc-absolute path. */
56
+ /** Grid coordinates to the row-major cell index {@link cellRowCol} decodes. */
57
+ export declare function rowMajorCellIndex(row: number, col: number, colCount: number): CellIndex;
58
+ /** A rectangle of table cells: its top-left cell plus its size. */
59
+ export interface CellRect {
60
+ top: number;
61
+ left: number;
62
+ rows: number;
63
+ cols: number;
64
+ }
65
+ /** The rectangle two cells span as its corners, in either order. */
66
+ export declare function cellRectBounds(cornerA: number, cornerB: number, colCount: number): CellRect;
67
+ /** Append a child index to a parent path, yielding a document-absolute path. */
61
68
  export declare function extendDocPath(parent: readonly number[], index: number): DocPath;
62
- /** Brand a complete doc-absolute path (copied) for composers that already hold one;
69
+ /** Brand a complete document-absolute path (copied) for callers that already hold one;
63
70
  * `extendDocPath` covers the parent-plus-index case, this covers the rest. */
64
71
  export declare function docPathFrom(indices: readonly number[]): DocPath;
65
72
  export {};
@@ -1,19 +1,19 @@
1
1
  /**
2
2
  * The editor's coordinate spaces as branded numbers (G3.7), so mixing them is a type error
3
- * at the seam instead of a caret bug later. A brand is produced only by its space's home
4
- * module or an `as*` boundary mint at a declared public door — the coordinate-brand-mints
5
- * lint holds that list closed — and moves between spaces only through the named
6
- * conversions below, one home per direction. Public API doors keep `number` and mint once.
3
+ * instead of a caret bug later. A brand is produced only by the module that owns its space or
4
+ * by an `as*` cast at a declared public entry point (G4.15's rows in `lint/file-rules.test.ts`
5
+ * hold that list closed), and moves between spaces only through the conversions below, one
6
+ * function per direction. Public API entry points take `number` and brand it once.
7
7
  */
8
- // ── Conversions (the inter-space arithmetic — one home per direction) ────────
8
+ // ── Conversions (between spaces, one function per direction) ─────────────────
9
9
  export function toDomTextOffset(raw, ambientLength) {
10
10
  return (raw + ambientLength);
11
11
  }
12
12
  export function toRawOffset(domText, ambientLength) {
13
13
  return (domText - ambientLength);
14
14
  }
15
- /** `toRawOffset` clamped to raw 0, for DOM reads that may land inside the leading ambient
16
- * marker, where the unclamped result goes negative. */
15
+ /** `toRawOffset` clamped to raw 0, for DOM reads that may land inside the leading marker
16
+ * prefix, where the unclamped result goes negative. */
17
17
  export function toClampedRawOffset(domText, ambientLength) {
18
18
  return Math.max(0, toRawOffset(domText, ambientLength));
19
19
  }
@@ -23,7 +23,7 @@ export function toEditorX(viewport, editorLeft) {
23
23
  export function toViewportX(editor, editorLeft) {
24
24
  return (editor + editorLeft);
25
25
  }
26
- // ── Boundary mints (space homes and declared doors only — see the lint) ──────
26
+ // ── Brand casts (owning modules and declared entry points only; see the lint) ─
27
27
  export function asRawOffset(n) {
28
28
  return n;
29
29
  }
@@ -40,26 +40,38 @@ export function asCellIndex(n) {
40
40
  return n;
41
41
  }
42
42
  // ── Cell grid decode ─────────────────────────────────────────────────────────
43
- /**
44
- * Row-major cell index → `{ row, col }` for a table of `colCount` columns — the one home
45
- * for the divmod the selection and table-overlay paths otherwise hand-roll. Takes a plain
46
- * number so a `CellIndex` holder and a bare loop counter both reach it without a cast.
47
- */
43
+ /** Row-major cell index to `{ row, col }` for a table of `colCount` columns. Takes a plain
44
+ * number so a `CellIndex` and a bare loop counter both reach it without a cast. */
48
45
  export function cellRowCol(cellIdx, colCount) {
49
46
  const row = Math.floor(cellIdx / colCount);
50
47
  return { row, col: cellIdx - row * colCount };
51
48
  }
52
- // ── DocPath composition (the doc-absolute path helpers, at the neutral leaf) ──
49
+ /** Grid coordinates to the row-major cell index {@link cellRowCol} decodes. */
50
+ export function rowMajorCellIndex(row, col, colCount) {
51
+ return asCellIndex(row * colCount + col);
52
+ }
53
+ /** The rectangle two cells span as its corners, in either order. */
54
+ export function cellRectBounds(cornerA, cornerB, colCount) {
55
+ const a = cellRowCol(cornerA, colCount);
56
+ const b = cellRowCol(cornerB, colCount);
57
+ const top = Math.min(a.row, b.row);
58
+ const left = Math.min(a.col, b.col);
59
+ return {
60
+ top,
61
+ left,
62
+ rows: Math.max(a.row, b.row) - top + 1,
63
+ cols: Math.max(a.col, b.col) - left + 1
64
+ };
65
+ }
66
+ // ── DocPath composition (document-absolute path helpers, in a dependency-free module) ──
53
67
  //
54
- // `DocPath`'s type and base mint live in `selection/path-math.ts`; its composers live here
55
- // because `tree-operations/` must reach them without depending on `selection/`. Bare
56
- // `as DocPath` casts for the same reason — importing the runtime mint would reopen the
57
- // cursor↔selection cycle, while the type-only `DocPath` edge is erased.
58
- /** Append a child index to a parent path, yielding a doc-absolute path. */
68
+ // Here so `tree-operations/` can compose paths without importing `selection/`; the casts are
69
+ // bare because importing `selection/path-math.ts` at runtime would close an import cycle.
70
+ /** Append a child index to a parent path, yielding a document-absolute path. */
59
71
  export function extendDocPath(parent, index) {
60
72
  return [...parent, index];
61
73
  }
62
- /** Brand a complete doc-absolute path (copied) for composers that already hold one;
74
+ /** Brand a complete document-absolute path (copied) for callers that already hold one;
63
75
  * `extendDocPath` covers the parent-plus-index case, this covers the rest. */
64
76
  export function docPathFrom(indices) {
65
77
  return [...indices];
@@ -1,18 +1,12 @@
1
1
  /**
2
- * The one iterative pre-order over rendered inline DOM — the caret-space twin of
3
- * `core/inline/walk.ts`, and here rather than beside it because `cursor/` is what a DOM walk may
4
- * import from (`ambient/` reads this direction too, `core/` never does). Nesting depth is
5
- * input-controlled, so a per-level call frame overflows the stack and strands the block in the
6
- * unhealable failed-block fallback.
7
- */
8
- /**
9
- * `root`, then its descendants, in document order. `fromEnd` MIRRORS that walk rather than
10
- * reversing it — each level's children come last-first, a parent still ahead of them — so the
11
- * leaves arrive reversed and a search for the last matching one reads them in the order it wants.
12
- * `descend` declines a node's children: the node itself is still yielded, and is asked only when
13
- * it has any. Each child list is read when its parent pops, so a consumer that rewrites the tree
14
- * must finish the walk first.
2
+ * The one iterative pre-order traversal of rendered inline DOM, the DOM counterpart of
3
+ * `core/inline/walk.ts`. It lives here rather than beside it because `cursor/` is what a DOM walk
4
+ * may import from (`ambient/` reads this direction too, `core/` never does). Nesting depth comes
5
+ * from the input, so recursion would overflow the stack and leave the block stuck in the
6
+ * failed-block fallback.
15
7
  */
8
+ /** `root`, then its descendants in document order, or mirrored by `fromEnd` (a parent still ahead
9
+ * of its children). Child lists are read lazily, so finish the walk before rewriting the tree. */
16
10
  export declare function domDescendants(root: Node, descend?: (node: Node) => boolean, options?: {
17
11
  fromEnd?: boolean;
18
12
  }): Generator<Node>;
@@ -1,18 +1,12 @@
1
1
  /**
2
- * The one iterative pre-order over rendered inline DOM — the caret-space twin of
3
- * `core/inline/walk.ts`, and here rather than beside it because `cursor/` is what a DOM walk may
4
- * import from (`ambient/` reads this direction too, `core/` never does). Nesting depth is
5
- * input-controlled, so a per-level call frame overflows the stack and strands the block in the
6
- * unhealable failed-block fallback.
7
- */
8
- /**
9
- * `root`, then its descendants, in document order. `fromEnd` MIRRORS that walk rather than
10
- * reversing it — each level's children come last-first, a parent still ahead of them — so the
11
- * leaves arrive reversed and a search for the last matching one reads them in the order it wants.
12
- * `descend` declines a node's children: the node itself is still yielded, and is asked only when
13
- * it has any. Each child list is read when its parent pops, so a consumer that rewrites the tree
14
- * must finish the walk first.
2
+ * The one iterative pre-order traversal of rendered inline DOM, the DOM counterpart of
3
+ * `core/inline/walk.ts`. It lives here rather than beside it because `cursor/` is what a DOM walk
4
+ * may import from (`ambient/` reads this direction too, `core/` never does). Nesting depth comes
5
+ * from the input, so recursion would overflow the stack and leave the block stuck in the
6
+ * failed-block fallback.
15
7
  */
8
+ /** `root`, then its descendants in document order, or mirrored by `fromEnd` (a parent still ahead
9
+ * of its children). Child lists are read lazily, so finish the walk before rewriting the tree. */
16
10
  export function* domDescendants(root, descend, options = {}) {
17
11
  const stack = [root];
18
12
  while (stack.length > 0) {