@voithos-labs/aragonite 0.10.3 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +12 -5
  3. package/dist/a11y-strings.js +61 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +13 -20
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +619 -1089
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +36 -67
  26. package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +35 -28
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +58 -32
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +144 -202
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +46 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
  102. package/dist/components/blocks/text/click-snap-guard.js +16 -5
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -105
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +243 -208
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +13 -30
  144. package/dist/components/drag-handle.js +25 -63
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -31
  162. package/dist/components/editor-root-listeners.js +49 -46
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +26 -30
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +380 -0
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +55 -68
  256. package/dist/core/inline/inline-widgets.js +55 -58
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +33 -17
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -7
  347. package/dist/cursor/height-oracle.js +26 -75
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +16 -8
  365. package/dist/cursor/scrollport.js +28 -5
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -13
  375. package/dist/cursor/visual-lines.js +72 -28
  376. package/dist/cursor/widget-edge-snap.d.ts +23 -0
  377. package/dist/cursor/widget-edge-snap.js +39 -0
  378. package/dist/cursor/widget-offset.d.ts +111 -102
  379. package/dist/cursor/widget-offset.js +352 -177
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +31 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +33 -52
  434. package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
  435. package/dist/editor-actions/focus/focus-landing.js +29 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +55 -76
  465. package/dist/editor-actions/plugin/container.js +105 -186
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +91 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +38 -8
  550. package/dist/plugin.js +102 -74
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +113 -85
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -75
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +143 -292
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +79 -81
  695. package/dist/schema/commands.js +156 -116
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +9 -11
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +73 -78
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +93 -152
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +61 -104
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +53 -146
  807. package/dist/selection/dead-space-caret.d.ts +20 -28
  808. package/dist/selection/dead-space-caret.js +79 -87
  809. package/dist/selection/drag-pointer.d.ts +22 -5
  810. package/dist/selection/drag-pointer.js +63 -31
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -39
  816. package/dist/selection/keyboard-extend.js +94 -116
  817. package/dist/selection/multi-click.d.ts +37 -0
  818. package/dist/selection/multi-click.js +197 -0
  819. package/dist/selection/native-bridge.d.ts +30 -37
  820. package/dist/selection/native-bridge.js +80 -100
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +31 -14
  824. package/dist/selection/path-lookup.js +110 -20
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +9 -0
  828. package/dist/selection/pointer-gesture.js +11 -0
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -33
  832. package/dist/selection/primitives.js +61 -53
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -19
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +52 -0
  852. package/dist/selection/selection-drop.js +317 -0
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +75 -53
  864. package/dist/styles/editor.css +248 -139
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
  960. package/dist/tree-operations/paste/replacement-parse.js +24 -0
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +329 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +267 -183
  996. package/docs/guide/plugin-guide.md +341 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +17 -21
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/invariants/split-landing.d.ts +0 -8
  1015. package/dist/invariants/split-landing.js +0 -15
  1016. package/dist/selection/double-click-trim.d.ts +0 -17
  1017. package/dist/selection/double-click-trim.js +0 -57
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * The live-mode split rewrite (live-mode.md § 4.4 close-and-reopen): Enter inside a construct
3
- * closes it before the cut and reopens it after, so neither half strands a run the reader never
4
- * saw. Bytes stay candidates until the parser agrees; null leaves `splitNode`'s byte-literal cut.
3
+ * closes it before the cut and reopens it after, so neither half strands a run the user never
4
+ * saw. Bytes stay candidates until the parser agrees; null leaves `splitNode`'s literal cut.
5
5
  */
6
- import type { LinkReferenceResolver } from '../../../core/inline/link-reference-resolver';
6
+ import type { Reading } from '../../../schema/reading';
7
7
  import type { AnyInlineKind, InlineNode } from '../../../core/nodes';
8
8
  import { type LiveSplitRebalancer } from '../../../schema/inline-construct-policy';
9
9
  export declare const rebalanceLiveSplit: LiveSplitRebalancer;
