@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,20 +1,19 @@
1
1
  /**
2
- * preview-inline's construct-reveal trigger: an inline construct's markers stay CSS-hidden until
3
- * the caret enters its INCLUSIVE `[start, end]`, revealing the whole enclosing chain. Reveal is a
4
- * class flip on `data-construct-*` spans, so the DOM text never changes and raw offsets survive it
5
- * (spec: the preview-inline-affinity e2e requirement).
2
+ * What shows an inline construct's markers in preview-inline mode: they stay hidden by CSS until
3
+ * the caret enters the construct's `[start, end]`, bounds included, and then the whole enclosing
4
+ * chain shows. Showing them only toggles a class on `data-construct-*` spans, so the DOM text
5
+ * never changes and raw offsets survive it (the preview-inline-affinity e2e requirement).
6
6
  */
7
7
  import { tick } from 'svelte';
8
8
  import { inlineDescendants } from '../../../core/inline';
9
9
  import { resolvedInlineContent } from '../../../core/inline/inline-cache';
10
10
  import { isRevealableInlineKind } from '../../../schema/inline-construct-policy';
11
- import { toClampedRawOffset } from '../../../cursor/coordinate-spaces';
12
- import { CONSTRUCT_REVEAL_CLASS, domTextOffsetAtNode } from '../../../cursor/widget-offset';
11
+ import { CONSTRUCT_REVEAL_CLASS, rawOffsetAt } from '../../../cursor/widget-offset';
13
12
  import { isInteractionTraceEnabled, traceRevealOpen, traceRevealFold } from '../../../debug/interaction-trace';
14
13
  // ── Chain math (pure) ────────────────────────────────────────────────────────
15
14
  /**
16
- * Every revealable construct whose inclusive `[start, end]` contains `offset`, outermost
17
- * first; at a boundary shared by adjacent siblings both are collected.
15
+ * Every construct that can show its markers whose `[start, end]` contains `offset`, bounds
16
+ * included, outermost first; at a boundary two siblings share, both are collected.
18
17
  */
