@voithos-labs/aragonite 0.10.4 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +11 -5
  3. package/dist/a11y-strings.js +60 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +12 -21
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +603 -1126
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +26 -51
  26. package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +29 -34
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +57 -39
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +141 -203
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +45 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
  102. package/dist/components/blocks/text/click-snap-guard.js +10 -7
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -108
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +212 -199
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +12 -35
  144. package/dist/components/drag-handle.js +22 -68
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -24
  162. package/dist/components/editor-root-listeners.js +49 -24
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +14 -26
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +30 -35
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +54 -75
  256. package/dist/core/inline/inline-widgets.js +54 -62
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +31 -15
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -6
  347. package/dist/cursor/height-oracle.js +26 -74
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +14 -15
  365. package/dist/cursor/scrollport.js +7 -13
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -14
  375. package/dist/cursor/visual-lines.js +45 -46
  376. package/dist/cursor/widget-edge-snap.d.ts +10 -15
  377. package/dist/cursor/widget-edge-snap.js +13 -12
  378. package/dist/cursor/widget-offset.d.ts +110 -104
  379. package/dist/cursor/widget-offset.js +344 -179
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +30 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +28 -50
  434. package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
  435. package/dist/editor-actions/focus/focus-landing.js +15 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +54 -82
  465. package/dist/editor-actions/plugin/container.js +105 -188
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +88 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +37 -8
  550. package/dist/plugin.js +100 -77
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +78 -67
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -81
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +141 -310
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +78 -84
  695. package/dist/schema/commands.js +152 -117
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +8 -10
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +63 -80
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +92 -125
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +59 -96
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +51 -134
  807. package/dist/selection/dead-space-caret.d.ts +19 -30
  808. package/dist/selection/dead-space-caret.js +70 -88
  809. package/dist/selection/drag-pointer.d.ts +7 -9
  810. package/dist/selection/drag-pointer.js +23 -33
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -40
  816. package/dist/selection/keyboard-extend.js +94 -117
  817. package/dist/selection/multi-click.d.ts +13 -18
  818. package/dist/selection/multi-click.js +32 -38
  819. package/dist/selection/native-bridge.d.ts +29 -39
  820. package/dist/selection/native-bridge.js +78 -127
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +25 -16
  824. package/dist/selection/path-lookup.js +101 -18
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +5 -5
  828. package/dist/selection/pointer-gesture.js +5 -5
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -40
  832. package/dist/selection/primitives.js +57 -67
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -23
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +34 -16
  852. package/dist/selection/selection-drop.js +159 -95
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +60 -53
  864. package/dist/styles/editor.css +201 -143
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
  960. package/dist/tree-operations/paste/replacement-parse.js +12 -10
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +327 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +253 -185
  996. package/docs/guide/plugin-guide.md +332 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +12 -16
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/cursor/scroll-hold.d.ts +0 -10
  1015. package/dist/cursor/scroll-hold.js +0 -22
  1016. package/dist/invariants/split-landing.d.ts +0 -8
  1017. package/dist/invariants/split-landing.js +0 -15
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { assertInvariant } from '../../../assert';
8
8
  import { appendNode } from './scan-state';
9
+ import { isHighSurrogate, isLowSurrogate } from '../../lines';
9
10
  // ── Flanking classification (§6.2 phase 1) ──────────────────────────────────
10
11
  /** Unicode punctuation (ASCII punctuation + general category P). */