@@ -13,7 +13,7 @@ interface SplitBytes {
13
13
  raw: string;
14
14
  contentStart: number;
15
15
  contentEnd: number;
16
- /** Where the second half's content begins in `raw` — past a line ending the cut consumed. */
16
+ /** Where the second half's content begins in `raw`, past a line ending the cut consumed. */
17
17
  cut: number;
18
18
  firstResidue: string;
19
19
  secondResidue: string;
@@ -25,19 +25,15 @@ export interface ChainLink {
25
25
  contentStart: number;
26
26
  contentEnd: number;
27
27
  }
28
- /**
29
- * Every construct holding `offset`, outermost first — or null when one of them declines. A kind
30
- * with no policy row, one whose split behavior is plain and one whose content bounds are unknown
31
- * cannot be cut open, and cutting the constructs inside one would strand its pair. Exported for
32
- * the depth pin, which has to reach it with a tree no split this deep could be rendered at.
33
- */
28
+ /** Every construct holding `offset`, outermost first, or null when one cannot be cut open, since
29
+ * cutting the constructs inside it would strand its pair. Exported for the depth test. */
34
30
  export declare function splittableChainAt(inlines: readonly InlineNode[], offset: number): ChainLink[] | null;
35
31
  interface SeamParts {
36
- /** Bytes before the seam, the block's own marker prefix included. */
32
+ /** Bytes before the cut, the block's own marker prefix included. */
37
33
  head: string;
38
34
  closers: string;
39
35
  openers: string;
40
- /** Bytes after the seam, up to the block's content end. */
36
+ /** Bytes after the cut, up to the block's content end. */
41
37
  tail: string;
42
38
  closed: AnyInlineKind[];
43
39
  reopened: AnyInlineKind[];
@@ -52,5 +48,5 @@ interface RebalancedHalves {
52
48
  * A candidate answers every question below or it is not written. Exported for the verification
53
49
  * test, which has to reach it with a candidate no producer here would build.
54
50
  */
55
- export declare function parsesBack(bytes: SplitBytes, seam: SeamParts, candidate: RebalancedHalves, resolver: LinkReferenceResolver | undefined): boolean;
51
+ export declare function parsesBack(bytes: SplitBytes, seam: SeamParts, candidate: RebalancedHalves, reading: Reading): boolean;
56
52
  export {};
@@ -1,29 +1,29 @@
1
1
  /**
2
2
  * The live-mode split rewrite (live-mode.md § 4.4 close-and-reopen): Enter inside a construct
3
- * closes it before the cut and reopens it after, so neither half strands a run the reader never
4
- * saw. Bytes stay candidates until the parser agrees; null leaves `splitNode`'s byte-literal cut.
3
+ * closes it before the cut and reopens it after, so neither half strands a run the user never
4
+ * saw. Bytes stay candidates until the parser agrees; null leaves `splitNode`'s literal cut.
5
5
  */
6
- import { constructContentRange, constructKinds, getContentRange, inlineDescendants, isProseKind, parseInline } from '../../../core/inline';
6
+ import { constructContentRange, constructKinds, getContentRange, inlineDescendants, isProseKind, readInline } from '../../../core/inline';
7
7
  import { CONTENT_VISIBILITY, paintsOnlyChrome, renderedText } from '../../../core/inline/visibility';
8
+ import { isBlankText } from '../../../core/lines';
8
9
  import { getInlineConstructPolicy } from '../../../schema/inline-construct-policy';
9
- import { soleProseReparse } from './screen-diff';
10
+ import { readBlocks } from '../../../core/parser';
10
11
  // ── The rewrite ──────────────────────────────────────────────────────────────
11
- export const rebalanceLiveSplit = (node, offset, firstRaw, secondRaw, linkRef) => {
12
+ export const rebalanceLiveSplit = (node, offset, firstRaw, secondRaw, reading) => {
12
13
  const read = readSplitBytes(node, offset, firstRaw, secondRaw);
13
14
  if (read === null)
14
15
  return null;
15
- const resolver = linkRef?.current;
16
- const inlines = parseInline(read.raw, read.contentStart, read.contentEnd, resolver);
17
- // Chrome standing over nothing is all on screen (live-mode.md § 4.1), so closing and reopening
18
- // it moves delimiters the reader is looking at: the byte-literal cut stands.
19
- if (paintsOnlyChrome(inlines, read.raw))
16
+ const inlines = readInline(read.raw, read.contentStart, read.contentEnd, reading.resolver, reading.grammar);
17
+ // Markers standing over nothing are all on screen (live-mode.md § 4.1), so closing and
18
+ // reopening them would move delimiters the user is looking at: the literal cut stands.
19
+ if (paintsOnlyChrome(inlines, read.raw, { grammar: reading.grammar }))
20
20
  return null;
21
21
  const moved = wholeConstructEdge(inlines, offset);
22
22
  const at = moved ?? offset;
23
23
  const bytes = moved === null ? read : { ...read, cut: moved };
24
24
  const chain = splittableChainAt(inlines, at);
25
25
  // An empty chain with the cut where the caller put it is a cut no construct touches, and the
26
- // byte-literal halves are already right; a MOVED cut is a rewrite in its own right.
26
+ // literal halves are already right; a cut that moved is a rewrite in its own right.
27
27
  if (chain === null || (chain.length === 0 && moved === null))
28
28
  return null;
29
29
  const seam = seamParts(bytes, chain, at);
@@ -33,9 +33,9 @@ export const rebalanceLiveSplit = (node, offset, firstRaw, secondRaw, linkRef) =
33
33
  assembleDroppingTerminalTrivia(bytes, seam)
34
34
  ];
35
35
  for (const candidate of candidates) {
36
- // The dropped bytes are the verification's business, not the caller's: what it gets back
37
- // is the two halves, whatever the candidate had to state to earn them.
38
- if (candidate !== null && parsesBack(bytes, seam, candidate, resolver)) {
36
+ // The dropped bytes are the check's business, not the caller's: what the caller gets back
37
+ // is the two halves, whatever the candidate had to declare to earn them.
38
+ if (candidate !== null && parsesBack(bytes, seam, candidate, reading)) {
39
39
  return { firstRaw: candidate.firstRaw, secondRaw: candidate.secondRaw };
40
40
  }
41
41
  }
@@ -43,7 +43,7 @@ export const rebalanceLiveSplit = (node, offset, firstRaw, secondRaw, linkRef) =
43
43
  };
44
44
  /**
45
45
  * Read the caller's two halves back against the original, so a cut this rewrite did not make (a
46
- * container body-write rule, a suffix move, a consumed line ending) surfaces as a failed anchor.
46
+ * container body-write rule, a suffix move, a consumed line ending) shows up as a failed match.
47
47
  */
48
48
  function readSplitBytes(node, offset, firstRaw, secondRaw) {
49
49
  if (!isProseKind(node.kind))
@@ -69,12 +69,8 @@ function readSplitBytes(node, offset, firstRaw, secondRaw) {
69
69
  }
70
70
  return null;
71
71
  }
72
- /**
73
- * The edge a cut moves to rather than landing inside a childless never-extend construct: two
74
- * halves of a URL are not two URLs, and half an escape is a literal backslash, so the whole
75
- * construct goes to the half the caret was nearer (live-mode.md § 4.4). Null where the cut lands
76
- * in no such construct. Innermost wins, as everywhere else.
77
- */
72
+ /** Where a cut inside a childless never-extend construct (a URL, an escape) moves to: the edge the
73
+ * caret was nearer, so the construct goes whole to one half (`docs/design/live-mode.md` § 4.4). */
78
74
  function wholeConstructEdge(inlines, offset) {
79
75
  let found = null;
80
76
  for (const node of inlineDescendants(inlines)) {
@@ -86,12 +82,8 @@ function wholeConstructEdge(inlines, offset) {
86
82
  }
87
83
  return found;
88
84
  }
89
- /**
90
- * Every construct holding `offset`, outermost first — or null when one of them declines. A kind
91
- * with no policy row, one whose split behavior is plain and one whose content bounds are unknown
92
- * cannot be cut open, and cutting the constructs inside one would strand its pair. Exported for
93
- * the depth pin, which has to reach it with a tree no split this deep could be rendered at.
94
- */
85
+ /** Every construct holding `offset`, outermost first, or null when one cannot be cut open, since
86
+ * cutting the constructs inside it would strand its pair. Exported for the depth test. */
95
87
  export function splittableChainAt(inlines, offset) {
96
88
  const chain = [];
97
89
  const holds = (node) => holdsOffset(node, offset);
@@ -113,11 +105,8 @@ export function splittableChainAt(inlines, offset) {
113
105
  }
114
106
  return chain;
115
107
  }
116
- /**
117
- * Whether a cut at `offset` lands in this construct. One with children is content-INCLUSIVE so
118
- * its edges reach the chain (the handover cases); a childless one is strict-interior, its edges
119
- * being ordinary seams. Text is content, and nothing under it is a construct either.
120
- */
108
+ /** Whether a cut at `offset` lands in this construct: one with children includes its content
109
+ * bounds; one without counts only its strict interior, since its edges are ordinary cut points. */
121
110
  function holdsOffset(node, offset) {
122
111
  if (node.kind === 'text')
123
112
  return false;
@@ -126,11 +115,8 @@ function holdsOffset(node, offset) {
126
115
  ? offset >= content.start && offset <= content.end
127
116
  : offset > node.start && offset < node.end;
128
117
  }
129
- /**
130
- * Innermost first, so a closer written before its enclosing one nests the halves as the original
131
- * did. A side with no content takes the whole construct: a pair enclosing nothing is residue live
132
- * may never write.
133
- */
118
+ /** Innermost first, so the halves nest as the original did. A side with no content takes the whole
119
+ * construct, since live mode never writes a pair enclosing nothing. */
134
120
  function seamParts(bytes, chain, offset) {
135
121
  let leftEnd = offset;
136
122
  let rightStart = bytes.cut;
@@ -165,11 +151,8 @@ const assemble = (bytes, seam) => ({
165
151
  firstRaw: seam.head + seam.closers + bytes.firstResidue,
166
152
  secondRaw: seam.openers + seam.tail + bytes.secondResidue
167
153
  });
168
- /**
169
- * The same seam with a boundary space handed to the plain text beside it. Markdown opens and
170
- * closes a run against a word, never whitespace, so a space left inside kills the construct; a
171
- * space's formatting is invisible, so moving it is the reading that parses and looks unchanged.
172
- */
154
+ /** The same cut with a boundary space handed to the plain text beside it: a run cannot open or close
155
+ * against whitespace, and a space's formatting is invisible anyway. */
173
156
  function assembleSpaceOutside(bytes, seam) {
174
157
  const trailing = seam.closers !== '' && seam.head.endsWith(' ');
175
158
  const leading = seam.openers !== '' && seam.tail.startsWith(' ');
@@ -182,13 +165,10 @@ function assembleSpaceOutside(bytes, seam) {
182
165
  bytes.secondResidue
183
166
  };
184
167
  }
185
- /**
186
- * The seam with a whitespace-only tail dropped rather than handed to either half. A block's
187
- * TERMINAL whitespace is a hard break with no following line, so it paints nothing, and
188
- * live-mode.md § 4.5 licenses live to drop what it never showed.
189
- */
168
+ /** The cut with a whitespace-only tail dropped: trailing whitespace draws nothing, and live mode
169
+ * may drop what it never showed (`docs/design/live-mode.md` § 4.5). */
190
170
  function assembleDroppingTerminalTrivia(bytes, seam) {
191
- if (seam.openers !== '' || seam.tail === '' || seam.tail.trim() !== '')
171
+ if (seam.openers !== '' || seam.tail === '' || !isBlankText(seam.tail))
192
172
  return null;
193
173
  return {
194
174
  firstRaw: seam.head + seam.closers + bytes.firstResidue,
@@ -200,40 +180,43 @@ function assembleDroppingTerminalTrivia(bytes, seam) {
200
180
  * A candidate answers every question below or it is not written. Exported for the verification
201
181
  * test, which has to reach it with a candidate no producer here would build.
202
182
  */
203
- export function parsesBack(bytes, seam, candidate, resolver) {
204
- const first = soleProseBlock(candidate.firstRaw, resolver);
205
- const second = soleProseBlock(candidate.secondRaw, resolver);
183
+ export function parsesBack(bytes, seam, candidate, reading) {
184
+ const first = soleProseBlock(candidate.firstRaw, reading);
185
+ const second = soleProseBlock(candidate.secondRaw, reading);
206
186
  if (first === null || second === null)
207
187
  return false;
208
- // Each half must be a block the RELOAD keeps. Empty is one; whitespace-only is not, since the
209
- // document reads those bytes as blank trivia and the pair comes back a different shape.
210
- if (isWhitespaceOnly(first.visible) || isWhitespaceOnly(second.visible))
188
+ // Each half must be a block a reparse keeps. Empty is one; whitespace-only is not, since the
189
+ // document reads those bytes as a blank line and the pair comes back a different shape.
190
+ if (readsAsBlankLine(first.visible) || readsAsBlankLine(second.visible))
211
191
  return false;
212
192
  if (!seam.closed.every((kind) => first.kinds.has(kind)))
213
193
  return false;
214
194
  if (!seam.reopened.every((kind) => second.kinds.has(kind)))
215
195
  return false;
216
- // The render oracle below counts characters while CSS collapses a terminal run to nothing, so
217
- // the "screen never showed it" rule is read here rather than trusted from the producer.
218
- if (candidate.droppedTail !== undefined && candidate.droppedTail.trim() !== '')
196
+ // The render check below counts characters while CSS collapses a trailing run to nothing, so
197
+ // the "the screen never showed it" rule is tested here rather than taken on trust.
198
+ if (candidate.droppedTail !== undefined && !isBlankText(candidate.droppedTail))
219
199
  return false;
220
- const whole = renderedText(parseInline(bytes.raw, bytes.contentStart, bytes.contentEnd, resolver), bytes.raw, CONTENT_VISIBILITY);
200
+ const whole = renderedText(readInline(bytes.raw, bytes.contentStart, bytes.contentEnd, reading.resolver, reading.grammar), bytes.raw, CONTENT_VISIBILITY, { grammar: reading.grammar });
221
201
  if (!whole.startsWith(first.visible))
222
202
  return false;
223
- // The line ending the cut landed on is the one character a split legitimately consumes; a
224
- // dropped tail is the only other, and the candidate names those bytes rather than the check
225
- // inferring them.
203
+ // A split may consume only the line ending the cut landed on and a dropped tail, which the
204
+ // candidate names rather than the check inferring it.
226
205
  const rest = whole.slice(first.visible.length);
227
206
  const tail = second.visible + (candidate.droppedTail ?? '');
228
207
  return rest === tail || rest === '\n' + tail || rest === '\r\n' + tail;
229
208
  }
230
- const isWhitespaceOnly = (visible) => visible !== '' && visible.trim() === '';
231
- function soleProseBlock(raw, resolver) {
232
- const sole = soleProseReparse(raw, resolver);
233
- if (sole === null)
209
+ const readsAsBlankLine = (visible) => visible !== '' && isBlankText(visible);
210
+ /** A half read as a top-level fragment: exactly one prose block, or null. */
211
+ function soleProseBlock(raw, reading) {
212
+ const blocks = readBlocks(raw, { grammar: reading.grammar, scope: 'fragment' }).children;
213
+ if (blocks.length !== 1 || !isProseKind(blocks[0].kind))
234
214
  return null;
215
+ const block = blocks[0];
216
+ const range = getContentRange(block);
217
+ const nodes = readInline(block.raw, range.start, range.end, reading.resolver, reading.grammar);
235
218
  return {
236
- visible: renderedText(sole.nodes, sole.block.raw, CONTENT_VISIBILITY),
237
- kinds: constructKinds(sole.nodes)
219
+ visible: renderedText(nodes, block.raw, CONTENT_VISIBILITY, { grammar: reading.grammar }),
220
+ kinds: constructKinds(nodes)
238
221
  };
239
222
  }
@@ -1,18 +1,13 @@
1
1
  /**
2
- * The space that finishes a container's marker. An opener firing on the bare marker byte
3
- * (`>`) mints the container before the space arrives, so that space belongs to the marker
4
- * and not to the empty child the caret landed in. Declared by the container
5
- * (`contentStartSpace`), never by kind name here.
2
+ * The space that finishes a container's marker. The parser creates the container on the bare
3
+ * marker byte (`>`), before the space arrives, so that space belongs to the marker and not to
4
+ * the child the caret landed in. The container declares this with `contentStartSpace`; nothing
5
+ * here is keyed on a kind name.
6
6
  */
7
7
  import type { NodeView } from '../../../core/node-views';
8
8
  export interface MarkerCompletion {
9
- /**
10
- * Claim a bare space at `caretOffset` for the container's marker, or decline it to the
11
- * content. `parent` is the block's NEAREST ancestor container — a nested quote completes at
12
- * its own depth — or null at the document root. One claim per child: a claimed space writes
13
- * nothing, so only this memory tells press 2 from press 1, and press 2 is the only way to
14
- * type a leading space inside an empty quoted line.
15
- */
16
- claimSpace(node: NodeView, parent: NodeView | null, caretOffset: number): boolean;
9
+ /** Take a bare space at `caretOffset` for the nearest container's marker (`parent`, null at the
10
+ * root), once per child: a second space there is content, the only way to type a leading one. */
11
+ claimSpace(node: NodeView, parent: NodeView | null, index: number, caretOffset: number): boolean;
17
12
  }
18
13
  export declare function createMarkerCompletion(): MarkerCompletion;
@@ -1,25 +1,26 @@
1
1
  /**
2
- * The space that finishes a container's marker. An opener firing on the bare marker byte
3
- * (`>`) mints the container before the space arrives, so that space belongs to the marker
4
- * and not to the empty child the caret landed in. Declared by the container
5
- * (`contentStartSpace`), never by kind name here.
2
+ * The space that finishes a container's marker. The parser creates the container on the bare
3
+ * marker byte (`>`), before the space arrives, so that space belongs to the marker and not to
4
+ * the child the caret landed in. The container declares this with `contentStartSpace`; nothing
5
+ * here is keyed on a kind name.
6
6
  */
7
7
  import { displayLength } from '../../../core/lines';
8
8
  import { isProseKind } from '../../../core/inline';
9
9
  import { tryGetBlockKindDescriptor } from '../../../schema/block-kind-descriptor';
10
+ import { rawOffsetOfLeaf } from '../../../tree-operations/container-offsets';
10
11
  export function createMarkerCompletion() {
11
- // The node, not a bare flag: a surface re-used for another child — or the same child re-minted
12
- // by a commit's copy-path-on-write — owes a fresh completion.
12
+ // The node, not a bare flag: an element reused for another child, or the same child recreated
13
+ // by a commit's copy-before-write, needs a fresh completion.
13
14
  let claimedFor = null;
14
15
  return {
15
- claimSpace(node, parent, caretOffset) {
16
- if (caretOffset !== 0 || !parent)
17
- return false;
18
- if (!isProseKind(node.kind) || displayLength(node.raw) !== 0)
16
+ claimSpace(node, parent, index, caretOffset) {
17
+ if (caretOffset !== 0 || !parent || !isProseKind(node.kind))
19
18
  return false;
20
19
  if (tryGetBlockKindDescriptor(parent.kind)?.contentStartSpace !== 'complete-marker') {
21
20
  return false;
22
21
  }
22
+ if (displayLength(node.raw) !== 0 && !followsBareMarker(parent, index))
23
+ return false;
23
24
  if (claimedFor === node)
24
25
  return false;
25
26
  claimedFor = node;
@@ -27,3 +28,9 @@ export function createMarkerCompletion() {
27
28
  }
28
29
  };
29
30
  }
31
+ /** Whether the child's text starts straight after its container's marker, with no space between
32
+ * (`>abc`): the marker still lacks the space, so a space typed there completes it. */
33
+ function followsBareMarker(parent, index) {
34
+ const at = rawOffsetOfLeaf(parent, [index], 0);
35
+ return at !== null && at > 0 && !/\s/.test(parent.raw[at - 1]);
36
+ }
@@ -1,23 +1,21 @@
1
1
  /**
2
2
  * The bytes an insertion produces while marks are pending. A mark resolves against the caret's
3
- * construct chain (live-mode.md § 4.3): a kind the chain lacks WRAPS the insertion, a kind it
4
- * carries escapes it. Flanking rules mean a splice that READS right can PARSE wrong
5
- * (`**hello**X** world**` renders literal stars), so every candidate is re-parsed and checked.
3
+ * chain of enclosing constructs (live-mode.md § 4.3): a kind the chain lacks wraps the insertion,
4
+ * a kind it already has escapes it. Flanking rules mean a splice that reads right can parse wrong
5
+ * (`**hello**X** world**` renders literal stars), so every candidate is reparsed and checked.
6
6
  */
7
7
  import type { AnyInlineKind, InlineNode } from '../../../core/nodes';
8
8
  import { type InlineMarkKind } from '../../../schema/inline-construct-policy';
9
+ import type { Reading } from '../../../schema/reading';
9
10
  export interface MarkedInsertion {
10
- /** The block's whole display bytes after the insertion. */
11
+ /** The block's whole displayed text after the insertion. */
11
12
  raw: string;
12
- /** Where the caret lands — after the inserted text, inside whatever now wraps it. */
13
+ /** Where the caret lands: after the inserted text, inside whatever now wraps it. */
13
14
  caret: number;
14
15
  }
15
- /**
16
- * The insertion `text` at `caretOffset` makes under `marks`. Null when the marks name nothing to
17
- * do, or when no candidate parses back to what was asked — markdown cannot express every
18
- * combination at every caret, and a byte that types plain beats one that shows delimiters.
19
- */
20
- export declare function resolveMarkedInsertion(display: string, caretOffset: number, text: string, marks: ReadonlySet<InlineMarkKind>, inlines: readonly InlineNode[]): MarkedInsertion | null;
16
+ /** The insertion `text` at `caretOffset` makes under `marks`, or null when no candidate parses back
17
+ * as asked. `reading` must be the one `inlines` was read with. */
18
+ export declare function resolveMarkedInsertion(display: string, caretOffset: number, text: string, marks: ReadonlySet<InlineMarkKind>, inlines: readonly InlineNode[], reading: Reading): MarkedInsertion | null;
21
19
  export interface ChainNode {
22
20
  kind: AnyInlineKind;
23
21
  /** The mark a chord can toggle, or null for a construct no chord addresses. */
@@ -27,11 +25,6 @@ export interface ChainNode {
27
25
  contentStart: number;
28
26
  contentEnd: number;
29
27
  }
30
- /**
31
- * EVERY construct holding `offset`, outermost first: one missing from the chain is missing from
32
- * `intended`, which is what lets a candidate destroy it unnoticed. A construct with children is
33
- * content-INCLUSIVE, a childless one STRICT-interior, its edges being ordinary insertion points.
34
- * Exported for the depth pin, which has to reach it with a tree no insertion this deep could be
35
- * rendered at.
36
- */
28
+ /** Every construct holding `offset`, outermost first; one missing here could be destroyed unnoticed.
29
+ * Exported for the depth test. */
37
30
  export declare function constructChainAt(offset: number, inlines: readonly InlineNode[]): ChainNode[];
@@ -1,19 +1,16 @@
1
1
  /**
2
2
  * The bytes an insertion produces while marks are pending. A mark resolves against the caret's
3
- * construct chain (live-mode.md § 4.3): a kind the chain lacks WRAPS the insertion, a kind it
4
- * carries escapes it. Flanking rules mean a splice that READS right can PARSE wrong
5
- * (`**hello**X** world**` renders literal stars), so every candidate is re-parsed and checked.
3
+ * chain of enclosing constructs (live-mode.md § 4.3): a kind the chain lacks wraps the insertion,
4
+ * a kind it already has escapes it. Flanking rules mean a splice that reads right can parse wrong
5
+ * (`**hello**X** world**` renders literal stars), so every candidate is reparsed and checked.
6
6
  */
7
- import { constructContentRange, constructKinds, inlineDescendants, parseInline } from '../../../core/inline';
7
+ import { constructContentRange, constructKinds, inlineDescendants, readInline } from '../../../core/inline';
8
8
  import { CONTENT_VISIBILITY, renderedText } from '../../../core/inline/visibility';
9
9
  import { getInlineConstructPolicy, getInlineMarkPolicy, listInlineMarks } from '../../../schema/inline-construct-policy';
10
10
  import { insertsExactly } from './screen-diff';
11
- /**
12
- * The insertion `text` at `caretOffset` makes under `marks`. Null when the marks name nothing to
13
- * do, or when no candidate parses back to what was asked — markdown cannot express every
14
- * combination at every caret, and a byte that types plain beats one that shows delimiters.
15
- */
16
- export function resolveMarkedInsertion(display, caretOffset, text, marks, inlines) {
11
+ /** The insertion `text` at `caretOffset` makes under `marks`, or null when no candidate parses back
12
+ * as asked. `reading` must be the one `inlines` was read with. */
13
+ export function resolveMarkedInsertion(display, caretOffset, text, marks, inlines, reading) {
17
14
  if (marks.size === 0 || text.length === 0)
18
15
  return null;
19
16
  const chain = constructChainAt(caretOffset, inlines);
@@ -22,16 +19,15 @@ export function resolveMarkedInsertion(display, caretOffset, text, marks, inline
22
19
  .map((entry) => entry.kind)
23
20
  .filter((kind) => marks.has(kind) && !chain.some((node) => node.mark === kind));
24
21
  const removedKinds = new Set(removed.map((node) => node.kind));
25
- // What must enclose the inserted text afterwards: every construct the caret was inside minus
26
- // the ones this chord removes, plus the ones it adds. Non-markable ancestors are in it too —
27
- // that is what stops an escape from carrying the byte out of a link it was inside.
22
+ // Ancestors with no mark stay in the intended chain, which stops an escape from carrying the
23
+ // byte out of a link it was inside.
28
24
  const intended = new Set([
29
25
  ...chain.map((node) => node.kind).filter((kind) => !removedKinds.has(kind)),
30
26
  ...applied
31
27
  ]);
32
- const before = { visible: visibleText(display), kinds: constructKinds(inlines) };
28
+ const before = { visible: visibleText(display, reading), kinds: constructKinds(inlines) };
33
29
  for (const candidate of candidateInsertions(display, caretOffset, text, chain, removed, intended)) {
34
- if (parsesAsIntended(candidate, text, intended, before)) {
30
+ if (parsesAsIntended(candidate, text, intended, before, reading)) {
35
31
  return { raw: candidate.raw, caret: candidate.textAt + text.length };
36
32
  }
37
33
  }
@@ -52,9 +48,8 @@ function* candidateInsertions(display, caretOffset, text, chain, removed, intend
52
48
  const escaped = chain.slice(depth);
53
49
  const outside = chain.slice(0, depth);
54
50
  const payload = marksToWrite(intended, outside);
55
- // A link or a widget between the caret and the construct being escaped cannot be cut open: its
56
- // closer is not a mirror of its opener the way a mark's is, and splicing inside one writes
57
- // literal bytes into content. Only stepping outside is available there.
51
+ // A link or widget between the caret and the escaped construct cannot be cut open, since its
52
+ // closer does not mirror its opener, so only stepping outside is tried.
58
53
  if (escaped.every((node) => isSymmetricPair(node.kind))) {
59
54
  yield splitOpen(display, caretOffset, text, escaped, payload);
60
55
  }
@@ -63,9 +58,8 @@ function* candidateInsertions(display, caretOffset, text, chain, removed, intend
63
58
  for (const at of sides)
64
59
  yield spliceWrapped(display, at, text, payload);
65
60
  }
66
- /** The marks the insertion must declare for itself: the intended ones its surroundings do not
67
- * already provide, outermost first. Rows rather than kinds, so nothing downstream can look a
68
- * marker up and miss. */
61
+ /** The marks the insertion must write for itself: the intended ones its surroundings do not
62
+ * already provide, outermost first. */
69
63
  function marksToWrite(intended, provided) {
70
64
  return listInlineMarks().filter(({ kind }) => intended.has(kind) && !provided.some((node) => node.kind === kind));
71
65
  }
@@ -80,9 +74,8 @@ function spliceWrapped(display, at, text, payload) {
80
74
  textAt: at + openers.length
81
75
  };
82
76
  }
83
- /** Close every escaped construct before the insertion and reopen it after — the split that keeps
84
- * the user's text where they put it. An empty half would leave a pair enclosing nothing, the
85
- * invisible `****` residue live mode must never mint, so that side steps outside the run. */
77
+ /** Close every escaped construct before the insertion and reopen it after. A side left empty
78
+ * steps outside the run instead, since live mode never writes a pair around nothing. */
86
79
  function splitOpen(display, caretOffset, text, escaped, payload) {
87
80
  let leftEnd = caretOffset;
88
81
  let rightStart = caretOffset;
@@ -104,14 +97,10 @@ function splitOpen(display, caretOffset, text, escaped, payload) {
104
97
  textAt: leftEnd + closers.length + inner.textAt
105
98
  };
106
99
  }
107
- /**
108
- * Three questions, and a candidate answers all of them or it is not written. Did the mark TAKE —
109
- * do exactly the intended constructs enclose the inserted text? Did every construct the block
110
- * already held SURVIVE — a delimiter run shared between two pairings rebinds under any splice, and
111
- * the loser is a construct nobody asked to spend. And is the rewrite invisible otherwise?
112
- */
113
- function parsesAsIntended(candidate, text, intended, before) {
114
- const nodes = parseInline(candidate.raw, 0, candidate.raw.length);
100
+ /** A candidate is written only if exactly the intended constructs enclose the inserted text, every
101
+ * construct the block held survives (a shared run can rebind), and nothing else shows a change. */
102
+ function parsesAsIntended(candidate, text, intended, before, reading) {
103
+ const nodes = readInline(candidate.raw, 0, candidate.raw.length, reading.resolver, reading.grammar);
115
104
  const around = enclosingKinds(nodes, candidate.textAt, candidate.textAt + text.length);
116
105
  if (around.size !== intended.size)
117
106
  return false;
@@ -122,7 +111,7 @@ function parsesAsIntended(candidate, text, intended, before) {
122
111
  for (const kind of before.kinds)
123
112
  if (!after.has(kind))
124
113
  return false;
125
- return insertsExactly(before.visible, visibleText(candidate.raw, nodes), text);
114
+ return insertsExactly(before.visible, visibleText(candidate.raw, reading, nodes), text);
126
115
  }
127
116
  /** The construct kinds covering `[start, end)`; `text` is content, not a construct. */
128
117
  function enclosingKinds(nodes, start, end) {
@@ -134,13 +123,10 @@ function enclosingKinds(nodes, start, end) {
134
123
  }
135
124
  return kinds;
136
125
  }
137
- /** What a reader sees, asked of the thing that actually paints it: only the render path knows
138
- * which bytes a kind paints as markers (G4.33), so no private walk over the parse. The content
139
- * reading, not the block's own: the first byte typed into content-empty chrome folds it away, and
140
- * the diff above would read that fold as bytes lost. This arm only ADDS bytes, so no reading of
141
- * it licenses dropping one the reader saw. */
142
- function visibleText(raw, parsed) {
143
- return renderedText(parsed ?? parseInline(raw, 0, raw.length), raw, CONTENT_VISIBILITY);
126
+ /** What the user sees, asked of the render (G4.33). The content reading rather than the block's
127
+ * own: the first byte typed into an empty construct hides its markers, which is not a loss. */
128
+ function visibleText(raw, reading, parsed) {
129
+ return renderedText(parsed ?? readInline(raw, 0, raw.length, reading.resolver, reading.grammar), raw, CONTENT_VISIBILITY, { grammar: reading.grammar });
144
130
  }
145
131
  /** Read off the kind's row rather than a second list, so a new format joins in one place. */
146
132
  function markOf(kind) {
@@ -151,13 +137,8 @@ function markOf(kind) {
151
137
  function isSymmetricPair(kind) {
152
138
  return getInlineConstructPolicy(kind)?.edgeAffinity === 'symmetric-pair';
153
139
  }
154
- /**
155
- * EVERY construct holding `offset`, outermost first: one missing from the chain is missing from
156
- * `intended`, which is what lets a candidate destroy it unnoticed. A construct with children is
157
- * content-INCLUSIVE, a childless one STRICT-interior, its edges being ordinary insertion points.
158
- * Exported for the depth pin, which has to reach it with a tree no insertion this deep could be
159
- * rendered at.
160
- */
140
+ /** Every construct holding `offset`, outermost first; one missing here could be destroyed unnoticed.
141
+ * Exported for the depth test. */
161
142
  export function constructChainAt(offset, inlines) {
162
143
  const holds = (node) => holdsOffset(node, offset);
163
144
  const chain = [];
@@ -176,8 +157,8 @@ export function constructChainAt(offset, inlines) {
176
157
  }
177
158
  return chain;
178
159
  }
179
- /** Whether `offset` sits inside this construct, on the reading the chain doc states. Text is
180
- * content, and nothing under it is a construct either. */
160
+ /** Whether `offset` sits inside this construct, on the reading `constructChainAt` describes. Text
161
+ * is content, and nothing under it is a construct either. */
181
162
  function holdsOffset(node, offset) {
182
163
  if (node.kind === 'text')
183
164
  return false;
@@ -1,20 +1,10 @@
1
1
  /**
2
- * What a live rewrite claims it did to the SCREEN, as two predicates over the painter's before and
3
- * after readings (live-mode.md § 2), plus the sole-prose reparse a candidate must survive first.
4
- * Shared, so the verification arms ask the same questions of the same shapes rather than each
5
- * carrying its own walk.
2
+ * What a live rewrite says it did to the screen, as two checks over the text before and after
3
+ * (live-mode.md § 2). Shared, so every caller asks the same questions of the same shapes instead
4
+ * of writing its own traversal.
6
5
  */
7
- import type { LinkReferenceResolver } from '../../../core/inline/link-reference-resolver';
8
- import type { CstNode, InlineNode } from '../../../core/nodes';
9
6
  /** Whether `after` is `before` with `text` spliced in at one place and nothing else moved. */
10
7
  export declare function insertsExactly(before: string, after: string, text: string): boolean;
11
- /** Whether `after` is `before` with exactly `removed` gone from one place — the whole claim a cut
12
- * makes to the reader, asked of the bytes the parser produced rather than the ones it was given. */
8
+ /** Whether `after` is `before` with exactly `removed` gone from one place: everything a cut
9
+ * promises the user, asked of the bytes the parser produced rather than the ones it was given. */
13
10
  export declare function removesExactly(before: string, after: string, removed: string): boolean;
14
- /** A candidate's admission gate: its bytes reload as exactly ONE prose block, whose inline tree the
15
- * caller then reads its own oracle over. Null declines — a reload that splits or re-kinds the
16
- * block is not what the caller is about to install. */
17
- export declare function soleProseReparse(raw: string, resolver?: LinkReferenceResolver): {
18
- block: CstNode;
19
- nodes: InlineNode[];
20
- } | null;
@@ -1,11 +1,8 @@
1
1
  /**
2
- * What a live rewrite claims it did to the SCREEN, as two predicates over the painter's before and
3
- * after readings (live-mode.md § 2), plus the sole-prose reparse a candidate must survive first.
4
- * Shared, so the verification arms ask the same questions of the same shapes rather than each
5
- * carrying its own walk.
2
+ * What a live rewrite says it did to the screen, as two checks over the text before and after
3
+ * (live-mode.md § 2). Shared, so every caller asks the same questions of the same shapes instead
4
+ * of writing its own traversal.
6
5
  */
7
- import { getContentRange, isProseKind, parseInline } from '../../../core/inline';
8
- import { parse } from '../../../core/parser';
9
6
  /** Whether `after` is `before` with `text` spliced in at one place and nothing else moved. */
10
7
  export function insertsExactly(before, after, text) {
11
8
  if (after.length !== before.length + text.length)
@@ -15,8 +12,8 @@ export function insertsExactly(before, after, text) {
15
12
  at++;
16
13
  return (after.slice(at, at + text.length) === text && after.slice(at + text.length) === before.slice(at));
17
14
  }
18
- /** Whether `after` is `before` with exactly `removed` gone from one place — the whole claim a cut
19
- * makes to the reader, asked of the bytes the parser produced rather than the ones it was given. */
15
+ /** Whether `after` is `before` with exactly `removed` gone from one place: everything a cut
16
+ * promises the user, asked of the bytes the parser produced rather than the ones it was given. */
20
17
  export function removesExactly(before, after, removed) {
21
18
  if (after.length !== before.length - removed.length)
22
19
  return false;
@@ -26,14 +23,3 @@ export function removesExactly(before, after, removed) {
26
23
  return (before.slice(at, at + removed.length) === removed &&
27
24
  after.slice(at) === before.slice(at + removed.length));
28
25
  }
29
- /** A candidate's admission gate: its bytes reload as exactly ONE prose block, whose inline tree the
30
- * caller then reads its own oracle over. Null declines — a reload that splits or re-kinds the
31
- * block is not what the caller is about to install. */
32
- export function soleProseReparse(raw, resolver) {
33
- const blocks = parse(raw, { scope: 'fragment' }).children;
34
- if (blocks.length !== 1 || !isProseKind(blocks[0].kind))
35
- return null;
36
- const block = blocks[0];
37
- const range = getContentRange(block);
38
- return { block, nodes: parseInline(block.raw, range.start, range.end, resolver) };
39
- }