19
18
  export function constructChainAtOffset(nodes, offset) {
20
19
  // A child lies inside its parent's range, so a node that misses the offset prunes its subtree.
@@ -39,15 +38,15 @@ export function createConstructReveal(deps) {
39
38
  /** Caret raw offset while the mode is on and the caret sits in this block. */
40
39
  function caretOffset() {
41
40
  const el = deps.getEl();
42
- if (!el || deps.getPresentationMode() !== 'preview-inline')
41
+ if (!el || deps.reading.mode() !== 'preview-inline')
43
42
  return null;
44
43
  const sel = window.getSelection();
45
44
  if (!sel || sel.rangeCount === 0 || !sel.focusNode || !el.contains(sel.focusNode))
46
45
  return null;
47
- return toClampedRawOffset(domTextOffsetAtNode(el, sel.focusNode, sel.focusOffset), deps.getAmbientLength());
46
+ return rawOffsetAt(el, sel.focusNode, sel.focusOffset);
48
47
  }
49
48
  function inlines() {
50
- return resolvedInlineContent(deps.node, deps.linkRef);
49
+ return resolvedInlineContent(deps.node, deps.reading);
51
50
  }
52
51
  const toEntry = (n) => ({ kind: n.kind, start: n.start, end: n.end });
53
52
  /** The chain the current selection asks for; [] when nothing contains the caret. */
@@ -91,8 +90,8 @@ export function createConstructReveal(deps) {
91
90
  appliedSpans = next;
92
91
  appliedKey = key;
93
92
  }
94
- // A fold to no chain must survive a tick: cross-block entry clears the native selection
95
- // before the cross-block flag flips, manufacturing a transient fold-shaped state.
93
+ // Hiding everything has to survive a tick: entering a cross-block selection clears the
94
+ // browser selection before the cross-block flag is set, which briefly looks like no chain.
96
95
  function queueFoldRecheck() {
97
96
  if (foldRecheckQueued)
98
97
  return;
@@ -142,7 +141,7 @@ export function createConstructReveal(deps) {
142
141
  chain.push(toEntry(n));
143
142
  }
144
143
  }
145
- // Reveal-only: any fold an empty union implies belongs to the selection cadence.
144
+ // `prepareStep` only shows markers; hiding them is the selection handler's job.
146
145
  if (chain.length === 0)
147
146
  return;
148
147
  const key = chainKey(chain);
@@ -1,15 +1,20 @@
1
1
  /**
2
- * A typed inline delimiter closes itself: a lone `$`, backtick, `*`, `_` or `~~` would pair with
3
- * whatever matching run comes later on the line, so the keystroke lands its twin after the caret.
4
- * Typing the closer over the twin steps past it, a closer typed by hand seats the next byte
5
- * outside, and the empty pair drops its twin when the first body byte makes it no construct.
6
- * `applyDelimiterAutoPair` is the one `beforeinput` arm every prose surface runs (G4.65).
2
+ * A typed inline delimiter (`$`, backtick, `*`, `_`, `~~`) writes its partner after the caret, so
3
+ * it cannot pair with a later run on the line. Typing the partner steps past it, and an empty pair
4
+ * the auto-pair wrote (`auto-pair-record.ts`) drops its partner when the first byte inside makes
5
+ * it no construct. Every prose block runs `applyDelimiterAutoPair` on `beforeinput` (G4.65).
7
6
  */
8
7
  import { type ContentRange } from '../../../core/inline';
9
- export type AutoPairEdit = {
8
+ import type { GrammarView } from '../../../schema/block-openers';
9
+ import type { Reading } from '../../../schema/reading';
10
+ import type { BlockAutoPairs } from './auto-pair-record';
11
+ export type AutoPairEdit =
12
+ /** `pair` is the empty pair the write leaves around the caret, which the auto-pair owns. */
13
+ {
10
14
  kind: 'write';
11
15
  text: string;
12
16
  caret: number;
17
+ pair?: ContentRange;
13
18
  }
14
19
  /** The typed byte completed a construct's closer; what follows belongs outside it. */
15
20
  | {
@@ -17,32 +22,38 @@ export type AutoPairEdit = {
17
22
  text: string;
18
23
  caret: number;
19
24
  }
20
- /** Nothing written: the caret passes the twin. Over a construct's closer that run may be
21
- * unpainted, and then only the SIDE moves, which the surface records as an edge affinity. */
25
+ /** Nothing written: the caret passes its partner. Over a hidden closer only the caret's arrival
26
+ * side changes. `pair` is the auto-pair's own empty pair the caret stepped past. */
22
27
  | {
23
28
  kind: 'step-over';
24
29
  caret: number;
25
30
  overConstruct: boolean;
31
+ pair?: ContentRange;
26
32
  };
33
+ /** What the resolver reads about the line besides its bytes. */
34
+ export interface AutoPairContext {
35
+ /** The empty pair the auto-pair wrote at this caret, or null: the same bytes typed by hand
36
+ * are the user's, and a key between them touches one byte. */
37
+ ownPair: ContentRange | null;
38
+ /** Whether the written line still parses as this block: a grown `****` is a thematic break
39
+ * and `~~~~` a fence, so such a pair steps past its partner instead. */
40
+ keepsKind?: (text: string) => boolean;
41
+ }
42
+ /** What a single typed byte does at a collapsed caret, or null to leave it to the browser.
43
+ * `content` bounds the inline scan (a heading's `# ` is not prose); the caret must lie inside it. */
44
+ export declare function resolveDelimiterAutoPair(text: string, content: ContentRange, caret: number, typed: string, reading: Reading, { ownPair, keepsKind }: AutoPairContext): AutoPairEdit | null;
27
45
  /**
28
- * What a single typed byte does at a collapsed caret, or null to leave the engine its insert.
29
- * `content` bounds the inline scan (a heading's `# ` is not prose); the caret must lie inside it.
30
- * `keepsBlockKind` says whether a written line still reloads as this block: a grown `****` is a
31
- * thematic break and `~~~~` a fence, so such a pair steps past a twin instead, or declines.
32
- */
33
- export declare function resolveDelimiterAutoPair(text: string, content: ContentRange, caret: number, typed: string, keepsBlockKind?: (text: string) => boolean): AutoPairEdit | null;
34
- /**
35
- * Inside a revealed source (`$ab|$`) the twin is the live closer, and typing it means "done":
36
- * the caret steps past it and the caller folds the reveal, so the formula renders at once.
46
+ * Inside a construct whose source is showing (`$ab|$`) the partner is the real closer, and typing
47
+ * it means "done": the caret steps past it and the caller hides the source, so it renders at once.
37
48
  */
38
- export declare function stepsOverRevealedCloser(text: string, caret: number, typed: string): boolean;
39
- /** Backspace at an empty pair takes both runs, between them (`**|**`) or right after them
40
- * (`$$|`), as it does in any IDE. Exactly a pair of equal runs, one or two bytes each: a longer
41
- * run is a fence or a literal the user built by hand. */
42
- export declare function resolveEmptyPairBackspace(text: string, caret: number): AutoPairEdit | null;
43
- /** What a prose surface lends the arm. Reactive reads are thunks, so nothing here goes stale. */
49
+ export declare function stepsOverRevealedCloser(text: string, caret: number, typed: string, grammar: GrammarView): boolean;
50
+ /** Backspace at the auto-pair's own empty pair takes both runs, between them (`**|**`) or right
51
+ * after a stepped-over one (`$$|`), as it does in any IDE. */
52
+ export declare function resolveEmptyPairBackspace(text: string, caret: number, ownPair: ContentRange | null, grammar: GrammarView): AutoPairEdit | null;
53
+ /** What a prose block gives the handler. Reactive values arrive as functions, so none go stale. */
44
54
  export interface AutoPairSurface {
45
- /** The bytes the caret indexes: the display text, or the revealed DOM text during a reveal. */
55
+ /** The bytes the caret counts into: the displayed text, or the DOM text while a construct's
56
+ * source is showing. */
46
57
  text(): string;
47
58
  content(): ContentRange;
48
59
  caret(): number | null;
@@ -51,21 +62,27 @@ export interface AutoPairSurface {
51
62
  foldReveal(): {
52
63
  settled: Promise<void>;
53
64
  } | null;
54
- /** Whether the closer a step-over passes is on screen; unpainted, only the side moves. */
55
- markersPaint(): boolean;
56
65
  setCaret(offset: number): void;
57
- /** The arrival the seat reads next: past the construct's delimiters. */
66
+ /** Record the arrival side the next typed byte reads: past the construct's delimiters. */
58
67
  seatOutside(): void;
59
- /** One CST write plus the caret it parks. */
68
+ /** One CST write plus the caret it leaves behind. */
60
69
  write(text: string, caretBefore: number, caretAfter: number): void;
61
- /** A step-over that leaves the line one an on-type completer claims (`$$`), which only a
62
- * content write consults. */
70
+ /** Whether a step-over leaves the line one an on-type completer takes (`$$`); only a content
71
+ * write asks. */
63
72
  completesLine?(caret: number): boolean;
64
- /** The resolver's block-kind guard, for a surface whose line can become another block. */
65
- keepsBlockKind?(text: string): boolean;
73
+ /** Whether a line the pair would write still reads as this block's kind where it is stored. */
74
+ keepsKind(line: string): boolean;
75
+ /** How the block was drawn: a plugin's delimiter pairs only where the plugin is listed, and a
76
+ * step-over past a hidden closer moves only the arrival side. */
77
+ reading: Reading;
78
+ /** This block's view of the editor's record of the pair the auto-pair last wrote. */
79
+ ownPairs: BlockAutoPairs;
66
80
  }
67
81
  /**
68
- * The `beforeinput` arm. True when the press was this seam's: the event is cancelled and the
69
- * surface has written, moved or re-seated the caret.
82
+ * The `beforeinput` handler. True when the key belonged here: the event is cancelled and the
83
+ * block has written bytes, moved the caret, or changed its arrival side.
70
84
  */
71
85
  export declare function applyDelimiterAutoPair(e: InputEvent, surface: AutoPairSurface): boolean;
86
+ /** Keep the record in step with an edit the auto-pair made to `text`: a pair it wrote or stepped
87
+ * past stays its own, and every other edit ends the pair. */
88
+ export declare function noteOwnPair(ownPairs: BlockAutoPairs, text: string, edit: AutoPairEdit): void;
@@ -1,11 +1,10 @@
1
1
  /**
2
- * A typed inline delimiter closes itself: a lone `$`, backtick, `*`, `_` or `~~` would pair with
3
- * whatever matching run comes later on the line, so the keystroke lands its twin after the caret.
4
- * Typing the closer over the twin steps past it, a closer typed by hand seats the next byte
5
- * outside, and the empty pair drops its twin when the first body byte makes it no construct.
6
- * `applyDelimiterAutoPair` is the one `beforeinput` arm every prose surface runs (G4.65).
2
+ * A typed inline delimiter (`$`, backtick, `*`, `_`, `~~`) writes its partner after the caret, so
3
+ * it cannot pair with a later run on the line. Typing the partner steps past it, and an empty pair
4
+ * the auto-pair wrote (`auto-pair-record.ts`) drops its partner when the first byte inside makes
5
+ * it no construct. Every prose block runs `applyDelimiterAutoPair` on `beforeinput` (G4.65).
7
6
  */
8
- import { constructContentRange, inlineDescendants, parseInline } from '../../../core/inline';
7
+ import { constructContentRange, inlineDescendants, readInline } from '../../../core/inline';
9
8
  import { isAutoPairTrigger } from '../../../core/inline/scan/plugin-syntax';
10
9
  const STEP = { single: true, inside: 'step-over' };
11
10
  const BUILTIN = {
@@ -16,78 +15,89 @@ const BUILTIN = {
16
15
  '~': { single: false, inside: 'grow' }
17
16
  };
18
17
  const isWordByte = (ch) => ch !== undefined && /[\p{L}\p{N}]/u.test(ch);
19
- function policyOf(ch) {
20
- return BUILTIN[ch] ?? (isAutoPairTrigger(ch) ? STEP : null);
18
+ // A plugin's delimiter pairs only in an editor that lists the plugin.
19
+ function policyOf(ch, grammar) {
20
+ return BUILTIN[ch] ?? (isAutoPairTrigger(ch, grammar) ? STEP : null);
21
21
  }
22
22
  // ── The resolver ─────────────────────────────────────────────────────────────
23
- /**
24
- * What a single typed byte does at a collapsed caret, or null to leave the engine its insert.
25
- * `content` bounds the inline scan (a heading's `# ` is not prose); the caret must lie inside it.
26
- * `keepsBlockKind` says whether a written line still reloads as this block: a grown `****` is a
27
- * thematic break and `~~~~` a fence, so such a pair steps past a twin instead, or declines.
28
- */
29
- export function resolveDelimiterAutoPair(text, content, caret, typed, keepsBlockKind = () => true) {
23
+ /** What a single typed byte does at a collapsed caret, or null to leave it to the browser.
24
+ * `content` bounds the inline scan (a heading's `# ` is not prose); the caret must lie inside it. */
25
+ export function resolveDelimiterAutoPair(text, content, caret, typed, reading, { ownPair, keepsKind = () => true }) {
30
26
  if (typed.length !== 1 || caret < content.start || caret > content.end)
31
27
  return null;
32
28
  const before = text[caret - 1];
33
29
  const after = text[caret];
34
- const policy = policyOf(typed);
30
+ const policy = policyOf(typed, reading.grammar);
31
+ const inside = ownPair && isBetweenRuns(ownPair, caret) ? ownPair : null;
35
32
  if (!policy)
36
- return collapseEmptyPair(text, content, caret, typed);
37
- if (after === typed && closingRunAt(text, content, caret, typed)) {
33
+ return inside && collapseEmptyPair(text, content, caret, typed, inside, reading);
34
+ if (after === typed && closingRunAt(text, content, caret, typed, reading)) {
38
35
  return { kind: 'step-over', caret: caret + 1, overConstruct: true };
39
36
  }
40
37
  const paired = text.slice(0, caret) + typed + text.slice(caret);
41
- if (closerEndsAt(paired, content, caret + 1, typed)) {
38
+ // The typed byte lengthens the content, so a scan of the paired line reads one byte further.
39
+ const pairedContent = { start: content.start, end: content.end + 1 };
40
+ if (closerEndsAt(paired, pairedContent, caret + 1, typed, reading)) {
42
41
  return { kind: 'close', text: paired, caret: caret + 1 };
43
42
  }
44
- const pair = (next) => {
45
- if (keepsBlockKind(next))
46
- return write(next, caret + 1);
47
- return after === typed ? { kind: 'step-over', caret: caret + 1, overConstruct: false } : null;
43
+ const pair = (next, pairRange) => {
44
+ if (keepsKind(next))
45
+ return write(next, caret + 1, pairRange);
46
+ if (after !== typed || !inside)
47
+ return null;
48
+ return { kind: 'step-over', caret: caret + 1, overConstruct: false, pair: inside };
48
49
  };
49
50
  if (after === typed) {
50
- if (before === typed) {
51
- if (policy.inside === 'step-over') {
52
- return { kind: 'step-over', caret: caret + 1, overConstruct: false };
53
- }
54
- return pair(text.slice(0, caret) + typed + typed + text.slice(caret));
51
+ // A pair the user typed, or a byte in front of another run's opener, is spelling something
52
+ // out: only the auto-pair's own empty pair is stepped over or grown.
53
+ if (!inside)
54
+ return null;
55
+ if (policy.inside === 'step-over') {
56
+ return { kind: 'step-over', caret: caret + 1, overConstruct: false, pair: inside };
55
57
  }
56
- // A byte in front of another run's opener is spelling something out, not opening a span.
57
- return null;
58
+ const grown = text.slice(0, caret) + typed + typed + text.slice(caret);
59
+ return pair(grown, { start: inside.start, end: inside.end + 2 });
58
60
  }
59
- if (before === typed && !closerEndsAt(text, content, caret, typed)) {
60
- // `~|` plus `~`: the double run this delimiter pairs on, as long as it IS a lone run.
61
+ if (before === typed && !closerEndsAt(text, content, caret, typed, reading)) {
62
+ // `~|` plus `~`: the double run this delimiter pairs on, as long as it is a lone run.
61
63
  const single = text[caret - 2] !== typed;
62
64
  if (policy.inside === 'grow' && single) {
63
- return pair(text.slice(0, caret) + typed.repeat(3) + text.slice(caret));
65
+ const grown = text.slice(0, caret) + typed.repeat(3) + text.slice(caret);
66
+ return pair(grown, { start: caret - 1, end: caret + 3 });
64
67
  }
65
68
  return null;
66
69
  }
67
70
  if (!policy.single || (policy.notAfterWord && isWordByte(before)))
68
71
  return null;
69
- return pair(text.slice(0, caret) + typed + typed + text.slice(caret));
72
+ const opened = text.slice(0, caret) + typed + typed + text.slice(caret);
73
+ return pair(opened, { start: caret, end: caret + 2 });
70
74
  }
71
75
  /**
72
- * Inside a revealed source (`$ab|$`) the twin is the live closer, and typing it means "done":
73
- * the caret steps past it and the caller folds the reveal, so the formula renders at once.
76
+ * Inside a construct whose source is showing (`$ab|$`) the partner is the real closer, and typing
77
+ * it means "done": the caret steps past it and the caller hides the source, so it renders at once.
74
78
  */
75
- export function stepsOverRevealedCloser(text, caret, typed) {
76
- return typed.length === 1 && policyOf(typed) !== null && text[caret] === typed;
79
+ export function stepsOverRevealedCloser(text, caret, typed, grammar) {
80
+ return typed.length === 1 && policyOf(typed, grammar) !== null && text[caret] === typed;
77
81
  }
78
- /** Backspace at an empty pair takes both runs, between them (`**|**`) or right after them
79
- * (`$$|`), as it does in any IDE. Exactly a pair of equal runs, one or two bytes each: a longer
80
- * run is a fence or a literal the user built by hand. */
81
- export function resolveEmptyPairBackspace(text, caret) {
82
- const pair = emptyPairEnding(text, caret) ?? emptyPairAround(text, caret);
83
- if (!pair)
82
+ /** Backspace at the auto-pair's own empty pair takes both runs, between them (`**|**`) or right
83
+ * after a stepped-over one (`$$|`), as it does in any IDE. */
84
+ export function resolveEmptyPairBackspace(text, caret, ownPair, grammar) {
85
+ if (!ownPair)
86
+ return null;
87
+ // The emphasis family grows instead of stepping, so its `**|` is a double opener to type after.
88
+ const stepped = caret === ownPair.end && policyOf(text[caret - 1], grammar)?.inside === 'step-over';
89
+ if (!isBetweenRuns(ownPair, caret) && !stepped)
84
90
  return null;
85
- return write(text.slice(0, pair.start) + text.slice(pair.end), pair.start);
91
+ return write(text.slice(0, ownPair.start) + text.slice(ownPair.end), ownPair.start);
92
+ }
93
+ const write = (text, caret, pair) => pair ? { kind: 'write', text, caret, pair } : { kind: 'write', text, caret };
94
+ // The caret splits the empty pair into its two equal runs.
95
+ function isBetweenRuns(pair, caret) {
96
+ return caret > pair.start && caret - pair.start === pair.end - caret;
86
97
  }
87
- const write = (text, caret) => ({ kind: 'write', text, caret });
88
98
  /**
89
- * The `beforeinput` arm. True when the press was this seam's: the event is cancelled and the
90
- * surface has written, moved or re-seated the caret.
99
+ * The `beforeinput` handler. True when the key belonged here: the event is cancelled and the
100
+ * block has written bytes, moved the caret, or changed its arrival side.
91
101
  */
92
102
  export function applyDelimiterAutoPair(e, surface) {
93
103
  const typing = e.inputType === 'insertText';
@@ -99,23 +109,29 @@ export function applyDelimiterAutoPair(e, surface) {
99
109
  if (caret === null)
100
110
  return false;
101
111
  const text = surface.text();
112
+ const ownPair = surface.ownPairs.consult(text, caret);
102
113
  if (surface.isRevealing()) {
103
- if (!typing || !stepsOverRevealedCloser(text, caret, e.data ?? ''))
114
+ if (!typing || !stepsOverRevealedCloser(text, caret, e.data ?? '', surface.reading.grammar)) {
104
115
  return false;
116
+ }
105
117
  e.preventDefault();
106
118
  surface.setCaret(caret + 1);
107
119
  void surface.foldReveal()?.settled;
108
120
  return true;
109
121
  }
110
122
  const edit = typing
111
- ? resolveDelimiterAutoPair(text, surface.content(), caret, e.data ?? '', surface.keepsBlockKind)
112
- : resolveEmptyPairBackspace(text, caret);
123
+ ? resolveDelimiterAutoPair(text, surface.content(), caret, e.data ?? '', surface.reading, {
124
+ ownPair,
125
+ keepsKind: surface.keepsKind
126
+ })
127
+ : resolveEmptyPairBackspace(text, caret, ownPair, surface.reading.grammar);
113
128
  if (!edit)
114
129
  return false;
115
130
  e.preventDefault();
131
+ noteOwnPair(surface.ownPairs, text, edit);
116
132
  switch (edit.kind) {
117
133
  case 'step-over':
118
- if (edit.overConstruct && !surface.markersPaint())
134
+ if (edit.overConstruct && surface.reading.hidesDelimitersAtCaret())
119
135
  surface.seatOutside();
120
136
  else if (surface.completesLine?.(edit.caret))
121
137
  surface.write(text, caret, edit.caret);
@@ -131,59 +147,29 @@ export function applyDelimiterAutoPair(e, surface) {
131
147
  return true;
132
148
  }
133
149
  }
134
- // ── Runs ─────────────────────────────────────────────────────────────────────
135
- /** Length of the run of `ch` ending just before `at` (0 when `text[at - 1]` is not `ch`). */
136
- function runBefore(text, at, ch) {
137
- let n = 0;
138
- while (text[at - 1 - n] === ch)
139
- n++;
140
- return n;
141
- }
142
- function runAfter(text, at, ch) {
143
- let n = 0;
144
- while (text[at + n] === ch)
145
- n++;
146
- return n;
147
- }
148
- // `X..X|X..X`: equal runs of a pair delimiter, one or two bytes, with nothing of it either side.
149
- function emptyPairAround(text, caret) {
150
- const d = text[caret - 1];
151
- if (d === undefined || !policyOf(d))
152
- return null;
153
- const k = runBefore(text, caret, d);
154
- if (k > 2 || runAfter(text, caret, d) !== k)
155
- return null;
156
- return { start: caret - k, end: caret + k };
157
- }
158
- // `XX|`: a stepped-over empty pair with the caret after it. Only the delimiters that step (the
159
- // emphasis family grows instead, and its `**|` is a double opener with content ahead).
160
- function emptyPairEnding(text, caret) {
161
- const d = text[caret - 1];
162
- if (d === undefined || policyOf(d)?.inside !== 'step-over' || text[caret] === d)
163
- return null;
164
- if (runBefore(text, caret, d) !== 2)
165
- return null;
166
- return { start: caret - 2, end: caret };
150
+ /** Keep the record in step with an edit the auto-pair made to `text`: a pair it wrote or stepped
151
+ * past stays its own, and every other edit ends the pair. */
152
+ export function noteOwnPair(ownPairs, text, edit) {
153
+ const pair = edit.kind === 'close' ? undefined : edit.pair;
154
+ if (!pair)
155
+ ownPairs.forget();
156
+ else
157
+ ownPairs.remember(edit.kind === 'write' ? edit.text : text, pair);
167
158
  }
168
159
  // ── Constructs ───────────────────────────────────────────────────────────────
169
- // `X|X` plus the typed byte: keep the twin run only if the pair then parses as a construct.
170
- function collapseEmptyPair(text, content, caret, typed) {
171
- const d = text[caret - 1];
172
- if (d === undefined || !policyOf(d))
173
- return null;
174
- const k = runBefore(text, caret, d);
175
- if (k > 2 || runAfter(text, caret, d) !== k)
176
- return null;
160
+ // `X|X` plus the typed byte: keep the partner run only if the pair then parses as a construct.
161
+ function collapseEmptyPair(text, content, caret, typed, own, reading) {
177
162
  const paired = text.slice(0, caret) + typed + text.slice(caret);
178
163
  const shifted = { start: content.start, end: content.end + 1 };
179
- if (constructAt(paired, shifted, caret - k, caret + 1 + k))
164
+ if (constructAt(paired, shifted, own.start, own.end + 1, reading))
180
165
  return null;
166
+ const k = caret - own.start;
181
167
  return write(text.slice(0, caret) + typed + text.slice(caret + k), caret + 1);
182
168
  }
183
169
  // The caret sits inside or at the start of the closing run of a construct this delimiter both
184
170
  // opens and closes, so the byte under it is that construct's own closer.
185
- function closingRunAt(text, content, caret, typed) {
186
- for (const node of inlineDescendants(parseInline(text, content.start, content.end))) {
171
+ function closingRunAt(text, content, caret, typed, reading) {
172
+ for (const node of inlineDescendants(readInline(text, content.start, content.end, reading.resolver, reading.grammar))) {
187
173
  if (node.kind === 'text' || text[node.start] !== typed || node.end <= caret)
188
174
  continue;
189
175
  let closer = node.end;
@@ -194,11 +180,9 @@ function closingRunAt(text, content, caret, typed) {
194
180
  }
195
181
  return false;
196
182
  }
197
- // A construct of `typed`'s family ends exactly at `end`, its last byte in the closing run. The
198
- // scan's bound grows past the content by the byte a caller has just inserted.
199
- function closerEndsAt(text, content, end, typed) {
200
- const bound = Math.max(content.end, end);
201
- for (const node of inlineDescendants(parseInline(text, content.start, bound))) {
183
+ // A construct of `typed`'s family ends exactly at `end`, its last byte in the closing run.
184
+ function closerEndsAt(text, content, end, typed, reading) {
185
+ for (const node of inlineDescendants(readInline(text, content.start, content.end, reading.resolver, reading.grammar))) {
202
186
  if (node.kind === 'text' || node.end !== end || text[end - 1] !== typed)
203
187
  continue;
204
188
  const inner = constructContentRange(node);
@@ -207,8 +191,8 @@ function closerEndsAt(text, content, end, typed) {
207
191
  }
208
192
  return false;
209
193
  }
210
- function constructAt(text, content, start, end) {
211
- for (const node of inlineDescendants(parseInline(text, content.start, content.end))) {
194
+ function constructAt(text, content, start, end, reading) {
195
+ for (const node of inlineDescendants(readInline(text, content.start, content.end, reading.resolver, reading.grammar))) {
212
196
  if (node.kind !== 'text' && node.start === start && node.end === end)
213
197
  return true;
214
198
  }
@@ -1,40 +1,41 @@
1
1
  /**
2
- * The single caret-edge dispatch (G4.12): a plain Backspace/Delete or printable key at a caret
3
- * edge in a prose block resolves against a declarative policy — the construct class's for an
4
- * inline neighbour, the ancestor container's for a content-start key — never native
5
- * contenteditable mutation, which would corrupt the atomic bytes those stand for.
2
+ * The one place a caret-edge key is decided in a prose block. A plain Backspace, Delete or
3
+ * printable key at a caret edge resolves against a declared policy (the inline construct's beside
4
+ * the caret, or the ancestor container's at the content start), never native editing, which would
5
+ * corrupt the bytes those constructs stand for (G4.12).
6
6
  */
7
7
  import type { BlockEditActions } from '../../../action-contracts';
8
8
  import type { NodeView } from '../../../core/node-views';
9
- import type { LinkReferenceResolverRef } from '../../../editor-keys';
10
9
  import type { InlineNode } from '../../../core/nodes';
11
10
  import type { InlineWidgetEditingPolicy } from '../../../core/inline/inline-widgets';
11
+ import { type LineEnding } from '../../../core/lines';
12
12
  import { type RawOffset } from '../../../cursor/coordinate-spaces';
13
13
  import type { EdgeAffinity } from '../../../cursor/edge-affinity';
14
- import type { PendingMarksState } from '../../../cursor/pending-marks';
15
- import { type EdgeDeletionSurface } from './construct-edge-delete';
16
- /** Whether `line` still reloads as `node`'s kind, the auto-pair resolver's guard. */
17
- export declare function keepsBlockKind(node: NodeView, line: string): boolean;
18
- /** The subset of the inline-widget vocabulary the internal island policies reuse,
19
- * expressed in the same terms without leaking into the public API. */
14
+ import type { PendingMarks } from '../../../cursor/pending-marks';
15
+ import type { BlockAutoPairs } from './auto-pair-record';
16
+ import type { Reading } from '../../../schema/reading';
17
+ import type { StoredAs } from '../../../schema/stored-as';
18
+ /** The part of the inline-widget editing policy the built-in widget rules reuse, in the same
19
+ * terms but without widening the public API. */
20
20
  export type EdgePolicy = Pick<InlineWidgetEditingPolicy, 'onEdge' | 'deleteGranularity'>;
21
21
  /** Reactive state arrives as getters, so a captured value can't go stale under
22
22
  * re-render. */
23
23
  export interface EdgePolicyDispatchDeps {
24
24
  get node(): NodeView;
25
25
  get index(): number;
26
- /** The nearest ancestor container, or null at the document root — the declaration a
27
- * content-start key resolves against. */
26
+ /** The document's line ending, which a rewrite takes where the block has none of its own. */
27
+ getLineEnding: () => LineEnding;
28
+ /** The nearest ancestor container, or null at the document root. A key at the content start
29
+ * resolves against its declaration. */
28
30
  get containerParent(): NodeView | null;
29
- get linkRef(): LinkReferenceResolverRef | undefined;
31
+ /** How the editor reads its bytes, the grammar the render path drew widgets with included. */
32
+ get reading(): Reading;
30
33
  getEl: () => HTMLElement | null;
31
- getAmbientLength: () => number;
32
- /** The container prefix this surface renders under, which the join seam reads a candidate back
33
- * through. Optional because a surface that is not a container's child paints none, and '' is
34
- * the right answer there rather than an inherited assumption. */
35
- getAmbientPrefix?: () => string;
36
- /** Whether this block carries any decoration islands. Reads the same source the render
37
- * painted from, so a false can't disagree with the DOM and safely skips the scan. */
34
+ /** Where this block's bytes are stored, read when a rewrite asks, so a cut reads its candidate
35
+ * back as it will be kept: a cell's text as text, a list item's behind its marker. */
36
+ storedAs: () => StoredAs;
37
+ /** Whether this block carries any decoration widgets. It reads the same source the render
38
+ * drew from, so a false cannot disagree with the DOM and safely skips the scan. */
38
39
  hasIslands: () => boolean;
39
40
  /** Anchor/focus raw-content offsets of the live selection, or null when collapsed. */
40
41
  getRawSelection: () => {
@@ -42,51 +43,48 @@ export interface EdgePolicyDispatchDeps {
42
43
  end: RawOffset;
43
44
  } | null;
44
45
  blockEdit: BlockEditActions;
45
- /** Park a caret for the post-render restore, tagged with the gesture for the trace.
46
- * `writtenText` is the text that offset addresses — a kind whose write sink rewrites
47
- * bytes moves it — and is omitted where the arm parks ahead of every changed byte. */
48
- setPendingCursor: (offset: number | null, source: string, writtenText?: string) => void;
46
+ /** Remember a caret offset, counted in the stored bytes, for the restore after the next
47
+ * render, tagged with the gesture for the debug trace. */
48
+ setPendingCursor: (offset: number | null, source: string) => void;
49
49
  setSnapTarget: (offset: number | null) => void;
50
- /** A widget's source is revealed: the CST still reports it atomic, but the DOM is
51
- * editable text, so the widget branch stands down and lets native editing run. */
50
+ /** A widget's source is showing: the CST still calls it atomic, but the DOM holds editable
51
+ * text, so the widget branch does nothing and lets native editing run. */
52
52
  isRevealing: () => boolean;
53
- /** The reveal-vs-select entry seam; the dispatch owns classification, this owns
54
- * the entry execution and the reveal state machine. */
53
+ /** Enter the widget, either by showing its source or by selecting it. This dispatch decides
54
+ * which widget a key is aimed at; the callback decides what entering it means. */
55
55
  enterWidget: (widget: {
56
56
  start: number;
57
57
  end: number;
58
58
  kind: InlineNode['kind'];
59
59
  }, fromTrailingEdge: boolean) => void;
60
- /**
61
- * Substitute the edge policy for a widget this surface renders on terms the kind's
62
- * registration doesn't assume: a policy names an affordance, and a surface that paints
63
- * none must answer differently rather than degrade. `undefined` keeps the registration.
64
- */
60
+ /** Replace the edge policy for a widget this block draws on its own terms, where the kind's
61
+ * registered policy names a gesture the block cannot show. `undefined` keeps the registered one. */
65
62
  widgetEdgePolicy?: (widget: {
66
63
  start: number;
67
64
  end: number;
68
65
  kind: InlineNode['kind'];
69
66
  }) => EdgePolicy | undefined;
70
- /** Reading mode: island and ambient handling stand down wholesale, and the
71
- * widget branch commits nothing (a selected-widget still selects). */
67
+ /** Reading mode: the decoration-widget and marker-prefix branches do nothing at all, and the
68
+ * widget branch writes nothing, though it still selects. */
72
69
  isReading: () => boolean;
73
- /** The arrival side the typing seat consults; null when no arrival claimed one. */
70
+ /** Which side the caret arrived from, which decides where a typed byte lands; null when
71
+ * nothing recorded one. */
74
72
  getEdgeAffinity: () => EdgeAffinity | null;
75
- /** A seated delimiter that completed a construct leaves the caret meaning outside it. */
73
+ /** Typing a closing delimiter leaves the caret meaning outside the construct it finished. */
76
74
  noteOutside?: () => void;
77
- /** The constructs a collapsed-caret toggle promised the next insertion. Read AND spent
78
- * here: the first byte after the chord is the one insertion they were pending for. */
79
- pendingMarks: PendingMarksState;
80
- /** What this surface installs a rewrite as, so the seams read a candidate back the way it will
81
- * be stored. Required: a cell answering `block` by silence would refuse its own text. */
82
- installedAs: EdgeDeletionSurface;
75
+ /** The constructs a toggle at a collapsed caret promised the next insertion. Read and spent
76
+ * here: the first byte after the chord is the insertion they were waiting for. */
77
+ pendingMarks: PendingMarks;
78
+ /** The editor's record of the pair the auto-pair last wrote, as this block sees it; a pair
79
+ * written here renews it. */
80
+ ownPairs: BlockAutoPairs;
83
81
  }
84
82
  export interface EdgePolicyDispatch {
85
83
  /** A plain edge key against a caret-adjacent construct. Returns whether the event
86
84
  * was consumed; a false return leaves the key to the shared keymap below. */
87
85
  handleKeydown(e: KeyboardEvent, caretOffset: RawOffset | null): boolean;
88
- /** The declared order `handleKeydown` walks, ids and reasons only. The ORDER is the seam
89
- * (G4.12), so it is readable rather than something a test can only re-derive. */
86
+ /** The order `handleKeydown` walks, ids and reasons only. The order is what the rule fixes
87
+ * (G4.12), so it is readable here rather than something a test has to re-derive. */
90
88
  readonly arms: readonly {
91
89
  id: string;
92
90
  reason: string;