11
12
  function isPunct(ch) {
@@ -28,10 +29,8 @@ function isWhitespace(ch) {
28
29
  // Flanking neighbors are read as full code points: a UTF-16 unit read would classify an
29
30
  // astral neighbor as a lone surrogate, while the spec defines the classes over code points.
30
31
  function codePointBefore(raw, pos) {
31
- const unit = raw.charCodeAt(pos - 1);
32
- if (unit >= 0xdc00 && unit <= 0xdfff && pos >= 2) {
33
- const high = raw.charCodeAt(pos - 2);
34
- if (high >= 0xd800 && high <= 0xdbff)
32
+ if (pos >= 2 && isLowSurrogate(raw.charCodeAt(pos - 1))) {
33
+ if (isHighSurrogate(raw.charCodeAt(pos - 2)))
35
34
  return raw.slice(pos - 2, pos);
36
35
  }
37
36
  return raw[pos - 1];
@@ -91,7 +90,7 @@ export function processEmphasis(ctx, floor) {
91
90
  const win = openNodeWindow(ctx, delimiters[floor].node);
92
91
  const slotOf = mapDelimiterSlots(win, delimiters, floor, top);
93
92
  if (slotOf === null) {
94
- // Warn rather than throw: the state is unreachable today, and a false positive must not
93
+ // Warn rather than throw: the state should be unreachable, and a false positive must not
95
94
  // take a real editor's block to the fallback. The runs left behind stay literal text.
96
95
  assertInvariant('emphasis-run-node-live', () => ({
97
96
  code: 'emphasis-run-node-missing',
@@ -166,14 +165,14 @@ export function processEmphasis(ctx, floor) {
166
165
  delimiters.length = floor;
167
166
  }
168
167
  const CHAR_BUCKET = { '*': 0, _: 6, '~': 12 };
169
- /** §6.2 multiple-of-3 rule, on ORIGINAL run lengths (commonmark.js `origdelims`). */
168
+ /** §6.2 multiple-of-3 rule, on the original run lengths (commonmark.js `origdelims`). */
170
169
  function isOddMatch(opener, closer) {
171
170
  return ((closer.canOpen || opener.canClose) &&
172
171
  closer.origLength % 3 !== 0 &&
173
172
  (opener.origLength + closer.origLength) % 3 === 0);
174
173
  }
175
174
  /**
176
- * cmark-gfm pairs strikethrough runs only at equal length. A gate of its own: the multiple-of-3
175
+ * cmark-gfm pairs strikethrough runs only at equal length. A check of its own: the multiple-of-3
177
176
  * rule misses the flanking-pure `~a~~` / `~~a~` shapes, and `*`/`_` carry no such rule.
178
177
  */
179
178
  function tildeLengthsAgree(opener, closer) {
@@ -182,8 +181,8 @@ function tildeLengthsAgree(opener, closer) {
182
181
  function wrapMatch(win, raw, opener, closer, openerSlot, closerSlot) {
183
182
  const use = opener.length >= 2 && closer.length >= 2 ? 2 : 1;
184
183
  const kind = opener.char === '~' ? 'strikethrough' : use === 2 ? 'strong' : 'emphasis';
185
- // The NONE arm only bounds this walk. What rules out cycling the list closeNodeWindow walks
186
- // is the caller's contract (slots ascend with scan order, relinks skip forward), not this arm.
184
+ // The `NONE` branch only bounds this walk. What rules out cycling the list `closeNodeWindow`
185
+ // walks is the caller's contract (slots ascend with scan order, relinks skip forward).
187
186
  const children = [];
188
187
  for (let i = win.next[openerSlot]; i !== closerSlot && i !== NONE; i = win.next[i]) {
189
188
  children.push(win.slot[i]);
@@ -255,11 +254,8 @@ function insertNodeAfter(win, at, node) {
255
254
  if (after !== NONE)
256
255
  win.prev[after] = i;
257
256
  }
258
- /**
259
- * Delimiters and their run nodes are both in scan order, so one merge walk places them all.
260
- * Null when a run node is missing: the pass's precondition broke upstream, and the caller must
261
- * drop the pass rather than walk off a linked list that has no end.
262
- */
257
+ /** Delimiters and their run nodes share scan order, so one merge walk places them all. Null when
258
+ * a run node is missing: the caller must drop the pass rather than walk a list with no end. */
263
259
  function mapDelimiterSlots(win, delimiters, floor, top) {
264
260
  const slotOf = new Array(top);
265
261
  let s = 0;
@@ -4,4 +4,6 @@
4
4
  */
5
5
  import { type InlineNode } from '../../nodes';
6
6
  import type { LinkReferenceResolver } from '../link-reference-resolver';
7
- export declare function scanInline(raw: string, start: number, end: number, resolver?: LinkReferenceResolver): InlineNode[];
7
+ import type { GrammarView } from '../../../schema/block-openers';
8
+ /** `grammar` is the editor's: a handler whose plugin it leaves out never runs, so its bytes stay text. */
9
+ export declare function scanInline(raw: string, start: number, end: number, resolver: LinkReferenceResolver | undefined, grammar: GrammarView): InlineNode[];
@@ -3,6 +3,7 @@
3
3
  * from ../index.ts. Contract: InlineNode[] with absolute offsets into raw, covering [start, end).
4
4
  */
5
5
  import { isBuiltinInlineKind } from '../../nodes';
6
+ import { resolvesIn } from '../../../schema/plugin-activation';
6
7
  import { inlineDescendants } from '../walk';
7
8
  import { handleAngle, scanGfmAutolinks } from './autolinks';
8
9
  import { handleBang, handleCloseBracket, handleOpenBracket } from './brackets';
@@ -11,25 +12,26 @@ import { handleDelimiter, processEmphasis } from './emphasis';
11
12
  import { appendNode, createScanContext, flushPendingText, mergeAdjacentText } from './scan-state';
12
13
  import { handleAmpersand, handleBackslash, handleNewline } from './simple-nodes';
13
14
  import { getPrefixRungs, getUnreservedRungs, hasInlineSyntax, hasPrefixRungs, hasScanProbeRungs, isScanProbeTrigger } from './plugin-syntax';
14
- // Every character that can start a construct or anchor a lookback: the dispatch cases below
15
- // plus `@` (GFM email lookback). `!` and `]` are deliberately absent, mattering only in ranges
16
- // that also contain `[`; a plugin rung makes `!` visible per registration (plugin-syntax.ts).
17
- const SPECIAL_CHARS = '\\`&\n<[*_~@';
18
- // GFM bare http/www autolinks contain no character from the set above, so their starts get
19
- // conditional probes: `:` counts only when `//` follows, `w`/`W` only on a `www.` prefix. The
20
- // lookahead may read past `end` and over-trigger, which costs one wasted scan, never a node.
15
+ import { BUILTIN_TRIGGERS } from './triggers';
16
+ // Every character that always sends a range through the scan loop: the built-in triggers the
17
+ // table marks `always`, plus `@`, which anchors the GFM email lookback without a handler.
18
+ const SPECIAL = new Uint8Array(128);
19
+ for (const [char, { scanned }] of BUILTIN_TRIGGERS) {
20
+ if (scanned === 'always')
21
+ SPECIAL[char.charCodeAt(0)] = 1;
22
+ }
23
+ SPECIAL[0x40] = 1; // @
24
+ // Bare http/www autolinks hold no character above, so `:` counts only before `//` and `w`/`W`
25
+ // only on `www.`; a lookahead past `end` costs one wasted scan, never a node.
21
26
  const PROBE_SCHEME = 2;
22
27
  const PROBE_WWW = 3;
23
- const SPECIAL = new Uint8Array(128);
24
- for (let i = 0; i < SPECIAL_CHARS.length; i++)
25
- SPECIAL[SPECIAL_CHARS.charCodeAt(i)] = 1;
26
28
  SPECIAL[0x3a] = PROBE_SCHEME; // :
27
29
  SPECIAL[0x57] = PROBE_WWW; // W
28
30
  SPECIAL[0x77] = PROBE_WWW; // w
29
31
  /** Fast bail for the per-keystroke hot path: plain prose skips the scan loop. */
30
32
  function needsScan(raw, start, end) {
31
- // Registered plugin triggers are held out of SPECIAL_CHARS, so probe them only when
32
- // something is registered; an unregistered scan pays one always-false test per character.
33
+ // Registered plugin triggers are held out of SPECIAL, so check them only when something
34
+ // is registered; an unregistered scan pays one always-false test per character.
33
35
  const probePlugins = hasScanProbeRungs();
34
36
  for (let i = start; i < end; i++) {
35
37
  const code = raw.charCodeAt(i);
@@ -64,17 +66,16 @@ function needsScan(raw, start, end) {
64
66
  }
65
67
  return false;
66
68
  }
67
- // Try a trigger's rungs in dispatch order: the first whose prefix matches at `ctx.pos` and whose
68
- // recognizer claims wins. Claim validation lives here once, on both dispatch paths, and sits past
69
- // the decline so a declining rung pays none of it and leaves `ctx` byte-identical.
70
- function tryRungs(ctx, rungs) {
69
+ // The first handler whose prefix matches at `ctx.pos`, whose plugin this editor lists and whose
70
+ // recognizer returns a node wins; that node is checked here, once for both dispatch paths.
71
+ function tryRungs(ctx, rungs, grammar) {
71
72
  if (!rungs)
72
73
  return null;
73
74
  const { raw, pos, end } = ctx;
74
75
  for (const rung of rungs) {
75
- if (!raw.startsWith(rung.prefix, pos))
76
+ if (!raw.startsWith(rung.prefix, pos) || !resolvesIn(grammar.activation, rung.owner))
76
77
  continue;
77
- const node = rung.recognizer(raw, pos, end);
78
+ const node = rung.recognizer(raw, pos, end, grammar);
78
79
  if (!node)
79
80
  continue;
80
81
  if (node.start !== pos) {
@@ -83,48 +84,46 @@ function tryRungs(ctx, rungs) {
83
84
  if (node.end <= pos) {
84
85
  throw new Error(`inline-syntax "${rung.prefix}" did not advance`);
85
86
  }
86
- // A block's scan range is not always its raw (a heading's excludes the closing `#` run, a
87
- // table cell's the `|`), so a recognizer searching the STRING claims bytes the block still
88
- // needs, and the overrun leaves no trace beyond wrong caret offsets. Half-open: ending AT
89
- // `end` is ordinary, only past it is a fault.
87
+ // A block's scan range is not always its whole raw (a setext heading's stops before its
88
+ // underline), so a recognizer that reads past `end` takes bytes the block still needs.
90
89
  if (node.end > end) {
91
90
  throw new Error(`inline-syntax "${rung.prefix}" claimed [${node.start}, ${node.end}), past the scan ` +
92
- `range end ${end} — a recognizer must bound its search by the \`end\` it is given`);
91
+ `range end ${end}: a recognizer must bound its search by the \`end\` it is given`);
93
92
  }
94
93
  stampClaim(node, rung);
95
94
  return node;
96
95
  }
97
96
  return null;
98
97
  }
99
- // A rung minting a BUILT-IN kind borrows the editor's model for bytes of its own, and the
100
- // editor's inverse emits built-in grammar, so an image minted over `![[cat.png]]` would resize
101
- // into GFM and take the author's syntax with it. Descendants stamp on the same rule; a rung's
102
- // own kind needs no stamp. Assigned, never merged, so a recognizer cannot name its own claimer.
98
+ // A built-in node a plugin handler created (an `image` over `![[cat.png]]`) is marked with that
99
+ // handler, so the editor's writers re-serialize it in the plugin's syntax rather than GFM.
103
100
  function stampClaim(node, claim) {
104
101
  for (const inline of inlineDescendants([node])) {
105
102
  if (isBuiltinInlineKind(inline.kind))
106
103
  inline.syntaxClaim = claim;
107
104
  }
108
105
  }
109
- export function scanInline(raw, start, end, resolver) {
106
+ /** `grammar` is the editor's: a handler whose plugin it leaves out never runs, so its bytes stay text. */
107
+ export function scanInline(raw, start, end, resolver, grammar) {
110
108
  if (start >= end)
111
109
  return [];
112
110
  if (!needsScan(raw, start, end)) {
113
111
  return [{ kind: 'text', start, end, text: raw.slice(start, end) }];
114
112
  }
115
113
  const ctx = createScanContext(raw, start, end, resolver);
116
- // Reserved-trigger prefix rungs are consulted before the switch so they can outrank a
117
- // built-in case: a handler consumes its trigger and advances (`handleBang` eats `![` whole),
118
- // so the scan never returns to a position the switch has read. Hoisted for the empty registry.
114
+ // Plugin handlers on a built-in trigger run before the switch, whose handler consumes the
115
+ // trigger (`handleBang` eats `![` whole); hoisted so an empty registry costs nothing.
119
116
  const consultPrefixRungs = hasPrefixRungs();
120
117
  while (ctx.pos < ctx.end) {
121
118
  if (consultPrefixRungs) {
122
- const node = tryRungs(ctx, getPrefixRungs(raw[ctx.pos]));
119
+ const node = tryRungs(ctx, getPrefixRungs(raw[ctx.pos]), grammar);
123
120
  if (node) {
124
121
  appendNode(ctx, node);
125
122
  continue;
126
123
  }
127
124
  }
125
+ // A switch with direct calls, not a lookup in the trigger table: an indirect call per
126
+ // trigger measured slower. A test holds the cases equal to the table's rows.
128
127
  switch (raw[ctx.pos]) {
129
128
  case '\\':
130
129
  handleBackslash(ctx);
@@ -157,7 +156,7 @@ export function scanInline(raw, start, end, resolver) {
157
156
  break;
158
157
  default: {
159
158
  if (hasInlineSyntax()) {
160
- const node = tryRungs(ctx, getUnreservedRungs(raw[ctx.pos]));
159
+ const node = tryRungs(ctx, getUnreservedRungs(raw[ctx.pos]), grammar);
161
160
  if (node) {
162
161
  appendNode(ctx, node);
163
162
  break;
@@ -1,10 +1,11 @@
1
1
  /**
2
- * Unstable-public hook for plugin inline syntax: a priority ladder mirroring `OPENER_PRIORITIES`.
3
- * One trigger character plus an optional prefix beginning with it, dispatched low-priority-first
4
- * so a plugin can outrank a built-in trigger on a longer prefix (footnotes' `[^` beating `[`).
5
- * Reserved triggers hold pre-switch rungs, all others hold `default`-arm rungs (scan/index.ts).
2
+ * Registry for plugin inline syntax: a trigger character plus an optional prefix beginning with
3
+ * it, tried lowest priority first (numbered as `OPENER_PRIORITIES`), so a longer prefix can outrank
4
+ * a built-in trigger (footnotes' `[^` beating `[`). An `InlineRung` is one handler. A reserved
5
+ * trigger is one the scanner handles itself (./triggers.ts); its plugin handlers run first.
6
6
  */
7
7
  import type { ImageSyntaxRewriter, InlineNode, InlineSyntaxClaim } from '../../nodes';
8
+ import type { GrammarView } from '../../../schema/block-openers';
8
9
  /**
9
10
  * Inspect `raw` at `pos` (the trigger) within `[pos, end)`. Return a node with `start === pos`
10
11
  * and `pos < node.end <= end` to claim that span (`node.end` is the scan advance), or `null` to
@@ -12,59 +13,50 @@ import type { ImageSyntaxRewriter, InlineNode, InlineSyntaxClaim } from '../../n
12
13
  * range may be a slice of it, so a terminator past `end` must decline. Claiming past it throws.
13
14
  */
14
15
  export type InlineSyntaxRecognizer = (raw: string, pos: number, end: number) => InlineNode | null;
15
- /** The priority ladder every registration prices against; lower is consulted first. */
16
+ /** The priority numbers registrations use; lower is consulted first. */
16
17
  export declare const INLINE_PRIORITIES: {
17
- /** Rungs consulted before a reserved trigger's built-in handling. */
18
+ /** Handlers consulted before a reserved trigger's built-in handling. */
18
19
  readonly prefixOverride: 40;
19
- /** The switch's own anchor; not registerable. */
20
+ /** The built-in handler's own place in the order; not registerable. */
20
21
  readonly builtin: 50;
21
- /** Default rung for bare-trigger registrations. */
22
+ /** Default for bare-trigger registrations. */
22
23
  readonly plugin: 100;
23
24
  };
24
25
  export interface InlineSyntaxOptions {
25
- /**
26
- * Multi-char prefix beginning with the trigger; required for a reserved trigger. Consulted
27
- * ahead of the built-in case, so a prefix that also opens a built-in construct outranks it
28
- * and the recognizer must decline the overlap itself. Getting that wrong is silent; see the
29
- * plugin guide's reserved-trigger section.
30
- */
26
+ /** Two or more characters starting with the trigger; required for a reserved trigger, where it
27
+ * runs before the built-in handler, so decline a built-in construct it also opens. */
31
28
  prefix?: string;
32
- /** Rung; lower is consulted first. Defaults to `INLINE_PRIORITIES.plugin`. */
29
+ /** Lower is consulted first. Defaults to `INLINE_PRIORITIES.plugin`. */
33
30
  priority?: number;
34
- /**
35
- * Re-serializer for the built-in `image` nodes this recognizer mints; without it the editor
36
- * declines those edits rather than writing GFM over the claimed bytes. Return `null` for
37
- * anything your grammar cannot hold: source-identical bytes are dropped silently by the
38
- * commit's equality guard. See the plugin guide's inline section.
39
- */
31
+ /** Re-serializes the `image` nodes this recognizer creates; without it the editor refuses
32
+ * their edits rather than write GFM over your syntax. Return `null` for what it can't hold. */
40
33
  rewriteImage?: ImageSyntaxRewriter;
41
- /**
42
- * The trigger is a symmetric one-byte delimiter (`$…$`) a keystroke should close at once:
43
- * typing it lands its twin after the caret, so the new opener pairs with that twin rather
44
- * than with a later formula's delimiter (see `delimiter-autopair.ts`). Bare triggers only.
45
- */
34
+ /** Typing the trigger (`$…$`) inserts its closer after the caret, so the opener pairs with it
35
+ * rather than a later formula's delimiter (`delimiter-autopair.ts`). Bare triggers only. */
46
36
  autoPair?: boolean;
47
37
  }
38
+ /** The scan hands its grammar on as a fourth argument, which only the core text directive reads. */
39
+ type ScopedRecognizer = (raw: string, pos: number, end: number, grammar: GrammarView) => InlineNode | null;
48
40
  export interface InlineRung extends InlineSyntaxClaim {
49
- recognizer: InlineSyntaxRecognizer;
41
+ recognizer: ScopedRecognizer;
50
42
  priority: number;
43
+ /** The plugin whose setup registered the handler; null for a core one. */
44
+ owner: string | null;
51
45
  }
52
46
  export declare function registerInlineSyntax(trigger: string, recognizer: InlineSyntaxRecognizer, options?: InlineSyntaxOptions): void;
53
- /**
54
- * Whether the built-in scanner claims `trigger` through a `case` arm. A rung on one is consulted
55
- * BEFORE that arm, so it owes the overlap a decline; the conformance kit refuses it an exemption.
56
- */
47
+ /** Whether the built-in scanner handles `trigger` itself. A plugin handler on one runs before the
48
+ * built-in handler, so it must decline the overlap itself. */
57
49
  export declare function isReservedInlineTrigger(trigger: string): boolean;
58
- /** Rungs for a trigger in dispatch order, reserved-aware. Empty when none. */
50
+ /** The handlers for a trigger in dispatch order, from whichever map holds it. Empty when none. */
59
51
  export declare function getInlineRungs(trigger: string): readonly InlineRung[];
60
52
  export declare function getUnreservedRungs(char: string): InlineRung[] | undefined;
61
53
  export declare function getPrefixRungs(char: string): InlineRung[] | undefined;
62
54
  export declare function hasInlineSyntax(): boolean;
63
- /** Read once per scan, so an empty set leaves `needsScan` at its pre-plugin cost. */
55
+ /** Read once per scan, so with no probed trigger `needsScan` pays nothing extra per character. */
64
56
  export declare function hasScanProbeRungs(): boolean;
65
57
  export declare function isScanProbeTrigger(char: string): boolean;
66
- /** Whether a plugin asked for `char` to close itself as it is typed. */
67
- export declare function isAutoPairTrigger(char: string): boolean;
58
+ /** Whether any plugin the editor's grammar lists asked for `char` to close itself as it is typed. */
59
+ export declare function isAutoPairTrigger(char: string, grammar: GrammarView): boolean;
68
60
  /** False costs the scan loop nothing. */
69
61
  export declare function hasPrefixRungs(): boolean;
70
- export declare function __resetInlineSyntaxForTests(): void;
62
+ export {};
@@ -1,46 +1,37 @@
1
1
  /**
2
- * Unstable-public hook for plugin inline syntax: a priority ladder mirroring `OPENER_PRIORITIES`.
3
- * One trigger character plus an optional prefix beginning with it, dispatched low-priority-first
4
- * so a plugin can outrank a built-in trigger on a longer prefix (footnotes' `[^` beating `[`).
5
- * Reserved triggers hold pre-switch rungs, all others hold `default`-arm rungs (scan/index.ts).
2
+ * Registry for plugin inline syntax: a trigger character plus an optional prefix beginning with
3
+ * it, tried lowest priority first (numbered as `OPENER_PRIORITIES`), so a longer prefix can outrank
4
+ * a built-in trigger (footnotes' `[^` beating `[`). An `InlineRung` is one handler. A reserved
5
+ * trigger is one the scanner handles itself (./triggers.ts); its plugin handlers run first.
6
6
  */
7
- import { registerOnce } from '../../../schema/register-once';
8
- /** The priority ladder every registration prices against; lower is consulted first. */
7
+ import { resolvesIn } from '../../../schema/plugin-activation';
8
+ import { createPluginRegistry } from '../../../schema/plugin-registry';
9
+ import { BUILTIN_TRIGGERS } from './triggers';
10
+ /** The priority numbers registrations use; lower is consulted first. */
9
11
  export const INLINE_PRIORITIES = {
10
- /** Rungs consulted before a reserved trigger's built-in handling. */
12
+ /** Handlers consulted before a reserved trigger's built-in handling. */
11
13
  prefixOverride: 40,
12
- /** The switch's own anchor; not registerable. */
14
+ /** The built-in handler's own place in the order; not registerable. */
13
15
  builtin: 50,
14
- /** Default rung for bare-trigger registrations. */
16
+ /** Default for bare-trigger registrations. */
15
17
  plugin: 100
16
18
  };
17
- /**
18
- * The characters `scanInline`'s switch claims. A bare registration on one would never fire; it
19
- * needs a prefix rung priced below `builtin`. Kept in step with `./index.ts` by G4.18.
20
- */
21
- const BUILTIN_TRIGGERS = new Set(['\\', '`', '&', '\n', '*', '_', '~', '[', ']', '!', '<']);
22
- /**
23
- * Reserved triggers a registration makes visible to `needsScan` (scan/index.ts) instead, probed
24
- * only while a rung lives on them. `!` is here rather than in `SPECIAL_CHARS` because making it
25
- * unconditionally special would drag every prose `"Hello!"` through the full scan loop.
26
- */
27
- const SCAN_PROBED_RESERVED = new Set(['!']);
28
- /**
29
- * Reserved triggers with no route to the scan at all, so a prefix rung on one would be accepted
30
- * yet never consulted: the silent no-op this seam exists to prevent. A construct needing `]`
31
- * gives it a route first. Pinned against a SPECIAL_CHARS edit by G4.18.
32
- */
33
- const REJECTED_RESERVED = new Set([']']);
34
19
  const NO_RUNGS = [];
35
- // Reserved-trigger prefix rungs (pre-switch) live apart from every other trigger's rungs
36
- // (`default` arm) so each dispatch path reads one map and its empty gate is one `size` check.
20
+ // One entry per (trigger, prefix, priority); the dispatch maps below are derived from it.
21
+ const handlers = createPluginRegistry({
22
+ label: 'registerInlineSyntax',
23
+ isBuiltin: () => false,
24
+ onChange: rebuildDispatch
25
+ });
26
+ // Reserved and unreserved handlers are consulted at different points of the scan, so each
27
+ // point reads one map and its empty check is one `size` read.
37
28
  const reservedRegistry = new Map();
38
29
  const unreservedRegistry = new Map();
39
- // Triggers whose keystroke closes itself (`autoPair`); the built-in backtick is not registered
40
- // here, the typing seam knows it on its own.
41
- const autoPairTriggers = new Set();
42
- // Triggers the fast bail (`needsScan`, scan/index.ts) must visit while a rung lives on them.
43
- // Maintained at registration, so a rung on a trigger `SPECIAL_CHARS` already visits costs nothing.
30
+ // Triggers that close themselves as they are typed (`autoPair`), each with every plugin that asked
31
+ // (null for a registration outside a plugin); the built-in backtick is not here.
32
+ const autoPairTriggers = new Map();
33
+ // Triggers the fast bail (`needsScan`, scan/index.ts) checks only while a plugin handler is
34
+ // registered on them; a trigger it always checks is never added.
44
35
  const scanProbeTriggers = new Set();
45
36
  // ── Registration ───────────────────────────────────────────────────────────────
46
37
  export function registerInlineSyntax(trigger, recognizer, options) {
@@ -52,19 +43,19 @@ export function registerInlineSyntax(trigger, recognizer, options) {
52
43
  throw new Error(`registerInlineSyntax: prefix ${JSON.stringify(prefix)} must begin with the trigger ` +
53
44
  `${JSON.stringify(trigger)} and be at least two characters`);
54
45
  }
55
- const reserved = BUILTIN_TRIGGERS.has(trigger);
56
- if (reserved) {
57
- // Pinned contract: keep the message verbatim. A reserved trigger is reachable only
58
- // through a prefix rung priced below the switch anchor.
46
+ const builtin = BUILTIN_TRIGGERS.get(trigger);
47
+ if (builtin) {
48
+ // A test pins this message verbatim. A reserved trigger is reachable only through a
49
+ // prefix with a priority below `builtin`.
59
50
  if (prefix === undefined) {
60
51
  throw new Error(`registerInlineSyntax: ${JSON.stringify(trigger)} is claimed by the built-in scanner, ` +
61
- `which dispatches it before the plugin registry — the recognizer would never fire`);
52
+ `which dispatches it before the plugin registry; the recognizer would never fire`);
62
53
  }
63
- if (REJECTED_RESERVED.has(trigger)) {
54
+ if (builtin.scanned === 'never') {
64
55
  throw new Error(`registerInlineSyntax: reserved trigger ${JSON.stringify(trigger)} is skipped by the ` +
65
- `scanner's fast bail (absent from SPECIAL_CHARS in scan/index.ts; it matters only ` +
66
- `inside "["-bearing ranges), so a prefix rung on it would never fire in plain text — ` +
67
- `make the trigger scan-visible or scan-probed before registering`);
56
+ `scanner's fast bail (it matters only inside "["-bearing ranges), so a prefix ` +
57
+ `inline syntax handler on it would never fire in plain text; make the trigger ` +
58
+ `scan-visible or scan-probed in scan/triggers.ts before registering`);
68
59
  }
69
60
  if (priority >= INLINE_PRIORITIES.builtin) {
70
61
  throw new Error(`registerInlineSyntax: reserved trigger ${JSON.stringify(trigger)} needs a priority ` +
@@ -77,26 +68,38 @@ export function registerInlineSyntax(trigger, recognizer, options) {
77
68
  `itself, so it cannot be combined with a prefix`);
78
69
  }
79
70
  const effectivePrefix = prefix ?? trigger;
80
- const registry = reserved ? reservedRegistry : unreservedRegistry;
81
- const existing = registry.get(trigger);
82
- const isDuplicate = existing?.some((r) => r.prefix === effectivePrefix && r.priority === priority) ?? false;
83
- registerOnce(isDuplicate, () => {
84
- upsertRung(registry, trigger, {
85
- recognizer,
86
- prefix: effectivePrefix,
87
- priority,
88
- rewriteImage
89
- });
90
- // A rung on a trigger the fast bail would skip must make the scan visit it,
91
- // or the recognizer is the silent no-op this seam refuses to accept.
92
- if (!reserved || SCAN_PROBED_RESERVED.has(trigger))
93
- scanProbeTriggers.add(trigger);
94
- if (autoPair)
95
- autoPairTriggers.add(trigger);
71
+ handlers.register(JSON.stringify([trigger, effectivePrefix, priority]), {
72
+ trigger,
73
+ recognizer,
74
+ prefix: effectivePrefix,
75
+ priority,
76
+ rewriteImage,
77
+ autoPair: autoPair ?? false
96
78
  }, `registerInlineSyntax: ${JSON.stringify(trigger)} already registered at prefix ` +
97
79
  `${JSON.stringify(effectivePrefix)}, priority ${priority}`);
98
80
  }
99
- // Kept sorted at insert so dispatch order does not depend on registration order.
81
+ function rebuildDispatch() {
82
+ reservedRegistry.clear();
83
+ unreservedRegistry.clear();
84
+ autoPairTriggers.clear();
85
+ scanProbeTriggers.clear();
86
+ for (const { value, owner } of handlers.records()) {
87
+ const { trigger, autoPair, ...rung } = value;
88
+ const builtin = BUILTIN_TRIGGERS.get(trigger);
89
+ const registry = builtin ? reservedRegistry : unreservedRegistry;
90
+ registry.set(trigger, [...(registry.get(trigger) ?? []), { ...rung, owner }]);
91
+ // A handler on a trigger the fast bail would skip must make the scan check it, or the
92
+ // recognizer is the silent no-op this registry refuses to accept.
93
+ if (!builtin || builtin.scanned === 'when-registered')
94
+ scanProbeTriggers.add(trigger);
95
+ if (autoPair)
96
+ autoPairTriggers.set(trigger, (autoPairTriggers.get(trigger) ?? new Set()).add(owner));
97
+ }
98
+ for (const rungs of [...reservedRegistry.values(), ...unreservedRegistry.values()]) {
99
+ rungs.sort(compareRungs);
100
+ }
101
+ }
102
+ // Dispatch order is sorted, so it does not depend on registration order.
100
103
  function compareRungs(a, b) {
101
104
  if (a.priority !== b.priority)
102
105
  return a.priority - b.priority;
@@ -104,30 +107,13 @@ function compareRungs(a, b) {
104
107
  return b.prefix.length - a.prefix.length;
105
108
  return a.prefix < b.prefix ? -1 : a.prefix > b.prefix ? 1 : 0;
106
109
  }
107
- // Overwriting a matching (prefix, priority) rung is the dev-server replace path.
108
- function upsertRung(registry, trigger, rung) {
109
- const rungs = registry.get(trigger);
110
- if (!rungs) {
111
- registry.set(trigger, [rung]);
112
- return;
113
- }
114
- const at = rungs.findIndex((r) => r.prefix === rung.prefix && r.priority === rung.priority);
115
- if (at >= 0)
116
- rungs[at] = rung;
117
- else {
118
- rungs.push(rung);
119
- rungs.sort(compareRungs);
120
- }
121
- }
122
110
  // ── Dispatch accessors ───────────────────────────────────────────────────────────
123
- /**
124
- * Whether the built-in scanner claims `trigger` through a `case` arm. A rung on one is consulted
125
- * BEFORE that arm, so it owes the overlap a decline; the conformance kit refuses it an exemption.
126
- */
111
+ /** Whether the built-in scanner handles `trigger` itself. A plugin handler on one runs before the
112
+ * built-in handler, so it must decline the overlap itself. */
127
113
  export function isReservedInlineTrigger(trigger) {
128
114
  return BUILTIN_TRIGGERS.has(trigger);
129
115
  }
130
- /** Rungs for a trigger in dispatch order, reserved-aware. Empty when none. */
116
+ /** The handlers for a trigger in dispatch order, from whichever map holds it. Empty when none. */
131
117
  export function getInlineRungs(trigger) {
132
118
  const registry = BUILTIN_TRIGGERS.has(trigger) ? reservedRegistry : unreservedRegistry;
133
119
  return registry.get(trigger) ?? NO_RUNGS;
@@ -141,24 +127,24 @@ export function getPrefixRungs(char) {
141
127
  export function hasInlineSyntax() {
142
128
  return unreservedRegistry.size > 0;
143
129
  }
144
- /** Read once per scan, so an empty set leaves `needsScan` at its pre-plugin cost. */
130
+ /** Read once per scan, so with no probed trigger `needsScan` pays nothing extra per character. */
145
131
  export function hasScanProbeRungs() {
146
132
  return scanProbeTriggers.size > 0;
147
133
  }
148
134
  export function isScanProbeTrigger(char) {
149
135
  return scanProbeTriggers.has(char);
150
136
  }
151
- /** Whether a plugin asked for `char` to close itself as it is typed. */
152
- export function isAutoPairTrigger(char) {
153
- return autoPairTriggers.has(char);
137
+ /** Whether any plugin the editor's grammar lists asked for `char` to close itself as it is typed. */
138
+ export function isAutoPairTrigger(char, grammar) {
139
+ const owners = autoPairTriggers.get(char);
140
+ if (!owners)
141
+ return false;
142
+ for (const owner of owners)
143
+ if (resolvesIn(grammar.activation, owner))
144
+ return true;
145
+ return false;
154
146
  }
155
147
  /** False costs the scan loop nothing. */
156
148
  export function hasPrefixRungs() {
157
149
  return reservedRegistry.size > 0;
158
150
  }
159
- export function __resetInlineSyntaxForTests() {
160
- reservedRegistry.clear();
161
- unreservedRegistry.clear();
162
- scanProbeTriggers.clear();
163
- autoPairTriggers.clear();
164
- }
@@ -8,6 +8,8 @@ import type { BacktickRunIndex } from '../backticks';
8
8
  import type { LinkReferenceResolver } from '../link-reference-resolver';
9
9
  export interface ScanContext {
10
10
  raw: string;
11
+ /** Where the scan range begins, which GFM's autolink boundary treats as a line start. */
12
+ start: number;
11
13
  pos: number;
12
14
  end: number;
13
15
  /** Working list, flat, offset-ordered; emphasis wraps later. */
@@ -6,6 +6,7 @@
6
6
  export function createScanContext(raw, start, end, resolver) {
7
7
  return {
8
8
  raw,
9
+ start,
9
10
  pos: start,
10
11
  end,
11
12
  nodes: [],
@@ -6,9 +6,6 @@
6
6
  import { type ScanContext } from './scan-state';
7
7
  export declare function handleBackslash(ctx: ScanContext): void;
8
8
  export declare function handleAmpersand(ctx: ScanContext): void;
9
- /**
10
- * §6.7 trailing-spaces form: two-plus spaces before the newline become a hardLineBreak covering
11
- * spaces + newline; one space is a softbreak. Lookback is clamped to the pending text run, so
12
- * spaces inside an already-consumed node cannot count.
13
- */
9
+ /** §6.7: two or more spaces before the newline make a hard break covering them and the newline.
10
+ * The lookback stops at the pending text run, so spaces inside an earlier node never count. */
14
11
  export declare function handleNewline(ctx: ScanContext): void;
@@ -29,11 +29,8 @@ export function handleAmpersand(ctx) {
29
29
  else
30
30
  ctx.pos++;
31
31
  }
32
- /**
33
- * §6.7 trailing-spaces form: two-plus spaces before the newline become a hardLineBreak covering
34
- * spaces + newline; one space is a softbreak. Lookback is clamped to the pending text run, so
35
- * spaces inside an already-consumed node cannot count.
36
- */
32
+ /** §6.7: two or more spaces before the newline make a hard break covering them and the newline.
33
+ * The lookback stops at the pending text run, so spaces inside an earlier node never count. */
37
34
  export function handleNewline(ctx) {
38
35
  const { raw, pos, textStart } = ctx;
39
36
  let i = pos - 1;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The characters the inline scanner handles itself, one row each: the handler it runs and when
3
+ * the fast bail (`needsScan`, ./index.ts) looks for the character. The fast bail and the plugin
4
+ * registry's reserved triggers (./plugin-syntax.ts) derive from this table, and a test holds the
5
+ * scanner's switch to its rows.
6
+ */
7
+ import type { ScanContext } from './scan-state';
8
+ /**
9
+ * When the fast bail looks for a trigger: `always`; `when-registered`, only while a plugin
10
+ * handler is registered on it; or `never`, which also refuses a plugin handler on it.
11
+ */
12
+ export type TriggerScan = 'always' | 'when-registered' | 'never';
13
+ export interface BuiltinTrigger {
14
+ handler: (ctx: ScanContext) => void;
15
+ scanned: TriggerScan;
16
+ }
17
+ export declare const BUILTIN_TRIGGERS: ReadonlyMap<string, BuiltinTrigger>;